📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

🔴 VS Code Live - v1.107 Release

Visual Studio Code•1:29:32

Transcription

Hello, hello everyone. Welcome to the VS Code release event. My name is Olivia. I'm an advocate working with the VS Code team. I'm very excited to be here with you all today. We have an amazing lineup for you all going through the biggest items from the latest release that just dropped yesterday. Um, so let's get into it.

I'm here today with Kai Metzel. Hey Kai.

>> Hey Olivia. How are you?

>> Good. How are you doing?

>> I'm I'm great. I'm excited to be here. First time.

>> Us, too. [laughter] Yeah. It's been a while since we've had you on one of these live streams, so I think everyone's going to be very excited to have you here. Do you want to do just a quick intro for folks who maybe don't know you?

>> Sure. Uh my name is Kai Metel. I'm located in Seattle. I run the VS Code engineering team. Uh, and you know, maybe one tiny [clears throat] little detail, one of the things that you actually see from me on a regular basis are our monthly plans that I publish on VS Code.

>> Yes.

>> Yes, you're definitely everywhere. Um, on that note, VS Code is an open source project, so you can always see all the great latest updates in those iteration plans. With that, I cannot believe that we are at the end of the year. Just had the last VS Code release of the year. And this has been a big year for VS Code. Um, I mean looking back there's been, you know, open sourcing the AI capabilities, big leaps for agentic dev, so many uh updates to the terminal experience. It's been a big year. So, what would you say are kind of the biggest standout moments for Yukon?

>> Oh, no. First of all, I've got to say it's like it's like mindblowing as a year, right? When you think about it, you mentioned a couple of things, but go backwards. We didn't even have any agentic experience at the beginning of the year, right? We we didn't have NES, you know, next edit suggest and tap tap tap, right? So, yeah, a lot of things have changed, right? And when you think about this, right, we started without now we actually at the, you know, we we have a really good agent experience now, right? Just in the last release actually we brought in a new way of actually presenting our chats right running chats in the background in the cloud you know you don't have to have your editor open so yeah it's uh you know came a long long way right but there was also when you think about this for agent mode in particular right it was not just working on agent mode was supporting all the different models that came along right we worked a lot on bring your own key right so that for example you can use providers like Cerebras for example right that are in the marketplace so we there's a lot of work on customization right so you can not just have the actually co-pilot instructions but you we support agent MD files for example right just now we started picking up clot skills right so there was a lot of these kinds of things that that actually happened right and also a lot of small tiny things right so like for example right we introduced was uh notifications for long running tasks, right? Or when you actually needed uh to confirm a tool call for example, right? So those those tiny little things and it's all over the place, right? Uh big highlight also MCP, right? We have the most complete MCP implementation out there of any client tool, right? And we have been keeping up to date with this all along, right? Um, yeah. So, those are those are the big hitting items, right?

>> It's always mind-blowing to me when I'm reminded that literally at the start of this year, we didn't even have agent mode or really so much of kind of what's what's um in VS Code today. How does the team um adjust to write such a changing landscape? You know, I know you mentioned the iteration plans um that happen monthly, but how do you all really approach, you know, staying up to date with all, you know, the cutting edge of where we're at in development?

>> Yeah, you uh that's a very good question. So, how do you stay up to date? You know, you have your ear pretty much on, you know, what happens in the world out there, right? You you do competitive analysis. You do a lot of self-hosting, of course, right? Because if you actually don't use it yourself, you you don't have a good impression about what is needed and what is not needed, right? Like for example, the feedback that our own team gave in order to improve for example our NES experience, right? Was absolutely fundamental, right? So in order to get the timing right, in order to get the UI right, right? How at what moment do you think it's actually useful compared to what moment is it a little bit distracting, right? remove the distractions and that's very very small increments of feedback that you need on a continuous basis right uh we also collaborate with with others quite closely right when you think about how we collaborate for example with the AI labs for the new models when they come out right there's also some knowledge transfer happening there so but it's a lot of research continuous reachers working very closely with data science folks right and and seeing what happens around you

>> um you touched on one of I would say one of our top questions we get is does the VS code team use VS Code to build VS Code and yes I mean the name is an insiders non-stop.

>> Uh >> oh.

>> Yeah, right. I mean, you look at this, right? We have there's a reason we have the insiders release, right? There's a reason sometimes the insider release all of a sudden stops rolling out because we realize, oh, wait a moment, there's something not quite working the way it should. We push in new insiders, right? An hour later, you have a new build. So, yeah, right. All of us are on insiders. Uh there are also the pre-release extensions, right? So, that is pretty much the insider version of individual extensions, right? Then we combine clearly the pre-release extensions with the insiders itself right and yeah every you push something and few hours later you actually self host on it

>> that has been true pretty much forever right and that's the beauty of developer tools right I mean if you do software for for some other business you cannot really do this but but we can right so

>> that's very watching how the team really interacts um and you know, takes all the community feedback back and and um is just constantly in the tools and and everyone's so motivated to make it the best because they use it. It's a tool that they use, too.

>> Um >> Okay. Well, that's a great kind of look back at some of those big ships. Um, we just shipped the last release of the year yesterday. Um, and uh I can't believe how much made it into that release. Uh the team has so many great features that were jam-packed in this release. Um, would you want to go over just some of the highlights uh that stand out to you?

>> Yeah, absolutely. I mean at at Universe that already seems, you know, years ago, but it was only a month ago. Uh we actually introduced agent HQ, right? So that's actually where you can pretty much see all of your running agents, those that run in the background in the cloud, those that you have in VS Code directly in the foreground, right? [snorts] And that was a that was a good stepping stone, right? uh but it was not perfect. So we put a lot of effort for this release in how to make that experience actually more smooth right and that's what what you see right and I think Bridget is the one that will actually show this today in the live stream right so there was a lot of finesse and a lot of tiny iterations actually went through this in order to make that so we're not done yet right so don't get this the wrong way but uh I think that is a big big stepping stone right then also we brought in we had ro trees for quite a while but you know it was not the the most intuitive kind of way of work with rock trees. Now when you actually start a background agent, you have the choice right in the drop down to say that you actually want to use rock trees, [snorts] right? That gives you isolation for your for your uh background agent so that they don't step on your feet in the foreground. I already had set cloud skills, right? that that was a that was also interesting because cloud skills really are uh growing very quickly. you see a lot of people putting a lot of uh effort into those right so that's one of the customizations clearly that we wanted them take up right uh but also I mean NES I mentioned that before right there's always we rolled out new production model for NES right that really makes the experience much much nicer but now we started for the first time to actually integrate NES with language server support so like for example you make a change to a symbol And that this very moment when you make a change to a symbol, we figure out that this is potentially a rename. And then you have an ability to hand it over to the language server to actually perform the real rename refactoring, right? And that makes it first of all more precise, but secondly actually less steps to perform the same, right? And that's clearly some some path we want to go go forward, right? And then the last thing that I want to call out is lots of we put a lot of improvement in actually the visual representation of how chat actually looks right in what we do with thinking tokens and so on. And for some technical limitations we we had uh thinking tokens not yet on set models right or on anthropic models. And that actually now changed with this release. So now across pretty much all of the major models that we support you have really nice thinking token support right we kind of collapse for example the and compact the presentation of this and that makes it more digestible right and I I think yeah those I would say are the those are the I mean it's a long release note I always just can can point at highlights right but uh yeah that's those are

>> it's hard to pick just a few out I I definitely recommend everyone go and read the release notes because there's so much in this release. Um, as Kai mentioned, some of these we'll be covering um in the stream in just a few moments um to hear straight from the VS Code team of folks who worked on the features themselves. Um, so you'll see a lot of those in action. Um, so yeah, that was a lot um just in this final release. I know you mentioned that there are refinements always in process, especially right if folks are using VS Code Insiders, so you can get those daily builds. Um, I was wondering if you could speak a little bit to what themes you see emerging then um that are helping shape what development's going to be looking like next year from the team and anything you can share there.

No, next year if you talk about January that's that's more uh predictable, right? Again, think about what we just talked about what the year this year looked like, right? And I don't see it slowing down anytime soon, right?

