
Teach Jenn AutoShow with Anthony Campolo
A conversation about creating an open-source tool that uses AI for show notes, code collaboration, and more efficient content workflows
Episode Description
Jenn and Anthony demo AutoShow, an open-source tool that transcribes audio/video and generates show notes, blogs, and chapters using LLMs.
Episode Summary
In this episode of Teach Jenn Tech, Anthony Campolo walks through AutoShow, an open-source Node CLI tool he built over the past year to automate podcast and video show note generation. The tool chains together a pipeline: given a YouTube or Twitch URL, it downloads audio, transcribes it with Whisper, prepends a custom prompt, and passes everything to an LLM like ChatGPT or Claude to produce structured output—episode descriptions, summaries, timestamped chapters, comprehension questions, or blog post drafts. Anthony demonstrates both the CLI and a nascent Astro-based front end, showing how different prompt options and models shape the output, and explains features on the horizon like speaker diarization, multi-LLM comparison, chapter-based audio clipping with FFMPEG, and voice-matching through embeddings. The second half shifts to a hands-on contribution session where Jenn learns the pull request workflow by adding herself to the contributors list and committing a new "rap song" prompt to the repo, working through branch creation, staging, committing, and merging live on stream. The conversation highlights the philosophy behind the project—giving non-technical users transparent control over every step of the content-repurposing pipeline rather than relying on black-box services—and previews how future sessions will use LLMs to draft code for open issues.
Chapters
00:00:00 - Introduction and Catching Up
Jenn and Anthony open the stream by noting that Anthony has appeared on the show at least five or six times, making him one of the most frequent guests. They reflect on the fact that Jenn has now been live streaming for over two years—roughly as long as Anthony had been streaming when she first started—and credit Anthony and Carmen for inspiring her to begin.
The conversation quickly turns to the reason for the episode: the two are collaborating on an open-source project Anthony has been building solo for about a year. Jenn jokes that she simply told him he'd be getting his first contributor, and Anthony confirms no one else has pushed a single line of code to the repo yet, making Jenn's involvement a fitting full-circle moment given their shared streaming history.
00:01:42 - How AutoShow Was Born
Anthony explains the origin story of AutoShow. He initially built it as a personal tool for his podcast, FSJam, using OpenAI's Whisper for free transcription and then feeding those transcripts to ChatGPT and Claude to generate one-line descriptions, paragraph summaries, and timestamped chapters. The output was intentionally neutral and objective, and when he showed it to others, they encouraged him to turn it into a product.
He describes how the workflow evolved from a manual, multi-step process into a Node CLI that chains the steps into a single pipeline: feed it a URL, it transcribes the audio, prepends a saved prompt, sends everything to an LLM, and writes the result into a markdown file. He expanded the tool to support multiple content types, RSS feeds, seven LLM providers, two transcription services, and various prompt templates, and began building a rudimentary front end—all developed in the open on GitHub with 46 closed PRs and roughly a hundred commits.
00:06:59 - Live CLI Demo and Pipeline Walkthrough
Anthony shares his screen and walks through the four main steps of the CLI pipeline: generating a markdown file with front matter, downloading audio for Whisper, running transcription, and optionally passing the result to an LLM. He shows the prompt file that tells the model exactly what format to produce, then runs the command with ChatGPT enabled, demonstrating how the tool outputs an episode description, summary, and chapters—all for a fraction of a cent in token costs.
Jenn contextualizes her interest in the project by sharing that after being laid off in October she wanted to level up both her coding skills and her content workflow. She notes that two-hour live streams aren't always accessible, so having AutoShow generate a draft blog post from a stream recording is a practical way to repurpose content and avoid staring at a blank page.
00:13:28 - Front End Demo and Feature Exploration
Anthony switches to the Astro-based front end, checking out an open PR branch and installing packages to show the prototype React UI. The interface lets users paste a URL, choose a transcription service, select an LLM, and pick a prompt type. They demo the "questions" prompt, which generates comprehension questions from a transcript, and encounter a humorous hallucination caused by using Whisper's base model instead of large-v3.
Jenn asks about speaker diarization, and Anthony explains that while an integration with a Python diarization package exists, the open-source approach is extremely slow—roughly 100x longer than standard transcription—making paid services the practical choice for most users. They also discuss the difference between short, medium, and long chapter options, which control how detailed each chapter description is while all retaining timestamps formatted for YouTube.
00:20:19 - Upcoming Features: Clipping, Multi-LLM Comparison, and Voice Matching
Anthony describes a script he built the previous night that reads chapter timestamps and uses FFMPEG to clip the audio file into segments corresponding to each chapter, with plans to extend it to video. He also outlines a future feature allowing users to run the same content through multiple LLMs side-by-side, and even feed their outputs back into each other to create a combined outline—though he cautions that too many rounds of feedback can homogenize the output into generic "AI slop."
The conversation turns to customizing voice and tone. Anthony explains that users could include samples of their own writing in the prompt to flavor the output, or eventually create embeddings from a large body of their work so the LLM mimics their style more closely. He also discusses building a feedback mechanism so users can iteratively refine chapters or other output rather than relying on a single one-shot prompt.
00:26:38 - Generating a Blog Post from a Live Stream
Anthony runs the CLI against one of Jenn's Twitch recordings—a previous episode about Snowflake—using Claude as the LLM and the blog prompt. While they wait for the transcription and generation to complete, they discuss how AutoShow differs from the many startups offering content repurposing: it gives users full transparency and control over the prompt and model rather than acting as a black box.
The output is a seven-section blog draft covering data warehousing and Snowflake's platform, which Anthony renders in the Astro site to show the formatted markdown. Jenn suggests including metadata about which model was used, and Anthony notes that the model name is already embedded in the file name and URL slug, though it doesn't yet specify the exact model version. He posts the output as a GitHub Gist so Jenn can refine and eventually publish it.
00:37:37 - First Contribution: Adding Jenn to the Contributors List
Jenn shares her screen and the pair walk through the full GitHub contribution workflow. Anthony guides her through pulling the latest changes, creating a new branch with git checkout -b, editing the README to add herself as a contributor, staging the change, committing, publishing the branch, and opening a pull request—first through VS Code's built-in UI and then through GitHub.com.
Along the way they hit small but instructive snags: Jenn's VS Code git config is tied to an old secondary GitHub account she created to work around a previous employer's org restrictions, resulting in commits attributed to the wrong user. Anthony advises her to merge the email into her primary account and delete the extra one. They also discuss why Anthony's repo currently has overly permissive security settings, acknowledging that proper review requirements need to be added.
00:53:14 - Working with Issues, Draft PRs, and Adding a Rap Prompt
Anthony walks Jenn through several GitHub issues he created, organized by difficulty. He explains his preference for using draft PRs with checkbox to-do lists rather than tracking tasks solely in issues, since commits can be tied directly to the PR and progress checked off incrementally. He then has Jenn copy a new "rap song" prompt from an issue directly into the codebase, run it through the CLI without an LLM to inspect the prompt, and paste the result into ChatGPT to generate lyrics.
Jenn commits the new prompt, pushes the branch, and opens a pull request through GitHub's web interface. They discuss branch management basics—deleting a local branch with git branch -D, re-creating it, and using the GitHub CLI checkout command to return to an existing PR. Anthony previews the next stream, where he plans to show how he uses LLMs like ChatGPT o1 to draft code for open issues, effectively giving contributors a first-pass solution they can refine and commit.
01:17:53 - Wrap-Up and Next Steps
Jenn reflects on how productive the session was and acknowledges that while branching, committing, and opening PRs are fundamental skills, they don't stick without regular repetition. She asks Anthony to continue assigning tasks through issues so she can build that muscle memory, even if she's just copying and pasting code at first.
Anthony agrees and notes that many of the remaining issues are scoped so that an LLM can likely one-shot the solution given the right context about the project. He credits much of AutoShow's development to iterating with LLMs and promises to demonstrate that workflow next time. They thank viewer Ishan for watching on LinkedIn and sign off, with Anthony offering to host the next stream on his own channel.
Transcript
00:00:00 - Jenn Junod
It's happening. Yay. We're live. Hello, beautiful humans. We're live streaming Teach Jenn something about AutoShow with Anthony and AJC Web Dev, who has probably been on the show the most, I think.
00:00:25 - Anthony Campolo
Yeah, this is at least my fifth or sixth episode at this point.
00:00:29 - Jenn Junod
Yeah. So you're definitely an OG at this point.
00:00:36 - Anthony Campolo
I feel like you're an OG at this point.
00:00:39 - Jenn Junod
I know, right? Oh, God. I've been live streaming for over two years now. Where did those two years go?
00:00:45 - Anthony Campolo
What happened? So think of it this way: at this point, you've been streaming about as long as I had been streaming when you started.
00:00:54 - Jenn Junod
That's weird to think about.
00:00:57 - Anthony Campolo
The student becomes the master.
00:01:01 - Jenn Junod
That is very weird to think about. And yeah, it was because of you and Carmen that I started live streaming, so here I am. But yay. And going full circle, we're working on a project together. Well, you made a project and I just flat out told you, you're going to have your first contributor.
00:01:18 - Anthony Campolo
Like, literally no one else has pushed a single line of code to this except me. I've been building it for like a year now, so it's cool. And it's fitting that you would be the first person to help contribute because I was one of the first people to contribute to Teach Jenn Tech.
00:01:31 - Jenn Junod
That is true. That is true. Yay. So do you want to tell us what we're working on and show us the goods, show us all the cool things?
00:01:41 - Anthony Campolo
Yes. I'll explain it briefly and then we can screen share. I want to first explain how I got to this, because I built it originally as a tool for my podcast. I had a tech podcast called FSJam, which might be coming back soon, and we had like a hundred episodes. I figured out that I could transcribe them for free now with Whisper, which is something you've used. You actually came on stream a long time ago and I taught you Whisper. Back when I was using that tool and running lots of transcriptions on lots of stuff, I started using those transcripts with ChatGPT and Claude to create outlines and summaries of the episodes. I wanted something very simple and basic: a one-line description of what the episode is about, a longer one-paragraph description that explains the topics it covers, and then chunks for the chapters, like six or seven chapters for an hour-long podcast.
00:02:54 - Anthony Campolo
And I was able to get the tool to do that. The writing is kind of bland, but it gets across what the conversation was actually about in a very objective way. It's kind of like having a fly on the wall listening to two people have a conversation and then journalistically trying to describe it in the most neutral way possible. I found it really interesting, and then I started showing it to people. Everyone I showed it to was like, "Oh my God, this is amazing. This is super cool, super useful." People started telling me I should make a product out of it and charge people for it. My wife Jennifer has some clients who create lots of video content because they do lessons or spiritual-direction-type stuff, and I'll be generating stuff for them when they do workshops and things like that. So I found out I could do this, but then I was like, okay, there are a lot of steps, and it took a lot of work just to get a single show note, because I would have to first transcribe the episode, then have this huge chunk of text, and then have to write what I wanted it to be.
00:04:12 - Anthony Campolo
So eventually I found a way to describe what I wanted and gave an example of it in a Markdown file, and then it would consistently give me the same thing. So I was like, okay, I need to save this prompt, because I can just take this prompt and stick it in front of any transcript that I've generated, then feed that entire thing to ChatGPT and it'll give me the show notes. But then I was like, okay, what I can really do now is, because these LLMs have APIs and because you can have code do each of these steps and line them up, I could create a Node CLI in JavaScript. I wanted a JavaScript tool. So I created a Node CLI that would build a pipeline: you feed it a YouTube URL, it runs the transcription, sticks the prompt in front, passes that to the LLM, gets a response back, and then puts the response in the show notes. Then I expanded it so it could work for more content types and RSS feeds.
00:05:14 - Anthony Campolo
And I had a whole bunch of different LLMs, like seven LLM providers, two transcription services. There are a whole bunch of different prompts. It just expanded from there. There's now a very, very rudimentary front end, which is going to be the thing we're really building over the next couple of months. But today we're just going to kind of go over the repo. Because I did it all open source, I've been building this entire thing live on GitHub. I've closed 46 PRs since May 21st. And yeah, it's been substantial. How many commits is it right now? It's probably a couple hundred by now.
00:06:02 - Jenn Junod
And I just put it into the chat: 93 commits. For myself, we need a graphic that you can show people of what it does, because you said a lot of words and I follow, yeah, but not everybody will.
00:06:18 - Anthony Campolo
Yeah, right. I describe it in more layers of detail, usually for people who can actually understand all the steps. Because I'd already shown you Whisper, which is a really key part of it, and you've used ChatGPT, which is the other key part. The really cool thing we're going to be able to do with the front end is just have someone give a link, click a button, and then get the result. That's kind of more useful. But you're right, I need a diagram that breaks down the five steps. So you should share my screen and then I'll show some code real quick.
00:06:59 - Jenn Junod
Bam.
00:07:01 - Anthony Campolo
Okay, so there's really like a million. Yeah, yeah. I want to just first get a command running and then I'll zoom in more. Hold on. So there's.
00:07:15 - Jenn Junod
And just to wrap back around really quick, I do want to say that after I was laid off from my job back in October, something I really wanted to get into was being able to code and develop more, and also level up the content that I'm making. Because live streaming is two hours of content, and it's not always the most accessible thing for everybody. When Anthony and I were talking, I was like, yo, it would be really cool if I could get a draft of a blog. And yeah, so it's become more magical.
00:07:58 - Anthony Campolo
Okay, cool. So I'm going to walk through each step. There are four main things that happen. First, it generates a Markdown file with some front matter, which is really useful if you're working with a blog or something. This was the link I originally gave it. That link then gets run through Whisper to create the transcript, which I then do some transformations on that aren't super important. Then those two things, the front matter and the transcript, get combined with the prompt in the middle here. If we look at the output of the CLI, it says step one: first it generates the Markdown and creates this Markdown file. Then it downloads the audio because it needs the audio for Whisper. This is actually a fairly complicated part of the pipeline because it works with various different types of content files. That is this WAV file here. Then it runs transcription, and then it does either LLM or no LLM. So technically step four got skipped here. Let me run this again, but then I'll do it with the LLM, because what you really want isn't this. You need to give this to ChatGPT.
00:09:24 - Anthony Campolo
So this is not really done, but you can see the prompt at least. If someone is curious, like, how is it doing this? I literally just tell it what to do. I say, here's a transcript, here's what I want, here's how many words I want each section to be, I want you to do chapters, and I explain how the chapters should be. Then I just write a show note example and say, this is what I want. Give me this. And that's what it does. But this is not useful until you actually give it to the LLM. I'm going to do GPT. Hopefully my environment variables are in here. I can't remember if they are, but we'll find out really soon. So now it's going to do step four. Okay, that might happen. Can you make it so I'm not sharing my screen real quick?
00:10:18 - Jenn Junod
Oh, come on. You don't want everybody to have your environmental variables.
00:10:23 - Anthony Campolo
Dude, this would. This file has my environment variables for like seven services I integrate with. So I would have to roll all of them. It would be an absolute nightmare.
00:10:32 - Jenn Junod
Yeah, no, thank you.
00:10:35 - Anthony Campolo
Okay, hold on.
00:10:40 - Jenn Junod
I will say, like, this is something. And I was curious, Ishan—I don't know if you saw my reply—if you've taken a look at AutoShow. I promise I can talk today.
00:11:02 - Anthony Campolo
He's the second or third person ever to actually see the output of AutoShow, because when I first built it, I used it on videos he created for his thing. So now we see where the magic really happens.
00:11:15 - Jenn Junod
Okay, can I hit share your screen again?
00:11:18 - Anthony Campolo
Yes, yes, you can share my screen.
00:11:20 - Jenn Junod
Okay, done.
00:11:22 - Anthony Campolo
All right, so now if we look at the output for step four, this time it tells you what was used, because I can do a ChatGPT model or a Claude model. Then there's a specific ChatGPT or Claude model, and then there's a certain number of tokens used. This is really important because this decides how much you're paying for what I just did. So you pay by the millions of tokens. This was fractions of a cent to do. It was less than 0.01 cents, so it's really no big deal if you're using one of the cheaper models. And if we look at the output now, we can actually see what we got back. "This transcript introduces the Full Stack Jamstack podcast, explaining its purpose and the relevance of Jamstack web development architecture centered around JavaScript, APIs, and markup..." That gives you the chapters. Because I wanted this to be a quick demo, it's really only two minutes, so it isn't really able to do the chapters. It kind of has to make one up because there's not ten minutes of content. But usually if you give it something that's at least ten minutes long, it'll be able to come up with two or three chapters.
00:12:34 - Anthony Campolo
So yeah, those are kind of the steps of the pipeline. There could be some sort of diagram or something that explains each step and how they feed into each other, and that would be very useful. I'm not someone who's ever been very good at creating visual stuff. I was always really, really bad at drawing as a kid, and it's
00:12:59 - Jenn Junod
something I enjoy doing. But then we have people like Damian that do it on a professional level. So we'll see if my pass passes muster, and if not, he'll make it even prettier. But there's definitely a lot of cool things going on here. Can we see the front-end site version, the pretty version where we see the magic happen?
00:13:28 - Anthony Campolo
Yes, let's do that. Okay, actually, let me do this because that is in a state where it's slightly further ahead in the PR. So this is good, though. What I was telling you before we started streaming is that one of the nice things with the GitHub CLI is that if there's an open PR like this, if you click this code dropdown right here, you can get gh pr checkout. Then if you grab that, it will do the thing. Cool. Now I'm in the branch that I created and we're up to date with that. So we have to install packages real quick. The front end is an Astro site, and I got it basically working in terms of what I've been saying to you. Originally there used to be an Astro package and a web package, and those are now combined into one thing.
00:15:00 - Jenn Junod
Yay.
00:15:03 - Anthony Campolo
Okay. All right. This is mostly just for the ease of me developing it. I have it give a placeholder with a test in there already. This will probably be blank when we actually want people to use it, but you can select your transcription service, and all of these will have more explanations and stuff. This is the very, very basic prototype of how to get it to work with a React front end. Then you can choose your LLM or not. So let's basically do the same thing we did and let's do what
00:15:45 - Jenn Junod
What do the questions do? Just like, what questions were asked?
00:15:48 - Anthony Campolo
That's good. Yeah, so let's do that one. What this is going to do is create check-for-comprehension questions, like if you're a teacher and you had a lesson. Here we go: "What are the three main components of Jamstack as discussed in the podcast?" So JavaScript, APIs, markup as the host... "Define the primary purpose of the podcast..." This is so funny because in the very opening of the first episode, Chris says, "What I want the podcast to be is for teaching and informing." And I said, "What's the difference between teaching and informing?" He's just like, "That's a good question. That's a really good question." He has no idea. That's really funny. That's the question it put in here.
00:16:40 - Jenn Junod
I totally skipped ahead to the transcript: "And who are we? I love you." Okay, that's.
00:16:48 - Anthony Campolo
That's a hallucination. That's because I used the base model instead of... hold on, let me make this actually be correct. You never want to use the base Whisper model. It gives you stuff like that. You got to use large-v3.
00:17:02 - Jenn Junod
When are we gonna add blog to this?
00:17:05 - Anthony Campolo
So blog is in this. I just haven't added it to the front end. The blog is implemented in the back end. But I can actually probably do that really, really quickly. First, let's just go back to... yeah, so now it doesn't say okay anymore.
00:17:27 - Jenn Junod
Very cool.
00:17:27 - Anthony Campolo
And then I'm going to be a bit annoying. I just asked the question, what's the point of the podcast? Obviously to me is to teach, inform, teach and inform. And I say, how do you separate teaching from informing? That's a good question. That's a good question.
00:17:40 - Jenn Junod
Can it. So just random questions that I'm thinking of. Can it pick up speakers?
00:17:47 - Anthony Campolo
Yes. It just takes a really long time, which is the bummer. But I think I can do it from here. So let's do Whisper diarization. Let's do no LLM. This could take like two to three minutes. There is an integration with a Python package called whisper-diarization. This is one of the biggest issues with Whisper. It's not built in automatically, but the paid transcription services will also give you that ability. That's something I need to spend a little more time with and build out a bit more.
00:18:29 - Jenn Junod
And then the other question was going to be, what's the difference between short, medium and long chapters?
00:18:36 - Anthony Campolo
Yeah, so with those, let me go to the prompt file. Wait, hold on. This is the Astro... For each of the prompts, what I do is I have two parts to it. There's the instruction part where I tell it what I want, and then there's the example part where I actually write in the Markdown example. Then when I put it into the episode, it'll basically put all the instructions on top after the transcript, and then underneath it'll have "format the output like so" and stack all the examples. So you can kind of pick as many of these as you want. But to answer your actual question, the short chapters I say should be a maximum of like 25 words. So you see here it's basically a one-sentence description of what the chapter is about. Then the medium chapters give you like three sentences that describe the chapter. And then long chapters give you like a paragraph or paragraph and a half describing the chapter.
00:19:52 - Jenn Junod
Okay, I guess when I thought of chapters, it made me think of YouTube timecodes. But the way... especially you get that
00:20:07 - Anthony Campolo
in all of the chapters. So if you do short, medium, or long, they're all going to have the timestamps in the chapter title. It only really affects the chapter description.
00:20:17 - Jenn Junod
Okay, got It. Thank you.
00:20:19 - Anthony Campolo
Yeah, yeah. And sorry, continue. What are you gonna say?
00:20:25 - Jenn Junod
Go ahead, go ahead.
00:20:26 - Anthony Campolo
Yes. The last thing I was going to say is that it gives you the timestamp because, in the example, I have it format them the way YouTube detects them. So if you copy-paste the output directly into your YouTube description, the timestamps should work and it should then also create the chapters because YouTube is able to detect them. They have a bunch of fancy magic in the way their description box works that lets that happen. But actually I just built this last night. I had this brilliant idea. I'm on the wrong branch though, but it's okay. There's a script I created where it will read the timestamps for each chapter, use FFMPEG, and clip your audio file and give you each of those clips that correspond to those times. So if you have three chapters, it'll give you three audio files of those sections. And I will be able to do it for video too. I just have to make sure it works correctly with yt-dlp. But yeah, I had this idea, I talked to Michael Chan about it like six months ago, and then I realized it just needs to be a script because FFMPEG can do all that manipulation really, really easily.
00:21:37 - Anthony Campolo
So that is going to be really cool because that's going to give me the ability to instantly create like all of the clips that I want for any content I've ever created, you know.
00:21:48 - Jenn Junod
Nice. And do you think it's done with the speakers?
00:21:54 - Anthony Campolo
No. And honestly, this is a huge issue with whisper-diarization. There's something happening in their Python thing that requires it to take literally like 100x as long. It's really strange, and I think there might actually be some sort of bug and I need to upgrade to a newer version or something like that. I'm not really sure. I also need to try other types of diarization. But the point is, the open source way of doing this is absolute trash, unfortunately. But most people, once they actually use AutoShow, the app version, are going to be using the paid ones anyway. So it's not as big of a deal. But unfortunately, I can't really demo this right now.
00:22:38 - Jenn Junod
That's fine, but it's going, it's going. I know that we had other things on our to do list today.
00:22:44 - Anthony Campolo
Like, real quick, since I can't show you the blog on the front end, I'll just do it through the CLI real quick.
00:22:52 - Jenn Junod
Oh, sweet.
00:22:55 - Anthony Campolo
I'm just going to cancel this actually. So you wanted to do it with the Snowflake video?
00:23:05 - Jenn Junod
Yeah, because he'll be back next week for part two, and I was like, that would be great to do.
00:23:20 - Anthony Campolo
This one.
00:23:23 - Jenn Junod
Yes.
00:23:26 - Anthony Campolo
So this will probably take a little bit of time, but I want to get it.
00:23:30 - Jenn Junod
Yeah, it's like an hour. Hey, it's a shorter one of my streams instead of two to three hours.
00:23:38 - Anthony Campolo
Okay. I think that should be all I need to do. Actually, let me also do it with Claude.
00:23:50 - Jenn Junod
And from what I understand, we're basically saying, hey, this is a video that's been recorded. Make the transcript, take a look at the transcript, and then write a first draft of the blog. A big reason I requested this is that it's something I want to do to level up my show and the content I create. But also, for myself, it's so much easier to get started from something than a blank page.
00:24:26 - Anthony Campolo
I totally agree, man. I use LLMs so much just to generate a whole bunch of material, and then I edit and change things or just rewrite things entirely. But yeah, having it just create a first draft... there are at least two dozen startups and companies built around repurposing content, generating blog posts, generating marketing material, and that whole kind of stuff. There are so many tools that do that. But the reason I wanted to build this is because I wanted control over the whole pipeline. Then I wanted to build an app that would let non-technical people still have that level of control without needing to code. Because I think most people don't want services that are black boxes that are just like, "Give us your content and a blog post will pop out." If you have a better idea of what prompt you're using with the LLM and what LLM you're using, then you can understand what difference that makes.
00:25:27 - Anthony Campolo
And I think people can really benefit from learning that stuff. It isn't a whole ton, because you can basically break it down and be like, here are your good, better, best versions, and just show people. So yeah, real quick, something that will help when you're using this: this tells you everything you feed it when you do the CLI. I have the video URL, and it's Twitch, so it works with different content sites. Then it has Claude set to true, so I pass it the Claude flag. If I told it which Claude model I was using, it would also say the Claude model and then give you the model name. For prompt, you can give it multiple prompts, so it's an array, though I only give it one here, so it's just going to have the blog prompt. Then because I want to show what's happening here, I put no cleanup on, so all the files will not be deleted at the end. But this will probably still take another minute or two.
00:26:38 - Jenn Junod
Also just thought of a really fun name: Otto Campolo.
00:26:44 - Anthony Campolo
Auto Campolo.
00:26:45 - Jenn Junod
Yes.
00:26:47 - Anthony Campolo
And then people say what's a Campolo?
00:26:51 - Jenn Junod
Well, use the app and find out.
00:26:55 - Anthony Campolo
But using the app wouldn't tell you what Campolo means, though.
00:26:59 - Jenn Junod
Yeah, but this did just give me an idea too, of things that we can make for AutoShow. If we do make it where people just have a dropdown of, hey, why might you use a different LLM? Yeah, what is an LLM? Just having a short video of why someone might want to change it and what is best for their use case would be really easy for non-technical people to read up on.
00:27:34 - Anthony Campolo
Yeah, and eventually I'm going to have features where you can select multiple LLMs. Say I want to have Claude and ChatGPT write a draft for this, because I do that a lot myself. They're both very good, but they give you very different answers a lot of times. They'll format things differently, and some will use lists more than others, and you can tweak all those things. But I'm going to make it so you can just pick two and it'll output both, so you can get a side-by-side comparison. Then the really cool thing you can do is actually have them feed back into each other. So if you had Claude, instead of having it write the blog post, you could say write an outline. Have them both write an outline, then have them look at each other's outlines and ask, is there anything in this outline that wasn't in my outline? Then you'd have an uber-outline that combines the two of them.
00:28:34 - Jenn Junod
That seems almost never-ending, like it could just go in an infinite loop of comparing itself to the other LLM.
00:28:41 - Anthony Campolo
Yeah. And at a certain point you're gonna get like five versions of the blog post that are like all kind of like AI slop. And it's like, but all good, but like all equally inferior in a certain way. So there is a certain point where if you just are constantly feeding it content in and out, in and out and passing it back and forth will eventually kind of homogenize to something where they're just saying the same thing to each other back and forth. It's actually really interesting.
00:29:11 - Jenn Junod
Fair enough. All right, fair enough.
00:29:14 - Anthony Campolo
And the last thing I was going to say is that feeding it back in is also useful if you want to get chapters and then say, actually, can you make these even longer? Can you create more chapters? Because even if you describe what you want in the prompt, it will not always give you the exact same length or know how to perfectly break up the chapter. So sometimes when I'm using these things, I'll create the chapters and then give it a follow-up prompt that basically says, hey, create more chapters that are longer. It'll then look at the content, find shorter chunks, and create more. That's a thing I also want to build in soon as a feedback mechanism, because right now it's just a one-shot thing. You have the prompt and the content, you give it to the LLM, the LLM gives you a response back, and there's no chat there. It's just one shot. But what I do in my own life is usually have this give it to me with a prompt, and then I copy it and put it in ChatGPT or Claude because then I can talk to it and have it massage the output.
00:30:22 - Anthony Campolo
But there's no way to do that right now within AutoShow the tool.
00:30:27 - Jenn Junod
Yeah, and we have a blog draft.
00:30:32 - Anthony Campolo
All right, so let me actually put this in nice formatting and make it real big. All right, so it has seven sections: Introduction to Data Warehousing, Data Lakes, Explaining Snowflake as a Unified Data Platform. See, this is great because you had an expert come on and do this with you. So there's a base level of actual correct technical knowledge that should exist within this content. This looks pretty dang good to me, just skimming it.
00:31:03 - Jenn Junod
Yeah, I think one of the biggest things, and I like your feedback idea too, is being able to feed back what you actually used. That's something that creepily makes my LLMs sound more like me rather than a robot. And I say creepily because sometimes I'm just like, oh, that's... it's a little weird that it does that, but okay.
00:31:32 - Anthony Campolo
Yeah. Eventually what I'll also need to have is a way to do that, because you could have selections of your writing in your own voice that you could also put in the prompt. If it's not too long, that can give it a little flavor of how you actually want it to speak. There's also a further level where you can create embeddings with like 100 blog posts you've written and say, here, use this voice. That's one of the other things that can create more customizable outputs based on your own voice, as long as you have good samples and examples for what you want your voice to be. Then there are various technical ways to do that with the LLMs, but there are like three general solutions. I've been talking a lot. Let me know what questions you have.
00:32:33 - Jenn Junod
No, no, no. These are all things that are filling in a lot of the questions. And I'm excited to take this blog post and actually develop it and post it. Because it does a transcription underneath it, right?
00:32:47 - Anthony Campolo
Yeah, it does. And let me just... I'm gonna stick this in a gist real quick that I can give you as a link so it will continue to exist in the world.
00:32:58 - Jenn Junod
Sweet. Yay. And that's the cool part of also wanting to see it created for myself, because then it gives me ideas. This is where I would want something that, even if it took longer, could know the speakers. Could I make it so the front matter is something that I selected?
00:33:28 - Anthony Campolo
Yay.
00:33:29 - Jenn Junod
Are you gonna post it as comment? We're all gonna get the comment. Send it to all of us. Yes.
00:33:35 - Anthony Campolo
What I can also do, I can put this in the Astro site so people can see what it would look like if we do that.
00:33:48 - Jenn Junod
Yeah. Examples. You're giving me all these things that we need to make.
00:34:00 - Anthony Campolo
This is... that makes sense, because it doesn't give you quite the same finished workup. And I know how to fix this, though. Give me just one second.
00:34:16 - Jenn Junod
Me and front matter. Man, I feel like we're always arguing.
00:34:21 - Anthony Campolo
Well, this is not front matter. We're arguing with Zod and Astro's content collection schema, which is there for a reason and is actually very useful. Expected type. Why does it want an object for cover image? That doesn't make any sense. Hold on. So this is the content collection. So for some reason. Oh, this is when I used to do it where the cover image would have an alt text and source, but that's not actually the thing. You just want a string and you want it to be optional. Let me do this.
00:34:57 - Jenn Junod
Yay. At least didn't error out the same. Oh no, I'm just kidding.
00:35:04 - Anthony Campolo
This is fine because now it's expecting the alt text which I just took off, so. Oh, this is when I had draft stuff too. Okay, hold on. I have not actually used this in a long, long time. This is using the. Just do. There we go.
00:35:56 - Jenn Junod
Yay. That works.
00:35:59 - Anthony Campolo
Cool. So this is with the markdown actually rendered. So you see it has blog outline, nice and big. You get your list and then your first draft and then there is the transcript.
00:36:13 - Jenn Junod
I will say for us, it would be nice if we could see in the markdown or something like what models were used so we could easily look at it and be like, oh, this is what I used. If I want to compare it, I put it on my notes to write down.
00:36:34 - Anthony Campolo
This is great. The one type of feedback you do get right now is that it puts the name of the model, not the specific model version, but the provider. So it tells you Claude, but it doesn't tell you Claude 3.5 or whatever. And it would tell you ChatGPT, but not 4o. It actually puts that in the filename, and then that gets translated to the URL. So it says here, Teach Jenn Snowflake Claude show notes. And if I had it have no LLM at all, it would say prompt here instead, and then it would have the prompt. You wouldn't really want that on your website. That would just be the filename.
00:37:20 - Jenn Junod
Yeah. Very cool. Yay. We did it. I have homework for myself.
00:37:28 - Anthony Campolo
Did you want to walk through opening the PR and I could have you...
00:37:34 - Jenn Junod
Yes.
00:37:34 - Anthony Campolo
Okay, do that.
00:37:37 - Jenn Junod
Let me share my screen and stage and. Okay, teach me all the things. There we go.
00:37:49 - Anthony Campolo
Okay, so do you already have it cloned down on your computer or no?
00:37:55 - Jenn Junod
Yes. Yes. So I will go into it. Yeah. Oh my gosh. I keep trying to hit tab to finish These, but it's dash. It's like the arrow.
00:38:06 - Anthony Campolo
And then do git pull first, just so we're up to date.
00:38:15 - Jenn Junod
Are you submitting anything right now? Will that.
00:38:18 - Anthony Campolo
Am I submitting anything? What do you mean?
00:38:22 - Jenn Junod
I'm going to make my own branch so it's not going to try to commit to me. Right?
00:38:28 - Anthony Campolo
Correct. Yeah. And that's what the whole PR process is for. So once you're up to date... the other thing you could do is, what I do a lot is honestly just nuke repos and reclone them all the time. You don't necessarily want to do that with AutoShow because you have to download the Whisper model to use it, so the setup process takes a couple minutes. It is better to do this. But when in doubt, you can just nuke it and reclone.
00:38:54 - Jenn Junod
But that I think has been like the hardest part is I've worked on all these projects by myself, but I just commit to the main branch because I'm like eh, if it breaks, it's my own stuff. I don't care. And I'm like, I haven't used PRs enough. Like it's not muscle memory.
00:39:10 - Anthony Campolo
Yeah. Luckily it's pretty dang simple. The one command you really have to remember is git checkout -b and then the name of your branch. So checkout, all one word. Yep. And then -b, just the letter B. And then space. Let's call it contribute or contributor, or actually just call it TJT because we're doing this on stream. Yeah, that's perfect. Then hit Enter. Cool. So now you can...
00:39:47 - Jenn Junod
I'm on that branch.
00:39:50 - Anthony Campolo
So you should open this up in your editor, your VS Code, and you just gotta go to the README. It'll be in the main root.
00:40:03 - Jenn Junod
Sweet.
00:40:04 - Anthony Campolo
And then scroll all the way to the bottom. There'll be contributors. Yeah. Add yourself to the list. You can put whatever you want: your name, your link, your photo, all of the above. It's kind of up to you how you want to do it.
00:40:22 - Jenn Junod
The pressure man, the pressure.
00:40:24 - Anthony Campolo
The simplest thing is just do a dash and a space and then do your name as a link and then link back to your GitHub.
00:40:33 - Jenn Junod
I don't know if you guys ever do this, but I do it both ways. I'll try the square brackets and then I...
00:40:40 - Anthony Campolo
Do you want the square ones first?
00:40:44 - Jenn Junod
Yeah, I figured. But I like to go back and forth and try one first and Then see it not work and then go do the other one.
00:40:52 - Anthony Campolo
A lot of times I'll just start by doing the square brackets and then the parentheses, and then the structure is already there. Then I'll write in what I want to write and copy-paste. So trust me, this is useful. So do that and then add the...
00:41:08 - Jenn Junod
There we go.
00:41:09 - Anthony Campolo
Yeah. And then you'll.
00:41:12 - Jenn Junod
This is what I go through every time.
00:41:15 - Anthony Campolo
There you go.
00:41:27 - Jenn Junod
I have to... I'm trying to make sure they're all updated, and they are. I just made... they're almost all live. "Shit to Talk About" isn't live yet. That's okay. It'll get there. Do I need to add anything else?
00:41:42 - Anthony Campolo
I think that's fine.
00:41:45 - Jenn Junod
People... don't they...? Oh, do I need to put my GitHub? They'll find it from my website.
00:41:55 - Anthony Campolo
No, yeah, that's probably fine. I'm thinking, like, it would be nice to. Because if there's going to be a bunch of contributors, you want some, like, standard people just plug into. But honestly, I'm not worried about that because they're probably not going to have many more people contributing anytime soon. So there's really no need to worry about it. This is just fine.
00:42:14 - Jenn Junod
Then I can go here. I just want to make sure that it's going to the right branch.
00:42:20 - Anthony Campolo
The way you can tell you're on the right branch is at the very bottom-left of your editor. Do you see where it says tjt? That's how you know you're on your branch. And because it has a little asterisk next to it, that's how it knows you have changes too that haven't been committed. First you have to stage it, though. So yeah, click the little plus. Hover your mouse over the README where it says README under changes, then go over to the plus. Yeah, so that's this. By clicking plus, that's the same thing as doing git add . if you're doing this from the CLI. First you stage it, and now you can commit it. Because if you have multiple changes in multiple files, you may not want to stage and commit everything at the same time. You may only want to stage some files and commit them. Yeah,
00:43:11 - Jenn Junod
I like that. I just have always just been like, yeah, it can all go. It's fine.
00:43:15 - Anthony Campolo
So when I develop for myself, I have a single alias, gc, that does the staging and committing all as a single step for all my files, because that's what I do. It's the simplest thing. You don't want to do that when you're working on a project other people are working on. You ought to be very careful. And then Publish Branch, yes. Yep. Then now you have to go back to the... actually, click Create Pull Request right there. That's exactly what you need. I never do this through here. I always do it through the GitHub.com UI.
00:43:52 - Jenn Junod
We won't do it, but I'm pretty well, I mean, I guess I could just do it again and make a different one. So we can do both.
00:43:58 - Anthony Campolo
It's up to you. I mean, honestly, this is really better because that's the thing that always frustrated me is that I didn't like having to leave my editor and go to the site to finish the PR. This is actually much better. I would prefer to do this, honestly.
00:44:13 - Jenn Junod
Set milestones, set projects, add assignees.
00:44:17 - Anthony Campolo
I wonder why my editor doesn't do this. I don't get the popup because I probably have some setting that suppresses random popups telling me to do crap.
00:44:30 - Jenn Junod
Magic. That can be the...
00:44:33 - Anthony Campolo
No, the description should say: added Jenn Junod to the contributor section.
00:44:39 - Jenn Junod
But that's like the same thing actually.
00:44:42 - Anthony Campolo
Sorry. Well, this is the PR, though. So yeah, I guess really this is such a small thing to the README. Yeah, that's good. That's perfect.
00:44:57 - Jenn Junod
What I don't see is actually how to tell it.
00:45:03 - Anthony Campolo
Yeah, me neither.
00:45:09 - Jenn Junod
Oh, I guess maybe I have to assign it.
00:45:11 - Anthony Campolo
So hover over each of those five icons. So move your mouse, hover over each of those and see what they say.
00:45:18 - Jenn Junod
Assignees, reviewers, labels, milestones and projects. But I guess I would have to probably assign it to you.
00:45:31 - Anthony Campolo
No, you don't need to assign it to do this because you just want to create the PR. There doesn't need to necessarily be anyone assigned. That's a good question. This is something that's very ambiguous in their UI right now. So hover over README again. The origin says. Yeah, hover over where it says commits, add contributors. So right down there.
00:45:59 - Jenn Junod
I'm going to make my screen bigger. Maybe it's missing a button now. I wonder if you have to add an assignee. What's over here? Yeah...
00:46:13 - Anthony Campolo
Yeah. I've never done this through here ever, so I can't tell you. But I bet ChatGPT.
00:46:21 - Jenn Junod
Oh, that's interesting. Yeah, create.
00:46:26 - Anthony Campolo
Yeah, because that's not a constraint. If you do it on the website. So there's no inherent. Like, you can make rules in your repo to say if you create a PR, it has to have someone assigned. You can make those types of rules. But I know for a fact mine doesn't because I've opened tons of PRs and never assigned anyone. That's really interesting. That might just be a thing that they put in because they think it's a better practice or something. Oh, no, that's weird.
00:46:50 - Jenn Junod
Yeah, maybe. Oh, compare request.
00:46:54 - Anthony Campolo
That's what I would usually do is that I would go there and I'll click that button. But you don't want to do that because you already created the pull request.
00:47:01 - Jenn Junod
Okay, so I'm in here.
00:47:02 - Anthony Campolo
So you want to click PR. Yeah, Pull request and then check it out.
00:47:05 - Jenn Junod
Yeah, Click it. Merge. Yeah.
00:47:11 - Anthony Campolo
Okay, so I guess you have merge abilities. Let's see what happens. Click it.
00:47:15 - Jenn Junod
You're like, should I?
00:47:19 - Anthony Campolo
No, I think so. Because I added you as a contributor and I have all the permissions open right now. So you should have the ability to do this. And this is one of the reasons why I was glad to have you here because I needed to put security stuff like this because I have like 14 security warnings on the GitHub thing because, like, everything's totally open right now, but I would have to still add someone as a contributor. So if you were trying to hack me, if you phished me and I just met you online, like, sure, you could be a contributor. I gave you full access to the repo. You could have just injected code on everyone's computer. So that's why this is really bad security practice. But I'm not worried because I know I have a high level of trust in you that you're not going to put any malicious.
00:47:59 - Jenn Junod
We have met in person. We have met in person.
00:48:02 - Anthony Campolo
Like, you might push a change that will break something. Like that's possible, but I'm willing to.
00:48:06 - Jenn Junod
That is more likely than. Yeah, then I can delete the branch when I'm done, right?
00:48:12 - Anthony Campolo
Yeah. I need to add permissions. So you can't do that. What really needs to happen here is I should have to review and then confirm it and then it can be merged because that's really what we want here. Because when you're making changes and actually adding features, I don't want to be responsible. You always just want a second pair of eyes. Honestly, it's really useful. That's why I love having LLMs, because I always have a second or third or fourth pair of eyes now. And they're much smarter than most of my friends.
00:48:45 - Jenn Junod
Look at that. I am a contributor. Wait, does it finally show me on the side? Why does it show this one too?
00:48:55 - Anthony Campolo
Because that's probably what's connected through your editor. You're probably logged in through a different account or something. I don't know. That's interesting.
00:49:04 - Jenn Junod
I don't know. Well, it's fine. It's on Teach Jenn Tech, so might as well.
00:49:12 - Anthony Campolo
That's really funny.
00:49:12 - Jenn Junod
There you go. You have two contributors. You got the show.
00:49:17 - Anthony Campolo
I know exactly why this is. If you look at the commits, you'll see that there's the commit and then there's the merge. So you merged it through one account, and when you committed it, it used your Teach Jenn Tech account. So somewhere in your VS Code settings you have some sort of default git config connected to that. It could be through your git config; it could be at various different layers. And it's always hard to tell now because your editor and the company are all the same thing now. They're all owned by the same people, so they're kind of becoming one entity.
00:50:01 - Jenn Junod
I don't know. Well, if it becomes an issue, I will fix it. But luckily you. You know both of them.
00:50:09 - Anthony Campolo
Yep. Yeah. And I would imagine you probably wouldn't have been able to do the merge through the other account because that one isn't added as a contributor to the repo.
00:50:20 - Jenn Junod
That's just so weird that it's.
00:50:23 - Anthony Campolo
I think it's probably because in your root file there's a file called .gitconfig. You should see if you have that file on your computer, and you should do that offscreen.
00:50:40 - Jenn Junod
I don't care if I show these repos really quick.
00:50:43 - Anthony Campolo
Yeah, I don't mean that. I was saying there's a config file on your machine that might have.
00:50:52 - Jenn Junod
Oh yeah, because Teach Jenn Tech is submitting all of these.
00:50:57 - Anthony Campolo
Yeah. Any of the commits you're doing through your editor are going to do that.
00:51:04 - Jenn Junod
Okay, well, there's that. Okay, well, that skews my number.
00:51:11 - Anthony Campolo
Just delete that account. Where are you?
00:51:15 - Jenn Junod
Oh yeah. Why not? No, I want to go home.
00:51:18 - Anthony Campolo
Okay, well, one thing I would do first is... this happened to me a lot. I think if you take the email that's associated with that other one and add it to your Jenn Junod account, then when you delete the first account, the commits should transfer over. But they also might not. It's the type of thing where, unless you want that thing committing forever, it's better to delete it sooner rather than later.
00:51:48 - Jenn Junod
Like it doesn't even have the right logo in there though.
00:51:54 - Anthony Campolo
So this is an org. This is not an account. This is something different.
00:51:58 - Jenn Junod
Oh, I don't even know why there's an account then.
00:52:01 - Anthony Campolo
So let me show you this. What you really want to go to is github.com/teachjenntech, all one word. Yeah, exactly.
00:52:16 - Jenn Junod
So I know why you want to delete this. I know why it exists. It exists because when I worked at the previous company, it wouldn't let me clone something. It would always push it upstream even if I removed upstream. So I had to create a second account that wasn't associated with the company Org so I could actually clone it for myself and.
00:52:46 - Anthony Campolo
Interesting. Yeah.
00:52:48 - Jenn Junod
Yeah. Okay, well, easy enough.
00:52:52 - Anthony Campolo
Yeah. So you should figure out what email is associated with this and then make sure that's connected to your Jenn Junod account. Then you can see if you want to transfer any of the repositories. But I would just get rid of that account if I were you. It's going to complicate your life.
00:53:06 - Jenn Junod
Yeah, fair enough. Well, anyway, on those notes, what else did you want to do today?
00:53:14 - Anthony Campolo
I just wanted to kind of explain some of the issues that I wrote...
00:53:19 - Jenn Junod
Because do you want me to share, or do you want me to go...
00:53:23 - Anthony Campolo
Go back to screen sharing. So let's flip back.
00:53:28 - Jenn Junod
Sweet. Then off screen. Even though you totally shouldn't be multitasking, I'm going to be figuring out how to remove that account.
00:53:36 - Anthony Campolo
Actually, I would prefer, since I just want to make this fairly brief, that you listen so you can ask me questions about what I'm going to explain, because this is for your benefit right now. I broke it down by difficulty, so the simplest one is probably going to be this guy. I created a couple new prompts that I want to add, and for some of them I already gave you the freaking code. Literally all you'd have to do right now is copy-paste this in and you would have a new prompt. So I tried to make this very, very simple for you. This issue has multiple steps, so this is one where I was kind of saying I'm going to open draft PRs, or you can open a PR for this and then I can create specific bulleted todos. Actually, let me just do this right now.
00:54:28 - Jenn Junod
Actually, I was going to say, why wouldn't somebody just do that in the issue? Why would they do it in the PR?
00:54:36 - Anthony Campolo
Because when you do it in the PR, you can commit things. Like, if you want to do a single commit because I just added the short summary, you can commit it to the PR and I can check that it's correct, and you can check it off so you can do this in pieces. Because this whole issue requires a couple different things. I could make a different issue for each of these things. I could make an issue for "create a new short summary," "create a medium summary," "create a long summary." That would be kind of ridiculous. So I'm trying to think about when it makes sense to scope it as a bunch of combined things, but where they might still be different individual commits. That's why I like having things in the draft PR, because you can actually work there. The issue is kind of static. So if I want to go back and update this, if I'm only halfway through working on some of these, then that work needs to be saved somewhere if I'm going to check things off.
00:55:31 - Anthony Campolo
So that's why it doesn't make a whole lot of sense necessarily in my mind to have the to dos in the issue. So is that going to be correct? No, I'm doing this wrong. Wait, I know why you gotta have the space. Yeah, Cool. Then this actually, the part below, I'm actually gonna break this out into a different PR because this is gonna be a bit more complicated. I want to add a file sample print prompt. So what this would do is that if I wanted to select a couple of the prompts, like I wanted titles and I wanted a summary and I wanted check for comprehension questions. But I want to see what is the prompt with the instructions and the example. And I just want that. I don't want anything else. I just want print the prompt. Right now there's no ability to do that. So I want to add a flag to do that. But this should be a different, different issue. So real quick, open a new one.
00:57:24 - Anthony Campolo
Sorry. I still have the summary detail in here. There we go. I also kind of rewrote the questions prompt a bit. This is one of the things we demoed before. It prints ten questions. But what I realized is that you could have it generate ten questions and make the first five very simple beginner-level questions, and the next five harder, more expert-level questions. I thought that could be an interesting thing to add. So that's another one. Basically I have new prompt options. Also, don't even worry about this for now. These are each prompt options, and I just wrote this out for you. So there would be one, two, three, four, five, six, seven, eight tasks for this one.
00:58:25 - Jenn Junod
So would you suggest. It sounded like you would suggest doing the PR and then doing them in pieces in the PR, even if it's in the issue.
00:58:40 - Anthony Campolo
Yeah, exactly. So that's what I think is going to be the way to go. So you want to. Let me say this, actually. Do you want to open a PR? Do you want me to open one?
00:58:56 - Jenn Junod
Why not awkwardly watch me go through it? So that way maybe it'll stick. So I'm gonna go to my screen. Bam. Okay, so if I go here. No, no.
00:59:11 - Anthony Campolo
Okay, why don't we actually try this? Let's just open, like do a new pull request. So go back to the pull request tab and just click New pull request.
00:59:22 - Jenn Junod
Oh, fancy. We want.
00:59:28 - Anthony Campolo
Okay. Yeah. So there's no changes yet. So this isn't going to work through this flow. So we should go back and do what we did originally and check out our branch through your terminal. So first thing I would do is I'll go back to main because this branch doesn't exist anymore. You deleted it. So git checkout and then main.
01:00:00 - Jenn Junod
Now I'm just seeing if. I guess do that.
01:00:12 - Anthony Campolo
How do I return to the main branch? Yeah, that's what you want. git checkout main. Yeah, it gave you the answer.
01:00:23 - Jenn Junod
Oh, why didn't it do that at first?
01:00:26 - Anthony Campolo
But that's exactly what you want: git checkout main.
01:00:30 - Jenn Junod
Sweet.
01:00:31 - Anthony Campolo
Okay, and then do git pull before you create a branch. Yeah, because you had to get the changes that were merged from the TJT branch.
01:00:46 - Jenn Junod
Okay, I'm gonna name it TJT again.
01:00:49 - Anthony Campolo
Yeah, that's fine. Yeah, let's see if. Yeah, so I thought that might happen. So actually then I think you just go back to the TJT branch and do another git pull. And that should be fine. You should still be able to. I don't think that'll be an issue.
01:01:03 - Jenn Junod
So I should go back. I thought we deleted the branch. Yeah, the branch doesn't exist.
01:01:09 - Anthony Campolo
Oh, I know why. It's because it exists, but only locally in your project. There's a specific Git command to wipe that branch so you can create a new branch. This is actually funny. This is why I always use a different branch name every time I do this, just to avoid this problem. It's kind of stupid, because it's just a simple command that I haven't looked up to fix this issue.
01:01:35 - Jenn Junod
Oh, how? Let's ask how to delete the local TJT branch.
01:01:46 - Anthony Campolo
Yeah, there you go. -d. So simple.
01:01:54 - Jenn Junod
Deleted. All right, we are now going to create it again. And there it is.
01:02:00 - Anthony Campolo
Look at that.
01:02:01 - Jenn Junod
See, Bam.
01:02:02 - Anthony Campolo
This is why that warp AI stuff is actually pretty tight.
01:02:06 - Jenn Junod
Agent is really cool. I'm trying to get in the practice of using it because, like, why am I going to search everywhere else? Let me just see if Agent can be my...
01:02:15 - Anthony Campolo
Well, I've gotten extremely good with CLIs and stuff because of having LLMs. What I would do is always have ChatGPT on the side and do exactly what you're doing right now. I would ask it, it would give me a command, I'd run the command, and we'd have this back-and-forth conversation. But now it's just in the terminal, you know.
01:02:35 - Jenn Junod
Right, okay, so this is where we are. I'm in the branch, I created the branch, and then what do I do?
01:02:45 - Anthony Campolo
Yeah. So here's what I'm going to do. I'm going to walk you through how to make a change just by copy-pasting a couple of lines of code, and then we'll have that. So first just open your editor and I'll tell you what to do step by step.
01:03:01 - Jenn Junod
You know what, I'm going to reopen it the way it is just to make sure that.
01:03:04 - Anthony Campolo
Yeah, that's a good idea.
01:03:07 - Jenn Junod
Just to make sure it's not using old stuff. All right.
01:03:13 - Anthony Campolo
And can you. Yeah, there's a couple. So just close your windows first. Close all the windows.
01:03:21 - Jenn Junod
Close all the windows.
01:03:22 - Anthony Campolo
Yeah, there you go. Okay, so go to src, then go to llms, then go to prompt.ts toward the bottom. Great. Then you have these different sections. Close your sidebar so we can just see the code. I think you can make the sections kind of smaller. So hover your mouse next to line 11 real quick. Yeah, close that up, and then do that for each of these. Close that up. Close summary up. Don't close sections; you gotta leave sections open.
01:04:04 - Jenn Junod
Okay.
01:04:05 - Anthony Campolo
Yeah. So start... don't go up. Start at titles.
01:04:08 - Jenn Junod
Go down. Okay.
01:04:09 - Anthony Campolo
And just go down, one at a time. Yeah. You just click titles one at a time. There you go. Close them all up. Yeah, you got it. I think blog will be the last one. Great. Now stop. If you just add a line right after blog, or actually after the colon after blog, so line 139, click at the end of that. Yep. Then add a line. Great. Now you're going to copy-paste the code from the issue that explains the rap song. So go back to the issue and get it.
01:04:48 - Jenn Junod
You need to be logged in to use this command.
01:04:52 - Anthony Campolo
I'm not asking you to run a command at all. I don't even know what that means.
01:04:57 - Jenn Junod
Okay. I was just letting you know that it just said something.
01:05:00 - Anthony Campolo
No, no. Commands are being run through VS Code. You were drunk. Go home.
01:05:07 - Jenn Junod
No. Why?
01:05:08 - Anthony Campolo
So it's where it says add more prompt selections.
01:05:13 - Jenn Junod
Thanks. Apparently I was looking for a much longer title and just.
01:05:18 - Anthony Campolo
Yeah, so just copy-paste that whole thing. Yeah. And just plop it in with the comment.
01:05:23 - Jenn Junod
The comment part of it? Which is the comment?
01:05:28 - Anthony Campolo
Yeah, comments.
01:05:30 - Jenn Junod
No. Okay, up one more.
01:05:34 - Anthony Campolo
There you go. And then add a comma also at the end.
01:05:39 - Jenn Junod
Great.
01:05:40 - Anthony Campolo
Now save.
01:05:43 - Jenn Junod
Auto save. Is it. Auto saves is. That's a way to say it. Now saves is.
01:05:50 - Anthony Campolo
And then I'm going to put in an example command real quick in the issue also. So you can just run this. I don't have to speak this out to you. Give me just one second.
01:06:04 - Jenn Junod
For sure. I'm really excited. If Warp integrates with VS Code, like, I think that would be legit.
01:06:22 - Anthony Campolo
So refresh the issue. There you go. And copy paste that command right there. Let's see if it works.
01:06:43 - Jenn Junod
It's thinking. So now I'm going to actually look at the command run as file content Audio three prompt Rap song. Okay.
01:06:52 - Anthony Campolo
Yeah. So open up your side thing again and go to the content directory. So scroll all the way at the top. Yeah.
01:07:00 - Jenn Junod
To content.
01:07:01 - Anthony Campolo
Yeah, just one of those two.
01:07:08 - Jenn Junod
One of these.
01:07:09 - Anthony Campolo
One of those two. So click the first one. Click the second one. Yeah, there we go.
01:07:18 - Jenn Junod
Actually, I don't think it did it.
01:07:20 - Anthony Campolo
Because actually, sorry, it should be audio prompt. Sorry. That was from when we were first touching this a while ago. So yeah, this is where it is.
01:07:27 - Jenn Junod
Okay.
01:07:28 - Anthony Campolo
So copy paste this whole thing and
01:07:30 - Jenn Junod
Really quick though, why is this one not saying in the filename what LLM or whatever we used?
01:07:41 - Anthony Campolo
Because we didn't use an LLM and that's why it says prompt. Because you can see the prompt is in there. This didn't actually create the song. So we still have to give this to an LLM. But I wanted to see the prompt first. The issue is you don't have any of the API keys to use ChatGPT or Claude from the CLI right now.
01:08:04 - Jenn Junod
True.
01:08:06 - Anthony Campolo
Yes. Technically you have Ollama, but I don't want Ollama to try to write a terrible song. So just copy-paste this into your... actually, let's do this with... yeah, ChatGPT should be fine. Do ChatGPT 4o and just copy-paste this
01:08:21 - Jenn Junod
Whole thing into ChatGPT. Let me get it open. Hold on.
01:08:28 - Anthony Campolo
Yeah, and we can go the extra mile and generate an actual song with Suno. But this will just show us the lyrics first of all.
01:08:44 - Jenn Junod
There we go. What can we help with?
01:08:50 - Anthony Campolo
Great. So just copy paste the entire thing and hit go.
01:08:58 - Jenn Junod
Framework fever.
01:09:01 - Anthony Campolo
You should bump up your text a little bit. Wow. "Yo, the mic ignites, I'm coding by candlelight, spit insight sharper than a syntax fight. FSJam, it's the fam where we conjure the slam. Future-facing frameworks like they're in a diagram. Twisted pipelines, I'm aligning the stars, 2021 predictions, engineers on Mars. While the bits flip scripts down into layers, functional and sweet like a sugar-laced phrase [unclear]." Yeah. So there you go. You got a rap song now.
01:09:36 - Jenn Junod
Okay, it's actually pretty long. Wow.
01:09:42 - Anthony Campolo
So you just added a new prompt to the CLI. Good job.
01:09:48 - Jenn Junod
Sweet.
01:09:50 - Anthony Campolo
Now you want to commit those changes and open a PR just like you did before.
01:09:57 - Jenn Junod
We want to do this change, and then we're going to label it "Add rap prompt."
01:10:08 - Anthony Campolo
It should have a space between "rap" and "prompt." It's okay.
01:10:14 - Jenn Junod
Too late.
01:10:15 - Anthony Campolo
Yeah, don't worry about it. I know what you mean.
01:10:18 - Jenn Junod
Publish branch. But we don't want to create a pull request yet. Or do we?
01:10:24 - Anthony Campolo
We do now, though. Let's do it through the GitHub editor this time instead. So don't do it through your editor. Let's do it through GitHub. Scroll up and click AutoShow, like go to the very main thing. Yeah. It doesn't do the thing because you probably weren't on the page. Okay, go where it says main branch next to four branches. Click that, then go to TJT. And then go click to contribute. Yep. Then open pull request. There you go. Now this is...
01:11:06 - Jenn Junod
Now I can put a space.
01:11:08 - Anthony Campolo
Yeah, you can. And if you scroll down, you'll see the commits. Actually, you got. Yeah. So there you go. And then when you create the pull request, then I'll be able to see it.
01:11:19 - Jenn Junod
Okay. Do you want me to add a description? Oh, shouldn't.
01:11:23 - Anthony Campolo
I'll be able to edit this, actually. This is where I'm going to write in the todos for you. So you don't really need to worry about writing the PR descriptions, because I'm going to be helping with that. You can think of that as your instructions. Then you just have to commit, and I'll check things off as you go. Or you can check them off as you go. So move over the tasks there and we can already check one off. Okay.
01:11:57 - Jenn Junod
Okay.
01:12:00 - Anthony Campolo
All right. You also spelled "prompt" wrong.
01:12:04 - Jenn Junod
Did I. I got.
01:12:06 - Anthony Campolo
I'm fixing it. Don't worry.
01:12:07 - Jenn Junod
Well, actually, I will say that might be one of the most annoying things. It's "prompt". There we go.
01:12:23 - Anthony Campolo
Don't do that. I'm editing it already.
01:12:26 - Jenn Junod
It's doing it at the same time. It accepted your edits. Let me update it. Ishan, this is pretty cool to look at. I'm excited to see how far it's gone. And like you said, you've been working on this for a year now.
01:12:46 - Anthony Campolo
Yeah. I first started playing around with the capabilities before I had written any code. Like I was saying, I was transcribing things and then feeding them to ChatGPT manually. That was over a year ago now. Then I wrote a blog post that explained the very basic components of this without all the integrations and other stuff. I published that on March 1st this year, and then I started the repo like a week or two after that. So yeah, it's been almost a year now.
01:13:22 - Jenn Junod
Congratulations.
01:13:24 - Anthony Campolo
Thanks. Thanks for being the first contributor.
01:13:27 - Jenn Junod
Thanks for letting me like tag along and be like, hey, let me learn on your project. Okay, thanks.
01:13:34 - Anthony Campolo
That was great. That's what open source is for. And yeah, you're going to contribute a lot, I have no doubt. Especially once you get into the flow of it. I've tried to do my best to make the project fairly concise. At this point there is quite a lot of code. It does a lot of things, but most of it's fairly self-contained. There are like nine LLM files, but they all pretty much work the same. If you want to add an LLM, all you really need to do is explain to ChatGPT, "Hey, here's my code for my ChatGPT thing. I want to add AWS Nova," and it will model it off the code that's already written. Next time we stream, I'm going to walk you through how I actually develop and how I'll work out these different issues with LLMs. Because now that we have the issues written, we're going to be able to feed the context of the project and the issue to ChatGPT o1 and have it give you a first draft of the code you'd need to solve each issue.
01:14:38 - Jenn Junod
Oh, that's pretty cool. And something that I don't want to forget is, now that if I want to do something more on this PR... oh, that's when you were like, hey, there's a really easy command that you can do right here.
01:15:00 - Anthony Campolo
Yeah. So that will get you to this current PR and then you can always develop here. And if you add the next time you add a prompt, you can commit it and you can push it and then it will show up and we'll both see it on the branch and I can push to this branch also. So if you push something and I'm like, cool, this works, but I want to tweak something real quick, I can then make that change and we could do that simultaneously as we're working on the PR. So that's why I think this is going to be the way to go for just for us to like work on this together.
01:15:31 - Jenn Junod
I'm updating something on the README just so that way.
01:15:37 - Anthony Campolo
Yeah, and you can totally do that.
01:15:38 - Jenn Junod
I want to see.
01:15:40 - Anthony Campolo
And so this will show up now as a commit on the PR you're doing. But that's totally fine. There don't need to be hard-and-fast rules about it. If there's a small thing you want to change somewhere and it doesn't really fit within the PR, that's fine, just push it all. Always check all the commits anyway.
01:15:56 - Jenn Junod
Yeah, this is more just because I want to see it happen, if that makes sense. Like now that I'm in that PR... testing PR... sync changes.
01:16:17 - Anthony Campolo
By the way, Ishan, I find it really funny that you're watching this through LinkedIn right now,
01:16:26 - Jenn Junod
So... what? Oh hey, you're right. I do definitely need to update this, but it now shows in here and I can see the code change. Yay. And it did totally put it on this PR. Cool. I feel more confident with that, especially being able to go through these prompt options. But I will say, for my own practice, I would like to have you put the stuff in issues and make me get used to putting it in the PRs and creating the PRs. Even if I'm copying and pasting the issue, it at least gets me used to creating PRs, you know?
01:17:09 - Anthony Campolo
Yeah, sure, that's totally fine. Yeah, this was a good thing that my bootcamp did actually. You had an assignment every day you had to do based on a lesson and to submit the assignment you had to commit the project to a git repo and then let your instructor review it and merge the pull request for you. So they made you go through that flow every single day. Even if you're copying the code from your friend or whatever, you still had to know how to commit. There's no way to cheat on that part.
01:17:40 - Jenn Junod
Yeah. Yeah. It's just crazy to me that these are very basic things, but when you don't do them nonstop or get into that repetition, it just doesn't click.
01:17:51 - Anthony Campolo
Yeah, absolutely.
01:17:53 - Jenn Junod
I think this is at least all that I had for today.
01:17:57 - Anthony Campolo
Yeah. A good place to stop. Yeah.
01:18:00 - Jenn Junod
Like, I need to consume this a little more and poke around more, but cool.
01:18:08 - Anthony Campolo
Yeah.
01:18:08 - Jenn Junod
Thanks for joining today.
01:18:11 - Anthony Campolo
Yeah. For some of the other issues, I made them very self-contained so I can show you how to work them out with an LLM, and it's probably going to give you the right answer immediately. That's good, because I have built the vast majority of this project just by iterating with LLMs. I think that's a really great way to develop. But there are steps along the way that can get in your way a lot if you don't do it the right way. I've kind of figured out the tricks, especially with this project, in terms of what information I have to give it and what I have to explain for it to know what I want. As long as you do that, it can one-shot it and literally write the entire code you'd need to solve the whole issue. It's mind-boggling.
01:19:05 - Jenn Junod
Very cool. Well, thank you, Anthony. We'll have you on stream again, of course.
01:19:09 - Anthony Campolo
Yeah. I'm glad we're streaming again. I can host on my channel next time if you want.
01:19:16 - Jenn Junod
Sweet. Awesome. Bye.
01:19:19 - Anthony Campolo
Thanks, Ishan, for hanging out.