back to index

[Full Workshop from Microsoft] Github Copilot - The World's Most Widely Adopted AI Developer Tool


Whisper Transcript | Transcript Only Page

00:00:00.000 | Well, I hope that everybody has had a great first half of your day so far and had a good lunch.
00:00:19.060 | Thank you all for being here. This is a talk, this is going to be a workshop about the world's
00:00:24.440 | most widely adopted AI developer tool, and that, of course, is GitHub Copilot. I'm Christina
00:00:30.980 | Warren. I'm a senior developer advocate at GitHub, and I'm going to be assisted today in this workshop
00:00:36.740 | by my colleagues Dave, Alex, and Harold, who are all here in the front. Well, Alex is in the back,
00:00:44.540 | so we've got people sorted around. We did a version of this workshop earlier this morning. This is
00:00:52.640 | going to be our second try at it. We learned some things, so we'll see how things go. And then as we
00:00:57.880 | go along, if you have any questions or if you need help, I will have some resources where you can get
00:01:03.160 | help online and GitHub, but also feel free to raise your hand, and we will do what we can to help you
00:01:08.760 | out. And this is just kind of going to be a little bit of an overview of how we're going to be doing
00:01:13.820 | this today. So we're going to start off with an overview of GitHub Copilot, and then we're going to
00:01:19.640 | talk about getting set up and access for the repository that we'll be working out of and
00:01:25.520 | getting access to GitHub Copilot if you don't already have access. I would love, just out of
00:01:30.980 | curiosity, for the people in the room, how many of you have used GitHub Copilot before? Okay. Awesome.
00:01:37.380 | Awesome. That's great to see. We also will have some resource links. Then we're going to get into the
00:01:44.160 | labs, and then, of course, we will be doing some feedback. This right here, this QR code, and I'm
00:01:50.040 | sorry that I was not able to make the URL larger, but this is going to be kind of ground zero for this
00:01:56.500 | workshop, this repository. So if you want to follow along with us, going to this URL, gh.io/ai-fair-workshop,
00:02:04.440 | is going to take you to a repository which will show you everything that you need to get is in this
00:02:16.440 | repository. This slide deck is also in that repository, so if there's anything you want from that, that has
00:02:23.320 | been added to that as well. But this is going to be our central resource and where we're going to be
00:02:27.660 | working. I will have this up again a little bit later, but you want to go ahead and either go to
00:02:34.260 | this URL now or use the QR code, that would be great.
00:02:37.380 | All right. So let's just do a little bit of an overview about GitHub Copilot, which is your AI pair programmer.
00:02:48.420 | Okay, so GitHub Copilot is an extension. I mean, it works in multiple places, actually. We're not going to
00:02:56.140 | talk too much about the integration for GitHub Enterprise and some of the things we're doing
00:03:01.260 | on GitHub.com. We're going to primarily be focused on the experience inside your IDE. But this is, you know,
00:03:10.020 | one of the very first coding assistants was introduced in Private Preview in 2021, formally released in 2022.
00:03:17.740 | So we've been at this a while now. And basically, it's going to be using the context that you provided,
00:03:23.420 | and then it's going to synthesize code to match that context. And so using files that you have open, tabs
00:03:29.620 | that you have open in your editor, as well as comments that you're writing, or you can query directly with
00:03:35.820 | GitHub Copilot chat in a chat interface, to get coding suggestions, to, you know, convert comments into code,
00:03:43.140 | so I can make a comment, say, you know, write a function to parse the URL, or to autofill for repetitive code,
00:03:51.260 | if I'm using the same code block, over and over again, in the same pattern, over and over again, Copilot is going to
00:03:56.980 | know how to do that. It can also help streamline creating tests, and show, you know, alternative ways of achieving the same task.
00:04:05.540 | And, as I said, you know, this is your Copilot for an AI-powered software development lifecycle. Like, we're taking place in the
00:04:12.860 | IDE and the terminal. We have support for Visual Studio Code, which is what we're going to be showing off. Visual Studio also has
00:04:19.860 | support for GitHub Copilot, as well as a number of the JetBrains IDEs, and there's also a NeoVim extension, which I learned last
00:04:29.860 | session actually does have some GitHub Copilot chat support, which is cool. And Copilot, beyond that, also can work on GitHub.com, and so if you have an enterprise account and have GitHub Copilot for enterprise, there are different things you can do on GitHub.com to also integrate with
00:04:49.180 | with Copilot to aid in the creation of pull requests and fixing potentially insecure code. And, you know, even we're going to have a session tomorrow with one of our colleagues kind of going from ideation of a kind of an idea of how you want to plan something out to actually implementing that whole plan.
00:05:11.180 | And so, one of the questions that we get a lot is, is Copilot training, you know, the model on my data? And the answer to that is no. There is an option if you want to contribute your code completion stuff into the larger model, but that can be turned off. And by default, that is off for business and enterprise accounts.
00:05:40.180 | And so, how this is working is we are actually just taking the context from the editor, and my colleague Carol can talk a little bit more about how that's working, and kind of getting an idea of what I'm doing. That's going to be sending it to OpenAI's GPT model, and then sending suggestions back. Now, that model itself has been trained on public source code, and that's how that's gotten better. But your code itself is not feeding our
00:06:10.160 | feeding our model. There's an option, as I said, if you wanted to do that, but that is not how it works by design. So some of the, again, some of the answers to the common questions, you know, does it train on my code? No, when you're using it for business or for enterprise, none of your code is stored by GitHub, and even on the individual plans, there's an option to be able to turn that feature off.
00:06:32.160 | Turn that feature off. What is included in the context? So this is going to be the files that you're working on. And so that could be, you know, tabs that are open in your IDE starting from the current file.
00:06:42.160 | And, you know, another question we often get is, you know, can't I just, you know, write the code on my own? Well, yeah, but how often have you ever been in a situation where you have to write the same piece of boilerplate code over and over and over again?
00:06:57.160 | And oftentimes doing the same thing with minor changes. We love to automate ourselves out of jobs, make things easier on us so we can focus on things that we actually enjoy doing more. And this is one of the great things about, I think, AI and about coding assistance like Copilot in general.
00:07:14.160 | So one of the features that we introduced, gosh, I guess it was a year and a half ago now, is GitHub Copilot chat, which basically brings kind of a chat GPT-like experience into your editor.
00:07:29.160 | So you can actually chat directly inside your editor with Copilot, and you can ask questions. You can also ask for specific queries about the code that is in your editor itself.
00:07:39.160 | So you can say -- you can select some code and say, hey, how can I optimize this? How can I make this better? Or write me a unit test for this code. And it can do that.
00:07:48.160 | You can also ask more general queries. It's also great for being able to translate, you know, code from one language to another. Sometimes that actually works really well. You'd be surprised.
00:07:57.160 | And you can also, you know, ask it to propose fixes for bugs and to help make code more secure. And this support for Copilot chat is in VS Code.
00:08:08.160 | Visual Studio, JetBrains, and as we learned recently, yes, NeoVim. How well it works in NeoVim, I don't think all the features are quite there, but it is there.
00:08:21.160 | And one of the things when we talk about -- and we're going to be getting to some demos in just a second -- but one of the things that we talk a lot about when we talk about, you know, coding assistance are prompt crafting.
00:08:31.160 | Because a lot about how well these things work depends on what prompts you're writing and what information you're giving Copilot.
00:08:41.160 | Because, again, it is a Copilot. It is not doing it for you. And so writing good prompts can help get better results. And so some of the ways that we've seen that really improve is by making sure that you have the right amount of context.
00:09:00.160 | This can be really useful, again, like I said, having what tabs you have open, starting with, like, the most recent file, or the central most file, rather, and what other files are open, that can provide Copilot with context about what you're doing.
00:09:16.160 | Also, if you put things in a comment about what you're trying to do, or even in some cases, giving it, you know, an example of code that you want it to replicate or that represents what you're trying to achieve, that can go a long way with helping Copilot understand what you're trying to achieve.
00:09:33.160 | Also, being very clear about what your intent is, and making that clear in your prompt. You know, I want to create a function to parse a URL. This is actually going to be one of the examples in the labs. Being very specific about what purpose you have in mind in that prompt. Being vague can work okay. But the more specific you can be, the better results you're going to get.
00:09:57.160 | Also, focusing on clarity. Being easy to understand. That's going to also help the AI give better results. And being specific. And that means, you know, saying, okay, I don't want it to look like this. I want it to look like this. So, being detailed and precise will also go a long way, getting the most out of Copilot. And the workshop that we have will go through all these different steps. Yes.
00:10:24.160 | Yes. Sure.
00:10:25.160 | Yeah. Can we get the second mic on?
00:10:28.160 | Can we get the second mic on?
00:10:34.160 | Sure.
00:10:35.160 | Sure.
00:10:37.160 | Sure.
00:10:49.160 | Can we get the second mic on?
00:10:53.160 | Okay.
00:10:54.160 | There we go.
00:10:56.160 | So, the question was about the context that we provide to Copilot.
00:11:07.160 | Is there any way to have more control over it?
00:11:10.160 | So, I assume that given the context length, the GitHub does some smart things underneath to kind
00:11:16.160 | make it smaller.
00:11:17.160 | So, obviously, it won't load all of the ten full pages of 2,000 lines of codes.
00:11:26.160 | And sometimes, it will give you subpar results because of that.
00:11:30.160 | Because, obviously, it doesn't know the exact method that I have in mind right now.
00:11:34.160 | So, yeah.
00:11:35.160 | So, yeah.
00:11:36.160 | How about that?
00:11:37.160 | Actually, I'm going to let my colleague Harold answer that question because he has way more
00:11:41.160 | insight into this than I do.
00:11:42.160 | Second, there's also a talk tomorrow, I think, at the booth theater.
00:11:46.160 | We're going to go more into context as well.
00:11:48.160 | Okay.
00:11:49.160 | So, there's an attach button.
00:11:50.160 | Once you open chat, you'll see you can actually reference file specifically.
00:11:54.160 | So, that's one way.
00:11:55.160 | Otherwise, the best way if you have code selected that you want to talk about, Copilot will include
00:12:01.160 | it as long as it fits into the context window.
00:12:03.160 | And that's kind of the best trick to keep in mind.
00:12:07.160 | Just having codes like the same for inline chat as well, if you try that out.
00:12:15.160 | No, it hasn't.
00:12:16.160 | It just came in the last release.
00:12:17.160 | So, it's a sneak preview to tomorrow's show.
00:12:20.160 | But, otherwise, the add workspace, if you try that out, that's in the plan as well.
00:12:25.160 | That will give you a more general overview of your project using kind of rack techniques
00:12:32.160 | and giving context related to the question.
00:12:35.160 | So, the better you ask your question to code patterns that are actually in your code base,
00:12:40.160 | the more it will find.
00:12:41.160 | It will show you.
00:12:42.160 | Always check the references that are in chat to see what context is being used.
00:12:47.160 | So, that's kind of the main tips there.
00:12:49.160 | Yeah.
00:12:50.160 | And there's a question in the back.
00:12:52.160 | Yeah.
00:12:53.160 | So, to follow up on the question that I was just asked, one of the things that I've dealt with
00:12:58.160 | is the same problem where it seems like I don't have the full context being loaded in when I ask questions.
00:13:05.160 | Just a question on sort of best practice.
00:13:07.160 | If I reference a method that exists in another file, is that method still being loaded in in the context?
00:13:14.160 | If I ask the question?
00:13:15.160 | Or do I need to explicitly have that file open in the tab?
00:13:19.160 | Yeah.
00:13:20.160 | You can use the attach button as well.
00:13:22.160 | And we're working on that you can also attach symbols from your code base.
00:13:25.160 | So, that would be also possible.
00:13:26.160 | Yeah.
00:13:27.160 | So, as a best practice then, I always need to bring in the additional context.
00:13:32.160 | Yeah.
00:13:33.160 | It's not smart enough to figure out that I'm .
00:13:36.160 | Not yet.
00:13:37.160 | We're working on that as well.
00:13:38.160 | So, there's definitely more inference coming.
00:13:40.160 | But as that can easily go wrong, given the broad lots of questions people can ask.
00:13:46.160 | So, the more explicit, if you know what you're talking about, just show it to co-pilot just like
00:13:51.160 | you would do with anybody else.
00:13:53.160 | That's at workspace.
00:13:57.160 | Yeah.
00:13:58.160 | So, at workspace is a rack pattern where we look at the whole code base.
00:14:02.160 | Yeah.
00:14:03.160 | Yeah.
00:14:04.160 | Not to think.
00:14:05.160 | Yeah.
00:14:06.160 | Awesome.
00:14:07.160 | Awesome.
00:14:08.160 | Yeah.
00:14:09.160 | And if you continue to have more questions, yeah, please just raise your hands.
00:14:12.160 | Because this is great.
00:14:13.160 | And we have really good people here to answer those questions.
00:14:16.160 | Again, some additional, like, good best practices.
00:14:19.160 | Using good names are going .
00:14:24.160 | We'll refer in a little bit to, we've set up discussions.
00:14:28.160 | Get up good discussions.
00:14:29.160 | And similar question came up this morning.
00:14:32.160 | So, we already have a set of links out there to dive into different resources to learn about
00:14:38.160 | exactly everything that co-pilot pulls in for context.
00:14:42.160 | So, from that, you've got some documentation and references to dig into to figure out in
00:14:50.160 | your situation, your situation, what's going to work best.
00:14:53.160 | Yeah.
00:14:54.160 | And also attend Harold's talk tomorrow, too.
00:14:56.160 | Because that is a plug for you, Harold.
00:14:59.160 | Thank you very much.
00:15:00.160 | But, yeah, just quickly going ahead.
00:15:03.160 | This is linked in the main repo that I linked to before.
00:15:07.160 | This is the discussions tab.
00:15:08.160 | But this also goes directly there.
00:15:10.160 | So, if you want to -- if you have any questions during the workshop or if you want to see some
00:15:14.160 | of the previous questions that were asked before, we've got that stuff there as well.
00:15:19.160 | So, again, just real quickly, some best practices in addition to offering context because that
00:15:26.160 | is an important thing.
00:15:27.160 | Using good names because co-pilot is designed to understand natural language.
00:15:31.160 | So, not being, you know, using overly genericized things, actually giving things names the way
00:15:37.160 | you would actually name a function or class is useful.
00:15:41.160 | Spelling out variable names.
00:15:42.160 | You know, single letter variables and abbreviations can be ambiguous.
00:15:46.160 | So, if you can spell those out and be specific with them, you can get better results.
00:15:50.160 | Keeping functions functional is a good thing, too.
00:15:55.160 | And then the biggest thing, honestly, is being consistent.
00:15:57.160 | So, you know, the generated code is going to follow contextual patterns.
00:16:01.160 | And so, again, to what Harold was mentioning before, if you select some code and you can
00:16:05.160 | offer that as context specifically in addition to attaching code, that new feature that just
00:16:12.160 | are recently shipped, that will help get better code, too.
00:16:17.160 | But, yeah, I mean, good code does beget better code.
00:16:20.160 | And so, one of, I think, the misnomers about a lot of the coding assistance is that it's really
00:16:25.160 | primarily aimed at people who aren't skilled developers.
00:16:29.160 | And that's true that it can help people who don't have a strong development background.
00:16:33.160 | But I think what we found in the last three years is that the people who really get the
00:16:37.160 | most out of this are people who are developers day in and day out and who do work a lot with it
00:16:41.160 | because they are getting the most use cases because they can be the most consistent and are
00:16:48.160 | already, you know, committing, no pun intended, you know, many of the best practices.
00:16:53.160 | Okay.
00:16:54.160 | One of the other things, too, and we're going to go through this because this is actually one of the fun
00:16:57.160 | parts of the workshop is that, you know, if at first you don't succeed, you know, iterate, try and try again.
00:17:02.160 | That can be frustrating sometimes, certainly.
00:17:05.160 | We've all been there where, you know, you get so close to getting something that you want and it's not quite there.
00:17:10.160 | But at the same time, this can be a really great way of learning what sorts of prompts work well and what sort of prompts don't work as well.
00:17:17.160 | And so, for instance, in this image, I'll just describe this, you know, the initial comment said, you know,
00:17:24.160 | write a JavaScript function that finds the maximum value in an array.
00:17:28.160 | And that's pretty broad.
00:17:29.160 | And so what the result is is also fairly broad and generic and might not work for what you're wanting to do.
00:17:37.160 | But the second prompt, by being more specific, by being more intentional, create a JavaScript function,
00:17:43.160 | find max that takes an array and returns the string with the maximum length.
00:17:49.160 | Ensure the function works correctly for arrays that are embedded as well as arrays that contain both strings and numbers.
00:17:57.160 | That's going to give us a much better result.
00:17:59.160 | So these are things that, again, be more specific with your comments either in your code or with your queries to the chat agent.
00:18:06.160 | It can work really well.
00:18:08.160 | And as you find things that work, you know, playing around with things and iterating is the best way of doing that.
00:18:14.160 | Another best practice is providing examples in your prompt to clarify what you want co-pilot to do and what you want it to take into consideration.
00:18:25.160 | So you can, inside that prompt, you can put some sample code and say, hey, consider this example data.
00:18:36.160 | I want it to work correctly for things like this.
00:18:40.160 | That's something that the AI can understand very, very well.
00:18:44.160 | And then, again, keeping files open that are relevant to the requirements of your current file.
00:18:49.160 | This is great.
00:18:50.160 | If you want to call in other things from your broader code base, you can use the @workspace agent.
00:18:54.160 | But keeping those relevant files open, that's going to help as well.
00:19:00.160 | And, again, like there are still going to be limitations by how much context everything can take in.
00:19:06.160 | But this is getting better all the time.
00:19:09.160 | And then, you know, above all else, you know, just go with the flow.
00:19:13.160 | Be open to things sometimes working, sometimes things not working, and experimenting.
00:19:19.160 | Okay.
00:19:20.160 | All this is great.
00:19:21.160 | Got a, you know, quick kind of overview.
00:19:24.160 | When can I write code?
00:19:25.160 | Well, we can start to do that right now.
00:19:27.160 | But the first thing we want to kind of talk through is getting set up.
00:19:31.160 | And so, again, this is going to be our main Ground Zero repo.
00:19:37.160 | So this is gh.io/aifair-workshop.
00:19:43.160 | So if you want to go to that repository now, that would be great.
00:19:50.160 | Now, if you already have GitHub Copilot, if you already have access either on your personal account
00:19:55.160 | or through your company, that's all you're going to need to do.
00:19:58.160 | But if you don't have GitHub Copilot, we do have a coupon code that will give you access.
00:20:05.160 | And that is going to be at this URL.
00:20:11.160 | That is actually linked on the repo.
00:20:14.160 | It's one of the very first things linked in the repo, both as a physical link as well as a QR code.
00:20:19.160 | But if you want to go ahead and scan this QR code, you can activate a coupon.
00:20:24.160 | This will give you a seven-day free trial of GitHub Copilot.
00:20:28.160 | If you run into any problems getting this activated, what we did find last time,
00:20:31.160 | there are a couple of steps after you enter in your information where you will want to go ahead and make sure you click apply.
00:20:40.160 | I think like two or three times.
00:20:44.160 | this is what it looks like.
00:20:45.160 | Basically, you're going to click on apply coupon.
00:20:49.160 | And then there's going to be another prompt to basically say activate GitHub Copilot.
00:20:54.160 | So we'll just give people some time here.
00:21:00.160 | And if you need to see one of the other screens, let me know about that.
00:21:07.160 | And if anybody has any problems getting their coupons redeemed, please feel free to raise your hands and we will send people out to do that.
00:21:13.160 | This is that main repo, by the way.
00:21:23.160 | And you just click on this link, which is in the repo.
00:21:26.160 | This should take you directly to the page.
00:21:30.160 | I already have Copilot, so I don't need to do this.
00:21:32.160 | But where you just need to fill out your information and then you can go from there.
00:21:37.160 | You can click on this link.
00:21:38.160 | This is the link in there.
00:21:38.160 | You can click on this link in there.
00:21:39.160 | You can click on this link in there.
00:21:40.160 | You can click on this link in there.
00:21:41.160 | You can click on this link in there.
00:21:42.160 | You can click on this link in there.
00:21:43.160 | You can click on this link in there.
00:21:44.160 | You can click on this link in there.
00:21:45.160 | You can click on this link in there.
00:21:46.160 | You can click on this link in there.
00:21:47.160 | You can click on this link in there.
00:21:48.160 | You can click on this link in there.
00:21:49.160 | You can click on this link in there.
00:21:50.160 | You can click on this link in there.
00:21:51.160 | You can click on this link in there.
00:21:52.160 | You can click on this link in there.
00:21:53.160 | You can click on this link in there.
00:21:54.160 | You can click on this link in there.
00:21:55.160 | You can click on this link in there.
00:21:56.160 | You can click on this link in there.
00:21:57.160 | You can click on this link in there.
00:21:58.160 | You can click on this link in there.
00:21:59.160 | You can click on this link in there.
00:22:00.160 | You can click on this link in there.
00:22:01.160 | You can click on this link in there.
00:22:02.160 | You can click on this link in there.
00:22:03.160 | You can click on this link in there.
00:22:04.160 | You can click on this link in there.
00:22:05.160 | You can click on this link in there.
00:22:06.160 | You can click on this link in there.
00:22:07.160 | You can click on this link in there.
00:22:08.160 | You can click on this link in there.
00:22:09.160 | You can click on this link in there.
00:22:10.160 | You can click on this link in there.
00:22:11.160 | You can click on this link in there.
00:22:12.160 | You can click on this link in there.
00:22:13.160 | You can click on this link in there.
00:22:14.160 | You can click on this link in there.
00:22:15.160 | You can click on this link in there.
00:22:16.160 | And the next thing you're going to want to do after you've redeemed your coupon, and again,
00:22:39.160 | we'll make sure that we take time if anybody has any issues to get that set up, is in, again,
00:22:46.160 | this copilot hands-on repo, you're going to want to go ahead and fork this repo and make
00:22:51.160 | your own copy so that if you need to make any changes yourself, you can.
00:22:54.160 | But the more important aspect here is that to run this workshop, we are going to use a feature
00:23:01.160 | called the GitHub Codespaces.
00:23:02.160 | Now, I am curious.
00:23:04.160 | How many people in the audience are familiar with GitHub Codespaces?
00:23:08.160 | Way less.
00:23:09.160 | Okay.
00:23:10.160 | Cool.
00:23:11.160 | So GitHub Codespaces are actually pretty awesome.
00:23:13.160 | Think about it as a virtual cloud environment.
00:23:16.160 | So, basically, it is a pre-configured VM in the cloud that is set up specifically to have
00:23:23.160 | certain features that you've defined in your repository.
00:23:27.160 | So, there is a devcontainer.json file, which is basically kind of like a fancy Docker file,
00:23:34.160 | which will outline these are going to be the various dependencies and versions of different
00:23:40.160 | things that we have installed specific to this repository.
00:23:43.160 | You can also designate what extensions in Visual Studio Code you want to have installed because
00:23:48.160 | we are going to be running that either in a web browser instance or you can open it up in
00:23:53.160 | the VS Code client as well.
00:23:56.160 | It also works with JetBrains, doesn't it?
00:23:59.160 | I believe.
00:24:00.160 | Yeah.
00:24:01.160 | But we are going to be using VS Code today.
00:24:03.160 | And this is just a really great way of not having to bother with the process of setting up your
00:24:09.160 | environment.
00:24:10.160 | It instead can be configured exactly as it is in the repo rules.
00:24:14.160 | So, in this case, I have already forked my repo.
00:24:20.160 | So, to get started, you want to just fork your own copy of the repository.
00:24:26.160 | I have already done this.
00:24:28.160 | I am not going to do this a second time, but I could.
00:24:32.160 | And just go ahead and create fork.
00:24:36.160 | And once you have done that, what we are going to do is click on this code button here.
00:24:46.160 | And there is a drop down menu.
00:24:48.160 | And you will probably by default see local options.
00:24:51.160 | We are not going to do that.
00:24:52.160 | If you wanted to do this locally, you could.
00:24:54.160 | But it is actually going to be faster and a little bit easier with Codespaces.
00:24:59.160 | Go ahead and click on create Codespace on main.
00:25:03.160 | And what this is going to do, this is going to take a few minutes.
00:25:05.160 | This is going to create a -- my case is wanting to open it in Visual Studio Code.
00:25:11.160 | I will actually fake that.
00:25:14.160 | Because it is my editor preferences usually.
00:25:18.160 | What it is going to do is it is going to spin up a VM.
00:25:22.160 | You could, in another instance, Dave was talking about this before.
00:25:26.160 | And we could do a longer and different talk about how you could configure your Codespace
00:25:31.160 | to have more cores and more RAM and be faster.
00:25:35.160 | But for the purpose of this demo, just the default is just fine.
00:25:38.160 | Also, with every GitHub account, you get a certain amount of free Codespace minutes.
00:25:42.160 | So that works great for us in these purposes too.
00:25:45.160 | And what this is doing right now is this is basically Visual Studio Code but in the browser.
00:25:50.160 | And so this is now spun up a browser instance of VS Code.
00:25:56.160 | And it is setting up a remote connection.
00:25:59.160 | And it is now building out this Codespace.
00:26:01.160 | So it is installing all the various dependencies as defined in this dev container file.
00:26:08.160 | And it is getting them ready to run.
00:26:14.160 | So just for anybody who might be curious, because we will actually look at this a little bit later.
00:26:19.160 | But this is what that dev container file looks like.
00:26:21.160 | And this is just a JSON file.
00:26:23.160 | And you can see basically that it is installing -- has certain settings set up for VS Code,
00:26:31.160 | including extensions for, you know, a code spell checker, the GitHub style markdown preview,
00:26:39.160 | GitHub copilot chat and GitHub copilot, as well as using an image from -- a Docker image that had --
00:26:50.160 | it is configured for Python 3.11.
00:26:54.160 | So this is now what the Codespace looks like.
00:26:59.160 | And so this is going to show how these things work.
00:27:02.160 | And what is interesting is it is going ahead and -- it is installing these extensions.
00:27:05.160 | And if I click on these extensions, you can see that right now nothing is installed.
00:27:11.160 | But in a couple of minutes, or hopefully moments, we will start to see our copilot stuff come in,
00:27:19.160 | as well as our files.
00:27:20.160 | Yeah, here we go.
00:27:21.160 | So now it is going ahead and -- it is installing all of these extensions that we have access to.
00:27:26.160 | If you wanted to open this up in a local instance of VS Code, you could do that.
00:27:30.160 | You would need to go ahead and manually install some of those extensions.
00:27:33.160 | That is the nice thing about doing it in the browser.
00:27:37.160 | And these are all the files that are from our repository.
00:27:40.160 | So this is basically identical to what we were looking at before.
00:27:45.160 | And actually, one thing you might want to do is -- in that main repository that we've been kind of focused on,
00:27:59.160 | at the very bottom, there is a labs document that says a copilot hands-on lab.
00:28:04.160 | This is a great tip that Dave had, and it's in the documentation.
00:28:08.160 | But I'm going to go ahead and do this here, too.
00:28:10.160 | If you want to open that up in its own tab in your browser, and then maybe put it in its own window, like so.
00:28:17.160 | Using, you know, whatever window manager you use -- I'm on a Mac, so window management sucks.
00:28:24.160 | If you want to tile it off to the left hand side of your screen, and you can make it bigger or smaller.
00:28:33.160 | Having this visible throughout the entire lab will be really, really good.
00:28:38.160 | So that's one pro tip here.
00:28:41.160 | So that's one pro tip here.
00:28:43.160 | So that's one pro tip here.
00:28:44.160 | So that's one pro tip here.
00:28:45.160 | So that's one pro tip here.
00:28:46.160 | So that's one pro tip here.
00:28:47.160 | So that's one pro tip here.
00:28:48.160 | So that's one pro tip here.
00:28:49.160 | So that's one pro tip here.
00:28:50.160 | And that's one pro tip here.
00:28:51.160 | So that's one pro tip here.
00:28:52.160 | So that's one pro tip here.
00:28:53.160 | So that's one pro tip here.
00:28:54.160 | So that's one pro tip here.
00:28:55.160 | So that's one pro tip here.
00:28:56.160 | So that's one pro tip here.
00:28:57.160 | So that's one pro tip here.
00:28:58.160 | So that's one pro tip here.
00:28:59.160 | So that's two pro tip here.
00:29:00.160 | So that's one pro tip here.
00:29:02.160 | So that's one pro tip here.
00:29:03.160 | Did I lose?
00:29:04.160 | Again, I'm on a Mac, so window management sucks.
00:29:22.160 | I know, right?
00:29:23.160 | I know.
00:29:24.160 | We're finally going to get some tiling management.
00:29:26.160 | Hopefully.
00:29:27.160 | It's ridiculous.
00:29:28.160 | Okay.
00:29:29.160 | And then there's this.
00:29:30.160 | Here we go.
00:29:31.160 | Great.
00:29:32.160 | Okay.
00:29:33.160 | So I've now got these things configured that I have.
00:29:36.160 | This is my code space.
00:29:38.160 | And then this is my hands on lab.
00:29:41.160 | And at this point, on the bottom lower corner of your code space is this copilot icon.
00:29:50.160 | And you can see that the status is ready.
00:29:52.160 | And that copilot chat has been enabled.
00:29:55.160 | Now, the chat window is here.
00:29:58.160 | This is the chat window.
00:30:00.160 | And in this way, I can either talk directly to the code base.
00:30:05.160 | I can also use, there's an agent's feature where I can talk directly to, for instance,
00:30:11.160 | I can, if I have a GitHub Enterprise account, I can use @Github.
00:30:15.160 | And I can ask questions about my GitHub account.
00:30:18.160 | These are primarily enterprise-related features.
00:30:20.160 | @Terminal is great.
00:30:21.160 | This will show you how to do things in your terminal.
00:30:24.160 | It's really, really good for FFMPEG commands and other things that you don't want to memorize.
00:30:29.160 | And @VSCode will ask you questions in general about VS code.
00:30:33.160 | It's also a really good way of kind of managing settings.
00:30:35.160 | And then @Workspace, this is going to be asking questions in general about the workspace that we have open.
00:30:41.160 | So if you wanted to ask a more general question or continue to add context from what you're working on,
00:30:47.160 | that's an agent that you can use using the chat extension.
00:30:50.160 | I'm just going to put this back on screen for a minute.
00:31:05.160 | These are the main links and resources.
00:31:10.160 | So the first thing is the co-pilot coupon.
00:31:12.160 | Then we have the main repo where everything is taking place.
00:31:15.160 | And then we have the labs readme.
00:31:17.160 | So these are kind of the main three things that we're working on.
00:31:21.160 | And if anybody has any problems getting access to anything,
00:31:24.160 | again, please raise your hand and we will do our best to assist you.
00:31:27.160 | So we're going to do a little bit more.
00:31:28.160 | So we're going to do a little bit more.
00:31:29.160 | So we're going to do a little bit more.
00:31:30.160 | So we're going to do a little bit more.
00:31:31.160 | So we're going to do a little bit more.
00:31:32.160 | So we're going to do a little bit more.
00:31:33.160 | So we're going to do a little bit more.
00:31:34.160 | So we're going to do a little bit more.
00:31:35.160 | So we're going to do a little bit more.
00:31:36.160 | So we're going to do a little bit more.
00:31:37.160 | So we're going to do a little bit more.
00:31:38.160 | So we're going to do a little bit more.
00:31:39.160 | So we're going to do a little bit more.
00:31:40.160 | So we're going to do a little bit more.
00:31:41.160 | So we're going to do a little bit more.
00:31:42.160 | So we're going to do a little bit more.
00:31:43.160 | So we're going to do a little bit more.
00:32:07.160 | Oh, yes.
00:32:11.160 | Sure.
00:32:12.160 | So we're going to do a little bit more.
00:32:41.160 | Do you know, Harold, what's the shortcut on Mac OS
00:32:46.160 | to see the multiple, the various code suggestions?
00:32:50.160 | Yeah, I think that's not working for you.
00:32:53.160 | I think that's not working for you.
00:33:05.160 | All right.
00:33:06.160 | All right.
00:33:06.160 | All right.
00:33:07.160 | I lost connection to my code space.
00:33:24.160 | because the demo gods are with me today.
00:33:39.160 | So this is reloading things.
00:33:40.160 | That's okay.
00:33:41.160 | That's the one pratfall of using the cloud code environments.
00:33:46.160 | Sometimes they can run afoul.
00:33:48.160 | But in general, they work pretty well.
00:33:50.160 | So again, I've got my labs hands-on stuff here.
00:33:55.160 | And we can just, once you've got this set up, we can go through the first lab.
00:34:00.160 | And this is a fairly basic one.
00:34:04.160 | So if this is something that you are still setting up, don't worry about that.
00:34:08.160 | So the first thing that we're going to be doing is creating a new file.
00:34:14.160 | In this case, an index.js file.
00:34:17.160 | So yes, we are using JavaScript in this example.
00:34:21.160 | Don't be afraid.
00:34:24.160 | All right.
00:34:25.160 | Now, you will notice that it says I can press, in my case, Command-I.
00:34:31.160 | And I think that it's Control-I on Windows, where I can ask Copilot for something.
00:34:37.160 | Or I can type a slash command.
00:34:39.160 | Now, these slash commands are ways that you can basically, I guess, simplify certain operations with Copilot.
00:34:46.160 | So for instance, doing slash doc will add a documentation comment around a symbol.
00:34:52.160 | So that you can have a notice to go back and document your code more.
00:34:56.160 | Slash explain is actually really great.
00:34:58.160 | This is going to explain how your code in the active editor works.
00:35:02.160 | And it's pretty good.
00:35:03.160 | There are some hallucinations, as there are with all LLMs.
00:35:06.160 | But it's pretty good.
00:35:08.160 | And it's improved quite a lot, even in just the last few months.
00:35:11.160 | That's one thing that I didn't mention earlier.
00:35:13.160 | We are updating our Copilot model fairly frequently.
00:35:19.160 | And we're rebasing on the various versions of GPT that come out from OpenAI all the time.
00:35:28.160 | But we are also then fine-tuning on top of that.
00:35:31.160 | And so the Copilot that, if you first tried GitHub Copilot a year ago, you're going to get a different experience now.
00:35:39.160 | Not just from the tooling perspective, but also in terms of the results.
00:35:43.160 | Because the models are getting better all the time.
00:35:45.160 | And we're actively committed to improving those models all the time.
00:35:49.160 | Slash fix will help you propose a fix if there's a problem in your code.
00:35:55.160 | A fix test failure will propose a fix for a failing test.
00:36:00.160 | Because writing tests is one of the best things of using a coding assistant.
00:36:04.160 | And then again, slash tests will help you generate unit tests for your selected code block.
00:36:10.160 | So those are those options right there.
00:36:14.160 | All right.
00:36:15.160 | I've created this index.js file that I've got open.
00:36:20.160 | Now, I just need to add a comment in my code.
00:36:38.160 | If I can spell correctly with one hand.
00:36:41.160 | And if I can spell function correctly, that would be even better.
00:36:44.160 | Although you will notice that it actually picks up on typos fairly well.
00:36:48.160 | Okay.
00:36:49.160 | So, I have this by hitting enter.
00:36:54.160 | The first thing that it's giving me is something pretty minor.
00:37:02.160 | And it is very similar to what our example says.
00:37:06.160 | Now, I can hit tab and I can accept this.
00:37:09.160 | And this, by the way, this text right here.
00:37:12.160 | Let's see if I can zoom in on this more.
00:37:15.160 | No, it is not letting me zoom while I'm in full screen.
00:37:22.160 | Great.
00:37:23.160 | Love you, Apple.
00:37:24.160 | Okay.
00:37:25.160 | When you see this gray text here, this is what's known as ghost text.
00:37:32.160 | And this is something that Harold can actually talk more about.
00:37:36.160 | If you want to maybe explain the different types of text and whatnot that people see when they're using co-pilot.
00:37:43.160 | Yeah.
00:37:44.160 | So, I think, yeah.
00:37:45.160 | We start with completions.
00:37:47.160 | And that's the, in the flow, you don't even think about it mode of co-pilot.
00:37:52.160 | It always works.
00:37:53.160 | And when you get really used to it, you kind of ignore it when you're in the flow, when you're coding, when you know what you want.
00:37:59.160 | And then once you want co-pilot to kick in, you just wait a bit.
00:38:03.160 | It kicks in.
00:38:04.160 | You might even try different suggestions.
00:38:06.160 | You kind of flip through.
00:38:07.160 | Maybe you accept it word by word.
00:38:09.160 | And let's see what, how else it continues.
00:38:11.160 | But it's really, you don't even think about it.
00:38:13.160 | And you notice that when you sit in the airplane and you stare at your screen for a minute, that you're in airplane mode and co-pilot doesn't give you anything.
00:38:20.160 | So, that's when you know you build a habit.
00:38:23.160 | Then the other one is further next.
00:38:25.160 | It's inline chat.
00:38:26.160 | And that's where you, you can open up a little natural language input over your code.
00:38:31.160 | And that's where you can apply AI directly to your code.
00:38:35.160 | And that's, in chat with you, you keep kind of having long winded conversations about code.
00:38:39.160 | And that's where inline chat is much more powerful in giving your way, quickly iterate on code to generate and edit both code.
00:38:47.160 | And then lastly, chat panel is kind of the OG idea of ChatGPT in your VS code.
00:38:53.160 | And editor chatting with context, being more in the exploration mode where you want to have conversations.
00:38:59.160 | Where you want to treat it like an actual AI pair programmer, which can challenge you, which can critique your code.
00:39:06.160 | Where you can go a little bit more back and forth and explore a solution.
00:39:10.160 | So, these are kind of the three modes and when you want to use them.
00:39:13.160 | Thank you, Harold. You're the best.
00:39:16.160 | Thank you.
00:39:17.160 | I was just curious to know if there is a difference, you know, between the ghost text that generated here.
00:39:32.160 | So, just doing it, you know, inline in the editor.
00:39:34.160 | Versus if I was to have that function and then use the control I to say, write me the rest of this function.
00:39:40.160 | Like, is there a difference in how the context being provided to the underlying model?
00:39:43.160 | Is there any, like, reason we should use comments to get it to generate versus control I or chat in terms of context?
00:39:49.160 | Yeah.
00:39:50.160 | My personal take is you will see when code was generated with copilot ghost text because it has all these not very purposeful comments written in that very much describe the code below.
00:40:01.160 | Which are not typical code comments.
00:40:02.160 | You want to describe your reasoning and your thinking behind it, but that's not how you prompt craft with get a copilot.
00:40:08.160 | So, inline chat allows you to pull that prompt crafting into the inline chat and just get the code out and be more specific and elaborate in how you can describe it in that inline chat prompt.
00:40:20.160 | So, you're less iterating on the comment, but you iterate in a natural language input, which is sometimes more intuitive.
00:40:27.160 | So, you will find if you like writing long-winded comments and tweak on the comments and then hit enter again and see what copilot provides, that's basically a much faster, more direct flow with inline chat.
00:40:38.160 | Yeah, that makes a heap of sense from a user experience perspective.
00:40:42.160 | Just also keen to understand, is there a difference in terms of how that has been provided to the model between the two different ways of doing it?
00:40:48.160 | Yeah, definitely.
00:40:50.160 | The chat, the ghost text is more grounded in the neighboring tabs.
00:40:53.160 | It has a much smaller context window because it needs to write it much quicker.
00:40:56.160 | And then inline chat has way more freedom to include other context dependency documentation.
00:41:02.160 | So, depending on which commands you're executing, it will do more work upfront to get context and more context.
00:41:09.160 | Awesome, thank you.
00:41:10.160 | Yeah.
00:41:11.160 | And there's a question in the back.
00:41:13.160 | Okay.
00:41:14.160 | Fantastic.
00:41:15.160 | Awesome.
00:41:16.160 | Okay.
00:41:17.160 | And actually, just to show you here, there are these sparkles that come up where you will
00:41:28.160 | see certain things.
00:41:29.160 | And you can actually choose options to fix using copilot or explain using copilot.
00:41:34.160 | In this place, I'm just going to show explaining.
00:41:37.160 | And this is just going to say, okay, this is the reference it's using.
00:41:41.160 | And this is just giving me an explanation of the non-existent code that we basically have already
00:41:52.160 | created at this point.
00:41:53.160 | So, going further through the lab, this is what it's going to generate now.
00:42:02.160 | Now, when you do create -- when you do get your code suggestion, if you are not happy with what
00:42:13.160 | that you're getting, there is -- you will sometimes be able to get other options for other code
00:42:26.160 | suggestions.
00:42:27.160 | But just kind of going through this -- let me go on.
00:42:40.160 | Okay.
00:42:41.160 | So, when I press control, enter, and it is control on both Mac and Windows, this is going to give
00:42:46.160 | me a list of suggestions here.
00:42:49.160 | And so, I have seven -- I have -- wow -- eight different suggestions that all could be very,
00:42:56.160 | very different.
00:42:57.160 | Because, again, I gave it a really, really generic prompt.
00:43:00.160 | Which goes to one of our first lessons.
00:43:02.160 | We were kind of talking about be specific.
00:43:04.160 | Be specific with what you want to achieve.
00:43:07.160 | Because I have eight different suggestions that all vary in what they're wanting to do.
00:43:11.160 | But this is one way that you can actually choose different suggestions.
00:43:15.160 | So, in this case, if I wanted to accept one of these suggestions, I could do that.
00:43:18.160 | And it's going to put those lines in place.
00:43:21.160 | Now, we are going to go ahead and not accept any of these.
00:43:32.160 | Instead, what I'm going to do is I'm going to --
00:43:35.160 | -- sorry.
00:43:53.160 | Typing with one hand is difficult.
00:44:00.160 | And you can see the ghost text coming up as I'm typing things out.
00:44:04.160 | So, it's actually going ahead and putting further things here.
00:44:07.160 | I don't actually want all of this.
00:44:09.160 | But I can just have this aspect here.
00:44:12.160 | And this is going to go ahead and potentially complete this code for me.
00:44:18.160 | And if I wanted to select that, I just press the tab key.
00:44:21.160 | And that's where this will come.
00:44:23.160 | And so, basically, this is just our first lab.
00:44:26.160 | This is just going through how this works.
00:44:29.160 | Harold, if you wanted to come up again and just go through lab two, which I think I already showed off the bulk of it.
00:44:38.160 | But this might be useful for the folks.
00:44:41.160 | Okay.
00:44:42.160 | Harold, I did adjust it.
00:44:44.160 | So, it should work.
00:44:45.160 | Okay.
00:44:46.160 | That's not my point.
00:44:47.160 | Good.
00:44:48.160 | Let's go.
00:44:49.160 | Lab two.
00:44:50.160 | So, I think I showed it before.
00:44:55.160 | So, once you're in ghost text mode, one good way I just showed over here is to hover the ghost text.
00:45:02.160 | Everybody, make some ghost text and hover it.
00:45:07.160 | That little widget gives you the right keyboard shortcuts and a little three-dot menu on the end.
00:45:15.160 | I'm going to demo it here.
00:45:18.160 | This is what you're showing.
00:45:20.160 | How are you talking?
00:45:21.160 | I wish I had larger hands.
00:45:27.160 | Okay.
00:45:28.160 | So, the classic is single line completions.
00:45:34.160 | And this, especially in function buddies, copilot will go into multi-line, which are easier to hover to.
00:45:41.160 | In the top right, you now see the little widget which has one slash three and an accept and accept word.
00:45:49.160 | So, remember the accept word shortcut.
00:45:51.160 | That's a good keyboard shortcut to impress into your brain.
00:45:55.160 | Because that lets you get out of this mode where you have to accept the whole function buddy that copilot hallucinated for you.
00:46:04.160 | But start with the initial one that has the highest confidence.
00:46:07.160 | Like, yeah, that's the part I want.
00:46:10.160 | And then the rest I can work out with copilot and fill in the rest as I figure out what I actually want.
00:46:15.160 | But that's one way.
00:46:17.160 | So, hitting the command next, the command right.
00:46:21.160 | That's one way.
00:46:22.160 | If you want to do the full line, there's also...
00:46:26.160 | Come on.
00:46:27.160 | What is this?
00:46:30.160 | What is this?
00:46:31.160 | Why is this so far away?
00:46:32.160 | Okay.
00:46:33.160 | So, accept line is also here.
00:46:35.160 | If you want to apply a shortcut to that, it's VS code, so go ahead.
00:46:40.160 | And then, but the other one is the open completions panel, which gives you this idea of more suggestions.
00:46:46.160 | So, especially in multi-line, there's a lot more freedom for the AI to explore how it could solve this problem that it thinks you're having.
00:46:56.160 | So, these are usually a good way to understand your options.
00:47:00.160 | And, there's nothing else missing.
00:47:04.160 | Then we have Inland Chat.
00:47:07.160 | So, the other way you can now solve this, I can just take this out.
00:47:12.160 | So, let's do a, just delete this and then write, that's where I mentioned the panel, Inland Chat versus Panel Chat.
00:47:24.160 | Write a URL parser function.
00:47:31.160 | And, that's the mode where Inland Chat is used to generate code.
00:47:34.160 | Now, you don't start with a function body.
00:47:36.160 | You just give it an idea of what you want to get out of it.
00:47:39.160 | And, you just get a function that will parse the thing.
00:47:44.160 | And, actually, I did this before with Copilot completions and it got to the same conclusion.
00:47:48.160 | So, you see how you can get to the same end result with different paths.
00:47:54.160 | I could also give feedback now.
00:47:56.160 | Maybe this way, oh, it generated an A element.
00:47:58.160 | Maybe I want to use a library for that.
00:48:00.160 | So, make sure you use that follow-up field to tweak it.
00:48:04.160 | Don't just accept the first suggestion as with all AIs.
00:48:08.160 | They can get things wrong.
00:48:10.160 | So, make sure you keep iterating.
00:48:13.160 | And then, function-wise, now when I accept this, maybe I make a mistake.
00:48:19.160 | Classic mistake.
00:48:24.160 | Just typing.
00:48:25.160 | Parse.
00:48:26.160 | So, you can go every time if you have a linting error.
00:48:34.160 | And, those can come from extensions.
00:48:36.160 | Those are not just built-in VS code things.
00:48:38.160 | If you have X, for example, you also can get accessibility squiggles.
00:48:43.160 | You can go into quick fix.
00:48:45.160 | And, now, you can see...
00:48:47.160 | Actually, for this one, not because it's a code spell one.
00:48:53.160 | There's not too much linting stuff in this project.
00:48:57.160 | I only get code spell errors.
00:48:59.160 | Okay.
00:49:00.160 | Let's show you the other way.
00:49:02.160 | If you have code you want to fix, you can do the thing I just showed you in the hover.
00:49:07.160 | Or, you can just do right click.
00:49:10.160 | How do you right click here?
00:49:14.160 | Let's see.
00:49:16.160 | Okay.
00:49:17.160 | You can go into here and then modify using co-pilot.
00:49:21.160 | And, that's where you also open the inline chat and just hit fix.
00:49:24.160 | And, if I actually do insert the mistake, which I haven't got to have with parses, it will find it.
00:49:32.160 | Fix will automatically look at error messages.
00:49:34.160 | It will look at potential issues with the code.
00:49:36.160 | And, it's generally prompted to fix any other issues it finds.
00:49:41.160 | So, in this case, even though it wasn't a general actual issue, it found that parses is misspelled.
00:49:48.160 | And, it gives me the change.
00:49:50.160 | If you want to see a better view in inline chat to see the change, you can also toggle changes down here.
00:49:55.160 | And, see the actual line versus line comparison.
00:49:58.160 | This is just optimized right now for space.
00:50:01.160 | That's what makes inline chat very compact and easy to use in all kind of window setups.
00:50:08.160 | So, accept this.
00:50:09.160 | And, that's the quickest way to get rid of squiggle lines with AI.
00:50:14.160 | I think this concludes lab two.
00:50:19.160 | Should I just move on?
00:50:23.160 | Should I just move on?
00:50:24.160 | Okay.
00:50:37.160 | Going with lab three is explain.
00:50:42.160 | Again, same thing.
00:50:43.160 | Just open inline chat and do slash explain.
00:50:48.160 | So, it's one of the many commands we provide.
00:50:51.160 | Oftentimes, with AI, you end up in a very prompt, heavy flow where you keep describing the same thing.
00:50:58.160 | Please explain this code to me or please explain what this code does.
00:51:02.160 | So, these shortcuts allow you to not be overly prescriptive for very common tasks like fixing bugs and explaining code.
00:51:11.160 | So, slash explain in this case will not just look at the current code, but will also look at the dependencies you're using.
00:51:17.160 | The symbol definitions, the type definitions, the documentation, and all hand is all over to VS Code and Copile Chat to make the best sense of it.
00:51:26.160 | In this case, now we're using this tiny view to just give you an overview of the code and how it works.
00:51:32.160 | Like, how do I get a URL out of a link element in this case?
00:51:38.160 | But you can also now open this up in the chat panel on the left to give it some more breathing room and make it easier to read.
00:51:45.160 | What's important?
00:51:47.160 | All these answers are also linked nicely.
00:51:50.160 | So, we do a lot of effort in making this code in any explanations really shine and easy to interact with.
00:51:56.160 | So, you can easily navigate and click around in these answers as well.
00:52:01.160 | That's a recent improvement that landed.
00:52:03.160 | If you actually generate code in the side panel, it will also have linked elements and have IntelliSense and you get all the benefits of getting really readable code.
00:52:13.160 | There's explanations.
00:52:18.160 | If you want to have a custom explanation though, you can still do that.
00:52:23.160 | So, if you want to have a command I slash explain classic prompting like I am five.
00:52:35.160 | It's not really doing the five thing.
00:52:44.160 | I'm a very smart five-year-old.
00:52:45.160 | So, you can also like, yes, if you want to, yes, I can do it.
00:52:57.160 | If you want to actually switch that, if you look for co-pilot settings, switch it to different languages, you can actually switch the language of co-pilot.
00:53:07.160 | So, the local, if you go into your settings in VS Code, there's a local override locale and you can switch it to different locales.
00:53:16.160 | So, by default, co-pilot will be using a language that you pick it in.
00:53:22.160 | So, you can mix up languages.
00:53:23.160 | My original language is German.
00:53:25.160 | I also speak Spanish and French.
00:53:27.160 | So, when I don't know a word when I speak to my wife, we just switch languages.
00:53:32.160 | Co-pilot will be as well understanding you if you just high level describe it.
00:53:38.160 | So, in some cases, it's good, like, later on, we'll show you at workspace.
00:53:43.160 | It's good to be hitting the right words of concepts that you expect in your code base.
00:53:48.160 | So, if you know the word, make sure if you know reference, be specific.
00:53:52.160 | But, otherwise, it's interesting also to be vague and add some ambiguity to let co-pilot figure out and give you some ideas on how you can solve a problem.
00:54:01.160 | Okay, so, this should get you through the inline chat parts and into the chat panel, which we already went to.
00:54:16.160 | Okay, chat panel is trick number one.
00:54:19.160 | Remember this button up here to open a new chat.
00:54:23.160 | The same shortcut is for clearing a terminal.
00:54:28.160 | So, it's control L.
00:54:31.160 | Very important.
00:54:32.160 | Very fun.
00:54:34.160 | Quick way to start a new conversation.
00:54:37.160 | Yeah.
00:54:39.160 | Because co-pilot will look at your history every time you answer.
00:54:43.160 | Just like in chat GPT or in beginnings of Bing search AI, where it fell in love with reporters after 50 back and forth conversation was stuck in a very romantic mode.
00:54:54.160 | But, co-pilot can also get stuck on concepts and anything you talked, discussed before.
00:55:00.160 | So, if you start a new conversation, reflect that by actually opening a new chat.
00:55:06.160 | You can still switch back and forth in the history, but make sure you begin new conversations actually in a new conversation.
00:55:14.160 | Inline chat does not have history right now.
00:55:27.160 | It has, remember that you can, just close this, you can go up and down to get to old history items.
00:55:38.160 | So, use that.
00:55:39.160 | But, I thought we do store these in history now.
00:55:43.160 | So, I have to get back to you on that.
00:55:45.160 | I know they end up somewhere.
00:55:47.160 | But, it's all locally kept.
00:55:48.160 | So, none of these things are synchronized to GitHub.
00:55:51.160 | It's all just kept in a place where VS Code keeps its data.
00:55:55.160 | It's in your local profile, not anywhere online.
00:55:58.160 | So, a quick trick here, if you want to see everything that co-pilot can do, it's slash help.
00:56:06.160 | And, that's providing you, anytime you forget which commands and what they do, and why there's so many, that's the best way.
00:56:14.160 | So, that's giving you all, like, learning commands for common things like slash fix, slash explain.
00:56:21.160 | Play around with the more edge casey ones like slash new, which allows you to bootstrap a whole new project.
00:56:27.160 | But, it's also the context variables.
00:56:29.160 | But, all of these are also auto-completed.
00:56:31.160 | As soon as you hit slash or hash, you will see those as well as you play around.
00:56:37.160 | Oh, he stepped out.
00:56:48.160 | There was a question about how to use the new notebook command there.
00:56:53.160 | And, so, in the discussions on the DevOps 30 version of the repo, I added a little discussion that says, "How do you use that command?"
00:57:03.160 | And, it points to, you have to feed it some more context.
00:57:06.160 | I'm not a Jupyter Notebooks guy, but it's like, you know, using this data set, I want to generate this kind of a thing or whatever.
00:57:13.160 | So, yeah, some of those commands, you'll have to get a little bit familiar with exactly how to follow up that command.
00:57:21.160 | What do you need to feed it?
00:57:22.160 | Yeah.
00:57:23.160 | And, things like that.
00:57:24.160 | So, they can be very powerful once you know how to use them.
00:57:26.160 | Yeah.
00:57:27.160 | Who's using notebooks in VS Code?
00:57:29.160 | Awesome.
00:57:30.160 | Yeah.
00:57:31.160 | It's definitely, if you do data science and not using notebooks, it's a great place to move from data analysis to actually writing code and shipping it.
00:57:44.160 | So, and I use it tomorrow in my demo as well.
00:57:47.160 | Unintended.
00:57:48.160 | Product placement here.
00:57:52.160 | Generate tests.
00:57:53.160 | I think nothing more to add here.
00:57:55.160 | Just play around with it.
00:57:56.160 | It's a great way.
00:57:57.160 | Again, it shows off ghost tags and slash tests.
00:58:00.160 | If you use InlandShed, for example, another case where InlandShed does a bit more work, it actually tries to detect which testing framework you're using, which folder they should go in.
00:58:11.160 | But it also, if you use ghost tags and you have the file open implementation that you're trying to test and you just start writing tests, it also gives you this magical experience of just understanding the implementation and writing tests for it.
00:58:26.160 | So, depending on which flow you like most, those are interesting places to explore it.
00:58:32.160 | So, heck away and ask questions.
00:58:33.160 | Yeah, hit the button.
00:58:34.160 | I was just going to say at this point, you can just kind of go through the labs and play around.
00:58:38.160 | And if you have any questions, raise your hand.
00:58:40.160 | Also, use the discussions.
00:58:41.160 | Let me go back to that slide.
00:58:43.160 | Thank you so much, Harold.
00:58:45.160 | Go back to the slide where all the links are.
00:58:50.160 | We'll be happy to help you out.
00:58:54.160 | Please continue working on your labs if you want to do that.
00:58:57.160 | But I just wanted to throw this out there.
00:58:59.160 | If anybody has any kind of general co-pilot questions that you want to ask us, especially Harold, frankly, because he actually works on the VS Code team and works on a lot of this stuff, this is a great opportunity.
00:59:12.160 | So, if anybody has any questions out there, we'd love to see if we can answer them.
00:59:19.160 | So, the question was, what model are we using?
00:59:32.160 | That's my favorite question.
00:59:35.160 | That's my favorite question.
00:59:36.160 | I just closed the issue on GPT-4 Turbo.
00:59:38.160 | It's no public announcement.
00:59:40.160 | But I closed the issue on GPT-4 Turbo.
00:59:43.160 | It's rolled out.
00:59:44.160 | So, you can ask, actually, in the chat panel, you can ask it which model it's using.
00:59:48.160 | And if you're on the latest version, if not, I'll find you.
00:59:53.160 | It will say GPT-4 Turbo.
00:59:55.160 | Because I prompted it so.
00:59:58.160 | If you tell GPT-4 Turbo it's using 4 Turbo.
01:00:01.160 | If you tell it used GPT-5, it will also tell you that it's using GPT-5.
01:00:08.160 | So, we rolled out four O's and it works as well.
01:00:14.160 | Inline chat is still 3.5 because 4 is too slow so far.
01:00:23.160 | So, that's interesting.
01:00:24.160 | Maybe talk more about that.
01:00:26.160 | So, even Turbo, even though you just closed the issue on Turbo,
01:00:30.160 | 4 is still too slow for inline chat.
01:00:33.160 | Yeah.
01:00:34.160 | So, we're constantly running this multi-model flow.
01:00:37.160 | Especially because we want to always balance the performance developer experience
01:00:42.160 | where it can stay in the flow.
01:00:43.160 | And that's why, for completions, we're using 3.5, a very small context window
01:00:48.160 | to stay under these 250 milliseconds instant ghost text popping up for most users.
01:00:55.160 | So, on average.
01:00:56.160 | And then, for inline chat, 3.5, when we ran experiments, when we ran offline evals,
01:01:03.160 | and the whole systems we have in place to constantly assess new models, we actually noticed that there's
01:01:08.160 | only a slight lift in quality and only in some languages for inline chat going to GPT-4.
01:01:14.160 | But then, when we ran an experiment, a lot of people churned out because the time-to-first token is still a lot slower.
01:01:20.160 | So, we're always taking this approach of balancing this performance and quality aspect and what provides the best experience in the right job.
01:01:30.160 | So, that's why, yeah. So, every panel chat question you ask, right now, did get GPT-4.
01:01:37.160 | Now, it gets GPT-4 Turbo.
01:01:39.160 | And inline chat, just for that performance aspect, still uses 3.5.
01:01:43.160 | Very cool.
01:01:44.160 | All right. Now, when is GPT-4 coming?
01:01:47.160 | It's coming.
01:01:48.160 | It's coming.
01:01:49.160 | I had to ask.
01:01:50.160 | Follow the issue. I'll close it.
01:01:54.160 | With all of the work that's being done by Microsoft, and many others besides, with small models like PHY-3, et cetera,
01:02:03.160 | are you looking at testing those and implementing them?
01:02:06.160 | Yes, we're testing those.
01:02:08.160 | Yeah.
01:02:09.160 | Interesting.
01:02:10.160 | There's actually, if you look at the PHY-3 cookbook on GitHub, there's a chat extension sample for VS Code to use PHY-3 locally in chat.
01:02:23.160 | Awesome.
01:02:24.160 | Out of interest, are you able to share what sorts of things you look at when you test new models within the GitHub Copilot product?
01:02:30.160 | Like what metrics you might look at?
01:02:32.160 | The behind the curtain.
01:02:34.160 | So we have, so most of our offline evals are code-based.
01:02:38.160 | So if you think /fix, /docs, and we have a smaller test set that runs generally on each change, code change, where we test specific patterns if they improve or regress.
01:02:54.160 | And that's mostly based on issues we've seen in the past, like, oh, it didn't get this pattern right, or it didn't look at specific files.
01:03:02.160 | So we're trying to just assess the general competence and what we expected.
01:03:06.160 | And then there's larger offline evals where we run it across different repos and try to understand how well these /fix and /docs work.
01:03:15.160 | So these are not public benchmarks, but they're trying to assess basically against open source code that we can get to run on GitHub.
01:03:22.160 | So if you have a repo on GitHub, make sure the test runs.
01:03:26.160 | Yeah.
01:03:27.160 | So, yeah, that's basically the baseline.
01:03:29.160 | They never pass 100%.
01:03:30.160 | There's always, like, we're trying to get the pass rate up, but it's typical offline eval of we're trying to get better over time.
01:03:37.160 | And interestingly, a lot of the big model updates, they don't necessarily 10x those metrics.
01:03:44.160 | There's always-- some languages get better, some languages get worse.
01:03:48.160 | So it's really-- and they always require prompt changes.
01:03:51.160 | So don't run after the latest model just because somebody told you.
01:03:54.160 | So there's always the nuance of actually optimizing for the models and then testing out each model separately.
01:04:03.160 | I didn't quite catch that.
01:04:08.160 | Did you mean that we can test the PHY model locally?
01:04:12.160 | Did I understand that right?
01:04:14.160 | Check.
01:04:15.160 | Search GitHub for the PHY3 cookbook.
01:04:18.160 | And there's an example there, too.
01:04:20.160 | Yeah.
01:04:21.160 | Okay.
01:04:22.160 | Thank you.
01:04:23.160 | So we're going to get to the ground.
01:04:24.160 | VS Code has an-- has extension APIs.
01:04:27.160 | Many, many thereof.
01:04:28.160 | So all the cool extensions you're running are in VS Code or using these extension APIs to provide the functionality.
01:04:34.160 | We have extension APIs for co-pilot chat.
01:04:38.160 | You can actually add your own participant and you can actually provide your own models in the chat as well.
01:04:44.160 | So these are two extensions.
01:04:47.160 | There's also a blog post that just came out yesterday.
01:04:51.160 | I think that you can check out on the VS Code blog that talks more about extensions.
01:04:56.160 | So if you want to play around, a lot of companies do this internally for their own developers, just bringing their own developer experience and knowledge into co-pilot chat and some custom flows.
01:05:07.160 | And other companies like Stripe and Postgres and other projects are bringing these chat participants via extensions into co-pilot chat for some custom workflows for all the developers that they're serving.
01:05:20.160 | But that kind of allows you to plug into the existing, I don't know, experience.
01:05:25.160 | Both.
01:05:26.160 | Is it possible or will it be possible to replace the connection to whatever GPT model would be used at the time to be able to use the co-pilot at the companies which currently do not allow it because that would mean sharing your code as you go with an external provider?
01:05:45.160 | Currently not.
01:05:46.160 | So that's not a replacement of the underlying model, but the 5.3 cookbook shows you how to do it in a more sandboxed way to replace parts.
01:05:57.160 | Yeah, I understand.
01:05:58.160 | But is there any chance that it's coming anytime in the future or something like that?
01:06:03.160 | It's on the list of things we're looking into.
01:06:04.160 | Yeah.
01:06:04.160 | So we're looking at models.
01:06:05.160 | All right.
01:06:06.160 | Thank you.
01:06:07.160 | So the next one is, is there any intended use difference between the Control-I inline mode and sorry, the Command-I and Command-Shift-I modes?
01:06:30.160 | Yeah.
01:06:31.160 | Yeah.
01:06:32.160 | Right?
01:06:33.160 | And then you also have Command-Shift-I, right?
01:06:34.160 | Oh, Quick Chat.
01:06:35.160 | Yeah.
01:06:36.160 | If you haven't tried it yet, Control-A is Quick Chat.
01:06:51.160 | That's the idea is, so we're exploring different just form factors for chat and that's more of a quick question overlay.
01:06:58.160 | So that's kind of the idea.
01:07:00.160 | You don't want to go into panel chat, especially on a small viewport.
01:07:03.160 | Yeah, all right, all right.
01:07:04.160 | It's mostly your UX preference.
01:07:05.160 | But this will have the conversation, the history conversation then?
01:07:09.160 | Yeah.
01:07:10.160 | All right.
01:07:11.160 | And does it also have a new chat then?
01:07:14.160 | You would just close it.
01:07:15.160 | You would just, yeah.
01:07:16.160 | Oh, right.
01:07:17.160 | So it holds the conversation as long as--
01:07:18.160 | Right.
01:07:19.160 | And Control-L works, works, works as well.
01:07:21.160 | You can just empty it.
01:07:22.160 | Perfect.
01:07:23.160 | Yeah.
01:07:24.160 | And let me just ask that question so everybody can hear.
01:07:28.160 | The question was basically, is there a way to take advantage of, I guess, like local documentation
01:07:35.160 | and agents that might exist in a code base that might be more updated than what the model itself is.
01:07:44.160 | Is that getting close?
01:07:45.160 | Yeah, but not for local documentation, but rather the libraries.
01:07:48.160 | Right.
01:07:49.160 | So for libraries, so it's not locally, but for other libraries, but for things that just
01:07:53.160 | the model hasn't been updated for because things are changing all the time.
01:07:56.160 | Yeah.
01:07:57.160 | So Copilot for Enterprise has knowledge bases.
01:08:00.160 | I think there's some links in the training in the end to Copilot for Enterprise and some
01:08:06.160 | of that documentation.
01:08:07.160 | So knowledge bases allow you to import a repository with Markdown as a grounding and then reference
01:08:15.160 | that in your question, especially on GitHub.com, but also in the add GitHub agent in BIOS code.
01:08:22.160 | And we're trying to make that more accessible and naturally to apply to code.
01:08:26.160 | But that's one way that you could bring in external documentation.
01:08:31.160 | Just have it, have it indexed, have it referenced.
01:08:34.160 | Then you curate it in these knowledge bases as something you can reference, like using our LM stack.
01:08:40.160 | And then you reference the combination of different projects that you're depending on.
01:08:45.160 | And you can update them as needed.
01:08:47.160 | There's more work there.
01:08:48.160 | I think to bring knowledge bases to a more usable and easier to update flow.
01:08:54.160 | So that's something we're also looking at.
01:08:56.160 | Yeah.
01:08:57.160 | Yeah.
01:08:57.160 | Yeah.
01:08:57.160 | Yeah.
01:08:58.160 | Yeah.
01:08:59.160 | Yeah.
01:08:59.160 | Yeah.
01:09:00.160 | Yeah.
01:09:01.160 | So the question is, do you, I guess, two questions.
01:09:03.160 | One is, is there some knowledge retrieval we can do with this?
01:09:04.160 | Yeah.
01:09:04.160 | Yeah.
01:09:05.160 | Yeah.
01:09:06.160 | Yeah.
01:09:07.160 | Yeah.
01:09:08.160 | Yeah.
01:09:09.160 | Yeah.
01:09:10.160 | So the question is, do you, I guess two questions.
01:09:15.160 | So one is, is there some knowledge retrieval we can do with these chat participants?
01:09:22.160 | The chat prisons can provide context variables.
01:09:23.160 | So if there is specific context that those participants want to provide, like their API documentation,
01:09:29.160 | I guess two questions.
01:09:30.420 | So one is, is there some knowledge retrieval
01:09:32.500 | we can do with these chat participants?
01:09:35.740 | Chat participants can provide context variables.
01:09:38.160 | So if there is specific context that those participants want
01:09:41.500 | to provide, like their API documentation,
01:09:44.480 | or more dynamic things, like which actual databases
01:09:48.080 | are used in your product and what is their schema,
01:09:51.780 | they can be exposed as context variables.
01:09:54.120 | So you can combine them with other contexts.
01:09:56.780 | And we actually, yeah, we're just looking into more
01:10:00.280 | automatic inference, how to get this context in.
01:10:03.460 | So you don't have to know.
01:10:04.660 | Rather than also providing the context of other,
01:10:06.860 | like, I would say.
01:10:10.360 | So, like, the .
01:10:15.360 | Yeah.
01:10:15.900 | So you're basically saying, if you ask
01:10:26.680 | the question and Copilot didn't know it,
01:10:28.380 | but it was about something that you had an extension installed
01:10:30.680 | with or an agent installed with, it could automatically then
01:10:33.280 | send that to the agent.
01:10:36.120 | Yeah, that's actually on the expiration
01:10:38.260 | for within the next six months.
01:10:39.960 | So we're looking--
01:10:41.120 | because we see when people discover extensions,
01:10:44.060 | it's like, oh, this is amazing.
01:10:45.060 | I want to use this every day.
01:10:46.000 | And then they keep forgetting about it,
01:10:47.640 | or they never discovered it upfront.
01:10:50.100 | So that's a big problem we saw in our user testing.
01:10:53.140 | So the automatic inference is a big part of just Copilot being
01:10:57.580 | aware of what you have installed, what you're working on,
01:11:00.580 | and then calling the extensions as needed.
01:11:02.580 | so that's coming.
01:11:07.020 | Thank you so much, Harold, for this impromptu Q&A that I just, like,
01:11:10.020 | threw at you at the last minute.
01:11:11.020 | We really appreciate that.
01:11:12.020 | No, no, no, no, no, no, no.
01:11:13.020 | You were fantastic.
01:11:14.020 | I just-- this was the idea that the Dave and I had.
01:11:16.120 | We were like, well, while we have, you know, a member of the product team.
01:11:21.140 | And Harold mentioned the blog post from Visual Studio Code
01:11:25.580 | that I didn't even realize was out yesterday.
01:11:28.580 | So on the main repo link, there's a githubcopilotresources.md file.
01:11:36.580 | And I already had a reference to the Copilot Extensions blog post that
01:11:40.800 | came out in conjunction with Microsoft Build.
01:11:43.300 | So in that section, I said, "And see also this Visual Studio Code."
01:11:47.740 | So we're, you know, we're being as dynamic as we can here.
01:11:56.520 | There you go.
01:11:57.520 | Yeah.
01:11:58.520 | So that blog post is now-- you don't have to remember this URL.
01:12:01.620 | Just the repo your-- or the devops resources-- or sorry, the devops version
01:12:09.360 | of the GitHub Copilot Lab.
01:12:14.160 | Check out the resources file there.
01:12:16.160 | Also, check out the discussions.
01:12:19.400 | I wasn't able to find what Harold was referring to with the cookbook 5.3
01:12:23.700 | or whatever, but we can throw-- oh, awesome, awesome.
01:12:28.140 | So, yeah, when you go to those discussions, you know,
01:12:30.880 | we have those links and things there.
01:12:33.820 | We'll even-- I'll keep an eye on those discussions for a few days.
01:12:38.280 | So if something else comes up, feel free to throw a question
01:12:43.080 | or a comment out there.
01:12:44.960 | And since we are-- we got about a little over 20 minutes left here,
01:12:49.520 | I will put in a plug, too.
01:12:51.560 | There's a couple of survey questions there.
01:12:53.920 | Please let us know what you thought about this lab.
01:12:56.100 | Please let us know what you thought about GitHub Copilot in general.
01:13:01.840 | And, you know, add comments on either one of those if you would like to.
01:13:15.160 | Anybody else have any other questions or anything?
01:13:25.700 | Is GitHub Copilot Workspace going to replace Copilot chat or does it have any other purpose?
01:13:43.280 | Yeah, I think from my perspective, yeah, I'll let Harold talk about it.
01:13:49.960 | But I think there's, you know, a purpose for Copilot Workspace
01:13:53.900 | and a purpose for Copilot chat and everything.
01:13:56.600 | I'll let Harold address it.
01:13:58.460 | So who has seen Copilot Workspace?
01:14:05.260 | Okay.
01:14:06.260 | Let me describe you in great stroke.
01:14:08.340 | So Copilot Workspace is a standalone experience where you can start from a repository or a PR or other places.
01:14:19.140 | There's great demos, there's great videos out there.
01:14:21.600 | There's an early adopter audience already playing around and getting really excited about these flows.
01:14:26.380 | But you can start with a task.
01:14:28.780 | It breaks it down into a plan.
01:14:31.980 | And it allows you to make cross-repo, cross-file edits and implement features, fix bugs that are more complicated.
01:14:41.920 | But it's a great end-to-end flow that keeps the developer in control at every step and allows you to give feedback and correct the plan and correct the plan items and stay in the loop as the AI proposes changes.
01:14:56.840 | The outcome is that you end up with a div and the div can even run the actions and the repository.
01:15:03.380 | You have a terminal where you can run through your build step and have other ways.
01:15:08.080 | So there's a lot of pieces built in that suddenly look like an editor.
01:15:12.920 | So my hopes, this is eventually something that if you ask a more complicated question in chat, it will just use a workspace-like flow to apply these edits.
01:15:22.360 | But there's also other explorations that we're applying.
01:15:24.560 | How can this look like in PR reviews?
01:15:27.160 | What's the best workspace flow for the many things developers hit in a day-to-day?
01:15:34.440 | How can AI help with reviewing a PR?
01:15:38.240 | So all of these things are where a more specialized AI breaks down a task into multiple steps and keeping you in the loop and in control.
01:15:47.760 | So I don't think it's a replacement.
01:15:49.680 | It's a necessary flow.
01:15:52.320 | It's something you can already do in GitHub Copilot chat.
01:15:55.220 | But just start with asking it about a plan and then work with Copilot through a plan.
01:16:01.060 | So with proper prompt crafting, you can get pretty close to that experience and stay in control.
01:16:08.340 | I think that's the main one there.
01:16:09.500 | So I think that's the main thing that we can do in the loop and do it in the loop and do it in the loop and do it in the loop.
01:16:24.620 | So I think that's the main thing that we can do in the loop and do it in the loop.
01:16:27.300 | So I think that's the main thing that's the main thing that we can do in the loop and do it in the loop and do it in the loop.
01:16:32.260 | So the question was Copilot Enterprise has a couple of really cool features such as PR summaries or knowledge bases.
01:16:47.300 | I'm keen to understand in terms of those features living in VS or like in the code editor, so like I'm doing a PR.
01:16:55.060 | I'd like to immediately summarize what the PR is about.
01:16:58.580 | Is there some sort of outlook on what that's going to look like?
01:17:01.060 | So there is a way, it's a different experience, but there is a way to summarize PRs in VS Code right now.
01:17:09.220 | So there is a way to do that that is separate from the GitHub Enterprise feature.
01:17:13.460 | But this is actually, I think, and you can talk more about this.
01:17:16.100 | This is something we're trying to kind of balance the two experiences between, you know, how things work,
01:17:21.300 | you know, kind of on GitHub.com and then the way that people are using their editor.
01:17:24.900 | You want to say more about that in the process.
01:17:29.060 | Some hot takes.
01:17:31.060 | Now, so I think in the beginning you saw definitely more Copilot experience sprouting up under the Copilot X moment that happened at Universe.
01:17:40.260 | So just people are trying out, like, what does AI mean in developer flow?
01:17:43.780 | So PR descriptions went out there and then this new tier SKU for Copilot for Enterprise.
01:17:51.140 | So I think a lot of it is like, what is a value add that we can bring to enterprises that work for, if you have a thousand repos and team to manage 2,000 developers,
01:18:00.420 | so the different use cases that are not as simplistic of like a typical day in the developer working on a project.
01:18:08.420 | So there's a lot of that thinking right now happening, like how to best separate those.
01:18:12.740 | I think a lot of times we are focusing on bringing everything that's happening on GitHub.com,
01:18:17.780 | making sure it can shift left into the developer experience in the editor as well.
01:18:23.300 | So as you can see, we already have like in code VS code, you already get the little magical AI buttons that can write you a commit message that can write you a simple PR description.
01:18:35.780 | But if you look at PR descriptions on GitHub, they go to way more lengths of looking at more files.
01:18:40.740 | So as you go on to see those features just become more powerful and more grounded and more suited to the needs of enterprise.
01:18:50.500 | So I think that's that's the best way to think about those.
01:18:52.900 | And yes, there are some features that are locked in right now because they're still they need more enterprise feedback and they need to scale to enterprise needs.
01:19:01.860 | But otherwise, yeah, there's definitely a shift shift left of these features happening so they become available in the editor as we figure out how to best provide them in the editor.
01:19:11.060 | But no, so if you haven't tried out in the code space, you see the PR extension is automatically installed in the code space.
01:19:17.380 | So you can manage your issues, your PRs, if you can create PRs.
01:19:21.060 | So that's also what what you can do in code spaces.
01:19:23.220 | Thank you.
01:19:25.300 | Thank you.
01:19:25.300 | Thank you.
01:19:26.180 | Thank you.
01:19:26.180 | Thank you.
01:19:26.180 | Thank you.
01:19:26.180 | Thank you.
01:19:26.180 | Thank you.
01:19:26.180 | Thank you.
01:19:27.060 | Thank you.
01:19:27.060 | Thank you.
01:19:28.260 | Thank you.
01:19:28.500 | Thank you.
01:19:30.500 | Thank you.
01:19:32.500 | Thank you.
01:19:34.500 | Thank you.
01:19:35.500 | Thank you.
01:19:35.840 | Thank you.
01:19:36.440 | Thank you.
01:19:36.500 | Thank you.
01:19:36.500 | Thank you.
01:19:38.500 | Thank you.
01:19:40.500 | We'll see you next time.