>> So, uh but a couple of things we we already see, right? So, we push for example custom agents, right? And custom agents is your way of pretty much telling the agentic loop how to behave for your concrete use cases, right? And as good as generic agents are custom agents that you can actually control, test and so on in order to make sure that they run properly. I I think that will really take off, right? And what we actually try to make sure is that custom agents run locally. You can actually use VS Code as your development environment for custom agents, but then they also can be picked up by background agents or in the cloud, right? And I I think that will really continue, right? And we really just have touched the I think the first couple of of interesting problems around custom agents. And then related is right we we have a a planning agent or we call it planning mode right and right now you get the plan you as an individual right but think about if the complexity of those problems really increases right now maybe I need your opinion on if the plan makes sense right and then it's the agent you and I right and that actually creates this kind of collaborative nature of all planning and that's clearly something that will also go after right and also one other aspect right uh at universe we had our integration or our collaboration with open AI right for the codeex integration into agent HQ, right? I think that kind of type of collaboration will will continue also with others right so it's an opening up right it's it's pushing for collaborative planning it's more custom agents, right? And you mentioned that before, right? We went open source this year. Um, big big step for us, right? As a traditional open-source project or traditionally being an open source project, right? It was always kind of awkward for us that that everything we did with AI was closed source, right? So clearly people can can come and and do this with us together, right? So that's that's exciting. I think one of the things that really stands out to me looking at this year is just VS Code really trying to in the age of AI stay true to its core principles, right? Open sourcing um the AI capabilities so we can get closer to our community. Um, you know, we're talking about BYO functionality with extensions be able to contribute models like just really leaning to that extensibility mindset. Um, I think that that's a really great thing to see. Um, and to your point about, you know, having the community help shape uh and give feedback so we can uh just make the experience even better is a great thing to, I think, end on here. But is there anything else that you want to cover before we turn it over to some of the rest of the team to showcase some of those great features you talked about?

>> I mean, maybe just saying thank you to everyone, right, who uses VS Code, who gives feedback, right, who who sends PRs, particularly those who send PRs. Thank you very very much. They try to call you out in release notes every single time, but um you know, thank you from the bottom of my heart. Um, yeah, and clearly also thanks to to my team. They're awesome.

>> They are. I'm biased, but it's it's a really great team to be a part of. [laughter] Cool. All right. Well, Kai, thank you so much for being here. Uh definitely look forward to having you on in the new year and we can maybe like do a sidebyside clip of this of where uh looking forward in the new year and see where we're at in six months time.

>> That's a great idea. We should do that. [laughter]

>> Okay.

>> Thank you so much, Kai, for being here.

>> Thank you. Have a good one. Byebye.

>> All right, y'all. That's going to bring us into kind of the next portion of the VS Code release stream. Um, where we bring on members from the VS Code team and special guests to talk about some of the great features from the latest release. Um, this is meant to be interactive. So, please make sure that you're dropping any questions in the chat. Um, with that, let's dive right into it and we're going to bring Bridget on to talk a little bit more about the Agentic experience. Hey Bridget.

>> Hey Olivia. How's it going?

>> Good. How are you? Thanks so much for coming on. I love anytime that you are on this stream. It's always a good time.

>> Thank you. I love being here. So, super excited to to be in the final stream.

>> I know. I know. Oh my gosh. I cannot believe it every time I hear that. Um, okay. So, obviously I know who you are, but some of our viewers might not. So, if you could do just a quick intro to yourself and then I think we can dive into what you're showing.

>> Sounds great. So, I'm Bridget. I'm a product manager on the VS Code team here at Microsoft. Um, I've been on the team for over five years now, I think. And some of my current focuses include the next edit suggestions experience and all of our agentic experiences moving between background cloud local all those kinds of cool flows.

>> Yeah, tons of amazing work that we've seen from you and the team um this year. So what you know I know Kai kind of alluded to it but um what is the latest in the release that just dropped yesterday that people need to get their hands on?

>> Yes. So, we've made a ton of changes to how users can interact with, kick off, hand off between different kinds of agents. And when you open up the chat panel, you're actually going to pretty much immediately see the change there. And so, I think we could probably just get into the demo and take a look at it. That sounds good.

>> Okay. So, I have gone ahead and opened up the chat panel here, which you can always do via this toggle chat button. And right at the top here, we're going to see we have this recent sessions list. Now, this is going to be recent different kinds of egentic sessions that I've kicked off, whether they're local, which is just regular agent mode as I'm in here. Um, or it could be background sessions, or it could be cloud sessions. I could go ahead and explore these different sessions. And something that's also cool is we now have this button here that allows you to expand into this agent sidebar as well. So depending on how you kind of like to manage your work, review your work, chat with co-pilot, um, we we're kind of building in these different kinds of flows to make it feel as powerful and as extensible as possible to you. Um, now with this as well, we have where maybe if you have a bunch of different sessions, you can do things like you could archive them. So for instance, if I have a few sessions and maybe I was kind of working on similar tasks in them, I don't really need to worry about some of those. I could go ahead and say archive um and move that over to an archive section. And at any point too, I could go ahead and filter my different kinds of sessions. I could search them to find them. Um, and I can again move between different kinds of views and also go ahead and create different kinds of um chat conversations as well. So here I'm just in kind of regular local agent mode. I could also go ahead and switch over to specifically a background agent conversation or a cloud agent conversation as well. I know that's kind of like a quick overview. I'll pause there. [laughter]

>> Very cool. Yeah, I think that they're I mean, first of all, these uh updates are amazing, right? Because I know if you're using all your different agents as much as I do, right, you have such a so many different sessions and so being able to just filter through them is so helpful. Um, I was wondering if you could touch and maybe you're going to do the same demo a little bit more on just kind of the difference between that local background cloud um interaction and how that works.

>> Absolutely. So, we could go ahead and kick off and I will zoom in just maybe we'll stay right about here. [laughter]

>> Too zoomed and you then can't see your screen.

>> Yeah. Like never mind. We'll stay here. We can resize if if we need to. Um, so kind of go through a typical flow that maybe I would do. So maybe uh you and Kai were just discussing as well like planning mode. We have that. So maybe I want to do some planning for my current repo. So for instance, this is actually a real website that our our team develops and publishes. It's all about dev containers, which is another feature of VS Code that I love and that I work on. And maybe I want to find ways to make this site even more user friendly. So I could work with uh either local agent mode or the planning mode and local uh conversations and say um what are some ways that I could make my site more user friendly? And I'll go ahead and send this off to uh kind of just work on a plan for me. And something that's also cool that we added this iteration is that I can let local conversations, whether it's local agent mode or planning mode, continue working in the background. So I can go back and we see here that this session continues in progress. I could choose to check in on it if I like, but I don't have to keep it in the foreground focused on it. I could go kick off some other work if I'd like. So I want to kind of let that plan work on things. And then in the meantime, I maybe have some other work that I'd like to go ahead and kick off and maybe I'd even like to go ahead and kick off some things additionally in the background. So, for instance, something that as I'm in the kind of the mindset of ways to make this website more readable or more contributable by new folks coming into it, maybe I'd like to go ahead and add some more testing instructions to the readme. Maybe that's something that's top of mind for me. So, I could say add testing instructions to my readme. And I could go ahead and kick that off uh to again work in just a local agent mode session. I'll kick that off. I can let that work in the background some more. Um, and I'll see that continues uh working and thinking there. Um, now, as I kicked off that on agent mode, that's going to go ahead and create changes just to my local files here in my workspace here. So, they're not going to kind of be isolated from if I kicked off another agent mode session. It is possible that maybe those changes could conflict. So if I really want to go ahead and kick off some background work, um, it's helpful to actually use a background session. So that way it will work on a git work tree if I'd like. So I'll go ahead and we have a few different ways actually. So what I could do here is I have this continue chatin button. So if you're typing here, you're just working in agent or ask mode and then you realize, hey, I'd like to send something off to the background to the to the cloud. You can actually use this button to then continue your conversation there. Or if you kind of decide from the beginning that you'd like to go ahead and work with a background agent, you can also plus and create a new background agent directly from here, which is where we're then going to see that dropdown where I can choose to work on a work tree, which is going to be an isolated git work tree that's not going to then impact my other local files directly. Or if I didn't want to use that, I could also choose to go back to the workspace option.

>> And is it pretty much as long as you're in a GitHub repo or a git repo, you have the access to work tree and the work trees will just magically work. Okay.

>> Exactly. Yep. Um, and under the scenes as well, the background agent is powered by the co-pilot CLI. So folks are using the C-pilot CLI outside of VS Code, we also now have these integrations directly within the editor. Um, so maybe I want to say add a glossery page to my site and also link to it from the readme. This is a scenario where it might end up conflicting with some of those local changes I was going to have because, hey, I was adding testing instructions to the readme. I'm also going to add some other information to the readme. It's nice to be able to kind of kick these things off in different isolated background or cloud sessions if I'd like. So here, um, I check this up. We also have a model picker for the background agent sessions as well. And I'll go ahead and send this off. And now we see immediately as a response that the background agent went ahead and created an isolated work tree. And it's going to go ahead and actually make those changes on the work tree. If I check over in the SCM view, I'll see that work tree was created and my changes are going to exist on this work tree instead of potentially conflicting on my local repo.

>> Very nice. Um, how do you usually uh decide for your personal workflow if you're going to delegate it to a background agent or to a cloud agent?

