Back to Index

A Tour of the Solveit Platform


Transcript

Hi Jono, are you ready to show everybody what on earth the Solveit platform is? Yeah, let's do it. Okay, how hard can it be? All right, I'll drive and just jump in any time you've... many times I'm sure I will fail to say something important or you have any thoughts about it, but this is what happens once you log in to Solveit and go to the dashboard and the key thing here is my instances.

Maybe Jono, do you want to summarize what on earth is an instance? Sure, so for some of you who did the course before, we have the Solveit platform as a way to write code and learn things and as you'll see many more options as well. So an instance is like your personal machine on which that program, that application runs.

But you can see we can now create multiple of those. So each one is its own separate, almost like a separate virtual private server, a separate machine with software that's installed, with a file system where you can upload and store files, ways for you to store secrets and host applications and all these other features that we'll show you.

And so you can create multiple if you want to keep different environments isolated or you can just use one. Most of us will have one main personal instance. We're basically we're creating whole virtual but the whole computers for people that you can host applications in Trolley, you can treat as a complete Unix box and you can make multiple of them.

That's that's yeah pretty big deal. And each one has a URL that you can go to which if I click on it it actually opens up a unique URL with Solveit in and just we'll come back to it later but we will show you this other link, the public one.

But most of the time you'll be going to this and this this the this UI will probably change soon but either way you'll see some kind of linked and start to get to your instance. The reason there's a lock by it and the reason we call it the private link is that this is also something that you can share if you want to give somebody else access to this computer that you have.

But that's not something that you'd want to make public if for example you've got like secrets and files and all these other pieces that you've uploaded. So this is the one you keep special and secret. This is your computer. If you ever share it we do have a way to refresh it and get a new one so that you're not permanently opening up your computer to strangers on the internet.

Okay cool. So here's my list of dialogues and folders and in fact there's a lot more in here than that if I click show all files. So this is basically showing my the directory on my little computer my instance. But by default we just show dialogues. So here's my daughter's dialogue for example where she was trying to do a puzzle from something called advent of code and you can go back to the list of dialogues.

So a dialogue as you'll see is basically a saved place where you have made some notes, talked to the computer by writing code and maybe talked to the AI by writing prompts. And so those are always saved until you click the delete button and you can organize them. So I've started a new folder here into folders.

So I've started a new folder called teach where I'm going to put all the stuff we're teaching. And so today I've created a dialogue here with a list of things that Jono and I thought we should mention. Anything else to say about dialogues, Jono? We'll see what's packed in.

But yeah, the way of thinking of it as a conversation between you and yourself, like the notes to yourself for later, you and the computer and then you and the AI, that's a kind of a helpful framing of like, okay, this is a file or a piece. Yeah, yeah, exactly.

Okay. Well, maybe to start with, I'm going to try to clean up these notes a bit. So to edit, everything in a dialogue is called a message. There's three main kinds, code, note and prompt, and a slightly obscure one called raw. And you can always edit an existing one just by clicking on its header.

Or you can just hit enter on your keyboard when it's got the blue around it. And when you do that, it'll pop open this editor. And if you want a bit more room, you can maximize the editor. Everything you see on the screen has keyboard shortcuts. And if you click on list of keyboard shortcuts, you can learn them.

And I've learned pretty much all of them and found basically all of them really useful. So for example, command up will take me to the top. Anybody who's used VS Code before, this is actually VS Code's editor that we're using. So it's a really powerful editor. And what I'm going to do first is, I think, split these into separate messages.

And so the split into message keyboard shortcut is control shift hyphen. So if I do that, you can see it's now splitting it into separate messages. So let's go ahead and do that. While I do that, Jono, anything to add? Yes. Well, one possibility is Jeremy could also share this URL with me.

And then if he was making edits, I would see those changes to the messages appearing on my screen and vice versa. So this is collaborative by default. Cool. Okay. So maybe in this case, I can start splitting them and you can talk briefly. I'm going to stop sharing so that I can pop it in the chat for you.

And then I'll start sharing again. And hopefully we'll see things pop into my screen. So. Okay. So I just shared with Jono the URL of my dialogue, which I would only do with somebody I trusted or with an instance that didn't have anything sensitive in it. Cool. So if you go to the top, I'm going to hit A to add a message above the current one.

Okay. I'm going to run some code. Great. Jono, can you finish my work for me then? Why don't you click on the bottom note and maybe hit a control shift hyphen? Yeah, I'll carry on splitting that. Thank you. And one more. There we go. Slightly more organized little notebook.

Okay, great. And then, oh, and I see you deleted the top one for me. Thank you very much. And so now I'm going to make this a bit easier for me to organize by turning the top of each of these into a heading. So I can hit any number one through six to turn it into a heading one through heading six.

So I'll just hit two. Okay. And so this is just a markdown behind the scenes. And then I'm going to go back up to the top to do that. I press the home key on my keyboard. I'm actually using a laptop here. And on most laptops, you press function left is the same as the home key.

And this little button over here, which has the shortcut control shift V, pops open my little list. Jono, do you want to add X equals one somewhere? Sure. So I actually just hit the slash key to put a message at the end and define a variable. Okay. See here, it's got a list, the list X equals one.

And so it's quite nice. If I click on that, it'll take me to where Jono defined it. Great. I can click back up here. I can close it. Okay. So I added this little one here. Why does it look weird? It doesn't quite look like chat GPT. It doesn't quite look like a Jupyter notebook.

It doesn't quite look like a bash shell. It's like a bit of a weird combination of everything. Yeah, I think, I don't know, Jono, I feel like you explained this better than me. So do you want to talk a bit about what we're trying to push people towards? Okay.

So maybe a good way to do that is to talk about those different analogies you used, right? So for example, in chat GPT, you might want to ask a question or, you know, okay, how might I plot a sine wave in matplotlib? And usually the interaction with the AI would be in one window.

