WEBVTT 00:01.920 --> 00:03.280 Hi everyone! 00:03.280 --> 00:04.400 My name is Shane, 00:04.400 --> 00:09.679 and it's truly a real honor to be 00:09.679 --> 00:14.480 able to speak at EmacsConf. 00:14.480 --> 00:16.880 I love Emacs. I love Emacs Lisp, 00:16.880 --> 00:19.279 and this is also another topic 00:19.279 --> 00:22.233 that really excites me ever since 00:22.233 --> 00:28.160 I got my hands on OpenAI's GPT-3. 00:28.160 --> 00:29.920 Six months ago, I knew that it was 00:29.920 --> 00:33.920 important to research this for Emacs, 00:33.920 --> 00:35.980 you know, asides from being somebody 00:35.980 --> 00:39.040 who never wants to leave Emacs myself, 00:39.040 --> 00:41.440 and I hope that…. 00:41.440 --> 00:43.120 Being one of the few Emacs users, 00:43.120 --> 00:45.360 possibly the only one that had 00:45.360 --> 00:48.160 access to GPT-3 for this long, 00:48.160 --> 00:52.559 I hope that I can contribute. 00:52.559 --> 00:55.199 So, Emacs, sorry. 00:55.199 --> 00:58.960 Imaginary programming is…, 00:58.960 --> 01:01.280 it's based on prompt engineering currently, 01:01.280 --> 01:02.559 but it's an abstraction over 01:02.559 --> 01:03.359 prompt engineering. 01:03.359 --> 01:06.479 You can read about prompt engineering 01:06.479 --> 01:08.560 and language models, 01:08.560 --> 01:13.040 that's quite easy to google for. 01:13.040 --> 01:15.520 And imaginary programming is a subfield 01:15.520 --> 01:17.360 of imaginary computing, 01:17.360 --> 01:19.424 which is just the larger domain 01:19.424 --> 01:21.420 of employing of computing 01:21.420 --> 01:24.240 that's based on imagination, 01:24.240 --> 01:25.600 artificial imagination, 01:25.600 --> 01:29.920 so, basically, dreaming up user interfaces 01:29.920 --> 01:32.159 instead of…, or at least partially 01:32.159 --> 01:34.079 dreaming them up. 01:34.079 --> 01:41.439 I suppose that it's a fringe paradigm, 01:41.439 --> 01:43.759 but it's extremely useful. 01:43.759 --> 01:47.759 Imaginary computing, 01:47.759 --> 01:49.200 if you're willing to call it that, 01:49.200 --> 01:51.920 would be what's used to 01:51.920 --> 01:53.413 imagine simulations 01:53.413 --> 01:54.320 for self-driving cars, 01:54.320 --> 01:57.840 as they're trained for example. 01:57.840 --> 01:58.984 But this technology finds 01:58.984 --> 02:00.960 its way to the public, 02:00.960 --> 02:04.880 and it should be in the public domain. 02:04.880 --> 02:06.799 So, Demis Hassabis 02:06.799 --> 02:08.959 he's the founder of DeepMind, 02:08.959 --> 02:12.400 and he did his Ph.D. in human imagination, 02:12.400 --> 02:16.900 now he's working on artificial imagination. 02:16.900 --> 02:20.239 So, just a couple of days ago 02:20.239 --> 02:25.040 I took AlephAlpha's world model API 02:25.040 --> 02:28.080 and I plugged it into Emacs's eww browser, 02:28.080 --> 02:30.800 and now I have a way of generating 02:30.800 --> 02:33.840 text for the images instead of actually…, 02:33.840 --> 02:38.072 so I can stay in my text only Emacs, 02:38.072 --> 02:42.560 which is the way it should be. 02:42.560 --> 02:45.636 Intelligent NFTs, I'll leave this 02:45.636 --> 02:47.360 for you guys to look at. 02:47.360 --> 02:49.280 Information bubbles. 02:49.280 --> 02:55.360 So, there's some potential bad outcomes 02:55.360 --> 03:05.680 from the runaway empowering of these 03:05.680 --> 03:08.959 large language models and other models 03:08.959 --> 03:10.000 in commercial hands. 03:10.000 --> 03:13.680 It's causing information bubbles and 03:13.680 --> 03:15.680 ways of controlling people. 03:15.680 --> 03:19.440 So, for example, 03:19.440 --> 03:21.680 micro tasks and stuff that…, 03:21.680 --> 03:23.650 furthermore just automating away, 03:23.650 --> 03:26.000 or abstracting away the role 03:26.000 --> 03:27.680 of a programmer, 03:27.680 --> 03:29.360 and the automating more and more 03:29.360 --> 03:32.319 increasingly abstract tasks, 03:32.319 --> 03:33.659 and I think the solution is to 03:33.659 --> 03:36.319 decentralize and break up these tasks. 03:36.319 --> 03:39.120 I have a potential way of doing that, 03:39.120 --> 03:40.693 but firstly I'll talk about 03:40.693 --> 03:42.400 the imaginary web briefly 03:42.400 --> 03:44.720 because the thing about these 03:44.720 --> 03:48.000 language models is, 03:48.000 --> 03:49.280 they can replace basically 03:49.280 --> 03:52.159 everything on the internet. 03:52.159 --> 03:55.280 So, like, replace your Wikipedia, 03:55.280 --> 03:57.680 or Stack Overflow, 03:57.680 --> 04:01.519 replace conversation if you want it with, 04:01.519 --> 04:05.920 from real people to chatbots instead, 04:05.920 --> 04:13.120 replace basically anything there's 04:13.120 --> 04:14.959 a website for. 04:14.959 --> 04:17.280 And that means that rich media has gone 04:17.280 --> 04:20.639 from becoming images and video 04:20.639 --> 04:22.560 and even from paywalls 04:22.560 --> 04:26.400 now into intelligent and truthful, 04:26.400 --> 04:29.520 because generating fictional websites 04:29.520 --> 04:31.919 is going to become a very easy thing to do, 04:31.919 --> 04:35.120 and actually the best way to do it, 04:35.120 --> 04:37.440 and the most useful way to do it, 04:37.440 --> 04:40.560 so then you need a source of truth. 04:40.560 --> 04:43.759 The imaginary web is a thing, 04:43.759 --> 04:46.000 imaginary interpreters are a thing, 04:46.000 --> 04:50.000 so you imagine your interpreter, 04:50.000 --> 04:53.759 or you overlay prompting on top of 04:53.759 --> 04:55.520 a real interpreter to see 04:55.520 --> 04:57.440 what you might want to do 04:57.440 --> 04:58.800 in an interpreter, 04:58.800 --> 05:01.039 and what you might want to say to somebody 05:01.039 --> 05:01.919 if you're talking to them. 05:01.919 --> 05:03.199 If you're inside, say, 05:03.199 --> 05:05.840 ERC in Emacs, an IRC client, 05:05.840 --> 05:07.440 and you prompt after somebody 05:07.440 --> 05:08.479 says something, 05:08.479 --> 05:10.400 then the prompt will probably suggest, 05:10.400 --> 05:13.120 what you might say in return, 05:13.120 --> 05:15.199 and then you can prompt like a multiverse, 05:15.199 --> 05:18.800 and you can pick from them. 05:18.800 --> 05:23.912 There's a bunch of crazy utilities 05:23.912 --> 05:26.560 for these language models. 05:26.560 --> 05:28.960 Paracosm vs Metaverse. 05:28.960 --> 05:30.828 So, Mark Zuck wants you to live in 05:30.828 --> 05:34.320 his virtual reality as defined by him, 05:34.320 --> 05:36.160 and he's going to do it 05:36.160 --> 05:40.539 by using these models to make you 05:40.539 --> 05:42.639 a fictional world that you can live in. 05:42.639 --> 05:43.280 You can do that, 05:43.280 --> 05:46.400 or you can use them yourself, 05:46.400 --> 05:50.000 and you build your own Paracosm. 05:50.000 --> 05:51.440 And I think that's an important 05:51.440 --> 05:53.440 ability to be able to have, 05:53.440 --> 05:56.880 otherwise we will be like the borg, 05:56.880 --> 06:01.520 and we'll be connected to Mark Zuckerberg. 06:01.520 --> 06:06.400 Truth is a hot topic. 06:06.400 --> 06:08.880 So, the way that I think we should do this 06:08.880 --> 06:10.720 to decentralize the language models is, 06:10.720 --> 06:13.199 to use Structuralism. 06:13.199 --> 06:19.600 Universal grammar, 06:19.600 --> 06:21.680 template metaprogramming, and GPT-3 06:21.680 --> 06:23.919 what do they have in common? 06:23.919 --> 06:27.759 Well, you have some kind of basis, 06:27.759 --> 06:31.408 like, you train your GPT-3, 06:31.408 --> 06:32.663 and then you do all your prompting 06:32.663 --> 06:33.360 on top of it. 06:33.360 --> 06:35.840 Like a person is born with this grammar, 06:35.840 --> 06:37.759 and then they quickly learn language, 06:37.759 --> 06:40.240 and like with C++ templates, 06:40.240 --> 06:42.080 you pre-process and then 06:42.080 --> 06:44.800 the run time runs on that. 06:44.800 --> 06:48.000 So, anyway, that was a slide. 06:48.000 --> 06:50.479 Structuralism. 06:50.479 --> 06:52.080 I think you can decompile…, 06:52.080 --> 06:52.880 think you can break, 06:52.880 --> 06:53.840 so you can decompose 06:53.840 --> 06:55.840 the language models into units, 06:55.840 --> 06:57.759 but those units won't look like neurons, 06:57.759 --> 06:59.440 they would look like these, 06:59.440 --> 07:01.759 and you put them onto a blockchain. 07:01.759 --> 07:02.744 But you can look at that later 07:02.744 --> 07:03.840 if you want anyway. 07:03.840 --> 07:07.199 I'm going to skip straight to ilambda, 07:07.199 --> 07:09.919 running out of time. 07:09.919 --> 07:12.240 I'll just quickly show you 07:12.240 --> 07:15.199 the ilambda primitive in ilambda. 07:15.199 --> 07:19.199 So, it evaluates instead of run, 07:19.199 --> 07:21.680 for example, here's the reduced function, 07:21.680 --> 07:22.632 and you've defined your 07:22.632 --> 07:25.520 imaginary lambda here. 07:25.520 --> 07:26.560 And it doesn't have a body, 07:26.560 --> 07:31.599 it's just got the comment 07:31.599 --> 07:33.120 and the parameters, 07:33.120 --> 07:36.560 and that's enough for…. 07:36.560 --> 07:38.720 Once you have that ilambda 07:38.720 --> 07:40.080 that runs now as a function, 07:40.080 --> 07:40.800 you can stick it into 07:40.800 --> 07:42.720 a reduced function, for example, 07:42.720 --> 07:46.240 and it'll reduce this list. 07:46.240 --> 07:50.560 You could even remove…, yeah, 07:50.560 --> 07:51.759 so you kind of need the comment 07:51.759 --> 07:56.048 otherwise it's too hard to imagine 07:56.048 --> 07:57.360 what would happen next, 07:57.360 --> 08:01.520 but for a function you can literally 08:01.520 --> 08:03.360 have an idefun even without 08:03.360 --> 08:04.639 the argument list. 08:04.639 --> 08:06.319 It was just like generate-fib-sequence, 08:06.319 --> 08:09.919 and most likely when you run that defun, 08:09.919 --> 08:13.759 it would work the way you want it. 08:13.759 --> 08:16.000 The more information you give the idefun, 08:16.000 --> 08:17.840 the imaginary defun, 08:17.840 --> 08:20.879 the better it would capture the task 08:20.879 --> 08:22.000 which you're trying to do, 08:22.000 --> 08:23.039 in this case you want to generate 08:23.039 --> 08:24.080 a Fibonacci sequence. 08:24.080 --> 08:28.319 And yeah, you can define functions 08:28.319 --> 08:30.560 without having a body, 08:30.560 --> 08:32.640 and they run an inference instead. 08:32.640 --> 08:34.159 Here's a way of overriding 08:34.159 --> 08:36.000 the language model that's used, 08:36.000 --> 08:40.640 for example, using dynamic scope. 08:40.640 --> 08:41.863 So, under the hood, 08:41.863 --> 08:47.040 idefun just uses an ilambda. 08:47.040 --> 08:50.959 This function here just doubles things. 08:50.959 --> 08:53.752 So, here's a function that gets you 08:53.752 --> 08:59.279 a hexadecimal color just from the name. 08:59.279 --> 09:00.160 And you can create 09:00.160 --> 09:02.160 arbitrary functions like this, 09:02.160 --> 09:04.268 so, what we need is like a library 09:04.268 --> 09:07.200 of imaginary functions, I think, 09:07.200 --> 09:12.800 that match a language model. 09:12.800 --> 09:15.760 Macros on the other hand, 09:15.760 --> 09:18.160 as different from functions, 09:18.160 --> 09:20.000 they actually macro expand 09:20.000 --> 09:21.360 and generate code. 09:21.360 --> 09:23.279 So, when you macro expand this, 09:23.279 --> 09:26.320 you'll get this, 09:26.320 --> 09:30.000 and that's because this has an arity of 3, 09:30.000 --> 09:31.839 and then when you macro expand 09:31.839 --> 09:32.959 that underlying macro, 09:32.959 --> 09:35.120 it generates the actual source code. 09:35.120 --> 09:37.839 You can actually run these macros, 09:37.839 --> 09:41.279 and it will cache the output…, 09:41.279 --> 09:42.480 it will catch the source code, 09:42.480 --> 09:44.240 so the macro runs the same 09:44.240 --> 09:45.839 every single time, 09:45.839 --> 09:47.519 or generates the same code, 09:47.519 --> 09:48.560 but you can just use it 09:48.560 --> 09:49.920 to generate code really easily 09:49.920 --> 09:52.000 while you're programming. 09:52.000 --> 09:55.920 I hope that this has been informative, 09:55.920 --> 09:57.600 it wasn't too much time, 09:57.600 --> 10:00.312 but there's plenty of material 10:00.312 --> 10:01.680 for you to dig into it more 10:01.680 --> 10:04.000 if you're interested. 10:04.000 --> 10:04.959 Thank you very much 10:04.959 --> 10:09.519 for letting me talk today. 10:09.519 --> 10:15.680 Peace out! 10:15.680 --> 10:16.680 [captions by bhavin192 (Bhavin Gandhi)]