>> That's a great question. And so I found that sometimes if it's what I expect to maybe be a longer running task or something that I really don't want to or feel like I need to immediately see the results of, sending it to the cloud can be nice. Um, I I also feel like if I want to automatically have a pull request generated and maybe go ahead and collaborate with Copilot on that PR, collaborate with other teammates on that PR, it's really nice because the cloud agent is going to go ahead and create a new branch and PR for that session. And so if that's something that I feel like I'd get value of for this kind of task, I find that to be a really great opportunity to de delegate to the cloud.

>> That makes a lot of sense. Okay, great. And we could take a look at an example of delegating to the cloud. I could do it uh from this kind of continue in button here so folks can see that flow as well. So maybe something I'd like to do is add a theme toggle to my site. I expect that to maybe be a little bit a little bit more longunning. Maybe I want um the coding agent to take a little bit more creativity with it. So, I think this is a good task to try sending off to the the um cloud agent. So, maybe I'll say add a theme toggle to my site. I can use this and say cloud. We're also going to pick up if you have any uh outstanding local changes and you can choose to decide if you want to include those in your uh cloud agent session or not. I don't think that they're relevant because I haven't been doing work that's quite relevant to this. But if you have been doing some work and you have some things that you want to package up and also include in cloud cloud agent session, this flow is great for that. So I'm just going to say delegate. And then it's going to go ahead and automatically create a branch, kick off a PR, and go ahead and work in that branch and PR. And if I then go back here, we can kind of see the different status that we've ended up at. So let's go ahead and take a look at some of our sessions here. Um, so I can see that co-pilot planning mode here came up with a plan for ways that I can make my site more user friendly. [snorts] And I have a few different next steps I could take from here. Either I could continue iterating with copilot locally on the plan, maybe break it down, expand on it, totally pivot with it. Or if I like this plan, we now have this dropdown and you could continue with this plan and delegate it to the background or to the cloud. And so we're trying to make it as seamless as possible of you could delegate the whole plan. You could decide just to say, "Hey, I just want to implement step one." And then you could go ahead and choose to delegate that to the background or cloud. Either way, whatever works for you.

>> Very cool. Okay. There are a couple questions. If I can pause just for a second. Um, one question in the um sidebar where you see the blue um dots next to some of the chat sessions. Can you talk a little bit again about what that um indicator is?

>> Yes, that's a great question. And so we have a few different statuses here. And so blue means that a session is completed and I haven't yet clicked into it. So if I'd like, I'll go ahead and click into it. And then we see now that the session is basically marked as red. And we also have this capability where you can choose to mark sessions as red or unread with the rightclick option. And so for instance, if I was working on a plan or working on a change and I think, hey, I'd like to remember to come back to that, I can go ahead and mark it as unread. Um, I I find this is helpful when I want to do things like if I generated a plan and I'm like, "Hey, that plan's going to take some time to kind of cook in the background." Um, I want to be able to remember where it was in this list of sessions I have ongoing. It's nice that we can go ahead and decide, hey, I want to mark it as unread and come back to it. And you can also then choose to filter just to read or unread sessions as well.

>> Okay, that's great. Um, thank you for the overview. We're also getting a lot of good feedback in the comments. I just want to do a call out for that. Thank you all so much for doing that. Um, that's one of the best parts about the team being here is that we're reading all that feedback. Um, so we will definitely take note of all of that. Um, okay, Bridget, is there anything else that you want to show them?

>> No, I think that this is a a good overview of some of the changes that have landed. Um, we can check in on the SCM view here. We'll see we have different work trees, different changes committed here. Um, also folks want to really have power over their pull requests and issues directly in the editor since we also have integration with the co-pilot coding agent in PRs. Installing the GitHub pull request extension is a great next step as well. It'll give you some even more capabilities. And then when you have those kinds of cloud sessions that get kicked off, you'll be able to click into them and um see the PRs that were generated, be able to interact with the PRs, apply changes from them, check out um if you have that other extension installed as well.

>> Awesome. Cool. And I know that this was like literally just touching the surface of all the updates. Um, so this was a great overview, but I do just want to do a plug because um, we are currently streaming to the AI Dev Days event. Um, and we actually have a whole breakout session on the unified agent experience in VS Code um, from Josh Valdo on the team um, later today. So that's another great chance to see all of this in action and kind of dive a little bit deeper, too. So just want to do a quick plug there.

>> Yeah, sounds great.

>> All right. Well, thank you so much, Bridget, for being here as always. Um, and I'm sure we'll see you a ton in the new year. [laughter] Thank you so much and happy new year everyone.

>> All right, thanks Bridget. Um, with that that's going to go ahead and bring us to our next guest and demo with Logan.

>> Hey Logan, how are you?

>> Hi Olivia, how are you?

>> Thanks. Um, is this your first time on one of the VS Code release live streams? I can't remember.

>> I think so. I did a podcast at one point about this feature, but I don't think I've done a live stream yet.

>> Yeah, good good um VS Code. Yeah, right. for the VS Code Insiders podcast. Definitely check that out. Logan has a great episode there. Um, well, so can you go ahead and do just a quick intro uh of yourself?

>> Yeah, so I'm Logan. I work a lot on uh kind of the model adoption and model integrations within uh Copilot Chat. So a lot of the new models that you see come in uh have been kind of added by me. And then I also work on the bring your own key experience which is about bringing access to users to bring whatever model they want uh to use within Copilot. So that's what I'll be kind of shoving off a little bit today.

>> Cool. That sounds great. Yeah, I know models um you know Kai mentioned it um in his opening. Um, but all the model work is a huge huge piece of all the work that's been done this year from the VS Code team. So super excited to have you on the stream today and show this off. So with that, yeah, we can go ahead and dive into your demo.

>> Yeah, sure. So here I'm just in uh copilot chat. I'm actually using my copilot free account. So it didn't cost me anything to sign up for this. You can see I open this and I have some you know quota for chat messages. Uh, but maybe I want to you know I already pay for some API usage or I don't I want to experiment with different models. Uh, we actually support bring your own keys so that you can access different LLM. So the way I do that is I click here into the model picker and you can see I have you know at the top here all these models that were provided uh by copilot directly and this is included in your subscription and then I have this other section at the bottom here where you can see other models that I've contributed via an API token. So if I click manage models here we'll actually bring ourselves into this new management flow that we've been working on. And so here I just have a few providers uh listed but there's many more than this. So if I click add models for example, I can go and add API keys for even more of these or install more providers from the the marketplace. But this is just what I've set up for now. And so we have copilot and this is like not super bring your own key because copilot's of course included. Uh, but this flow does allow you to also manage the models in your picker. So let's say you know we have GPT5 mini, GPT40 and GPT41. I might not really want to use four or 41 anymore now that we have five mini and now our new in-house raptor mini model. So, it just might make sense to click the little I button here and hide those and now I have a cleaner uh kind of model experience to work with, which is really nice.

>> This is such an underrated feature. I feel like like I've been like shouting this one from the rooftops like, "Oh, you don't want a giant list in your model." You can configure that.

>> Yeah, it's not too bad with the free accounts because of course with the free accounts we have to limit the number of models we can provide. Uh, but with the pro accounts you can get quite an exhaustive model list and it definitely helps cut down on things and that's why we also started providing auto as an option to just help with that that mental fatigue of what model should I be using because there's just so many options. So we want to cater to the gamut of I would love to experiment with models that copilot doesn't even provide which is why bringer and key exist or I'd like to not think about models at all. I just want to use AI and that's kind of where auto uh comes into play uh there. So yeah, so that's kind of the copilot models, but then the actual bring your own key experience. So I've added keys so far for Cerebrris and open router. And I have OAMA running on my machine as well. So you can see I have all my models listed here. Uh, they show their context windows so I can decide, you know, maybe I don't need a model that can take a million tokens or maybe I do. Uh, whether or not supports tools or vision. So if you're working with images and things like that, you might want to to specifically select a model that has that support. Uh, for cobot chat, because a lot of things are going agentic, we definitely recommend picking tool selected models. So for Cerebrus, you'll see I've only selected GLM46 and that's because their other models at the moment do not support tool calling and it doesn't really create that really nice wow experience um without being able to do tools. So, another fun feature is if I click on these little, you know, blocks. So, if I click vision, then it'll actually filter the list down to to vision only models and allow you to kind of pick and choose. So, I've already chosen a few here. I can choose, you know, maybe another one just to just to play around with. So, we can try to add DeepSeek V32. There it gets added in. And these models work exactly the same as normal copilot chat models. So I can just go here. I can say, you know, I have this little project called my site. Create me a website of VS Code showing product info. And the the thing I like about Cerebrris that we'll see is it's just like an incredibly fast inference provider. So it makes it very easy to to do these quick little demos here. So we're going to rip through these files. And this is all real time, you know, nothing sped up or recorded. And