You might be using cursor or something like that, but often it'll be, you're in one environment for chatting to the AI and it's only for that. And so you can imagine like we could create a dialogue that was just prompt messages. It's only this exchange between me and the AI.

But here, because we're in this live environment, you can also say, okay, cool. It's given me some code. Well, I can also execute that code. It's not separate places to do your exploratory programming and to do your prompting and to do your notes. It's all just mixed together in that same place.

So I think what were the three you listed? You said it's not quite a code editor, but we have like this ability to write some code and edit it. It's not quite ChatGPT, but we have an AI that you can discuss with. It's in the second message of the dialogue, if we're.

Yeah. Yeah. There we go. Yeah. So these different types of message are just different ways of interacting. And because they're all mixed and mashed together, it makes it quite a fun playground because maybe the other like piece of this is that the AI is not just in isolation. When I said, how might I plot a sine wave and not plot lib, it's not like only answering that question.

It can see that we were in a dialogue. It can see that we have this other content here. And so, yeah, you're kind of sharing this context with, in this case, Jeremy and I are sharing it. And then also the AI can see what we can see and riffle for that as well.

Also, we're trying to support the solver method, which is one of small short iterations with quick feedback. So we're trying to encourage people not to, or the AI, not to create huge blocks of text. So, you know, the thing at the bottom is just one line long. I can certainly add more lines.

And, you know, we can even maximize it. Command shift X. To toggle that. But it's very unusual to write, say, more than 10 lines of code at a time here. Whereas if you're, you know, familiar with something like code code or codex, you might be saying, oh, the unit of operation is 10,000 lines of code, get in a half an hour execution loop.

This is very much about like one or two lines at a time, immediately visualizing the output, moving in a very small step at a time. Yeah. Human in the loop. And everything about Solveit is designed to nudge in that direction. And it's also hopefully encouraging your brain to think about more of a chat bot where you write small, you know, prompts rather than giant files most of the time.

And that's why it's at the bottom of the screen. So yeah, there's just things, there's things we've done that's different. And that there is, there's reasoning behind it. And we've actually found it works pretty well. So in fact, to give a sense of that, I've got a little list of some examples of how I've used Solveit over the time.

Basically, most of us at AnswerAid AI do most of our work in Solveit now. So for example, in this case, I wanted to create a a message telling people about how Solveit improved over a period of time. So I grabbed the release notes, the short release notes from our GitHub repo, pasted them in and asked Solveit to help me turn this into a more readable format.

And I wanted it to go and actually extract the PR and get all the information about each PR. And so it showed me how to do that and pulled together the information about the diff of each PR. And so I was basically using it to interactively create information from our community about the latest updates to Solveit.

Something I think everybody hates doing, if you've ever had to, was setting up an email server. I ran an email company for 10 years and I still hated it. So I really liked that that when we set up AnswerAI, I just asked Solveit, okay, how do I set this up?

Make sure it's deliverable everywhere. And I just, it said, okay, here's all the steps. And so I actually, you can see you can kind of collapse things when you're done. So I just went through and got the CSV from Cloudflow like it told me to and asked, and it took me through all the steps of doing everything, which is a lot easier than all the clicking.

And it also left me with something now, when I need to do this again in the future, I just go back and repeat the process. Another example was I wanted to share with my team how we were going to go about horizontally scaling our infrastructure, for example, and I recorded a chat with some of the team about it.

And then I basically just grabbed that transcript and pasted it into a Python variable. And then I grabbed our style guide and pasted that into another variable and told Solveit, okay, I want you to help me write up a description of this project. Do you have all the information you need?

And then we started going back and forth iterating on this information for the team. And it goes all the way back and talks about Plash and Solveit and how it all works, which is very nice. Another example was I grabbed from Archive, the HTML version of a paper that I was interested in.

And just pasted it into a note, which is... not all of it came out beautifully in the note, but interestingly it was totally good enough for... to solve it to understand it. So I actually read it, you know, normal PDF reader, but then I asked like, "Can you help me understand this paper?" And it can understand the paper because it doesn't care about minor formatting issues.

And it worked really well because I was able to go back and look at it section by section. And, you know, it's like I was quite interested in some of the key citations in the background section. And so it's gone through and told me about what each of those citations were with links to them.

And then I was like, "Oh, do I really need to know this?" And again, it's kind of looking it up and giving me citations. And so I found for reading, it's nice. And it's also nice to implement bits of code as you go as well. Or in this particular case, I didn't.

Yeah, Jono, I know you do some implementation as you go paper reading too, right? Yeah, yeah. But the takeaway here is that it's not like it's just designed for reading a paper and implementing. It's the scope from, "Oh, I just want to casually ask questions about a PDF." Like I might normally go to claw.ai for, or, "Oh, we'd like to deploy a code change to our backends." Like I'd normally go to like some sort of system administration tool or use SSH.

Or like, "Oh, I want to explore some code and some ideas." Or I want to teach something. All these pieces kind of end up being different types of dialogue, right? They look different. Some are mostly prompts. Some are mostly code. A lot of them, I don't use the AI at all.

But it's all in the same basic canvas. So I think that's, yeah, a good way to start thinking about what this tool is as we start speaking about the particular features. Like, why might you want this? It's not at all a feature that's relevant for reading a paper, but it might be hugely useful for like Eric who's fact-checking his book and vice versa, right?

There's some features here that are only for coding. And if you're interested in solving it for writing, it's like, I don't care about Python tools as functions. But you can see that we're kind of designing a very general purpose thing. It's just why there's so much packed in all the nooks and crannies.

Yeah. If you mouse over or use your keyboard to select a message, you'll see it's got a little message toolbar. I basically never use this anymore because everything has keyboard shortcuts. So I'll mainly be doing that today. So for anybody who's used Jupyter before, we've tried to align keyboard shortcuts to be identical.

