[HN Gopher] Copilot Internals
       ___________________________________________________________________
        
       Copilot Internals
        
       Author : jjwiseman
       Score  : 168 points
       Date   : 2022-12-17 22:18 UTC (1 days ago)
        
 (HTM) web link (thakkarparth007.github.io)
 (TXT) w3m dump (thakkarparth007.github.io)
        
       | albertzeyer wrote:
       | This is about the VSCode extension, which is obfuscated (maybe
       | compiled) JS.
       | 
       | The plugin for IntelliJ (PyCharm etc), is this written in Java?
       | Reverse compiling this might give some additional insights.
        
         | fortenforge wrote:
         | Their JetBrains plugin is written in Kotlin / Java but it spins
         | up a agent server written in node.js which handles the business
         | logic (building the prompt, caching, making completion requests
         | to their API). I assume most of the code is shared between the
         | VSCode extension and this javascript agent.
        
       | gavinray wrote:
       | I stumbled upon this repo by accident a few days ago when its
       | source code appeared to contain the only usage the term
       | "GH_COPILOT_TOKEN" in any repo on Github:
       | 
       | https://github.com/search?q=GH_COPILOT_TOKEN&type=code
       | 
       | (My Copilot was broken and this was in the error output I was
       | seeing, see:
       | https://github.com/community/community/discussions/41878)
       | 
       | What I found there was some truly impressive reverse-engineering
       | work by a single individual. I really like the "JOURNAL" daily-
       | diary they kept of progress and random thoughts so you could see
       | the progression day-by-day.
       | 
       | --------
       | 
       | One thing I found interesting: The author says that it queries
       | only the 20 recently most opened files of the same language.
       | 
       | But in an AMA, I asked about how much "context" Copilot has
       | available, and one of the devs says it can, for example, read
       | header files that pair with C/C++ files that are open in separate
       | tabs:
       | 
       | https://github.com/orgs/community/discussions/29932#discussi...
       | > "I assume Copilot uses the contents of the current project (IE,
       | all files) as contextual information to offer suggestions. Is
       | this the case?"            > "Yes, copilot looks at what we call
       | "related tabs", for example .c files are often paired with .h
       | files, so copilot considers the contents of other tabs open in
       | the editor to try to feed a more complete prompt to the model."
        
       | vbezhenar wrote:
       | My biggest issue with Copilot is that it only wants to add code.
       | 
       | That's useful but I edit code a lot. And if I have 10 similar
       | lines and made one edit, it'd be very convenient for Copilot to
       | suggest edit following line or even lines.
        
         | ftufek wrote:
         | You can look into Copilot Labs extension in vscode, it does the
         | editing and bunch of other stuff too (like explain what the
         | highlighted code does, etc). It's not as smooth, but it's
         | getting there.
        
         | TillE wrote:
         | That's interesting, even IntelliCode (generally less capable
         | than Copilot afaik) will do exactly that. I've had it trigger a
         | few times in C# recently, where I make one or two similar
         | edits, and it prompts me to make more.
        
       | melony wrote:
       | Why does "cushman-ml" suggest a 12B model instead of the 175B
       | model?
        
         | varunkmohan wrote:
         | Most likely latency and cost reasons. A model that's 10x as big
         | requires 10x the hardware to serve at the same latency. Since
         | most generations are not too long, a smaller finetuned model
         | should work well enough.
        
         | peaslock wrote:
         | The model with the most similar name in this list is code-
         | cushman-001 which is described as "Codex model that is a
         | stronger, multilingual version of the Codex (12B) model in the
         | paper".
         | 
         | https://crfm-models.stanford.edu/static/help.html
         | 
         | The next stronger Codex model is called code-davinci-001 which
         | appears to be a fine-tuned version of the GPT-3 Davinci model
         | which is known to have 175B parameters. The model naming is
         | alphabetical in the order of the model size:
         | 
         | https://blog.eleuther.ai/gpt3-model-sizes/
         | 
         | See also A.2 here: https://arxiv.org/pdf/2204.00498.pdf#page=6
        
           | alextheparrot wrote:
           | Code is the base model in more recent iterations [0]
           | 
           | [0] https://beta.openai.com/docs/model-index-for-researchers
        
       | dj_mc_merlin wrote:
       | Huh, was this post revitalized? I remember seeing it (and
       | upvoting it) in /new yesterday, but it didn't reach critical mass
       | for the front page. Seems to be gone now.
        
       | bluelightning2k wrote:
       | Just wanted to say great job on the analysis and explanation!
        
       | modeless wrote:
       | Free idea for GitHub: a huge bit of missing context for the model
       | right now is the last few edits made by the user. If you move
       | your cursor to a different part of a long file, Copilot
       | immediately forgets about that part of the file. If it knew the
       | last few edits you did then it would be able to make much more
       | intelligent suggestions based on the task you're working on,
       | rather than just current cursor position.
        
         | letitgo12345 wrote:
         | Not sure how easy it would be to make work. Code edit data is
         | not that prevalent. The best I can think of is looking at
         | github commit changes. That's one place where Repl.it has a big
         | advantage as it has live editing data from its users
        
           | modeless wrote:
           | They could start by simply including the code around previous
           | cursor positions as additional context the same way they do
           | with code from other files. Nothing specific to the edits
           | themselves. That alone would help a lot I think. Maybe they
           | already do but I don't think so based on the behavior I see,
           | and this article doesn't mention anything like that.
           | 
           | But Copilot is getting tons of live editing data from its
           | users too, and soon should be able to construct a nice
           | dataset of edits. There's no way they aren't already doing
           | that.
        
       | peaslock wrote:
       | Amazing if this is only a 12B model. If this already increases
       | coding productivity by up to 50% (depending on kind of work),
       | imagine what a 1T model will be capable of! I do wonder if some
       | programmers at FAANG are already having access to a way more
       | powerful coding assistants, and whether they code much at all at
       | this point, or only make high level code specifications and then
       | fix up the automatically generated code.
        
         | varunkmohan wrote:
         | A 1T model would be capable of much more than what the current
         | version of Copilot in terms of autocompletion and even code
         | correction. However, at that point, even with a lot of model
         | parallelism to speedup inference, it's likely to be atleast 10x
         | slower on the generation side. From my experience working on
         | Codeium, a Copilot alternative, this would be too frustrating
         | for users. It could be useful as a tool that runs
         | asynchronously that modifies all your code at scale.
        
         | tjoff wrote:
         | > _If this already increases coding productivity by up to 50%
         | (depending on kind of work)_
         | 
         | Does anyone believe that?
         | 
         | edit: I'm surprised to see that (so far) 3 replies actually
         | agree with the statement. Is there a video that you'd recommend
         | that shows realistic usage and gain from copilot? Maybe a
         | livestream or something.
        
           | insanitybit wrote:
           | Sure. I'm way more productive with Copilot. I haven't been
           | coding much lately but I could imagine it would double my
           | productivity with regards to the actual "get an
           | implementation of a thing done" bit of the work.
           | 
           | In terms of design, I had a long conversation with ChatGPT
           | the other day about designing a database, including
           | optimizations that could be made given certain requirements
           | and constraints, etc. It was a big productivity boost, like
           | rubber ducking on steroids.
        
             | BonoboIO wrote:
             | Can you give us an example how it helped to design the
             | database?
             | 
             | I could not think how it would have helped me, but maybe I
             | m limited in my imagination or don't know how to ask.
        
               | insanitybit wrote:
               | I told it I was designing a database. I told it that my
               | database could tolerate failure levels where more than a
               | quorum of nodes failed at a given time. I then asked it
               | about different algorithms for consensus; RAFT, Paxos,
               | swarm based, etc. It described algorithms for me. I told
               | it that in my database I could guarantee certain things,
               | like that every operation commutes, and I asked how that
               | would let me optimize things - it explained that I could
               | paralellize certain parts of those algorithms.
               | 
               | At one point I told it to name the algorithm we had been
               | discussing something like "OptSwim" and we just kept
               | iterating on the idea.
        
           | Kiro wrote:
           | Absolutely. 50% feels conservative. The thing is that Copilot
           | becomes so ingrained in your workflow that you don't notice
           | it until internet goes down and you feel completely
           | handicapped. Only then do you realize how much you rely on
           | it.
        
           | BiteCode_dev wrote:
           | On menial task, it's way more than 50%. For quick scripting,
           | dirty parsing, PoC and plumping, this is about 300% for me.
           | 
           | However, for anything that requires me to think, it's 5% at
           | best.
           | 
           | Don't take up the 50% figure as anything serious, I think
           | it's just a way to state "if it is a such a meaningful boost
           | in productivity".
           | 
           | Which it is, for a lot of tasks, because the vast majority of
           | programming jobs are boring stuff outside of the HN bubble.
           | 
           | It's amazing how much of the world economy runs on csv
           | uploaded to ftp servers.
        
             | karmasimida wrote:
             | It is indeed a cheap script boy for me as well
             | 
             | It does mundane work exceptionally well
        
         | gear54rus wrote:
         | 'fix up generated code' but do you agree that finding a mistake
         | (without even knowing if it's there) might be even harder than
         | writing from scratch?
        
           | jrockway wrote:
           | It's likely that programmers have this skill somewhere. We
           | all make mistakes when typing in code, and many of them do
           | get found. Some of them don't, that's what we call a bug. So
           | AI isn't exactly breaking any ground here.
           | 
           | I played with ChatGPT and asked it interview questions, and I
           | thought it was a pretty interesting exercise to find its
           | mistakes and get it to fix them. Good tool for training
           | interviewers, perhaps.
        
           | PetahNZ wrote:
           | We are doing this all the time anyway during code reviews.
        
         | whazor wrote:
         | In my eyes, the limitation of these models is that they only
         | fit a limited amount of context. Not the complete API of your
         | code base, or the latest version of the libraries you are
         | using. I also don't believe a bigger model would resolve these
         | limitations.
         | 
         | However, I do believe there could be a meta model that can
         | query code and libraries.
        
           | IshKebab wrote:
           | Presumably if you had access to them you could fine tune them
           | on your codebase.
        
             | peaslock wrote:
             | Yeah, continuous online learning by fine-tuning seems like
             | an obvious way of making these models recall information
             | from outside the perceptible context. One could also prompt
             | the model to (recursively) summarize code and prepend this
             | summary to each prompt, and/or enable the model to
             | interactively query function definitions or code summaries
             | before outputting a final answer (trained by RLHF). But any
             | such tricks might also quickly be outcompeted by an even
             | more general model, e.g. one that directly controls the GUI
             | and can communicate with coworkers...
        
         | karmasimida wrote:
         | Microsoft is FAANG level and beyond.
        
       ___________________________________________________________________
       (page generated 2022-12-18 23:00 UTC)