>> that's why I love these live demos because people can see like this.

>> We get Yeah. Hopefully it doesn't make me look bad. [laughter]

>> You never know. The demo gods are a little um finicky.

>> Depending on how you do AI, you could review these files. I won't. Um, keep. And then I'm going to close my other tabs just because I don't have a lot of screen space here. And we can just open up the site here. And look, I got a broken image, but other than that, it looks like I have what appears to be a copy and paste of our old site. Nice.

>> And I can view this all within VS Code,

>> everything like that. I can now I could even do this add element to chat thing, which is really cool, and say my image is broken, and it will try to fix it for me. Look at that. Amazing.

>> A real time. It even [clears throat] made that SVG itself which I thought was absolutely crazy that it got right.

>> Oh man.

>> Now we have these get is some sort of plane fighter jet looking thing but um and so yeah so these are all the quality and experience is exactly the same as if you used a coat model. We can even kind of prove this to you. So you can see in my output channel here I'm seeing that all my requests are flighted to uh the ZI. I can click these markdown files and these markdown files actually contain you know the entire prompts that we're sending. So if you are really wanting to get into the nitty-gritty which is kind of what BY caters to of bring your own model experiment with it see what works best for you. You can see that you can view these whole prompts here and see everything we send to the model how many tokens it consumes and and everything uh related to that. So it's a really cool feature. It's it really helps with the fact that no matter how much we'd love to provide every single model on on the planet, you know, each time you add a model to copilot, you take the pool of GPUs that are available and have to divide them, you know, so that each model gets some sliver of capacity and that makes it really really hard for us to provide everything. So it's really great. So, I'll read like an AI article, a new model will come out. I'll be like, "Oh my gosh, I want to go try, you know, this model I've never heard of. I've never heard of a lot of these models to be honest. Some of them are come from big players, but I've never heard of this like step fun model, for example, and maybe it's really good and maybe I want to play around with it." So, that's where I think that the bring your own key experience really shines. And it works completely the same uh as any in-house model would and it does not consume you know any of your your budget as well. So I still have 4% as I showed before. So that also is a benefit if you don't want to use your cobalt subscription and you want to save it for you know using whatever model and you want to just pay by API key. So that's really all I have to show Olivia.

>> Uh >> yeah, I think just a couple questions we usually get around this experience in general. Um, yeah, I think thank you for showing this. I think it really just like really hones in on the message of model choice, right? You're not just limited to the models that are built into Copilot, even though um depending on your skew, you can have a lot. Um, but if you want to try out the latest model of some provider, um, you have those options to do that. Um, and so I really love that uh capability. Um, one question uh that we get a lot is do you still need to be signed into GitHub copilot though? Because while it doesn't uh count against your GitHub Copilot usage, how does kind of that relationship work?

>> Yeah. So, at the moment, you do still need to be signed into GitHub Copilot because we often will do things like you can see in my logs, we use GPT4 Mini here and we use GPT4 Mini for creating this like nice create a website title and other background requests for fine-tuning kind of some some of the requests in the background use this for mini model to fine-tune your query and make it better. And then there's features in co-pilot chat that can don't have a model picker associated with them. So I don't have it right now, but if I had the source control, we do the auto commit generation with the sparkle or like the F2 rename with the sparkle. These all don't have a model picker associated with them. And the way to power these features is via 40omin as well. So none of those count against you in terms of cost, but they do require that you are signed in and have a active cop subscription.

>> Okay, that makes a lot of sense. Cool. All right. Well, this was a great overview of BY. Um, we actually have a great next demo kind of showing how you can use hugging face with this experience. Um, so Logan, is there anything else you want to touch on um or talk about before we

>> No, that's all. Thank you so much for having me.

>> Thank you, Logan. Have a great one.

>> All right, that's going to bring us straight into our next segment um with Selena from Hugging Face.

>> How are you?

>> Super excited to be here. Thanks for having me.

>> Oh, we're so happy to have you here. Um, yeah, I did a quick intro that you're from Hugging Face, but if you could just do an intro of yourself and then what you'll be showing today, that would be

>> Yeah. Yeah. Um, so I'm Selena. I'm a software engineer at Hugging Face for more than a year now. I'm the co-maintainer of the HuggingFace SDKs and I also work on our serverless uh inference service called HuggingFace inference providers uh that I will be talking today um and how to use it uh inside VS Code. Uh, so quick word on interest providers. If you can show my screen. Yeah. Um, so quick word on this uh it's basically uh the easiest way to get access to state-of-the-art open weights models via one single uh API and the inference runs on uh worldclass uh inference providers like Siri Grog fireworks and a bunch of others and you get fast reliable access to pretty much any uh open weight uh model you can think of and because we uh support municipal providers you get flexibility in term of um cost uh speed and availability without being tied um like to a single vendor and uh it's also cost effective in the sense that we don't uh add any uh extra markup on top of uh provider. Now the the part I'm especially excited about uh is that you can use this open weight uh models directly uh inside VS Code copilot chat uh with the

Uh, extension called plug-in Face, uh, provider for GitHub Copilot that you can find on the marketplace. Uh, I think you cannot miss it. It's the uh, the extension with the cute, uh, the cutest logo. Uh, so yeah, by the way, huge thanks to the VS Code team for implementing the tooling, uh, that made this super easy for us, uh, to build.

It's based on on the bring your own key feature that, uh, Logan was presenting before, and as he was explaining, it basically allows you to contribute your language models, um, through an API to VSC Copilot Chat. And, uh, VSC being open source is such a great, a great thing for us as well. It helped build this kind of, uh, of features.

Um, so yeah, um, another thing about the the extension, uh, we think it's, uh, very cool, uh, for us because we constantly release, uh, new features on our side, and, uh, the extension being outside of VS Code allows us to iterate faster, add new features, integrations, bug fixes, and, um, all of that without relying on on VS Code releases.

Uh, so yeah, a quick demo. Setting this up is straightforward. You just need to install the Hugging Face, um, provider extension. Once it's installed, uh, go to Copilot Chat, click on the model picker, then manage models, click on add models, and then you will find the Hugging Face in the list. Click on Hugging Face, and then it will ask you for your Hugging Face, uh, API key. So, this is your Hugging Face access token [clears throat], and you can find this in your, uh, Hugging Face settings. Just make sure to, um, add permissions to providers. So, I will copy my, um, token here. Click enter, and then you can select any available models, uh, to use, uh, inside, uh, Copilot Chat.

Uh, so yeah, uh, a couple of useful things here, uh, is that you can actually filter, uh, models, uh, by provider, uh, that are that supports this model. For example, if I want to, um, show all models that are supported by Fireworks, I can just, uh, look for, uh, Fireworks, and, uh, it will give me all the models that are served through Fireworks.

Um, you can also pick, uh, either the fastest mode, uh, which will select, uh, the fastest provider for that model, meaning the highest support, uh, for for that model. We have also a cheapest mode, which will select the the most cost-efficient, um, provider for that model. So, yeah, so let's select, uh, for example, the latest Deepseek model, which should be a Deepseek v3.2 two, uh, with the fastest provider, and let's select GLM 4.6 six, another, uh, open weight model that has, uh, great performance for coding. And once you, uh, enable visibility here, you will find, uh, the models here directly, uh, to use.

Uh, so yeah, let's try, um, a quick, uh, demo here. Um, let's build something real, actually. So, uh, I have this feature request, uh, I was supposed to implement today, so the on on the Hugging Face Hub repo, which is the Hugging Face, uh, Python SDK. So, yeah, let's just ask GLM to implement, uh, this this feature directly.

>> Love it.

>> So, just ask, um, GLM to to implement this by giving the URL directly to, uh, to the GitHub, uh, issue. Let's add a bit of context, and let's hope I don't get any, uh, demo effect here, but it should be [laughter].

>> Yeah, uh, actually, I for this kind of features, I really like using local agents, um, instead of assigning, I don't know, the issue straight to GitHub, uh, Copilot because it feels much more, uh, interactive, and I get to steal the implementation step by step. Uh, I can refine the prompt, and, uh, I just like watch, I just like watch it like, uh, until it completes, uh, its work.

>> Uh, so yeah, um, I also estimated roughly how much it costs for this kind of session. I mean, this kind of request, and it's roughly around, uh, 20 to 30 cents, uh, if you want to like have GLM implement this, uh, feature. And I'm not even, uh, using the cheapest, uh, provider. So, it's quite cheap compared to other, uh, other models. And with the free Hugging Face account, you get some, uh, free credits to try things out. And then with a Pro account, you get, uh, even more, um, monthly credits, free credits, and then it's pay as you go, um, after that.