We've got quite a few more than Jupyter, but as a subset. So for example, to create a cell above, it's A or below, it's B. And there's no control or command or they're called chords. They're not chords, you just hit B. So I'm just going to hit B. And so I'm going to show you how to use solve it to be just like ChatGPT.

And so to do that, you have to be in prompt mode. And these are command or control, shift J, K, L, semi-colon, or just click them. Again, I always use my keyboard. So I hit command shift L to go into a prompt. And I can ask anything I want to.

So can you tell me concisely how I can use ChatGPT? Whatever. And say submit. And it'll tell me what to do. And you'll see that us using it is going to look a lot like it, right? So it's saying like, what do you want to use it for? Now one thing you'll notice here is it hasn't immediately let me ask a follow-up question.

And that's because I just hit the submit button or hit command enter. But actually, if I hit B to go underneath. If you hit Alt Enter or Option Enter, that's more like ChatGPT. And that's going to immediately let me ask another question. So if I say like, what kinds of facts?

So if I now hit Alt Enter, you can see it's immediately got me back, ready to ask the next one, right? So it's slightly ironic to be asking about ChatGPT, given that we actually use anthropic models behind the scenes at this point in time. Is it like, Lord? There we go.

It'll be so happy. If I wanted to think more about it, you sometimes get better answers. I mean, this stuff's simple. You don't need to. But if you want to have it think a bit more, it takes a bit longer to get the answer. You can hit the use thinking button.

I don't tend to use it until I get answers that aren't as good as I wanted. And like, oh, okay, I guess I've hit something difficult. Command shift D is a shortcut. So you can just see I can toggle it on and off. Whoopsie-daisy. Now this what happened here is I accidentally left it in code mode rather than prompt mode.

And the reason for that is actually because I have default code on, and that's actually default code is on by default. We're trying to encourage people actually generally, if you're doing coding, just to write your own code rather than have the AI do it for you. So we always switch it back to code mode unless you turn that off, in which case you stay in the same mode you're in.

So if I go back and re-ask this question and hit Alt+Enter without default code, you'll see it's now left me in prompt mode. And so now, and I tend to use voice most of the time for this kind of stuff. So I can say like, oh, that's interesting. How does this compare to Claude?

Is that similar? And I'll turn use thinking on, and you can see a little brain pops up. That means it's thinking. There you go. So it knows. And it looks pretty happy to me, Jono. I think you're right. Yeah. So that's like, like ChatGPT, right? But here's something interesting.

You know, if I create a note here, now, this is, I find this really helpful. And add a Markdown heading. So our basics with Markdown 2, this is 3, right? I can keep things organized, right? So I can collapse that left and right, or click the little arrow. And you can see here, this little number appears.

It says this, this note contains six tokens, but inside it, there are also another 723 tokens. You can kind of see how much you've collapsed away. But that's great. You know, I've kind of, and also you can move around. So hit left, it goes to the, to the start of the section, go right to go to the end of the section.

So here I could say like, like jupyter/reple. Whoops, I made that a prompt. So that's fine. That's great. It's, it's telling me stuff. So I can just hit command shift K or click that. And so I'll collapse this section. All right, Jono, since we're, since you've got my URL, do you want to do some like jupyter examples?

Sure. Before I do though, just on the, this is like chat GPT, I guess you've already seen it, but one way this is quite different is the, the non-linearity of it. You know, a lot of these chat products are still very much this, like it's an, it's an exchange of messages.

And once it's done, it's done. But these are all editable. Like, so I'll go to the first prompt message you showed and I'll change it. Right. I'll, I'll edit the AI's response. And now any further interactions with the AI sees that as part of the history. Or if I didn't like the, the next one, like this no longer makes sense.

What kind of facts I can delete that. Right. So it's a very freeing chat canvas, because if I want to go down a rabbit hole, I can, and I can always come back, uh, collapse away. We also have ways of hiding certain interactions, right? So if I don't want these to color the way the AI interacts in the future, there's a little, um, eye icon, which is probably showing as toggled now on Jeremy's screen.

Yeah. Um, so you can manage your chat history a lot more usefully. Um, okay. But anyway, we should, uh, we should talk about the Jupyter REPL part of it, um, excuse me. So, um, I want to go below. Um, yeah. So like we showed earlier, I think we had a variable X defined, um, as in Jupyter, if you execute a cell that has an output, um, it's going to show, I guess this is from our plotting, uh, the map, the demo, um, but this is a live variable, right?

So for example, things like autocomplete, um, I have, uh, I think arrays normally have a shape. Yeah. There we go. I've got this little, ah, you can't see my, my dynamic. Why don't you show your screen so we can see all that. Sure. All right. Just a sec. Um, yeah, I guess the, uh, the, just seeing the magical edits was, uh, that's useful for the, the dynamic nature.

Um, yeah. So showing here, we've got this X variable. So if I start typing. Could you make this less wide, maybe, and increase the font size of it? Great. Thank you. Sure. Let's go. What if I do something like that? How's that? Nice. Um, yeah. So if I write a variable name, I'm going to see it printed out as the output.

I don't have to use print in this. I want it. Um, if I start typing, I've got this dynamic autocomplete for some of the attributes of the, the, um, variable. Uh, I could modify this in place, right. Um, and then print, print some part of it. So, um, it's a very live and dynamic environment.

Um, and it's got this persistent state between running. If you're ever like, you've managed to make something up or you'd actually like to redefine X, we always have the same primitives as something like Jupyter notebook. You could restart the environment, right. So this is going to clear. If I show the variables now, um, you'll see there's no values defined because we now haven't run anything that shows what X is.