Um, yeah, so I think it's, it's going really well for now. It takes like one to two minutes. Um, and as of the extension, the implementation is obviously open source. Uh, so you can just check out, uh, the code and open issues if you have any, uh, bug reports or feature requests. Um, we're super, uh, happy to to get like some feedback on that.

>> Yeah, we'll definitely make sure to share out that, um, repo link so people can, um, contribute to that. Um, yeah, I love, like, there's a couple things I just want to highlight that you showed up. First, I love the ability to filter for cheapest and fastest because, I mean, like, at the end of the day, right, a lot of people don't necessarily know what all these models are. Want to know what's, what's something I can try that's cheap, or what's something I can try that's going to get my task done fastest. So, I think that that's a really, really great user experience.

Um, and then to your point about, um, just this being in its own extension, um, Logan touched on this a little bit too. Um, but it just really allows y'all to be able to get the latest updates out to folks as quick as possible rather than, to your point, waiting for maybe a monthly stable release to go out.

>> Yeah. Yeah. Actually, for the cheapest and fastest, uh, mode, we shipped that a couple of weeks ago after releasing the extension. So, I just had like to release another, um, version, uh, of of the extension and then ship that into, uh, Copilot Chat. So, it's, uh, it's very, very cool.

Um, there is a question, um, on if these models can be handed to the cloud agent, um, or your local sessions.

>> Yeah. Yeah. Yeah. I think I think it can be used with the cloud agent. I tried this, uh, I think a couple of days ago. So, it should be working fine also for with cloud agents, background agents. Um, I'm more of a local agent, to be honest. But, yeah, it can be used as well.

And we see this kind of, um, like the other thing I think that's really great to show with the extension too is then it kind of gets all the error handling from y'all as well too. So that way, you know, it's a model that's supported by Hugging Face, um, and that you can make sure that all the responses are being, uh, uh, requested properly, um, and that you can see, kind of, that great user experience there.

>> Yeah. Yeah. Yeah. Um, I think it helps also that we have like, um, we are OpenAI compatible, which makes it really easy to implement this, uh, for the VS Code Copilot Chat. So, um, yeah, it's, it's, um, it's, it's really a good, uh, a good thing to have, this, uh, this thing of the bring your own key, uh, feature, uh, in VS Code and the way it's implemented as well.

>> Mhm. Absolutely.

>> Cool.

>> Let's see. It looks like it's, yeah. All done successfully. Yeah.

>> Yeah. I think it did the job. Um, yeah. And and then I can, I mean, using this, I can just iterate, ask for tests, or if I don't like something, uh, I can just like, um, do do the job locally and then, uh, push a final version of it, uh, after reviewing the the agent work.

>> Yeah. I I like, I just think it's really cool how it's, you still get kind of this native experience in chat, but you get to bring all these extra models in. Um, and I know Hugging Face, like that was like one of the, uh, top ones that people are like, "Oh, when can I put in Hugging Face models here?" Um, so, uh, that's a really great. I'll put out the, um, link again real quick, um, so people know where to look for. Um, you can either search in the extension marketplace in VS Code for Hugging Face Inference Provider, um, for Copilot Chat, I think it's called, or we have the link up, um, right now too for how to get to that extension page.

>> Awesome. All right. Is there anything else that you want to share or not that Hugging Face will be, um, coming in the future?

>> Um, I think though that that's it. We will, I think we're communicating about it like every time we have like new features, and we we try to, uh, to improve that and see what next features, new features of VS Code and how to integrate that on our side.

>> Awesome. Cool. Well, thank you so much, Selena, for being here. Appreciate it. Um, have a great day.

>> You too. Bye.

>> All right. That's going to bring us to our next demo, um, with Connor, who's going to be talking some MCP updates, which I know we've already asked for in the chat. Hey, Connor.

>> Hi. Good to see you. Yeah, it's, I think it's been a few months since I've been on here, but, um, yeah, great to be here.

>> Cool. And we get, we get a twofer for you today, right? Because you're here, and then you're on with Tyler later for AI Dev Days, right? Um, to kind of

>> I'm on at 10:35 Pacific. So about, I think, uh, two or an hour and a half from now. Um, so if you want to learn more about

>> Love it. Cool.

>> check it out.

>> All right. Well, I guess with that, right, obviously I know you, but do you want to do a quick intro, um, just, uh, for what you do on the VS Code team?

>> Uh, yeah. So, um, I'm, um, I'm Connor. Um, I work on, uh, uh, debugging, testing, and then also, like, relevant to this, um, um, I build out, uh, many of the MCP features in VS Code alongside Tyler, um, and Sandeep, who've been on here in the past. Um, and, um, and it's actually good timing on the last release because the the latest MCP spec just dropped, um, uh, um, at the end of, uh, November. Um, it had the first, like, anniversary of of MCP, and there's a bunch of, like, new features in there that are super cool, um, and that, uh, we actually already support in VS Code. So, um, I'm going to show some of the, uh, some of those to you today.

>> Awesome. Cool. Should we go ahead and dive into the demo then?

>> Yeah, definitely. You can, uh, go ahead and put my screen on the screen. There we go.

>> [laughter]

>> Um, yeah. So, uh, one cool thing that I just wanted to mention that we've actually talked about before, I think on here, but if you haven't seen, we also support now the new, the new MCP registry. Um, so if you just type at MCP in your extensions view, you get to see all these, all these cool MCP servers. So you have like Playwright, you have, you know, um, like, uh, Microsoft Learn, GitHub, um, you have like things like Wiki, which is super useful, um, especially if you have, you're talking to like a project that, um, is on GitHub that, like, might be new and, like, maybe, like, not indexed already by, um, a language model, and you can just hit install, and then, uh, just like that, you've installed this MCP server and you're good to go.

Um, and then, um, and then, um, actually now also in recent versions of VS Code, you don't have to, like, start manually or anything. It'll just be started automatically the first time you send a chat message, and then we'll discover tools and then go ahead and and use it. Um,

>> Cool. And then when you say, um, MCP registry, that's essentially, um, an official curated, um, list of MCP servers that you now see in, um, VS Code, right?

>> Um, and so the MCP registry is actually sort of just a spec. Uh, there is also the the open source, the official, um, MCP registry. Uh, currently VS Code is pointing at the GitHub, uh, registry, which is a more curated kind of like a tested and tailored, uh, registry, but, uh, as the, like, open source, like public, as open source and public registry is is gaining momentum, um, I think I think that we're starting to kind of have that be be like an upstream to the registry that we use in VS Code. So, uh, like one of the stories is that like, um, it's there, it's not like directly, uh, publishable to yet. Um, it's really good if you want to just consume these MCP servers, and then, uh, probably over the next few months, like, we got to the point where, um, this this becomes more of like just a mirror of the public, uh, open source registry.

Um, so there's, there's behind the scenes, it's kind of evolved very quickly over the last few months. Um, but, um, it's getting there, and and if you're like a developer who wants to use these servers, you can go there. A good chance if if you have a server that, like, debug or Playwright or or any major server, it's probably already there. It's probably already, um, available and just, um, hit it install with like a button press. So,

>> Cool. Thank you for that overview. Awesome. All right. What would you like to show then? Yeah. For some of the latest MCP updates then.

>> Yeah. So these are brand new, like, off the press, and so I think most servers don't really support, um, like, a lot of the cool things yet, but, um, I just set up a, basically, like, a local test server. I like cloned the V code, the MCP server, and so I'm going to show that to you today. So I'm going to first, um, add my server. I just have a localhost server. So I'm going to point it at localhost 3000 MCP, and then, um, this is just a server that, um, will help me, like, design a website. So we can see now it created JSON, it created the server, and and it found six tools, and so, so this exposes a few different tools. So basically, it it is a, um, there we go. Yeah. So, first, a first, like, new thing in spec is that, um, servers and tools actually can now have custom icons. And so, I just like made a little rocket icon for the server. Uh, but, um, if you're, um, a developer, you can have these icons, and it makes it just a much easier to to identify, uh, your different servers and tools.

Um, and so, first thing I want to do is probably call the start project tool. So, I'll go ahead and do that. Um, there we go. Let's think about it for a second. Um, there we go. Um, and so I'm going to allow this to happen. Um, so, uh, one thing that you see is, um, uh, like recently, we we improved how we deal with, uh, uh, with resources. And so, um, um, MCP tools, uh, can return resources, which which you can like see attached now to the tool call, and you can also download those. This just returned basically a, like, a, a JSON blob here. But, um, I'll do more with that in a minute. So, um, yes, let's say we can have design. We can now configure settings and build and deploy it. So let's go ahead and start designing it. So I'll say start with the design. Um, and so this is going to use, um, a new feature called called URL mode, uh, elicitation, which is basically a fancy way to say it's a way for a server to like ask for input, uh, that that happens on a website, um, that you can then navigate to. So I'm going to go here, and this is a tool that will let me sketch out my website design, and then I'll be able to then give it back to the tool. So, I'll just do like a simple, um, I'll have like a, you know, like a content there. Uh, maybe like a, like a logo here, and then like a sidebar here. Um, I'll say this is this is my logo, maybe. I'm not sure. Yeah, I'm not sure that works. But anyway, this is probably good enough for the tool to figure out what happens. So, I'll say done. And now we actually see that this got returned to the model. And we can see that that also, um, is a resource. My my beautiful sketch there, uh, returned as a resource. If I think this is super cool, um, um, and I want to save it, I can go ahead and download those.