I've got a little what's appearing on my screen. Yeah. I clicked it, uh, very fast. Um, let's just do that again. Okay. Um, uh, fair enough. It's no longer an empire array. Um, but, uh, yeah. Okay. So you can see, we've got a variable X defined. If I restart the notebook, it's going to go away.

Okay. I know when it's ready because you'll see the, um, times disappear on the code. Yeah. Um, and so we're able to like reset the slate if we want, but for the most part, things are live and existing until you want to get rid of them or until you close down the notebook.

Um, so this is very useful for later on, we'll show like running a web application or defining a bunch of functions. I don't think there's much to add now for the, um, the like Jupyter piece, other than if you've ever used any kind of notebook environment, you'll be very familiar in this, in a spot.

Um, yeah. I don't know if you've got more to add on that, Jeremy, or you want to go through things. Okay. Cool. Okay. And Jono's changes have all appeared at my end as well. So, yeah. Um, every, uh, note prompt import and prompt output is formatted markdown. Um, even, for example, if I create a note here and, um, let's find a cute puppy.

Some of those are a bit, this is a proper cute puppy. It's like, yep, it's a cute puppy. So I can now copy that, jump over here and say, either in a note or in a prompt, oh wow, this sure is cute. Paste. And now we've got a puppy.

And the key thing behind, um, Solvert is that the AI sees everything you do and vice versa. So we can ask it. I want a puppy just like this one. What type do you think it is and how old do you think it is? Do you think it would make a nice pet for our family?

Okay. Golden retriever. Good choice. Um, so I think now might be a good time to talk about modes. Um, so I might just clean this up a little bit. So I just, um, pressed X to cut and I had already collapsed that section, so it cut the whole section.

Um, uh, I could paste it somewhere else. So if I hit V, you can see I've now moved my section. Um, so we've got this interesting thing called modes. Um, standard, learning, and concise. So maybe the best way to explain that is by showing you. Um, what do I do?

Okay, right up to the top. I'll just say like, um, in learning mode. How do I plot a sine wave? This is a good answer, right? Because like, you can't really answer a question until you know what somebody knows. Um, because you really need very different kinds of answers.

Um, and so I can say like, um, to be honest, I don't even know what one is. But, um, I was told for homework where we're meant to create them and learn about them and stuff. So I was like, yeah, let's not plot right yet. Okay, that's good. Uh, on the other hand, uh, yes, I'm an expert in matplotlib and in numpy and do a lot of trigonometry in my work.

I just want a reminder. So please jump to showing me the code. Be concise. Now one thing that's interesting here is I've, I've added this, um, question above this question. And that didn't confuse it because of the golden rule, which is that, um, the AI sees what you do.

And so the idea is if you're, if you're here in the dialogue, it only sees what's before it. It doesn't read ahead, you know. Um, so it didn't see this question when it answered this question. Um, so that's learning mode and it really does encourage you to make sure that you're learning as you go.

Um, on the other hand, if I copy and I'm just going to paste this twice and then I'll go to the top. So it won't see the previous ones. And if I go to concise mode, this just gets the job done and it keeps everything compact, um, which is quite often what I want.

And then standard is basically the kind of default flawed behavior, which I very rarely like. It tends to produce overly verbose code, um, doesn't try to understand your needs very well, but it's there. Sometimes you just want the full example, right? Like it's, you know, I just want the, the, the default tutorial on that, on that plotlib that I might find on the internet.

So I can copy and paste the one line I actually care about. And, um, you know, once you get code like this naturally, you'll very often want to run it. Um, but rather than just run it flawed code style in the background, we kind of bring it front and center.

So if you hit W, um, or, um, or hit the add messages, fence block messages, it just turns those into a code message for you, which I can then run. Okay. And, um, um, the AI sees the same output that you do as well. Um, so I agree, like...

...ask it anything you like, and it'll be able to see all the outputs and everything. All the outputs and everything. There you go. Um... So it's interesting. Um, I guess I use learning mode more than I used to. Um, I kind of went into using concise mode a lot for a while, still sometimes use it, but I'm definitely realizing the more I use AI, the more I realize actually I need to be pushed to not use AI too much and to take my time to explain what I actually want and to actually learn as I go.

Um, I think we've seen this in quite a few of our staff and students, more and more people who are quite experienced being like, yeah, I still got to use learning mode. Um, do you use all of them a little bit, Jono? Do you have one? Yeah. I, I, I default to learning mode for some things, but occasionally, especially if I'm feeling like a little lazier and wanting to get something done that I've done before, right?

That's something that's almost rote. I just want to quickly bang out some plots of the same data that I plotted a previous time. I'll switch over to usually concise mode just to... Matt Plotlib is great for concise mode because like, who's got time to learn from that? Would you like to learn about importing Matt Plotlib?

Okay, let me just toggle it into standard or concise for a little bit. But, um, if I'm actually engaged and working, um, I'm usually coding first and then if I want, I'm asking learning mode. And it's very steerable, right? Claude Sonnet is very steerable to say I'm, I'm actually trying to get this done.

I, I don't want you to like baby me, but, um, I do want to work in small pieces a few lines at a time. You can give it some directions like that at the start, and it's going to very much like adhere to that, um, and follow along. So, um, you can always stop it, um, at any time.

So, tell me a detailed and adorable story about the adoption of this puppy. Make it a real hero's journey. He's thinking. And so, I probably won't want to stop this because it's going to be super cute. There we go. So, as we start learning about the puppy, I can just hit stop.

Okay, I don't want to read that now. Um, and you can also do that with, um, code. And, uh, the shortcut key is shift, uh, shift s for stop. So, shift s. Oh, okay. Nice. Um, okay. I'm looking at the list of AI stuff. I guess the only one we haven't covered is tools.

Do you want to talk about tools briefly and then speed through some UI bets? I love tools. Um, so you might have heard about, um, MCP, um, and, uh, all this kind of, uh, fancy agent stuff. Um, we have a very different approach to all that, uh, in solve it, which we think is more powerful, um, but, uh, also a lot easier to do.

Um, to create a tool, you just create a function. Get the current user's name. So I've got a function and, um, I can now use it in an agentic loop. Um, So let's just show you that as well. You might need a type name. Yeah. Everything needs a type.

So it knows what to pass in. Thank you. Uh, Jeremy, I noticed the user ID for this user's name. I noticed some, uh, ghost text appearing there and it wasn't doing that before. Yes. Talk about that. Um, okay. So that's, that's the great feature in most IDEs. Yeah. This great right arrow complete or right arrow to accept it.

Um, obviously this is often useful if you're writing fairly boilerplate code, um, but it can also be distracting if you're learning. So you'll notice we're now in standard mode, which is why this is suddenly showing up. Um, if you're in learning mode, you don't get the ghost text. Although if you want to, like, if it's something obvious, like this, um, doc string is arguably quite easy to predict.

there are keyboard shortcuts to trigger it. Um, oh, it won't actually change until I send it off. So yeah, if I do that now doesn't happen. So if you hit option or alt full stop, then it forces it even in learning mode, which is a pretty good idea. It's not just distracting.

It's encouraging you to turn your brain off, which is not always healthy. And this is going to be extremely incendiary. And when we were developing Solveit, like I, I felt it almost unusable until we had the ghost text. Like there was a while where I was so used to tab complete that it, it felt like wrong to be typing in a code box and not have it.

And now I don't think I've had it on by default for the majority of my work for the last few weeks. Yeah. I mean, I, I like it on occasion. It's a bit like, again, when it's back to something more boilerplate. Interesting. Um, but having the like, oh, I can just hit a keyboard shortcut to get the completion if I want it.

And I know it's a function that like my brain would normally be waiting for that text to appear and hit tab. Um, it's still there. Um, but when you actually just want to like wrestle with some code yourself, it's not there. So, uh, so yeah, I can say, um, can you please get the ID for the current user?

Now, obviously if every function was available as a tool, that would be bad news if you had like, you know, delete directory functions in the symbol table and so forth. Um, so that's, you just have to tell it at least once in your dialogue that something is allowed to be used as a tool.

And to do that, you write ampersand and then you put the tool name in backticks. Or if you want to be fancy, um, you can put multiple tool names in an array in backticks. And so you can see, it's actually looking up these functions. Um, and as I mentioned, you can, you can have it anywhere, the, the list of tools.

Um, so I could make this a note and say some note tools available colon. Um, and then get rid of it from the prompt and it'll still work. It's hard to overestimate how powerful this is. Um, you basically have an instant cloud code, you know, in fact, we've provided all the tools you needed for that.

There is something called Dialog Helper. And Dialog Helper can tell you about its own tools. So you just hit, um, it's not an all, I think you have to import it if you want FC tool info, but if you just do tool info, it's there. So we've got tool info.

Um, and so that's just brings all the tools in and you can edit that if you want to. Um, actually, I'm just going to call out what happened there. He called a function and it added a message to the dialogue. Oh yeah. So this is one of the pieces that we haven't spoken about yet, but there's this idea of like, uh, we call it meta programming.

You can see one of the tools is add message. Um, and so this is a tool that you can hand to Claude. In fact, it'll have it now because that note exists. Um, so you could ask it to add titles to tidy up your dialogue, right? Or, um, add a code cell that does some specific thing, um, or find all messages that do something and then edit all of them to do something else.

There's some very powerful pieces that fall into place. And then for files, like you're talking about Claude code style, um, HNT, you know, file editing. Yeah. We've got, um, ability to grip and said and view files and insert or replace or edit. Um, so, so we use this, um, I think most recently to like do some code archeology.

Quoing a GitHub repository, let, uh, solve it loose to say, Hey, use these tools, figure out where like these arguments eventually go. Right. And so it finds a function that uses them and then it finds what function that calls and it finds what function that calls and it reads another file to figure out.

Oh, okay. Down at the bottom of the stack, they're passed over the message queue in this format. Um, it was very useful to be able to send it off on a little bit more of a, a deeper task once in a while. Yeah. In fact, the, this is basically the same sort of tools that Claude code has by default.

These actually come from Claude's text edit API and we've, um, improved some of them and we've also added some others like the ability to search. Um, so yeah, it can go away, search the code base and make edits to your files. And so you can use it fully agentically, but we encourage people to be a bit cautious about how you do that.

Um, I do it in a way that really menial stuff. Sure, get it, go and do it for you. So we, this, this code archaeology, it was easier than us digging through the code to see what calls what, um, but we're not going to get it to go off and write all our software for us because we end up with something we don't understand.

Yeah. I think the most common pattern by far across Answer.ai is like, go and find some information. And in fact, there's actually a couple of tools built in as well. So you don't have to create functions for them for specifically searching and reading URLs. Um, because that's often what you want, right?

Like go read the docs of the Gemini API and tell me how to embed a document. And let's do that right now. So for example, fast.html. Um, so there's a couple of ways you could, you could do this. I could say like, um, um, um, please have a look at.

And any links that would be helpful and tell me how to create database applications and fast.html. Um, yeah, so that's going to go and look at that, um, link. As you can see little things popping up to tell you, it's reading the URL and it's reading more URLs. And, uh, the thing it's done is it's gone through this thing that's designed specifically for language models to look at, just telling it all the things, places it could look for information.

And, um, there it is. Um, or, um, you could say, please create a note containing the contents of. And it can do that too. Hey, um, is it because the tool definitions are further down in the dialogue? Um, this one I was expecting to already be there. Um, I actually deleted all the tool definitions, but, um, it's meant to already know that particular one.

Um, oh, okay. Um, well, we could always, uh, show the keyboard shortcut to copy the output and, um, absolutely dump it in a note if we need, but it might just need a reminder about what it has access to. So dialogue helper has some, you know, brief instructions, uh, documentation.