>> I can save those anywhere I want to.

>> Um, so that's cool. And I'll say, okay, so I have my, you know, basic beautiful design, and now I'll, I'll say configure my site and see what happens here. There we go. Um, so this is using the more standard, like, traditional, like, elicitation, where, um, a server can ask for just, like, kind of text, rule, or, uh, numbers, or, like, picker input. So I can go ahead and respond here. I have, like, a few, like, various things, and so I'll say this is a creative site. I do single page, sure, whatever that color is, sounds great. Um, uh, yes, animations, and then this is also, like, just one small new feature as well that, uh, came in the latest spec, is that, uh, they have a way to actually, um, ask for, like, multiple things that you can, like, check and support. I'll say I want both, both a contact form and a newsletter, and then I'll hit okay. Um, you see the output from my elicitation here, and then we have that kind of all, all configured and set up. Cool.

Um, so now I will say, uh, yeah, let's, let's just go ahead, engineer content. I'm, I'm probably actually going to maybe change into, uh, a full setup for this, because, like, this is kind of a, a more heavier task, whereas, like, Haiku is is great for fast, short things, but, um, I'll go ahead and generate it and say generate content. You got this, because models always need some encouragement. Uh, yeah, so, uh, that's so many features. Um, also, one thing that is not really visible here, but that came, uh, recently is, oh, actually, is a tool. Okay. Oh, yeah. So this actually showing, uh, one new feature as well called sampling, and and the sampling is essentially just a way for the model to say, I want to make, make a request, like, on behalf of the user, sort of. So it's a way for the MCP server to make their own, uh, requests to the, the LM. Um, and so I'll say, I'll now this, I'll be in the session. And so behind the scenes, it's going to be going and making requests. Um, I can actually see those in the Copilot debug view. Um, and we can say that, um, or eventually it's going to make a request here. There we go. It's pro, I think it's probably this, this guy. Let's see what it, let's see what it's saying. Okay. So the MCP server, like, just asked it to generate content for a landing page site. Um, and so we'll see that, um, it made all this, all this content here, and so it created this landing page resource, which I think maybe my, my, my demo server is like, not like super smart. It probably wrote that to an HTML document itself, but I can go ahead and download this and and I'll say that, I'll, I'll call this, like, landing.html, um, and close that out. Go back here, I click on things, and we can see how this landing page site looks. It seems like it wrapped that in in a code block, which is not the best thing in the world to do, but, uh, yeah, so it seems like that basically, like, combined all of the the the things that I gave it. Um, I think maybe it didn't really follow my, my, my sketch too well, because it didn't create a sidebar, but maybe my sketch was, uh, was was not good enough for it to release a basis.

>> I thought it was a great car. [laughter]

>> Thank you. Um, yeah, but anyway, the other thing that I want to mention, which kind of a, which kind of a behind the scenes thing, is, uh, tasks. And so that is a new feature in the latest, latest, like, MCP spec, which basically allows, uh, servers to handle, uh, uh, long running operations, like, if server, if server, like, asks, like, user for input during a tool call, for example, that could potentially take, like, you know, a few minutes for, um, a user to actually, like, execute. Um, and so that princip. And so that, like, presents a problem, like, when you deal with, like, network, and when you, and when you can deal with, like, things that are, like, proxies that could, like, time out the request. And so tasks are are a way that, um, a tool calls, sampling, and can basically be created as, like, async tasks that the server or the client can pull for completion in. Um, and so that basically solves, like, a lot of issues, like, for example, if if your crashes, then you don't necessarily have to, like, lose your tool state, or you, or lose your state of sampling or elicitation, because that can be stored as a task that can be, like, reconnected to, um, um, and resumed in a durable way. And and so VS Code, so VS Code also supports that transparently, like, there's no really, like, UI impact for that, but, but you should see for servers that support tasks, you should see, like, better, uh, you better reliability, especially, like, um, I coding on airplanes. And so, like, if you're on an airplane or something, or you have, like, just, like, a bad network, then tasks, the tasks, like, should be a way to be able to, um, have your, have your sessions and servers work a lot more, a lot more lively than they would otherwise.

Um, so, yeah, I think that's kind of the, the few things I wanted to go through here. Um,

>> I'm not sure if the audience has any questions, but

>> Yeah, there's a few questions, comments. Um, so, uh, one comment is just that it would be really cool if our custom MCP could use tools of other MCP servers, um, and kind of bring those together. So, cool comment there of, uh, things that would be helpful.

>> Yes, actually, that is the only thing in the, uh, in the latest spec that we don't support yet. Uh, they actually did also add, um, on the notion of sampling with tool calls, uh, uh, give us some more kind of like things that we have to change, like internally, to make that work. But, um, I expect that should come probably, um, um, like in the next release, which is always on Insiders first. But, uh, that, yeah, but that basically does does have a way for, um, uh, sampling requests to to include tools that the model can call as if it was actually in a full agent session. And so definitely, like, keep your eye on that. Um, I think I have an issue for that, um, on GitHub as well to track. But that is something that I'll be looking at, probably shortly here.

>> Awesome. That's great. And then, um, one other, I guess, a couple questions around sampling. Um, one is, is sampling a new request, or is it all part of the same request? And then two, can sampling also use tools?

>> Yeah. So sampling, uh, uh, can use tools, like, with, uh, the feature that I mentioned before. Um, so it's not supported yet, but it will be supported very soon. Um, um, I think a lot of SDKs, a lot of SDKs for MCP are still coming out with that support. So since it might not actually be in your SDK yet, um, but, uh, soon TM, um, and sampling actually is kind of a distinct request. Um, so it's, so it's basically a standalone request. It's basically a, a standalone request that the server can make, basically tell the client to make. Um, the of course, um, like, um, if that sampling request, like, is a result of of of a of a tool call, which is the common case, that then the MCP server could have as a parameter, like, to the tool, like, include a summary of of your conversation, or include a summary of, like, whatever you're wanting it to do, and then it, and then it can use that to actually generate.

>> Sorry, I don't understand. [laughter and clears throat]

>> Apparent, apparently Siri, uh, heard me.

>> Like, that's so relatable.

>> Yeah. But, um, yeah, but then the server actually can use that, include that as context, um, into the request, um, that it makes.

>> Cool. Awesome. Well, thank you so much for this overview, Connor. Um, like we mentioned, you're actually doing kind of a, a deeper dive with Tyler later at AI Dev Days. Um, on that note, actually, if you all are watching from the VS Code channel, stay put. We still have one more final demo. Um, but if y'all are watching on the AI Dev Day stream, I'm actually going to kick it back to James and Katie, um, in studio there for them to keep the fun going over there. All right. Well, Connor, thank you so much for being here today. We really appreciate it. Uh, looking forward to seeing more of your demo later today, um, and just seeing what great things, uh, come from the team for the rest of the year.

>> Yeah, thank you.

>> All right. Thank you. All right. Like I mentioned, that's going to bring us to our last and final demo today. So, we have David coming on. Hey, David.

>> Hey there. How are you?

>> Good. How are you doing?

>> Great. Really happy to be here.

>> Oh my gosh. I know. I love anytime we get, like, we always say, like, special guests, um, because this is a great chance for, um, VS Code team members to come on, but it's also a great chance for, um, other folks who obviously are using all the great work that VS Code, um, puts out, um, to really see that in action. So, with that, I, this is your first time on the release live stream. Um, I would love if you could just do a quick intro of yourself and what you do, uh, here at Microsoft.

>> Sure. Hi, I'm Dave Levi. I am a product manager on the, uh, Microsoft SQL Server drivers team. Um, we handle basically all the connectivity with our first-party drivers to SQL Server. So, your SQL Server on-prem, your Azure SQL database, and SQL Database and Fabric, you know, we cover that all, plus we also get you connected to, uh, SQL DW and all those other things. So, kind of a big space.

>> Mhm. Yeah, very cool. Um, I know literally anytime you say anything with like SQL or Python, our audience usually is like, "Yes, that's like very relevant to me." So, um, definitely chat, keep the questions coming throughout, um, this final demo, um, because David's here to hang out and answer your questions. Um, but with that, what will you be showing today?