Um, so one of them is called URL to note, which is the one I was thinking it would use for me. Uh, you can, oh, you know what? I didn't use thinking mode. I'm kind of curious now. Let's try turning on thinking mode. What if I also use your tools?

Hmm. Interesting. I didn't know we made URL to note available. Maybe we haven't updated. No, it's right there. Well, there you go. That's interesting. I think, um, that's a new, so we're using Sonnet 4.5 and it's interesting. Every language model is different. Um, so we're still learning, uh, about what each language model can do.

And it seems for some reason, this one might need more encouragement to use specific tools. I think the rest of this is going to be mostly, oh, I guess we should talk about like, uh, sharing dialogues and what's going on there. That's going to be relevant to new users and old users alike.

I was just going to also mention, um, undo is important. So one thing I quite like is if I create a couple of notes here. So I hit Alt Enter there. Um, and if I delete D from there, and I delete S from there, and I can go back here and press Command Z, it's undone that one.

Go back here, undo that, it's undone that one. So it's even quite smart if you edit a prompt output, rerun the prompt. You can go back into the prompt output, hit undo to undo the AI's changes as well, which is quite nice. Um, all right. I think there's lots of useful things here.

Should we go through this? Yeah. Okay. Um, so this, um, this thing that's running here that has, um, you know, variables that have values. We call it a kernel. That's not just we call it a kernel. It is called a kernel. Um, it's a, it's a running Python interpreter, basically, that has this state.

And when you hit restart, it restarts that Python interpreter and clears out its state. Um, so it's a full running copy of Python running on this machine that we've deployed for you called an instance. Um, if you go back to the dialogue list, that stops your kernel. So if I go back into it again, and ask what a is, it's not there anymore.

Um, however, if you don't click that top left thing, but just like go back into here, for example, you could go to the dashboard and click the button there. Again, there's multiple ways to get back to it. That doesn't stop the kernel. And so you can see down at the bottom here, there's a list of running kernels, right?

So there is that kernel. So I could then open up "open up Claire's lesson". And in that, um, click that code. A doesn't exist because this is a different running copy of Python. Or else back over here in the original one. That's still right there. Um, and you'll see our, um, what a refresh list of running kernels now shows me I've got two running kernels.

Do you think that's clear as to what a kernel is, Jono? Yeah. Um, and so each dialogue has its own kernel, I guess, just like a dialogue is the collection of the notes and discussion and so on. The kernel is like the thing that's run any code that you've run in that session.

And if you restart it, you're clearing the slate. Um, yeah. Um, so, uh, I find it really helpful that we have a, um, duplicate button, which has the shortcut D. Um, and I find that helpful because often if I'm working through trying to solve a problem and I kind of, not quite sure what direction to go.

And I want to do a little experiment, or I want to create multiple versions with different tweaks or different parameters to a model. Um, I can hit D and it opens up a second copy of this kernel. They're now both running, you know. Um, and then I could change its name to other updates or whatever, and these are now two separate ones I can play with and go back and forth between the two, which I find quite handy.

And everything you do, you know, ends up, um, you know, saved in your dialogue list. This is really nice for like templates as well. So often I have my, my starter template that loads my, uh, latest chapter of the book and populates some data into a list and all those other things.

And then I could duplicate that a bunch of times. And in one of them, I'm exploring the user feedback and in another, I'm editing and in another, I'm changing which chapter we're doing. And then you've still got all of your prompts and your tools and your bits and pieces.

And in that case, you, you might want to actually click the, this does exactly the same thing, click the jute button on the dialogue list. Um, so you can also go into a terminal at any time, which is shift T, uh, or you can, um, do it here as well.

Um, and that'll go into a terminal in the, the current directory that you're in. So I'm currently in the teach directory. You can go back to earlier directories using the breadcrumbs that appear here. Um, so if I press shift T, you'll see, um, you'll see I've got a terminal and you'll see here, all of the dialogues are actually stored as Jupyter compatible notebook files.

Um, obviously in Jupyter notebooks, you won't have all the functionality, um, um, but they, they do go in both directions. And so I could even like open up in Vim and see that it's actually a JSON file behind the scenes, um, and I can CD around and do all that kind of stuff.

Um, that's also another way you can create folders, move things between folders, so forth. Um, often you'll have stuff that you just want to upload from your local computer. So you can always hit the upload button to do that. Um, or of course you can upload or create a SSH key and get clone repos.

And so I tend to do a lot of my work now in cloned repos. One nice thing about cloning a repo or, or initializing a new repo is you can always revert back to checkpoints if anything doesn't quite go the way you want it to. All right. Public URLs.

This is a big one. Um, so maybe even with creating a new dialogue. Um, so you can run, um, basically any server you like, and if you have it running on, um, port 8000, um, then everybody that you give that public URL to can also use it. Um, so let's see what would be a good way to do that.

Um, I mean one simple way, for instance, this is kind of cheating a bit, but I could say, um, python minus m http dot server right in the background. Okay, we're now serving. So that uses port 8000 by default. So if I now head over to this public URL.

There you go. There's my python server. Um, so you could run quarto, run a blog, do whatever you like. Um, although, you know, most of the time the way we tend to use that is to create, um, little web applications and test them out, um, which it looks like Jono's doing.

So shall we just watch Jono? Sorry Jono, I was running my python server. So it's now free for you, hopefully. All right. So I'll stop this and restart and try that again. Okay. So this is just creating a little, um, fast HTML server. Um, but maybe I ran that twice.

One more time. Um, and then creating a couple of different routes. Are you sure you stopped? I am not at all sure. No. Um, yeah, I think I did. Oh, no, I didn't. There it is. Python minus m http server. Kill 301. Oh, that's right. So it's running in the background.

No worries. I don't know why it says defunct, but, uh, that might mean it doesn't give you back the port. It says me right for, I've never quite done it this way before. Do you have the port available? Yep, I do. All right. Good. All right. Um, and so it's a very small app.

I just have two routes and have some interactivity. So when I click on one, it uses htmx behind the scenes to toggle the, the word in this case. Um, but importantly, this is an app running on port 8000. So if you went to the public URL, pull on foo.

I don't know if you want to do that, Jeremy. Absolutely. I want to do that. Yeah. Um, That should be our running application. Simple as that. It's going to be huge. Everybody's going to want to use your app. And the cool thing is it's, um, it's live, right? Like if I go and edit this code here to say hi instead of hello and submit that, um, Jeremy should be able to refresh that page and see the new app.

So you're, you're there, um, editing, editing the code of the running application. It doesn't have to restart, right? I can just add a new route. Um, and it does. Let's do that again. Okay. We've got the high world thing. So change it again. I don't know. I'm not even going to refresh.

Just tell me when you're ready. All right. I've changed it. So, okay. So there's no redeploy. Hey, Jeremy. Thank you. Um, yeah. So we have applications running like, uh, the discord buddy solve it, buddy chat bot in our discord. That is just a solve it dialogue. And on the public URL is where the app runs.

Um, but anyone on the solve it team has that private URL. They can edit the dialogue. They can give it new functionality or tweak what data is available to it. Um, make updates and the app is still there running as a live artifact in its own instance. Um, so it's all nice and separate and container.

There's no like, um, special frameworky stuff. Like this is a plain Python, ASGI web application. You could run fast API. You could run Django, whatever. You could run quarto preview, right? And serve up your blog from this if you so desire. Um, yeah. Yeah. Um, awesome. Cool. Um, so Okay.

What if I want to share the actual code other than just like sharing the app. So we're talking about, uh, sharing. Uh, yeah, great. Yeah. So actually it's interesting at answer AI. We very often want to share with each other that an artifact we've created where actually the dialogue ends up being the artifact itself.

You know, just like sometimes you kind of end up sharing like chat GPT, deep research summaries or whatever. It tends to happen a lot more in Solvert because you've actually built a complete analysis package or you've done a complete transcription and history and whatever. So there's a few ways you can share your work.

One way is just to go to settings and click export dialogue to export it to a gist and that will render it kind of okay. Gists have some benefits to them which make them useful in some situations or if you want to make it, um, you know, really work with Solvert though.

Let me give you an example here. Um, actually I'll just show you as well. Like sometimes if you want to make sure it's getting the latest information, it helps to ask it to search. Search the web to make sure you've got the latest information. Because it takes a bit of time for it to search so it doesn't always take that time unless it's knows that you want it to.

Just the way I prefer, you know. And so when you do that you get these little asterisks which you can click on to get more information. So now if I publish this then that's like a gist but it's just going to be more um, Solvert native as you see.

So that way you can kind of share something that's the same as you see. And we're going to be improving this in the next couple of days so maybe by the time you see it there'll also be options to get it in a more pure blog post style output.

Okay. Oops. Needed to refresh. All right. There's some nice extra things in with AI. Sometimes again a lot of modern coding tools really lean into this. It's like get the AI to write your code for you. You can have that mode too. We call them super completions. They use a more powerful language model to do a bigger completion than ghost text.

Don't overdo it. But you know if you want to You know it goes complete to write that for me and then it's like okay this is all pretty standard so rather than hitting right arrow right arrow right arrow. I can just hit command shift full stop. And it'll just take a little bit longer to try and write the whole thing for me.

There we go. You can also select a section. And then once you've selected if you press the same thing command shift full stop you can ask it to do something more specific. Maybe a recursive one, Lina. There we go. There we go. Yeah okay. So I guess those are those.

Then I'll show you an interesting one if I see. Let's see from first html.com and import So I could say like. Can you show me a basic example of a fast html table containing a header row and then a couple of Contact rows with say a name and a phone number just use two or three rows of example data.

Use thinking. It's quite good I find using AI in this way to generate tests data or examples or stuff like that. So I can go ahead and hit w now. And maybe because I kind of want to be more in like. Hey you do it for me mode I'll switch to concise mode here.

And then I'll. I want to make this look nicer. So I say like. What are some best practices for laying out tables? Have a look at the way this is rendered currently and. Tell me if we can improve it using Tailwind somehow. Now again key idea that. That Solvert should be able to see the same thing that you see.

Now it's a bit tricky because. What a table looks like depends on your screen. Right so you actually have to tell. Solvert you're allowed to look at my screen. So to do that you can hit command shift comma. And it brings up a little thing saying can I please look at your screen.

And I say yes. And what actually happens behind the scenes. It just pops this little output included to let it know you did this. It's taken a screenshot. Of this exactly as it appears in your screen. And so before it could still see that output. But it saw it as HTML right.

It just sees the raw HTML table. And that's probably okay at guessing what that looks like. Yeah it might be. The raw pixels as well. The issue is. Particularly though if there's like a rendering problem with complex CSS. Often it doesn't. You know. Let's see if this one works.

I'm going to hit W. And I'll rerun it. Okay that's not bad. So one thing I tend to find with like. Tailwind is. People often get too lazy. And they just copy it all over the place. So you know. This is where I would then kind of say like.

Oh yes this is much better. Please put all those key. Sets of Tailwind classes into variables. And refactor this to use them. This is kind of how I often find. It's nice to. Quickly build up. Sets of. Reusable. Oh I accidentally rerun it. Of reusable. Kind of. Class strings or something.

All right. Done that. Oh yeah. About export and mbdev and so on. Yeah I just. That's a good point. I want to show these popouts though. If they're quite neat. If you. Hit this button here. Then it pops open the output into a separate tab. And. The reason this is cool.