>> So, I want to show off the SQL Python driver that we released, uh, to GA back in November. We actually GA'd at Ignite. Um, it's our first first-party Python driver. You know, typically or historically, I should say, we had contributed to open source projects like PyODBC. Uh, but with the growth of the Python community, it really seemed like a good idea to have a first-party driver and make sure that we're landing all of our new features as quickly as possible in Python. So, um, really, what I want to show today is I've got a couple demos. We've got a repeatable, um, project here, and really, it shows that how easy it is to use the new Python driver where we really emphasized on sharability. You know, being able to collaborate with your co-workers or share a script with business users. So, we made sure that our driver installs with a single line, pip install, makes it very, very easy to share with other users. It also makes it very easy to deploy it. Rather than having to create separate containers for everything, you can just put this on the server, and you don't have to worry about people updating drivers or DSNs or anything like that breaking your project, and we live right within this folder. So, you know, typically people use, you know, virtual environments and things like that in Python, but we saw an emergence of a new tool called UV that handles virtual environments, um, packages, all all the stuff that you kind of have to do a bunch of different scripts for.

Um, so I want to demo that as part of the script here, there's part of the project. So, um, I've got this project in VS Code, and my zoom looks pretty good. So, um, basically, what we've got is I have, um, imported, you know, the normal libraries. I've got, uh, our, I'm a SQL Python driver, I've got environment to be able to use environment variables or environment files. And then I've got Rich Console, Rich Progress, and Rich Table. Um, so I'm going to put some formatted results out. And also, I've got just an argument parser so I can, um, slow things down if I want to show. So, kind of what I do, and this is a quick start that's available on our website. We'll share a link later. But I like to create little stub projects that I can use later for actual work. So all these quick starts and demos that I have are actually just in case I ever need to do this in real life, I've got something ready to go that I can just customize. I've shared it with you. So now you've got something ready to go that you can just customize too. With that, let's start digging in here.

Um, so I'm using a a global connection. I'm only single threaded here, but if I had multiple different paths through here, um, it's nice to share the connection. Um, so I go ahead, I load the environment variables, and I go ahead and connect. Um, let's take a look real quick at what's in my environment variables. So it's a typical connection string. The part I want to show is we're using Active Directory default.

>> I'm on a Mac.

>> You're not supposed to be able to do that, right?

>> We we spent a lot of time doing making this work. Um, and I'll show you the secret real quick here. Um, the trick is you need to be logged in as your, um, Azure authentication account. And the way you do that is you use an extension like Azure Resources. Uh, you add that extension, you connect it to your Azure account, and then you have VS Code authentication. Once you have that token in VS Code, we can pick it up and we can use it. So no more having to sign in and go get your phone and, you know, enter a code every time you want to run a script. It was so painful. We're like, we have to fix this.

>> Right?

>> So it basically just like loops into the VS Code authentication at that point.

>> Exactly. Um, and it's using Active Directory default. So if you don't, if you're not in VS Code, if you're using like AZ CLI, you can do a login and we'll pick up that token too.

>> Okay.

>> So default authentication is not something you really want to use for production apps. Like if you're going to have lots of users connecting to an app, um, you you'd actually want to use a specific, uh, security model, like a specific security option to say don't try them all. But if you're sharing a script with other users, or even just working on your machine, you're not going to notice a slowdown from using Active Directory default because what it does, it goes through and it tries all the different authentication models or, uh, options until it gets to one that works, and then it uses that. So it makes it super, super easy for sharing scripts with other users or, you know, just working on your own. Um, but it's, it's going to have a performance hit if you try and use it for, like, your production website. Okay.

So, um, let's look here. We've got our connection that we've created, and we've got our queries. I just like to, I started programming in like VB6, and we had to have all our constants pulled out. So I still like to do that. Um, I'm sure there's other folks out there that can relate. Um, but we get our connection, we, um, create our cursor, we execute our query, and we return our cursor. Super easy. We get our results. And, you know, for me, this was kind of me being, um, you know, having fun. I I wanted to do the fancy spinners for the progress to show like, hey, I'm doing this, I'm doing that, and, you know, kind of be like the the edgy developer, I guess.

>> Right?

>> So I did that, and this is all in the quick start for you to have, too. But we take and we format a table, and um, we do a cursor fetch all, and then for each record, we just dump it into the table. I mean, this is super, super easy. This is what I love about Python.

Um, and then, uh, we go ahead and close the cursor. And I've actually put sleeps in here, so I can slow this thing down and actually see the the progress updates.

Um, but then we've got our main, and, uh, we parse the arguments and we get results. So, you know, instead of looking at the code, why don't we just run it? U, so let's do UV run main.py. Pi. So we see we're connecting to SQL and boom, it's done. Um, now I had a couple different updates in there. Actually, I had two. So let's just do sleep time and we'll just do, let's do five. 5 seconds. Okay. So now we're connecting to SQL. This is going to take five seconds. [laughter] Now we're formatting results. So, see, um, I love these little spinners. That's so cool. [laughter]

Um, but now we're we're doing, we've got our table, orders by customers. So this is like, you know, super cool. But like, what if I want to share this with other users? So we've got all of our files that UV created for us. And I I didn't show that, but you just do UV init and dot in a folder, and it's going to create all these folders for or all these files for you with like your dependencies, like what version of Python, what version of your, um, libraries, things like that. And then it's going to create the virtual environment for you to use, so you know everything will work the same. If you want to share this with other users, the virtual environment is huge. So if you try to zip up this folder into a zip file, it's going to make it really unwieldy to share. So what you can do, and we'll just delete it. Yeah. Move it to trash. So now I can zip up this folder that's just text files. This is, you know, maybe a meg, if that. Um, probably way smaller. You can attach it to an email, send it in Teams, whatever. And another user can take it, they can unzip it into their machine, uh, open up the folder in VS Code, and all they have to do, you know, if you're used to Python and you've done like, uh, like a pip install requirements.ext-r and things like that and trying to get everything all set up, you're going to love this. So I've got this folder. There's no virtual environment, just these config files. I do UV run main.py. So I'm not changing the command at all. Mhm.

>> It's going to create my virtual environment. It installed all the packages, and we're already running.

>> How cool is that for being able to share things across

>> And that's all in that, uh, starter project that you mentioned.

>> Yeah. Yeah. These are all in our quick starts.

>> We'll share a link to that at the end here. Um, but it's just, it's so neat, like, you know, taking what's already out there, you know, this this open, uh, free-to-use UV product, and then, um, you know, adding a single line, pip install, so we don't have any dependencies, you can just drop this onto a machine, UV run, and it just works, um, with the authentication, you know, being able to use Active Directory default, you don't have to mess around with anything. So even for users that aren't that savvy, you're able to say, "Here, just run this, and it's just going to work." It's so neat.

>> It is, like, I I feel like it's one of those things, like, if we have people watching who, like, aren't deep in Python or, like, don't really use Python, they're like, "I don't get it." But if you use Python, [laughter] you get it.

>> It, yeah. If you want to try Python, because I know there's a ton of people out there that are like, "Wow, Python's really popular. I should learn it." Um, these quick starts have all the steps to get your machine set up with Visual Studio Code and, um, Python and UV and all that. So if you just walk through the steps, then it's going to make it super easy to get your machine set up and start building things. Then all you have to do is connect it to your data, and you just change the connection string in the environment folder or environment file, and change the format of the table, and now you've got something that you can show to your teammates and, you know, start iterating on.

>> Yeah, it's a really powerful, um, way to just get you started with pain points that maybe would be very intimidating and make you be like, "Oh, I don't want to do this now." [laughter]

>> Yeah, it's so neat. I I, um, you know, I came through college in the '90s. I'm really dating myself here, but, um, you know, Python was kind of a thing that was like wasn't a thing anymore. So seeing it come back and be huge, um, you know, I had I hadn't really paid attention to it. So now getting back into this space and really, you know, digging in, I'm like, "Wow, there's so much cool stuff you can do." Um, you know, there's tools like Streamlit out there that will let you create, you know, interactive web pages. So if you're like a report developer and you don't want to go create a bunch of, um, fact and and, uh, dimension tables and, you know, go build out everything and create a Power BI report and do all the work just to find out that you, um, may or may not meet what the customer wanted. You can very quickly create something in Python where you're running simple queries like this and bind it to, uh, a Streamlit page and have an interactive, like, this is what the report's going to be like, like build a rapid prototype. We've actually got a quick start out there on the on the website for that too, um, where you can say, like, is this what you're thinking? How should I build this? You know, is this, am I on track, or do you want me to do something else? So you don't have to invest all the time to go back and and have to refit later. Really neat stuff.

>> Okay. Sorry, I'm doing a ton of talking about

>> No, this is great. This, I mean, this is what this is for, is for people to show off the work that they're doing.