Or like it's cool for lots of things. But like one thing I find really helpful is. That. You can have. Kind of a conversation with. An AI where it's editing. The previous cell. And stuff like that. That could. Can you know. And you want to see. In a separate window.

It being updated in real time. So any changes. That we make over here. Are. Reflected here. In real time. And you can also do that for the. The full thing. Instead. So. Yes. Sorry. Jono. NB dev and stuff. Oh. It might actually be nice to keep a few of the.

Yeah. Code examples around. Yeah. Yeah. Okay. So. You've. Worked hard on this table. I've worked hard on this table. Does it only ever live in this. Updates. Dialogue. Yeah. Exactly. So. If we. Yeah. So probably. What I'd do there. Is it'd be like. Yeah. That looks perfect. Please refactor.

This table creation thing. Into a function. Now. That I could pass. A list of dictionaries too. And then show me. An example of using it. All right. All right. So now if I hit W. There's multiple fenced blocks. So it's going to create multiple outputs. Which again. Is really nice.

Yeah. It looks good. So now if I hit E. Or press export. Goes red. And that creates a module. With the same name. As the. Dialogue. So. If we create. A new. Dialogue. Might need to export the. The classes and stuff as well. But I can do that while you.

While you. That's a really good point. Actually. And while you're doing that. I'll show people what you're talking about. Yes. This function. Is actually. Not standalone. Because it's referring. To these classes. That were created earlier. So. What Jono's done. Is he's gone back and. Exported that. Although. You know.

I guess we don't want. Doesn't really matter. But we don't particularly want. The table. That's cool. So I can do a. Split there. So. That's good. Oh. I see. So you've. Exported all of these things. That's a great idea. So. Jono's also. Exported all the. Exports and everything. So.

I can now say. From. And it'll be. Named exactly. The same thing. As the dialogue. Import star. That's not. It took a while. Sometimes that happens. There we go. And so we've got. The reusable. Module. That you can. Turn into a pipe. I module. Particularly if you use. NB dev.

It can make it much easier. In fact. If you're in an NB dev project. The export button. Actually creates. NB dev compatible. Exports. So you can. It's really good. To use. Solve it. I find. For working on NB dev projects. And there's no. Mystery here. Right? Like if you click.

Show all files. You'll see. This is just creating. In this case. An updates.py. File on the disk. You can read that. And edit it. And mess with it. And also. If you're exporting. You can just choose to export. Just that. Python file. There it is. But it's really nice.

To be able to build up. Some functionality. In one dialogue. And then I can share that. With the team. Say hey. Just. Pull this. You know. Pull this. IPynd file. From GitHub. Or run it. Or whatever. As soon as you interact with it. It'll be exported. To this module as well.

And then you can import that. In your other dialogues. And use. Whatever pieces. We built up there. You know. Often like custom tools. Or cool pieces. Of like functionality. That you can. Move that around. And develop it. Across multiple dialogues. One that's focused. Maybe on. The UI components. And another one.

That's on the back end. Or something like that. I want to demonstrate our usage of LaTeX compatible math. In Solvert. So could you create a few. Interesting and. A variety of. Math type outputs. For demonstration. So yeah. For people who need to do math. For. For either they're learning.

Or they're doing research. Or they're reading papers. Oh. That's interesting. So it's got. Confused there. By the. Well not confused. It's trying to be helpful. It's all we've imported. Fast HTML. So it's like. Oh obviously. You're doing stuff in fast HTML. So we could delete those. Or we could just take them off the prompt.

And then. We run it. So by hiding it. It can't see them anymore. And so now it knows. What we mean. There we go. That's the integrals. And that's interesting. So I think we might need to change the system. Prompt to remind it. How to do this. But from now we say.

We do not support. So one problem with LaTeX. If anybody who uses it much. We'll know. Just often. Using dollar signs. On their own is annoying. Because you can't write dollar signs. So. You can see. If I hit. Right square bracket. I can edit the output. And that way.

You can see exactly. What it all looks like. And so here are examples of. Inline. And there it is. Inline. So. Yeah. And then. We do have these. Kind of. Let's call them. Feature flags. So basically settings you add here. Get added as environment variables. But. There are also some special ones.

So use catech. If you set it to anything other than zero. Turns on LaTeX mode. Otherwise. Avoid it. Just in case it messes up. Any rendering for you. So you can also add. Use vim. And what that's going to do. I won't show it to you now. But it's just going to.

Change your editor. To. Basically be vim compatible. As a vim enthusiast. I normally don't like. Non-vim editors. That try to be vim compatible. Because I normally find. They're not good enough. But actually. This monaco vim mode. It's. Has not messed me up yet. It's really compatible. And works very nicely.

So. Anybody who's a vim user like me. Will probably. Appreciate that. Fantastic. All right. Well. That's quite a. Good long video. I don't think we covered everything. I'm sure there's some surface area. There that you will uncover. Especially because. The apps also always changing. Right. I think we. Up.

Added the. The preview. Just yesterday. Or today. So poke around. Hover over buttons. If you're not sure what they do. We try to add tooltips. And keyboard shortcuts. If you're in the Solveit course. I assume that's why you're watching. This long video. Feel free to ask questions. And say hey.

You know. Where did that export button go? If stuff's moved around. We'll be sure to tell you. But hopefully. This serves as a snapshot. In time at least. Of what the app looks like. At present. And if you're curious. Of like. What is this for? You know. What is Solveit?

The app. Hopefully this answers. Some of those questions. A bit better than just us. Hand waving about. A canvas for creativity. And code execution. And so on. Give it a bit more. Of a concrete feel. For what the application. Itself looks like. Thank you Jono. I think this is going to be really fun.

I hope people. Anyone who's watched to hear. Is obviously interested enough. so thanks very much for watching bye gang there's everybody