>> Yeah, I really love this stuff. The team, you know, we've got some great engineers that did such a great job with this, and they keep building stuff. Um, like right now, we're working on BCP to be able to stream, you know, huge amounts of data directly into a SQL table. Uh, so there's a lot of excitement about that. We're really excited. The we'll hopefully have that out there soon. Um, no dates yet. [laughter]

>> Yeah. But it's always nice to kind of hear like what's top of mind for the team, um, as they're working on it.

>> Right. Okay. So let me show off a little bit here with Jupyter Notebooks. Um, for the data folks out there, um, Jupyter notebooks are great because, you know, we often have to troubleshoot an issue like once or twice a year, and being able to say, instead of having everything in a Word doc and then trying to copy and paste all the queries over to SSMS or something like that, um, you know, being able to have it all in one place to be able to walk through it, so you can say, "Oh, I remember this. I remember these steps, and then here's the SQL. So all I need to do is connect and run it." Um, it's super, super powerful. It's also great if you're one of the more senior people on your team and you need to create runbooks for the junior folks to use to be able to, um, you know, execute on daily tasks. Like if you've got a customized restore process where you need to run a a data scrub after or something, you can put that all into a Jupyter notebook, and then anybody who follows along can just read what they're supposed to do and then run the cells. So from a data perspective, like a DBA perspective, this is super, super cool.

Um, so here's what we've got here. I've got my, I kind of broke out my, uh, notebook. So I have my imports all in one cell. So I just know where to go find them. And we can just, we can run the cell. You know, imports are going to run fast. Um, here I'm defining my queries. So we've got our orders by customer, and we've got our spend by category. So let's go ahead and run that. So we've got our queries. Okay. Next up, what we're going to do is we're going to print orders by customer and display in a table. This code should look really, really familiar. This is what we did in the other demo, right?

Um, I did change it up a little bit though. I want to show off the context managers. So in a lot of different languages, you have to manage your connections very, very tightly. So when you create a connection, you have to close it. Um, when you create a connection, you have to make sure you have exception handling, you know, try catch, all those things. Python has this con con, uh, concept of, um, connection or context managers, sorry, um, where you can say with an object, and it handles it. So once the object goes out of scope, it's cleaned up. If you have an exception, it handles the exceptions for you. You can still add your own custom exception handling, but this makes it super, super easy just to write good, solid code, robust code with still being able to go very, very fast. So here you see we load our connection information, we connect, uh, we then create a context manager for our cursor, and then we execute our query. If the cursor has anything, then we we just go through and, you know, print it out. Um, so let's go ahead and run this. There we go. We've got our table that we saw in the last demo.

>> Now, you know, I can't just do the same code over again, right?

>> Well, you got to spice things up. [laughter]

>> Yeah, we got to take it up a level. So, how about a chart? Charts are cool, right?

>> I love visualization in Jupyter notebooks. It's so good.

>> It is so cool. Um, we should show them what we're talking about. [laughter]

>> Right? First of all, we're so excited. Yes. Yeah. So,

>> you know, I I didn't really spend a lot of time putting, um, words around what's going on here, but, you know, we got titles. So, display spend by category in a horizontal bar chart. Like here, you could have entire paragraphs that say, like, this is what I think is going on, and, you know, if you see this, run this. But, um, here we create a connection manager, and we go and we run a query, and we bind it to a Pandas data frame. We then, um, define what our, I got to stop with the mouse. [laughter] We define what our chart should look like, and then we go ahead and we create our bar chart. You know, we pass our data to it. Here's our two columns. Done. Let's go ahead and run it. There we go. Now, you're going to get this warning right now with our driver because we're not in SQL Alchemy yet. Uh, we are working very closely with that team. So, actually, in the release that's going out very soon, we've got three fixes. We're hoping it's the last three fixes that we need to be able to support SQL Alchemy and pass all their tests so we can get rolled out over there, too. But, um, after that little sidebar, um, here's our chart. So, I can take this,

I can copy it, I can, you know, save it off. So, if you're trying to do something with other users in your company, like this is so neat because you can say like, "Hey, here's the analysis I came up with. Here's the chart I have." You share the notebook with them or you could, you know, delete the virtual environment and share the um the folder because this is I used UV for this as well. Um, you know, you could do that too. So, super super neat and it makes you super productive. Really easy collaboration. um like super super easy collaboration being able to share with other users and have them pick up right where you left off.

>> Um, you mentioned right like oh this will be changed in the next um release. We have a few things. What's the best way for people to kind of know when those releases hit um and when to kind of expect those changes. Is there like a blog that you'll have or anything?

>> The best way is to go to our GitHub. Um, so we've got um actually we've got a landing page and let's see here. Sorry, I lost my tabs. I need

>> I'm like the worst with just having 10,000 tabs. [laughter]

>> Um, okay. So, we've got our main landing page. You can get to this by going to aka.ms or I'm sorry, yeah, aka.msmssql-python and that will land you right on this page. What you'll get here is you'll get our get started where you've got all of our quick starts. So everything I showed plus the rapid prototyping with streamlit is available for you to go and make it your own. Um, we also link off to our documentation which is our wiki on GitHub.

>> Okay.

>> Um, you know, we try to maintain our documentation in one place. So, it makes it super easy. So, everything happens on the GitHub. And then you're able to also hit the link down here and go directly to our GitHub page. And here you're able to, you know, follow along with our releases. You can file issues. Uh we've actually got really good communicate or really good community uh participation where folks are filing PRs. So if there's anything you want to see and you feel really strongly about, you know, go ahead and create it and then submit a PR and you know, we'll get you worked in.

>> That's yeah, that's uh I feel like anytime that it's all on GitHub and an open repo and we can have community contributions, I'm always very excited. Um, we'll make sure that, like I said, that the this link is in our show notes so that way anyone can find this after.

>> Awesome.

>> Cool.

>> So, I'm running out of things to talk about.

>> I was going to say, is there anything else you want to show? I feel like we saw a lot of really great things that just like bring um a lot of pain points out of the equation.

>> Yeah, it's um you know, we really wanted to make things easy, make it real easy to collaborate. And you know, we see the potential. I mean, we were, you know, as we're building things out and trying things out, you know, testing code and doing different scenarios, we're often like laughing at how like just advanced the Python community is like the all the different things that people have already thought of that are just so easy. You just include it. Um, I mean like the Streamlit example where you're able to create a an interactive web page in like 40 50 lines of code. Um, it's just it's unreal. Um, so, you know, we love being a part of this community and we're trying to embrace the spirit of just making things easy, making it super easy to collaborate and um, really yeah, just have that Python experience.

>> Yeah, that makes a lot of sense. Um, and I think that it's just really cool to see all the different tools that are at our disposal to help make all those experiences um, as seamless as possible. And to your point, like if you're just kind of getting started with Python, like this is something that lowers that barrier. Um, and yeah, Python, especially in the age of AI, right, Python is it's everywhere. [laughter] Yeah. Um, and so it's a great great time to get started with Python if you already um if you're deep in Python, it's a great time to just reevaluate all the tools that are at your disposal now to help make it an even more seamless dev experience.

>> Definitely.

>> All right, David, anything else you want to leave us on? Like I said, we'll make sure that any of those um links are in our show notes. Um, yeah, I want to give you the floor again. [snorts]

>> That's really it. Like I I build a lot of these demos for myself, you know, these quick starts for myself to be able to come back later, but it's for you too. So go to aka.mssql-python and, you know, try the quick starts. It'll get your machine set up. You can start building things and then, you know, use it with your data. Make it your own. And, you know, if you can, if work lets you, show off what you built. I'd really be excited to see it.

>> Yeah. Awesome. Well, thank you so much, David, for coming on and showing that. We really appreciate it. Um, and yeah, hopefully we see you again in the new year to see just even more of um, how this experience has evolved.

>> I'd love that. Thanks so much for having me.

>> Thank you. Have it going. All right, y'all. That brings us to the end of our final release live stream of the year. Um, I just wanted to take a moment and say thank you to all of our guests today, to the VS Code team for just creating an editor um, that everyone loves and just iterating over. And most importantly, I want to take a second to just say thank you to our community. Um, it's very very hard to uh uh state just how much the community means to our team. Um Kai mentioned it at the very beginning that uh community is truly the heart of the VS Code team. Um, if you ask any of the VS Code team members, probably their number one reason for joining the team was because of the great open source community. Um, so I just wanted to take a second to thank you all to all of our contributors, those who create PRs, file feedback, we couldn't do it without you. All those who are here watching the VS Code live streams, we really appreciate it. Um, with that, make sure to subscribe to our YouTube channel so that you can watch this on demand and a lot of other really great content. Um, but I'll go ahead and leave y'all with a happy holidays and we will see y'all next year. Thanks so much for being here.

>> [music]