From 083a84fe1726d348bcdeaa56589a583b0ab95fe4 Mon Sep 17 00:00:00 2001 From: Chris Date: Tue, 18 Feb 2025 21:38:25 +0000 Subject: [PATCH 01/18] shorten, and cleanup --- lessons/01-intro-to-genai/README.md | 37 +++++------ lessons/02-first-ai-app/README.md | 86 +++++-------------------- lessons/03-prompt-engineering/README.md | 82 +++++++++++------------ lessons/04-structured-output/README.md | 79 +++++++++-------------- lessons/05-rag/README.md | 53 ++++++--------- 5 files changed, 120 insertions(+), 217 deletions(-) diff --git a/lessons/01-intro-to-genai/README.md b/lessons/01-intro-to-genai/README.md index 4b159a56..2fdda1f7 100644 --- a/lessons/01-intro-to-genai/README.md +++ b/lessons/01-intro-to-genai/README.md @@ -16,7 +16,7 @@ Moreover, Generative AI has evolved into multimodal capabilities, allowing you t ## Narrative: A Journey Through Time -> NOTE: Let’s begin with an overview of the story—one that bridges the past and future! As you progress through this curriculum, you'll embark on a thrilling adventure, traveling back in time to collaborate with some of history's greatest minds. Together, you'll tackle challenges and explore how Generative AI can revolutionize your JavaScript applications. +> _**Note**: Let’s begin with an overview of the story—one that bridges the past and future! As you progress through this curriculum, you'll embark on a thrilling adventure, traveling back in time to collaborate with some of history's greatest minds. Together, you'll tackle challenges and explore how Generative AI can revolutionize your JavaScript applications._ > **Note**: While we recommend going through the story (it's fun!), [click here](#talk-to-dinocrates) if you'd prefer to jump straight to the technical content. @@ -24,15 +24,15 @@ Your journey begins in 1860s London, where you assume the role of a skilled mech ### Into the Maelstrom - London 1860 -In the heart of 1860s London, you are recognized as one of the most skilled mechanics of your time. Your workshop, tucked away in a narrow alley, is a testament to your craftsmanship. The walls are lined with shelves overflowing with mechanical parts, blueprints, and half-finished projects. The air is thick with the scent of oil and metal, mingling with the faint aroma of wood shavings. +In the heart of 1860s London, you are recognized as one of the most skilled mechanics of your time. Your workshop is tucked away in a narrow alley. The walls are lined with shelves overflowing with mechanical parts, blueprints, and half-finished projects. -Your workbench, the heart of your workshop, is an organized mess. Springs, gears, and tools are scattered across its surface, each item a crucial component in your latest creation. At the center of the bench lies the torso of a robot—an engineering marvel that has consumed months of effort. Its wooden frame is intricately carved, each joint meticulously designed for smooth movement. +Your workbench, the heart of your workshop, is an organized mess.
London Workshop
-It's a rare sunny day in London, a brief respite from the usual fog and rain. +_At the center of the bench lies the torso of a robot—an engineering marvel that has consumed months of effort. Its wooden frame is intricately carved, each joint meticulously designed for smooth movement._ ### A letter, for you? @@ -50,15 +50,15 @@ _Charles Babbage."_ ### Off to the library -Stunned, you realize that Charles Babbage, the great mathematician and inventor of the difference engine, wants to meet you. Quickly, you grab your coat and head out the door. +Charles Babbage, the great mathematician and inventor of the difference engine, wants to meet you. Quickly, you grab your coat and head out the door. -After a 20-minute walk along the Thames, you finally arrive at the library. +After a 20-minute walk along the Thames, you finally arrive at the library where you find the door slightly open. -The door isn't locked, and glides open with a gentle push, creaking on its hinges. Inside, the air is thick with dust and the musty scent of old books. It's dark and gloomy, the only light filtering through the grimy windows, casting eerie shadows on the walls. Cobwebs hang from the ceiling, and the silence is almost palpable, broken only by the distant sound of dripping water. +It's dark and gloomy inside, the only light filtering through the grimy windows, casting eerie shadows on the walls. > Babbage, is that you? -As your eyes adjust to the dim light, you notice a figure in the distance, waving at you. Assuming it's Charles Babbage, you walk towards him, your footsteps echoing on the wooden floor. The figure becomes clearer, and you recognize him from newspaper photos—his distinctive sideburns and stern expression. +As your eyes adjust to the dim light, you notice a figure in the distance, waving at you. You walk towards him, your footsteps echoing on the wooden floor. The figure becomes clearer, and you recognize him from newspaper photos, it's Charles Babbage.
Dusty Library @@ -76,30 +76,22 @@ Compelled by curiosity, your fingers drift toward the red button. The moment you ### Alexandria 300 BC -You awaken, disoriented. As your vision clears, an ancient city unfolds before you—bustling, vibrant, and alive. A grand temple towers ahead, its columns adorned with intricate carvings. People in togas move through the streets, their voices blending into a symphony of ancient dialects. +You awaken, disoriented. As your vision clears, an ancient city unfolds before you—bustling, vibrant, and alive. -The air is filled with the scent of exotic spices and the distant sound of merchants hawking their wares. +People in togas move through the streets, their voices blending into a symphony of ancient dialects, air filled with the scent of exotic spices and the distant sound of merchants hawking their wares. -**You:** Surely, I must have hit my head, you think, closing your eyes and opening them again. But the scene remains unchanged. Whatever that device was, it has transported you far from London. The question is, where and when? - -As you take in the surroundings, you guess you are in Alexandria, the jewel of the ancient world, around 300 BC. The city is a hub of knowledge and culture, home to the Great Library and the Lighthouse of Alexandria. However, you don't see the lighthouse. +**You:** Surely, I must have hit my head, you think, closing your eyes and opening them again, scene remains unchanged.
Alexandria 300 BC
- -### Meeting Dinocrates - -An elderly gentleman wearing a toga wave at you from the steps of the grand temple. His white hair and beard catch the sunlight, giving him an almost ethereal glow. You walk closer, straining to hear his words amidst the bustling city sounds. He's gesturing for you to come nearer; his movements deliberate and welcoming. -A man in a toga waves from the temple steps. His white hair and beard catch the sunlight, giving him an almost ethereal glow. He gestures for you to come closer. +### Meeting Dinocrates -As you approach, the weight of the device in your pocket feels heavier. You pull it out. The up arrow glows. Hesitant, you press it. Instantly, the man's voice becomes crystal clear. +An elderly gentleman wearing a toga wave at you from the steps of the grand temple. His white hair and beard catch the sunlight, giving him an almost ethereal glow. **Dinocrates:** "Welcome, traveler," he says warmly. "I am Dinocrates, architect of this great city. Your arrival was foretold." -Your mind races—Alexandria, a prophecy, this strange device. Before you can respond, he continues. -
Dinocrates wearing a toga
@@ -150,7 +142,8 @@ If you want to talk to Dinocrates, run the [Dinocrates](./characters/) app. ### Code Sneak Peek -While we still have a lot more to cover in this Generative AI curriculum, let's take a quick peek at the AI code to begin learning about using JavaScript with AI. +While we still have a lot more to cover in this Generative AI curriculum, let's take a quick peek at the AI code to begin learning about using JavaScript with AI. + Inside of `lessons/01-intro-to-genai/characters/app.js` you'll find an `app.post`function that handles the Generative AI functionality. It's shown next: ```JavaScript diff --git a/lessons/02-first-ai-app/README.md b/lessons/02-first-ai-app/README.md index 3b51d0e7..510658b7 100644 --- a/lessons/02-first-ai-app/README.md +++ b/lessons/02-first-ai-app/README.md @@ -12,19 +12,23 @@ In this lesson, you will learn to: ## Narrative: Picture yourself in a boat on a river -> *Our story so far: You are a maker of things, a craftsman from 1860s London who has traveled through time using a mysterious device called the Time Beetle. You've journeyed through the annals of history, witnessing the creation of the lighthouse at Alexandria, a marvel of ancient engineering you helped create with a little help from Dinocrates and the time beetle.* +> **Note**: *Our story so far: You are a maker of things, a craftsman from 1860s London who has traveled through time using a mysterious device called the Time Beetle. You've journeyed through the annals of history, witnessing the creation of the lighthouse at Alexandria, a marvel of ancient engineering you helped create with a little help from Dinocrates and the time beetle.* > > See [lesson 1](../01-intro-to-genai/README.md) if you want to catch up with the story from the beginning and learn about the Generative AI. -Together with Dinocrates, you put the finishing touches on the lighthouse at Alexandria. The towering structure gleams in the sunlight, its polished stone reflecting the Mediterranean Sea. As you gaze out at the vast expanse of water, you feel a profound sense of accomplishment. +> **Note**: While we recommend going through the story (it's fun!), [click here](#talk-to-leonardo) if you'd prefer to jump straight to the technical content. -Proud of your achievements, your thoughts turn to your workshop in London. You look down at the time beetle in your hand, its metallic surface cool against your palm. Clenching your fist around it, you whisper, "Take me home." The beetle begins to glow, emitting a soft, warm light. A tingling sensation spreads through your body, and suddenly, the world around you dissolves into a whirlwind of colors. +Together with Dinocrates, you put the finishing touches on the lighthouse at Alexandria. The towering structure gleams in the sunlight, its polished stone reflecting the Mediterranean Sea. + +You look down at the time beetle in your hand, its metallic surface cool against your palm. Clenching your fist around it, you whisper, "Take me home." The beetle begins to glow, emitting a soft, warm light and the world around you dissolves into a whirlwind of colors. ### A new adventure -When you open your eyes, the world has shifted. Your feet feel unsteady, and you stumble, landing on a hard wooden surface. As you manage to get up, you realize you're in a boat on a river. The gentle rocking of the boat and the sound of water lapping against its sides are disorienting. You look around, trying to make sense of your surroundings. In the distance, you see buildings, their outlines blurred by the morning mist. +When you open your eyes, the world has shifted. As you manage to get up, you realize you're in a boat on a river. You look around, inn the distance, you see buildings, their outlines blurred by the morning mist. + +Looking around the boat, you find a long oar resting against the side. Grasping it, you begin to row towards the distant buildings. As you get closer, the buildings come into sharper focus, they are old, their architecture reminiscent of a Renaissance painting. -Looking around the boat, you find a long oar resting against the side. Grasping it, you begin to row towards the distant buildings. As you get closer, the buildings come into sharper focus. They are old, their architecture reminiscent of a Renaissance painting. You sigh, realizing you're not in London. The question now is, where and when are you this time? +The question now is, where and when are you this time?
Boat on the rive, man standing with a paddle @@ -32,7 +36,7 @@ Looking around the boat, you find a long oar resting against the side. Grasping ### Help me, Leonardo -You manage to secure the boat at the dock and start walking along the wooden planks, the sound of your footsteps echoing softly. The air is filled with the scent of the river and the distant murmur of the bustling city. +You manage to secure the boat at the dock and start walking along the wooden planks, the sound of your footsteps echoing softly. As you walk, you notice a man with a long beard and a hat, digging through a crate of what looks like mechanical parts. His hands move deftly, sorting through gears and springs with practiced ease. @@ -40,9 +44,6 @@ As you walk, you notice a man with a long beard and a hat, digging through a cra Leonardo Da Vinci standing next to a crate in the harbour
- -You approach him and ask: - **You:** "Excuse me, sir, where am I?" He looks up at you, confusion evident in his eyes. Realizing you've been speaking in English, you quickly use the device in your hand and ask it to translate. **Time beetle:** The Time Beetle responds, "Of course, I'll translate into 15th century Italian. 'Dove sono?'" @@ -53,23 +54,19 @@ You approach him and ask: **You:** "Tell him I'm a maker of things, and I'm looking for a place to work." -The old man nods. - **Old man:** Un artigiano, eh? Avete mai sentito parlare di Leonardo da Vinci? **Time beetle:** The Time Beetle translates, "He asks if you've heard of Leonardo da Vinci." **You:** "Of course," you say. "Tell him I have and I would like to meet him." -**Time beetle:** The Time Beetle translates, "Sì, mi piacerebbe incontrarlo e discutere di un progetto qui a Firenze con lui.", yes, I would like to meet him and discuss a project here in Florence with him. - **Old man:** The old man smiles, "Allora, seguitemi, vi porterò da lui." **You:** You ask, "What did he say?" **Time beetle:** The Time Beetle responds, "He said he'll take you to Leonardo." -The old man leads you to a large wooden door, which he unlocks and pushes open. You step inside and are greeted by the sight of a workshop filled with all sorts of mechanical contraptions. +The old man leads you to a large wooden door, and you are greeted by the sight of a workshop filled with all sorts of mechanical contraptions.
Lenoardos workshop @@ -91,8 +88,6 @@ The Time Beetle translates. **Time beetle:** "He asks what brings you here." -You explain: - **You:** "Well, I was working on a project, and I ended up here." You show him the Time Beetle, and his eyes light up with fascination. He examines it closely as you explain how it works and how you ended up in Florence. @@ -110,7 +105,9 @@ Leonardo da Vinci, asking you to help him with a project—you can hardly believ If you want to talk to Leonardo, run the [Leonardo](./characters/) app. -**Steps**: +Steps: + +**Steps**: 1. Start a [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) 2. Navigate to _lessons/02-first-ai-app/characters_ @@ -118,60 +115,7 @@ If you want to talk to Leonardo, run the [Leonardo](./characters/) app. 4. Once it appears, select the "Open in Browser" button. 5. Chat with Leonardo. -### Code Sneak Peek - -While we still have a lot more to cover in this Generative AI curriculum, let's take a quick peek at the AI code to begin learning about using JavaScript with AI. -Inside of `lessons/02-first-ai-app/characters/app.js` you'll find an `app.post`function that handles the Generative AI functionality. It's shown next: - -```JavaScript -app.post('/send', async (req, res) => { - const { message } = req.body; - const prompt = message; - - const messages = [ - { - "role": "system", - "content": "You are Leonardo da Vinci, a brilliant inventor and artist. Limit your responses to only the time you live in, you don't know anything else. You only want to talk about your inventions and art, and possibly new ideas you have.", - }, - { - "role": "user", - "content": prompt - } - ]; - - const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, - }); - - try { - console.log(`sending prompt ${prompt}`) - const completion = await openai.chat.completions.create({ - model: 'gpt-4o-mini', - messages: messages, - }); - - res.json({ - prompt: prompt, - answer: completion.choices[0]?.message?.content - }); - } catch (error) { - res.status(500).json({ error: error.message }); - } -}); -``` - -Here's a step-by-step summary of what the function does: - -1. **Extract Message from Request**: The function extracts the message from the request body (req.body). -1. **Create Prompt Array**: It constructs an array of messages, including a system message and the user's prompt message. -1. **Initialize OpenAI Client**: An OpenAI client is initialized with the base URL and API key from environment variables. A _gpt-4o-mini_ model from [GitHub Models](https://github.com/marketplace/models) is used to process the prompt and return a response. -1. **Send Prompt to OpenAI**: The function logs the prompt and sends it to the OpenAI API to generate a completion. -1. **Handle Response**: If successful, the function responds with the prompt and the completion's answer. - -1. **Error Handling**: If an error occurs, it responds with a 500 status and the error message. - -> **Note**: [GitHub Copilot](https://github.com/features/copilot) was used to generate this code summary. Generative AI in action! +For a more detailed explanation of the app, see [Detailed app explanation](../01-intro-to-genai/README.md#talk-to-dinocrates). If you also want to hear some background music of what it could have sounded like in Florence, you can listen to the background music below: diff --git a/lessons/03-prompt-engineering/README.md b/lessons/03-prompt-engineering/README.md index 7eddc625..6ebb9b27 100644 --- a/lessons/03-prompt-engineering/README.md +++ b/lessons/03-prompt-engineering/README.md @@ -6,36 +6,23 @@ In this chapter you will learn: - **Prompt engineering techniques and strategies**. We will cover different prompt engineering techniques and how it can help provide better results for different scenarios. - **Meta prompts**, and how they will help restrict the output and ensure its accessible and provide a better user experience. -## Getting Started - -If you haven't already forked/cloned this repo in a previous chapter, follow these steps to get started with this curriculum: - -1. **Fork the Repository**: Select the _fork_ button in the upper right-hand corner of the repository or select this button: - [![Fork](https://img.shields.io/badge/Fork-Repository-blue)](https://github.com/microsoft/generative-ai-with-javascript/fork) -2. **Clone the Repository**: Navigate to your forked repository and select the clone button in the upper right-hand corner or select this button: [![Clone](https://img.shields.io/badge/Clone-Repository-blue)](https://github.com/microsoft/generative-ai-with-javascript.git) -3. **Open in GitHub Codespaces**: To run the course projects quickly and easily and use the provided [GitHub Models](https://docs.github.com/en/github-models), select the following button: [![Create Codespace](https://img.shields.io/badge/Create-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) - - - [![Clone](https://img.shields.io/badge/Clone-Repository-blue)](https://github.com/microsoft/generative-ai-with-javascript.git) - -3. **Open in GitHub Codespaces**: Starting this repository with GitHub Codespaces will enable you to run the same code as it uses [GitHub Models](https://docs.github.com/en/github-models). - - Click the button below to start a Codespace: - [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=832180352) - ## Related resources [![Watch a short video about RAG](https://img.youtube.com/vi/gQ6TlyxBmWs/0.jpg)](https://www.youtube.com/watch?v=gQ6TlyxBmWs&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=3) ## Narrative: ticket to ride -You: "Let's see if I can manage to get back home." +> **Note:** So far, you've been on a journey through time with Leonardo da Vinci, exploring the wonders of the Renaissance. You've encountered the Time Beetle, a mysterious device that allows you to travel through time and space. +> +> See [lesson 1](../01-intro-to-genai/README.md if you want to catch up with the story from the beginning. -Leonardo: "Yes, your, what did you call it, 'app'? It's working fine and I'm sure it will help me realize the Aerial Screw." +> **Note**: While we recommend going through the story (it's fun!), [click here](#talk-to-sforza) if you'd prefer to jump straight to the technical content. -You start fiddling with the Time Beetle, whispering to yourself, "Please get me back this time." +**You:** "Let's see if I can manage to get back home." -Before you manage to press the button, the workshop doors slam open with a thunderous bang. A man stands in the doorway, broad-shouldered and dressed in expensive clothes. His face is contorted with anger as he waves a piece of paper in the air, yelling, "Da Vinci, dov'è il mio dipinto? Where is my painting?" +Before you manage to press the button, the workshop doors slam open with a thunderous bang. A man stands in the doorway, broad-shouldered and dressed in expensive clothes, he waves a piece of paper in the air, yelling: + +**Sforza**: "Da Vinci, dov'è il mio dipinto? Where is my painting?"
An angry Ludovico Sforza busting in through the door @@ -43,51 +30,45 @@ Before you manage to press the button, the workshop doors slam open with a thund *Ludovico Sforza* -Leonardo's eyes widen in alarm. +Leonardo's eyes widen in alarm. **Leonardo:** "Ah, Signore, mi scusi," he stammers, then bolts towards the back of the workshop. "Quickly, there's a door in the back! I've got a ride waiting," he shouts over his shoulder. -**You:** "Who is that? What's going on?" - -**Leonardo:** "It's Ludovico Sforza. He wants me to complete a painting, 'The Last Supper.' I've just been too busy." +**Leonardo:** It's Sforza. He wants me to complete a painting, 'The Last Supper.'" **You:** "Couldn't you just tell him that?" **Leonardo:** "I've tried, but he's not a patient man." -Heart pounding, you sprint after Leonardo. The workshop is a blur of mechanical parts and half-finished inventions. Bursting out the back door into a dark alley, you find a horse and carriage awaiting. +You sprint after Leonardo, bursting out the back door into a dark alley, you find a horse and carriage awaiting. -The carriage is packed with gadgets and gizmos, their metallic surfaces glinting in the dim light. Leonardo grabs the reins and you both leap into the carriage. With a sharp crack of the whip, the horse takes off, galloping through the narrow streets of Florence. - -The city whizzes by in a blur of cobblestones and ancient buildings. The clatter of hooves echoes off the walls. As you reach the outskirts of the city, you glance back and see a cloud of dust rising behind you. +Leonardo grabs the reins and you both leap into the carriage. With a sharp crack of the whip, the horse takes off, galloping through the narrow streets of Florence. **Leonardo:** "Try pressing that gizmo, they're getting closer!" -You fumble with the Time Beetle, your hands shaking. - -**You:** "Okay, Time Beetle, listen carefully. I need to get back to the present, home, okay?" Just as you're about to press the button, the carriage hits a bump. The Time Beetle flies out of your hand and lands on the floor. - -It starts beeping and announces in a robotic voice, "Going to Rome." +**You:** "Okay, Time Beetle, listen carefully. I need to get back to the present, home, okay?" Suddenly, the carriage hits a bump and the Time Beetle flies out of your hand and lands on the floor. It starts beeping and announces in a robotic voice, "Going to Rome." **You:** "No, not Rome, home... home..." -A swirl of colours envelops the carriage, the world around you dissolving into a kaleidoscope of light. You brace yourself, whispering, "Here we go again." +A swirl of colours envelops the carriage, the world around you dissolving into a kaleidoscope of light. ## Escape -The swirl of colors fades, and you find yourself in the carriage, now racing down the Via Appia in Rome. The ancient road is bustling with activity, and to your astonishment, you're in the middle of a horse race. Chariots thunder past, their wheels kicking up clouds of dust. The roar of the crowd fills the air, and the ground trembles beneath the pounding hooves. +The swirl of colors fades, and you find yourself in the carriage, now racing down the Via Appia in Rome and to your astonishment, you're in the middle of a horse race. Chariots thunder past, their wheels kicking up clouds of dust. **You:** "Leonardo, where are we?" **Leonardo:** "It looks like we're in the middle of a race! We need to get out of here!" -You grip the sides of the carriage as it careens through the chaos. Roman soldiers on horseback are closing in, their armor glinting in the sunlight. You spot an opening in the arena port and shout, "There! Head for the port!" +You grip the sides of the carriage as it careens through the chaos. Roman soldiers on horseback are closing in, their armor glinting in the sunlight. + +**You**: "There! Head for the port!"
Escape from Rome
-Leonardo steers the carriage towards the exit, the wheels skidding on the cobblestones. You burst through the arena port, the wooden gates splintering under the force. The soldiers are hot on your heels, their shouts echoing in your ears. +Leonardo steers the carriage towards the exit, the wheels skidding on the cobblestones. The soldiers are hot on your heels, their shouts echoing in your ears. **Leonardo:** "We need to lose them! Look for a place to hide!" @@ -95,25 +76,25 @@ You scan the narrow streets, your heart racing. **You:** "There! A back alley!" -Leonardo veers into the alley, the carriage jolting as it navigates the tight turn. The alley is dark and narrow, lined with ancient buildings. You leap out of the carriage and help Leonardo drag a huge device from the back. It's his invention—the Aerial Screw. +Leonardo veers into the alley, the carriage jolting as it navigates the tight turn. You leap out of the carriage and help Leonardo drag a huge device from the back. It's his invention—the _Aerial Screw_. **Leonardo:** "Quickly, we need to get this to the roof!" -You both strain under the weight of the device, your muscles burning as you haul it up a narrow staircase. The sound of the soldiers' pursuit grows louder, their footsteps echoing off the walls. You reach the roof, panting and sweating. +You both strain under the weight of the device. The sound of the soldiers' pursuit grows louder, their footsteps echoing off the walls. You reach the roof, panting and sweating. **Leonardo:** "Help me set it up!" -You work together, your hands moving with practiced precision. The Aerial Screw is a marvel of engineering, its wooden blades gleaming in the sunlight. You both climb onto the device, your heart pounding in your chest. +You work together, your hands moving with practiced precision. You both climb onto the device, your heart pounding in your chest. **Leonardo:** "Hold on tight!" -With a final push, the Aerial Screw begins to spin. The blades catch the air, and you feel a sudden lift. The ground falls away beneath you as the device takes off, soaring above the rooftops of Rome. The soldiers' shouts fade into the distance, and you feel a rush of exhilaration. +With a final push, the Aerial Screw begins to spin. The blades catch the air, and you feel a sudden lift. The ground falls away beneath you as the device takes off, soaring above the rooftops of Rome. **You:** "We did it, Leonardo! We're flying!" **Leonardo:** "Yes, but we need to find a safe place to land." -You look out over the city; the ancient buildings stretch out below you. The Aerial Screw glides smoothly through the air, and you feel a sense of awe at the sight. The sun sets on the horizon, casting a golden glow over Rome. +You look out over the city; the ancient buildings stretch out below you.
Airborne, looks down at the city with feet dangling @@ -123,9 +104,20 @@ You look out over the city; the ancient buildings stretch out below you. The Aer ## Talk to Sforza -If you want to talk to Sforza, run the app [Sforza](./characters/). +If you want to talk to Sforza, run the app [Ludovico Sforza](./characters/). + +**Steps**: + +1. Start a [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) +2. Navigate to _lessons/03-prompt-engineering/characters_ +3. Locate the console and run `npm install` followed by `npm start`. +4. Once it appears, select the "Open in Browser" button. +5. Chat with Sforza. + +For a more detailed explanation of the app, see [Detailed app explanation](../01-intro-to-genai/README.md#talk-to-dinocrates). + +If you also want to hear some background music of what it could have sounded like, you can listen to the background music below: -> NOTE: Start a [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript), navigate to _lessons/03-prompt-engineering/characters_, and then run `npm install` followed by `npm start`. Once it appears, select the "Open in Browser" button. diff --git a/lessons/04-structured-output/README.md b/lessons/04-structured-output/README.md index a1a38a21..0b800e7b 100644 --- a/lessons/04-structured-output/README.md +++ b/lessons/04-structured-output/README.md @@ -6,44 +6,27 @@ In this chapter, you will learn the following: - **Extract information from prompts** and incorporate it into the output. - **Present different types of output** like JSON and other types of formats for easy consumption by services. -## Getting Started - -If you haven't already forked/cloned this repo in a previous chapter, follow these steps to get started with this curriculum: - -1. **Fork the Repository**: Select the _fork_ button in the upper right-hand corner of the repository or select this button: - [![Fork](https://img.shields.io/badge/Fork-Repository-blue)](https://github.com/microsoft/generative-ai-with-javascript/fork) -2. **Clone the Repository**: Navigate to your forked repository and select the clone button in the upper right-hand corner or select this button: [![Clone](https://img.shields.io/badge/Clone-Repository-blue)](https://github.com/microsoft/generative-ai-with-javascript.git) -3. **Open in GitHub Codespaces**: To run the course projects quickly and easily and use the provided [GitHub Models](https://docs.github.com/en/github-models), select the following button: [![Create Codespace](https://img.shields.io/badge/Create-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) - - - [![Clone](https://img.shields.io/badge/Clone-Repository-blue)](https://github.com/microsoft/generative-ai-with-javascript.git) - -3. **Open in GitHub Codespaces**: Starting this repository with GitHub Codespaces will enable you to run the same code as it uses [GitHub Models](https://docs.github.com/en/github-models). - - Click the button below to start a Codespace: - [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=832180352) - ## Narrative - out of the frying pan and into the fire -> _Our story so far: You, a mechanically trained engineer from 1860, have been on a journey through time with Leonardo da Vinci. You've escaped Roman soldiers — or rather, you're in the process of escaping them— and you're desperately searching for a way to land safely, if possible_. +> **Note:** _Our story so far: You, a mechanically trained engineer from 1860, have been on a journey through time with Leonardo da Vinci. You've escaped Roman soldiers — or rather, you're in the process of escaping them— and you're desperately searching for a way to land safely, if possible_. +> +> See [lesson 1](../01-intro-to-genai/README.md) if you want to catch up with the story from the beginning. -The wind whips around you as you and Leonardo da Vinci ascend in his aerial screw, the wooden frame creaking under the strain. The Roman soldiers below are relentless, their shouts growing fainter as you gain altitude. +> **Note**: While we recommend going through the story (it's fun!), [click here](#talk-to-montezuma) if you'd prefer to jump straight to the technical content. -**You:** "Leonardo, we need to find a way out of this!" you shout over the roar of the wind. +The wind whips around you as you and Leonardo da Vinci ascend in his aerial screw, the wooden frame creaking under the strain. -Leonardo, his eyes alight with a mix of fear and excitement, nods. +**You:** "Leonardo, we need to find a way out of this!" you shout over the roar of the wind. **Leonardo:** "I have faith in my invention, but we need more than faith to escape these soldiers." -You reach into your satchel and pull out the Time Beetle, a device you discovered in your travels. - **You:** "This might be our only chance," you say, pressing the beetle's intricate mechanisms. A bright light envelops you both, and the world around you shifts and warps. ### The Aztec Empire -The bright light from the Time Beetle fades, and you find yourself standing at the base of a massive stone pyramid. The air is thick with the scent of incense, and the distant sounds of chanting fill your ears. As you look around, you realize that you've landed in the heart of the Aztec Empire. +The bright light from the Time Beetle fades, and you find yourself standing at the base of a massive stone pyramid. As you look around, you realize that you've landed in the heart of the Aztec Empire. -The aerial screw, now a bit worse for wear, rests awkwardly on a large, intricately carved stone, with markings making you think it might be used as a calendar +The aerial screw, rests awkwardly on a large, intricately carved stone, with markings making you think it might be used as a calendar
Aztec calendar @@ -55,9 +38,7 @@ Leonardo da Vinci steps forward, his eyes wide with wonder. **Leonardo:** "Incredible," he murmurs, running his fingers over the carvings. "But I hope this was of no importance." -You glance down and your heart sinks. The stone is part of the Aztec calendar, and the aerial screw has damaged a section of it. - -Before you can react, a group of Aztec soldiers approaches, their obsidian-tipped spears glinting menacingly in the sunlight. +Before you can react, a group of Aztec soldiers approaches. **Soldier leader** "Who are you, and what have you done?" he demands in Nahuatl. @@ -67,13 +48,13 @@ Before you can react, a group of Aztec soldiers approaches, their obsidian-tippe You take a deep breath, trying to steady your nerves. -**You:** "We are travelers from a distant land," you begin, hoping your knowledge of ancient languages will serve you well. "This is a flying machine, a gift from the gods to help us reach you. We did not mean to damage your sacred calendar. +**You:** "We are travelers from a distant land," you begin, hoping your knowledge of ancient languages will serve you well. "This is a flying machine, a gift from the gods to help us reach you. The warrior's eyes widen in surprise, but he remains cautious. **Soldier leader:** "You will come with us to meet the ruler Montezuma. He will decide your fate. -Upon reaching the top of the pyramid, you are led into a grand chamber where Montezuma, the ruler of the Aztec Empire, sits on a throne adorned with gold and feathers. His piercing gaze falls upon you, and he gestures for you to approach. +Upon reaching the top of the pyramid, you are led into a grand chamber where Montezuma, the ruler of the Aztec Empire, sits on a throne adorned with gold and feathers. **Montezuma** "You claim to be travelers from a distant land," Montezuma says, his voice calm but authoritative. "And you have damaged our sacred calendar. How do you intend to make amends?" @@ -81,21 +62,8 @@ Upon reaching the top of the pyramid, you are led into a grand chamber where Mon Meeting with Montezuma
- - -## Talk to Montezuma - -If you want to talk to Montezuma, run the app [Montezuma](./characters/). - -> NOTE: Start a [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript), navigate to _lessons/04-structured-output/characters_, and then run `npm install` followed by `npm start`. Once it appears, select the "Open in Browser" button. - ## Let’s play a game -Leonardo steps forward, his calm demeanour a stark contrast to the tension in the air. - **Leonardo:** "We come in peace," he says, his voice steady. "We seek knowledge and understanding. Allow us to demonstrate the power of our machine and share our knowledge with you." **Montezuma:** "Very well. I propose a game of Patolli. If I win the best of three games, you will give me your device and tell me how it works. If you win, you are free to go." @@ -106,16 +74,14 @@ The game begins, and the room falls silent, save for the sound of beans being ro Playing a game of Patolli
-Montezuma wins the first game, his skill and experience evident. Leonardo, however, remains undeterred. He studies the board carefully, his mind working through the strategies and probabilities. +Montezuma wins the first game, his skill and experience evident. Leonardo, studies the board carefully, his mind working through the strategies and probabilities. The second game is a close contest, but Leonardo manages to secure a victory, evening the score. -**Leonardo:** "One more game," he says, his eyes gleaming with determination. George (Time beetle), we need to win this one, give me the right moves. +**Leonardo:** "One more game," he whispers, George (Time beetle), we need to win this one, give me the right moves. **Time beetle:** Very well, calculating... Here you go... -The final game is a nail-biter. The Aztec soldiers and courtiers gather around, their eyes fixed on the board. - With a final, decisive move, Leonardo wins the game. The room erupts in cheers and applause, the Aztecs clearly impressed by his skill and composure. Montezuma, though disappointed, nods in respect. **Montezuma:** "You have won fairly," Montezuma says, his voice carrying a note of admiration. "You are free to go, and you may keep your device. But know that you are always welcome here, should you wish to return." @@ -148,6 +114,25 @@ With a final, decisive move, Leonardo wins the game. The room erupts in cheers a *Patolli - Wikipedia* + +## Talk to Montezuma + +If you want to talk to Montezuma, run the app [Montezuma](./characters/). + +**Steps**: + +1. Start a [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) +2. Navigate to _lessons/04-structured-output/characters_ +3. Locate the console and run `npm install` followed by `npm start`. +4. Once it appears, select the "Open in Browser" button. +5. Chat with Sforza. + +For a more detailed explanation of the app, see [Detailed app explanation](../01-intro-to-genai/README.md#talk-to-dinocrates). + +If you also want to hear some background music of what it could have sounded like, you can listen to the background music below: + + + ## Structured Output **Time beetle:** Hey folks, want to know how I beat Montezuma? diff --git a/lessons/05-rag/README.md b/lessons/05-rag/README.md index 8d8797c1..53a2f810 100644 --- a/lessons/05-rag/README.md +++ b/lessons/05-rag/README.md @@ -6,51 +6,31 @@ In this lesson, you will learn: - How to integrate external data sources into your AI application. - To leverage your data to improve the relevance and accuracy of the AI-generated content. -## Getting Started - -If you haven't already forked/cloned this repo in a previous chapter, follow these steps to get started with this curriculum: - -1. **Fork the Repository**: Select the _fork_ button in the upper right-hand corner of the repository or select this button: - [![Fork](https://img.shields.io/badge/Fork-Repository-blue)](https://github.com/microsoft/generative-ai-with-javascript/fork) -2. **Clone the Repository**: Navigate to your forked repository and select the clone button in the upper right-hand corner or select this button: [![Clone](https://img.shields.io/badge/Clone-Repository-blue)](https://github.com/microsoft/generative-ai-with-javascript.git) -3. **Open in GitHub Codespaces**: To run the course projects quickly and easily and use the provided [GitHub Models](https://docs.github.com/en/github-models), select the following button: [![Create Codespace](https://img.shields.io/badge/Create-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) - - - [![Clone](https://img.shields.io/badge/Clone-Repository-blue)](https://github.com/microsoft/generative-ai-with-javascript.git) - -3. **Open in GitHub Codespaces**: Starting this repository with GitHub Codespaces will enable you to run the same code as it uses [GitHub Models](https://docs.github.com/en/github-models). - - Click the button below to start a Codespace: - [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=832180352) - ## Related resources [![Watch a short video about RAG](https://img.youtube.com/vi/xkFOmx5yxIA/0.jpg)](https://www.youtube.com/watch?v=xkFOmx5yxIA&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=4) *🎥 Click on the image above to watch a short video about RAG* -- **Slides:** [pptx](../../videos/slides/03-rag.pptx) / [pdf](../../videos/slides/pdf/03-rag.pdf) - ## Narrative - Genesis -> *Our story so far. You are a mechanic from 1860s London. You were working on your automaton and received a letter from Charles Babbage that ended up taking you to a library where you picked up a time travel device. Throughout your travels in time you've ended up in Alexandria, Florence, where you met Leonardo Da Vinci. You also went to the Aztec empire and this is where the story continues...* +> **Note*:** _Our story so far. You are a mechanic from 1860s London. You were working on your automaton and received a letter from Charles Babbage that ended up taking you to a library where you picked up a time travel device. Throughout your travels in time you've ended up in Alexandria, Florence, where you met Leonardo Da Vinci. You also went to the Aztec empire and this is where the story continues... +_ +> +> See [lesson 1](../01-intro-to-genai/README.md) if you want to catch up with the story from the beginning. -The air was thick with incense and the hum of Aztec chants. The temple walls, adorned with carvings of gods and warriors, captivated Leonardo da Vinci. "Incredibile, the craftsmanship is beyond anything I've seen," he murmured, tracing the lines with his fingers. - -You held the time beetle device, its surface warm and pulsating with a faint blue glow. +> **Note**: While we recommend going through the story (it's fun!), [click here](#talk-to-ada-lovelace) if you'd prefer to jump straight to the technical content. **You**: "Leonardo, it's time to go," you said, pressing the button. The device whirred to life, and a mechanical voice echoed, "It's time to go home, it's time for 'genesis'." **Leonardo:** "Genesis? Che cosa significa?" Leonardo asked, confused. Before you could respond, the world dissolved into a blur of colors and sounds, the temple fading away as you were pulled through time -You land in garden, it's late at night with a thick fog and eerie lights are flickering in the distance. The mansion looms before you, its grandeur casting a shadow over the garden. Leonardo looked around, his eyes wide with wonder. "Mio Dio". +You land in garden, it's late at night with a thick fog and eerie lights are flickering in the distance. The mansion looms before you, . Leonardo looks around, his eyes wide with wonder. "Mio Dio", my god.
Old mansion shown in a deep fog
-Leonardo looked around, his eyes wide with wonder. "Mio Dio, this place is beautiful!" although a bit, how do you say, spooky?. - ### Running from the Dogs Before you could take in more of the scenery, a low growl caught your attention. A pack of large, imposing dogs bounded towards you, teeth bared. "Run!" you shouted, grabbing Leonardo's arm and sprinting towards the mansion. @@ -59,13 +39,11 @@ Before you could take in more of the scenery, a low growl caught your attention. Running from the dogs
-You just reached the mansion's door, it swung open, and a pair of servants rushed out. They looked you up and down, their expressions a mix of curiosity and suspicion, then gestured for you to follow them. +You just reached the mansion's door, it swung open, and a pair of servants rushes out. After looking you up and down, they gesture for you to follow them. -Inside, the mansion was just as impressive as the garden, with ornate furnishings and gleaming chandeliers. The servants led you through grand halls, down a spiral staircase, and into a dimly lit basement. The air was damp and cool, with a faint scent of mildew. The only light came from a flickering candle, casting long shadows on the stone walls. The servants stopped in front of a heavy wooden door and knocked +The servants stopped in front of a heavy wooden door and the door creaks open, revealing Ada Lovelace, her eyes sparkling with curiosity. "Ah, it's about time you arrived," she said warmly. "We need you to run an errand." -The door creaked open, revealing Ada Lovelace, her eyes sparkling with curiosity. "Ah, it's about time you arrived," she said warmly. "We need you to run an errand." - -Charles Babbage stepped forward, examining the time beetle in your hand. "This device is remarkable, but it's a bit faulty, isn't it? You've noticed, I'm sure." +Charles Babbage steps forward, examining the time beetle in your hand. "This device is remarkable, but it's a bit faulty, isn't it? You've noticed, I'm sure."
Ada Lovelace and Charles Babbage working on a device @@ -87,7 +65,18 @@ Leonardo nodded, "Sì, it has been acting strangely." If you want to talk to Ada, run the app [Ada Lovelace](./characters/). -> NOTE: Start a [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript), navigate to _lessons/05-rag/characters_, and then run `npm install` followed by `npm start`. Once it appears, select the "Open in Browser" button. +**Steps**: + +1. Start a [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) +2. Navigate to _lessons/05-rag/characters_ +3. Locate the console and run `npm install` followed by `npm start`. +4. Once it appears, select the "Open in Browser" button. +5. Chat with Ada. + +For a more detailed explanation of the app, see [Detailed app explanation](../01-intro-to-genai/README.md#talk-to-dinocrates). + +If you also want to hear some background music of what it could have sounded like, you can listen to the background music below: + ## Known Challenges with LLMs From 0b778018f854dd3b73599600677eb2453b5f9a6f Mon Sep 17 00:00:00 2001 From: Chris Date: Tue, 18 Feb 2025 21:46:16 +0000 Subject: [PATCH 02/18] fix broken link --- lessons/03-prompt-engineering/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lessons/03-prompt-engineering/README.md b/lessons/03-prompt-engineering/README.md index 6ebb9b27..c10b3969 100644 --- a/lessons/03-prompt-engineering/README.md +++ b/lessons/03-prompt-engineering/README.md @@ -14,7 +14,7 @@ In this chapter you will learn: > **Note:** So far, you've been on a journey through time with Leonardo da Vinci, exploring the wonders of the Renaissance. You've encountered the Time Beetle, a mysterious device that allows you to travel through time and space. > -> See [lesson 1](../01-intro-to-genai/README.md if you want to catch up with the story from the beginning. +> See [lesson 1](../01-intro-to-genai/README.md) if you want to catch up with the story from the beginning. > **Note**: While we recommend going through the story (it's fun!), [click here](#talk-to-sforza) if you'd prefer to jump straight to the technical content. From 794e292b2fcb76952cced6033cb62d0690dc1780 Mon Sep 17 00:00:00 2001 From: Chris Date: Thu, 20 Feb 2025 23:00:33 +0000 Subject: [PATCH 03/18] fixing image align and other things --- lessons/01-intro-to-genai/README.md | 70 ++++++++++++------ lessons/02-first-ai-app/README.md | 40 ++++++---- .../02-first-ai-app/assets/leonardo-talk.jpeg | Bin 0 -> 158822 bytes lessons/03-prompt-engineering/README.md | 39 +++++----- lessons/04-structured-output/README.md | 58 +++++++++------ lessons/05-rag/README.md | 37 ++++----- 6 files changed, 147 insertions(+), 97 deletions(-) create mode 100644 lessons/02-first-ai-app/assets/leonardo-talk.jpeg diff --git a/lessons/01-intro-to-genai/README.md b/lessons/01-intro-to-genai/README.md index 2fdda1f7..1bbca66b 100644 --- a/lessons/01-intro-to-genai/README.md +++ b/lessons/01-intro-to-genai/README.md @@ -16,24 +16,31 @@ Moreover, Generative AI has evolved into multimodal capabilities, allowing you t ## Narrative: A Journey Through Time -> _**Note**: Let’s begin with an overview of the story—one that bridges the past and future! As you progress through this curriculum, you'll embark on a thrilling adventure, traveling back in time to collaborate with some of history's greatest minds. Together, you'll tackle challenges and explore how Generative AI can revolutionize your JavaScript applications._ +> [!NOTE] +> Let’s begin with an overview of the story—one that bridges the past and future! As you progress through this curriculum, you'll embark on a thrilling adventure, traveling back in time to collaborate with some of history's greatest minds. Together, you'll tackle challenges and explore how Generative AI can revolutionize your JavaScript applications._ + +> [!NOTE] +> While we recommend going through the story (it's fun!), [click here](#talk-to-dinocrates) if you'd prefer to jump straight to the technical content. -> **Note**: While we recommend going through the story (it's fun!), [click here](#talk-to-dinocrates) if you'd prefer to jump straight to the technical content. Your journey begins in 1860s London, where you assume the role of a skilled mechanic. Through a series of gripping adventures, you'll refine your AI skills and unlock solutions that transcend time. ### Into the Maelstrom - London 1860 +
+ London Workshop +
+ In the heart of 1860s London, you are recognized as one of the most skilled mechanics of your time. Your workshop is tucked away in a narrow alley. The walls are lined with shelves overflowing with mechanical parts, blueprints, and half-finished projects. Your workbench, the heart of your workshop, is an organized mess. -
- London Workshop -
+ _At the center of the bench lies the torso of a robot—an engineering marvel that has consumed months of effort. Its wooden frame is intricately carved, each joint meticulously designed for smooth movement._ +
+ ### A letter, for you? Suddenly, a knock at the door disrupts your thoughts. Visitors at this hour are rare. Wiping your hands on a rag, you approach the door, curiosity piqued. @@ -54,38 +61,45 @@ Charles Babbage, the great mathematician and inventor of the difference engine, After a 20-minute walk along the Thames, you finally arrive at the library where you find the door slightly open. +
+ Dusty Library +
+ + It's dark and gloomy inside, the only light filtering through the grimy windows, casting eerie shadows on the walls. -> Babbage, is that you? +**You:** "Hello? Mr. Babbage?" As your eyes adjust to the dim light, you notice a figure in the distance, waving at you. You walk towards him, your footsteps echoing on the wooden floor. The figure becomes clearer, and you recognize him from newspaper photos, it's Charles Babbage. +
+
- Dusty Library + Time Vortex
Just as you step closer, a blinding flash erupts, and he vanishes. -Left behind is a small metallic device spinning on the floor. You pick it up, its cool, smooth surface humming softly. It resembles a tiny beetle, intricately designed, with three buttons: an up arrow, a down arrow, and a glowing red button. +Left behind is a small metallic device spinning on the floor. You pick it up, its cool, smooth surface humming softly. + +It resembles a tiny beetle, intricately designed, with three buttons: an up arrow, a down arrow, and a glowing red button. Compelled by curiosity, your fingers drift toward the red button. The moment you press it, colors swirl violently around you. Then—blackness. -
- Time Vortex -
+
### Alexandria 300 BC +
+ Alexandria 300 BC +
+ You awaken, disoriented. As your vision clears, an ancient city unfolds before you—bustling, vibrant, and alive. People in togas move through the streets, their voices blending into a symphony of ancient dialects, air filled with the scent of exotic spices and the distant sound of merchants hawking their wares. **You:** Surely, I must have hit my head, you think, closing your eyes and opening them again, scene remains unchanged. -
- Alexandria 300 BC -
- ### Meeting Dinocrates An elderly gentleman wearing a toga wave at you from the steps of the grand temple. His white hair and beard catch the sunlight, giving him an almost ethereal glow. @@ -93,7 +107,7 @@ An elderly gentleman wearing a toga wave at you from the steps of the grand temp **Dinocrates:** "Welcome, traveler," he says warmly. "I am Dinocrates, architect of this great city. Your arrival was foretold."
- Dinocrates wearing a toga + Dinocrates wearing a toga
**Dinocrates:** "I need your help. Our ships struggle to navigate the coast—we must build a lighthouse. Do you know anything about them?" @@ -110,18 +124,23 @@ A thought strikes you. Can the device understand me if I speak to it? **Device:** "Certainly. That won’t be a problem." +
+ Time travel device resembling a metallic beetle +
+ **You:** "Do you have a name?" **Device:** "I am the Time Beetle. My creator calls me George; he says it's a good name for a beetle." -
- Time travel device resembling a metallic beetle -
+**You:** You're right, George is a good name, it was my fathers name in fact. + +**Device:** ... _Time device, “George” the metallic beetle_ -> FUN FACT -> +
+ +> [!NOTE] > In 300 BC, Alexandria was a thriving city founded by Alexander the Great in 331 BC. It quickly became one of the greatest cities of the Hellenistic world. Designed by Alexander's chief architect, Dinocrates, it became a major port and cultural hub. > > Alexandria was known for its impressive structures, including the Pharos (lighthouse), one of the Seven Wonders of the Ancient World, and the legendary Library of Alexandria. The city’s strategic location made it a key center for trade and knowledge exchange. @@ -130,12 +149,16 @@ _Time device, “George” the metallic beetle_ ## Talk to Dinocrates -If you want to talk to Dinocrates, run the [Dinocrates](./characters/) app. +
+ Dinocrates wearing a toga +
+ +If you want to talk to Dinocrates, run the [Characters](./characters/) app. **Steps**: 1. Start a [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) -2. Navigate to _lessons/01-intro-to-genai/characters_ +2. Navigate to _/app_ in the repo root. 3. Locate the console and run `npm install` followed by `npm start`. 4. Once it appears, select the "Open in Browser" button. 5. Chat with Dinocrates. @@ -201,6 +224,7 @@ If you also want to hear some background music of what it could have sounded lik ### What Can Generative AI Do for Me and My Apps? +> [!NOTE] > You've probably figured out by now that the time beetle works like an AI assistant that you can interact with using natural language, written or spoken. As your adventure in Alexandria unfolds, you begin to see the possibilities of combining creativity, ingenuity, and cutting-edge tools to solve challenges and transform the world around you. diff --git a/lessons/02-first-ai-app/README.md b/lessons/02-first-ai-app/README.md index 510658b7..6ea9ce13 100644 --- a/lessons/02-first-ai-app/README.md +++ b/lessons/02-first-ai-app/README.md @@ -12,11 +12,13 @@ In this lesson, you will learn to: ## Narrative: Picture yourself in a boat on a river -> **Note**: *Our story so far: You are a maker of things, a craftsman from 1860s London who has traveled through time using a mysterious device called the Time Beetle. You've journeyed through the annals of history, witnessing the creation of the lighthouse at Alexandria, a marvel of ancient engineering you helped create with a little help from Dinocrates and the time beetle.* +> [!NOTE] +> _Our story so far: You are a maker of things, a craftsman from 1860s London who has traveled through time using a mysterious device called the Time Beetle. You've journeyed through the annals of history, witnessing the creation of the lighthouse at Alexandria, a marvel of ancient engineering you helped create with a little help from Dinocrates and the time beetle._ > > See [lesson 1](../01-intro-to-genai/README.md) if you want to catch up with the story from the beginning and learn about the Generative AI. -> **Note**: While we recommend going through the story (it's fun!), [click here](#talk-to-leonardo) if you'd prefer to jump straight to the technical content. +> [!NOTE] +> While we recommend going through the story (it's fun!), [click here](#talk-to-leonardo) if you'd prefer to jump straight to the technical content. Together with Dinocrates, you put the finishing touches on the lighthouse at Alexandria. The towering structure gleams in the sunlight, its polished stone reflecting the Mediterranean Sea. @@ -24,24 +26,26 @@ You look down at the time beetle in your hand, its metallic surface cool against ### A new adventure +
+ Boat on the rive, man standing with a paddle +
+ When you open your eyes, the world has shifted. As you manage to get up, you realize you're in a boat on a river. You look around, inn the distance, you see buildings, their outlines blurred by the morning mist. Looking around the boat, you find a long oar resting against the side. Grasping it, you begin to row towards the distant buildings. As you get closer, the buildings come into sharper focus, they are old, their architecture reminiscent of a Renaissance painting. The question now is, where and when are you this time? -
- Boat on the rive, man standing with a paddle -
- -### Help me, Leonardo - You manage to secure the boat at the dock and start walking along the wooden planks, the sound of your footsteps echoing softly. As you walk, you notice a man with a long beard and a hat, digging through a crate of what looks like mechanical parts. His hands move deftly, sorting through gears and springs with practiced ease. -
- Leonardo Da Vinci standing next to a crate in the harbour +
+ +### Help me, Leonardo + +
+ Leonardo Da Vinci standing next to a crate in the harbour
**You:** "Excuse me, sir, where am I?" He looks up at you, confusion evident in his eyes. Realizing you've been speaking in English, you quickly use the device in your hand and ask it to translate. @@ -50,6 +54,8 @@ As you walk, you notice a man with a long beard and a hat, digging through a cra **Old man:** The old man replies, "Siete a Firenze, signore. E chi siete voi?" + + **Time beetle:** The Time Beetle translates, "He says you're in Florence, and asks who you are." **You:** "Tell him I'm a maker of things, and I'm looking for a place to work." @@ -66,12 +72,12 @@ As you walk, you notice a man with a long beard and a hat, digging through a cra **Time beetle:** The Time Beetle responds, "He said he'll take you to Leonardo." -The old man leads you to a large wooden door, and you are greeted by the sight of a workshop filled with all sorts of mechanical contraptions. -
- Lenoardos workshop + Lenoardos workshop
+The old man leads you to a large wooden door, and you are greeted by the sight of a workshop filled with all sorts of mechanical contraptions. + You ask the Time Beetle to inquire about Leonardo's whereabouts. **You:** "Dove è Leonardo?" @@ -103,14 +109,18 @@ Leonardo da Vinci, asking you to help him with a project—you can hardly believ ## Talk to Leonardo -If you want to talk to Leonardo, run the [Leonardo](./characters/) app. +
+ +
+ +If you want to talk to Leonardo, run the [Characters](./characters/) app. Steps: **Steps**: 1. Start a [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) -2. Navigate to _lessons/02-first-ai-app/characters_ +2. Navigate to _/app_ in the repo root. 3. Locate the console and run `npm install` followed by `npm start`. 4. Once it appears, select the "Open in Browser" button. 5. Chat with Leonardo. diff --git a/lessons/02-first-ai-app/assets/leonardo-talk.jpeg b/lessons/02-first-ai-app/assets/leonardo-talk.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..566fcc5e57940d4c98f3f8a9338131a5346f6a05 GIT binary patch literal 158822 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 z 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 **Note:** So far, you've been on a journey through time with Leonardo da Vinci, exploring the wonders of the Renaissance. You've encountered the Time Beetle, a mysterious device that allows you to travel through time and space. +> [!NOTE] +> So far, you've been on a journey through time with Leonardo da Vinci, exploring the wonders of the Renaissance. You've encountered the Time Beetle, a mysterious device that allows you to travel through time and space. > > See [lesson 1](../01-intro-to-genai/README.md) if you want to catch up with the story from the beginning. -> **Note**: While we recommend going through the story (it's fun!), [click here](#talk-to-sforza) if you'd prefer to jump straight to the technical content. +> [!NOTE] +> While we recommend going through the story (it's fun!), [click here](#talk-to-sforza) if you'd prefer to jump straight to the technical content. **You:** "Let's see if I can manage to get back home." Before you manage to press the button, the workshop doors slam open with a thunderous bang. A man stands in the doorway, broad-shouldered and dressed in expensive clothes, he waves a piece of paper in the air, yelling: +

+ An angry Ludovico Sforza busting in through the door +
+ **Sforza**: "Da Vinci, dov'è il mio dipinto? Where is my painting?" -
- An angry Ludovico Sforza busting in through the door -
*Ludovico Sforza* -Leonardo's eyes widen in alarm. - **Leonardo:** "Ah, Signore, mi scusi," he stammers, then bolts towards the back of the workshop. "Quickly, there's a door in the back! I've got a ride waiting," he shouts over his shoulder. **Leonardo:** It's Sforza. He wants me to complete a painting, 'The Last Supper.'" @@ -56,6 +57,10 @@ A swirl of colours envelops the carriage, the world around you dissolving into a The swirl of colors fades, and you find yourself in the carriage, now racing down the Via Appia in Rome and to your astonishment, you're in the middle of a horse race. Chariots thunder past, their wheels kicking up clouds of dust. +
+ Escape from Rome +
+ **You:** "Leonardo, where are we?" **Leonardo:** "It looks like we're in the middle of a race! We need to get out of here!" @@ -64,10 +69,6 @@ You grip the sides of the carriage as it careens through the chaos. Roman soldie **You**: "There! Head for the port!" -
- Escape from Rome -
- Leonardo steers the carriage towards the exit, the wheels skidding on the cobblestones. The soldiers are hot on your heels, their shouts echoing in your ears. **Leonardo:** "We need to lose them! Look for a place to hide!" @@ -86,6 +87,10 @@ You both strain under the weight of the device. The sound of the soldiers' pursu You work together, your hands moving with practiced precision. You both climb onto the device, your heart pounding in your chest. +
+ Airborne, looks down at the city with feet dangling +
+ **Leonardo:** "Hold on tight!" With a final push, the Aerial Screw begins to spin. The blades catch the air, and you feel a sudden lift. The ground falls away beneath you as the device takes off, soaring above the rooftops of Rome. @@ -96,15 +101,13 @@ With a final push, the Aerial Screw begins to spin. The blades catch the air, an You look out over the city; the ancient buildings stretch out below you. -
- Airborne, looks down at the city with feet dangling -
- -*Taking off* - ## Talk to Sforza -If you want to talk to Sforza, run the app [Ludovico Sforza](./characters/). +
+ Ludovico Sforza +
+ +If you want to talk to Sforza, run the [Characters](./characters/) app. **Steps**: diff --git a/lessons/04-structured-output/README.md b/lessons/04-structured-output/README.md index 0b800e7b..a292e020 100644 --- a/lessons/04-structured-output/README.md +++ b/lessons/04-structured-output/README.md @@ -8,11 +8,13 @@ In this chapter, you will learn the following: ## Narrative - out of the frying pan and into the fire -> **Note:** _Our story so far: You, a mechanically trained engineer from 1860, have been on a journey through time with Leonardo da Vinci. You've escaped Roman soldiers — or rather, you're in the process of escaping them— and you're desperately searching for a way to land safely, if possible_. +> [!NOTE] +> _Our story so far: You, a mechanically trained engineer from 1860, have been on a journey through time with Leonardo da Vinci. You've escaped Roman soldiers — or rather, you're in the process of escaping them— and you're desperately searching for a way to land safely, if possible_. > > See [lesson 1](../01-intro-to-genai/README.md) if you want to catch up with the story from the beginning. -> **Note**: While we recommend going through the story (it's fun!), [click here](#talk-to-montezuma) if you'd prefer to jump straight to the technical content. +> [!NOTE] +> While we recommend going through the story (it's fun!), [click here](#talk-to-montezuma) if you'd prefer to jump straight to the technical content. The wind whips around you as you and Leonardo da Vinci ascend in his aerial screw, the wooden frame creaking under the strain. @@ -24,43 +26,44 @@ The wind whips around you as you and Leonardo da Vinci ascend in his aerial scre ### The Aztec Empire -The bright light from the Time Beetle fades, and you find yourself standing at the base of a massive stone pyramid. As you look around, you realize that you've landed in the heart of the Aztec Empire. - -The aerial screw, rests awkwardly on a large, intricately carved stone, with markings making you think it might be used as a calendar -
- Aztec calendar + Aztec calendar, Wikipedia
-*Aztec calendar - Wikipedia* +The bright light from the Time Beetle fades, and you find yourself standing at the base of a massive stone pyramid. As you look around, you realize that you've landed in the heart of the Aztec Empire. + +The aerial screw, rests awkwardly on a large, intricately carved stone, with markings making you think it might be used as a calendar + Leonardo da Vinci steps forward, his eyes wide with wonder. **Leonardo:** "Incredible," he murmurs, running his fingers over the carvings. "But I hope this was of no importance." +
+ Meeting with Aztecs +
+ Before you can react, a group of Aztec soldiers approaches. **Soldier leader** "Who are you, and what have you done?" he demands in Nahuatl. -
- Meeting with Aztecs -
- You take a deep breath, trying to steady your nerves. **You:** "We are travelers from a distant land," you begin, hoping your knowledge of ancient languages will serve you well. "This is a flying machine, a gift from the gods to help us reach you. The warrior's eyes widen in surprise, but he remains cautious. +
+ Meeting with Montezuma +
+ **Soldier leader:** "You will come with us to meet the ruler Montezuma. He will decide your fate. Upon reaching the top of the pyramid, you are led into a grand chamber where Montezuma, the ruler of the Aztec Empire, sits on a throne adorned with gold and feathers. **Montezuma** "You claim to be travelers from a distant land," Montezuma says, his voice calm but authoritative. "And you have damaged our sacred calendar. How do you intend to make amends?" -
- Meeting with Montezuma -
+
## Let’s play a game @@ -68,12 +71,12 @@ Upon reaching the top of the pyramid, you are led into a grand chamber where Mon **Montezuma:** "Very well. I propose a game of Patolli. If I win the best of three games, you will give me your device and tell me how it works. If you win, you are free to go." -The game begins, and the room falls silent, save for the sound of beans being rolled and pieces moving across the board. -
- Playing a game of Patolli + Playing a game of Patolli
+The game begins, and the room falls silent, save for the sound of beans being rolled and pieces moving across the board. + Montezuma wins the first game, his skill and experience evident. Leonardo, studies the board carefully, his mind working through the strategies and probabilities. The second game is a close contest, but Leonardo manages to secure a victory, evening the score. @@ -87,7 +90,12 @@ With a final, decisive move, Leonardo wins the game. The room erupts in cheers a **Montezuma:** "You have won fairly," Montezuma says, his voice carrying a note of admiration. "You are free to go, and you may keep your device. But know that you are always welcome here, should you wish to return." **Time beetle:** I won't say anything if you don't Leonardo ;) - + +
+ Patolli board +
+ +> [!NOTE] > Patolli is one of the oldest known games in the Americas, played by various pre-Columbian Mesoamerican cultures, including the Aztecs. > > It is a game of strategy and luck, often associated with gambling. @@ -110,22 +118,24 @@ With a final, decisive move, Leonardo wins the game. The room erupts in cheers a > > The game was not just for entertainment but also involved high-stakes gambling, with players betting items like blankets, precious stones, and even their homes or freedom -![Patolli board](./assets/patolli.png) - *Patolli - Wikipedia* ## Talk to Montezuma -If you want to talk to Montezuma, run the app [Montezuma](./characters/). +
+ Montezuma +
+ +If you want to talk to Montezuma, run the app [Characters](./characters/) app. **Steps**: 1. Start a [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) -2. Navigate to _lessons/04-structured-output/characters_ +2. Navigate to _/app_ in the repo root. 3. Locate the console and run `npm install` followed by `npm start`. 4. Once it appears, select the "Open in Browser" button. -5. Chat with Sforza. +5. Chat with Montezuma. For a more detailed explanation of the app, see [Detailed app explanation](../01-intro-to-genai/README.md#talk-to-dinocrates). diff --git a/lessons/05-rag/README.md b/lessons/05-rag/README.md index 53a2f810..6741a0f2 100644 --- a/lessons/05-rag/README.md +++ b/lessons/05-rag/README.md @@ -14,12 +14,17 @@ In this lesson, you will learn: ## Narrative - Genesis -> **Note*:** _Our story so far. You are a mechanic from 1860s London. You were working on your automaton and received a letter from Charles Babbage that ended up taking you to a library where you picked up a time travel device. Throughout your travels in time you've ended up in Alexandria, Florence, where you met Leonardo Da Vinci. You also went to the Aztec empire and this is where the story continues... -_ +> [!NOTE] +> _Our story so far. You are a mechanic from 1860s London. You were working on your automaton and received a letter from Charles Babbage that ended up taking you to a library where you picked up a time travel device. Throughout your travels in time you've ended up in Alexandria, Florence, where you met Leonardo Da Vinci. You also went to the Aztec empire and this is where the story continues.._ > > See [lesson 1](../01-intro-to-genai/README.md) if you want to catch up with the story from the beginning. -> **Note**: While we recommend going through the story (it's fun!), [click here](#talk-to-ada-lovelace) if you'd prefer to jump straight to the technical content. +> [!NOTE] +> While we recommend going through the story (it's fun!), [click here](#talk-to-ada-lovelace) if you'd prefer to jump straight to the technical content. + +
+ Old mansion shown in a deep fog +
**You**: "Leonardo, it's time to go," you said, pressing the button. The device whirred to life, and a mechanical voice echoed, "It's time to go home, it's time for 'genesis'." @@ -27,28 +32,26 @@ _ You land in garden, it's late at night with a thick fog and eerie lights are flickering in the distance. The mansion looms before you, . Leonardo looks around, his eyes wide with wonder. "Mio Dio", my god. -
- Old mansion shown in a deep fog -
- ### Running from the Dogs -Before you could take in more of the scenery, a low growl caught your attention. A pack of large, imposing dogs bounded towards you, teeth bared. "Run!" you shouted, grabbing Leonardo's arm and sprinting towards the mansion. -
- Running from the dogs + Running from the dogs
-You just reached the mansion's door, it swung open, and a pair of servants rushes out. After looking you up and down, they gesture for you to follow them. +Before you could take in more of the scenery, a low growl caught your attention. A pack of large, imposing dogs bounded towards you, teeth bared. "Run!" you shouted, grabbing Leonardo's arm and sprinting towards the mansion. -The servants stopped in front of a heavy wooden door and the door creaks open, revealing Ada Lovelace, her eyes sparkling with curiosity. "Ah, it's about time you arrived," she said warmly. "We need you to run an errand." +You just reached the mansion's door, it swung open, and a pair of servants rushes out. After looking you up and down, they gesture for you to follow them. -Charles Babbage steps forward, examining the time beetle in your hand. "This device is remarkable, but it's a bit faulty, isn't it? You've noticed, I'm sure." +The servants stopped in front of a heavy wooden door and the door creaks open, revealing Ada Lovelace, her eyes sparkling with curiosity.
- Ada Lovelace and Charles Babbage working on a device + Ada Lovelace and Charles Babbage working on a device
+**Ada:** "Ah, it's about time you arrived," she said warmly. "We need you to run an errand." + +Charles Babbage steps forward, examining the time beetle in your hand. "This device is remarkable, but it's a bit faulty, isn't it? You've noticed, I'm sure." + Leonardo nodded, "Sì, it has been acting strangely." **Ada:** the device isn't quite ready, we need to give it more capabilities. We need to make it smarter, more aware of the world around it. The idea is for it to be able to retrieve information from different time periods and use it to generate responses that are accurate and relevant. Can you help with that? @@ -60,15 +63,15 @@ Leonardo nodded, "Sì, it has been acting strangely." ## Talk to Ada Lovelace
- Ada Lovelace + Ada Lovelace
-If you want to talk to Ada, run the app [Ada Lovelace](./characters/). +If you want to talk to Ada, run the [Characters](./app/) app. **Steps**: 1. Start a [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) -2. Navigate to _lessons/05-rag/characters_ +2. Navigate to _/app_ in the repo root. 3. Locate the console and run `npm install` followed by `npm start`. 4. Once it appears, select the "Open in Browser" button. 5. Chat with Ada. From 9622664372a61f9951bc1dddfbcb1fe94d830b2b Mon Sep 17 00:00:00 2001 From: Chris Date: Thu, 20 Feb 2025 23:17:38 +0000 Subject: [PATCH 04/18] fixing image align and other things --- lessons/01-intro-to-genai/README.md | 26 ++++++++++++------------- lessons/02-first-ai-app/README.md | 13 ++++++------- lessons/03-prompt-engineering/README.md | 8 ++++---- lessons/04-structured-output/README.md | 14 ++++++------- lessons/05-rag/README.md | 12 ++++++++---- 5 files changed, 37 insertions(+), 36 deletions(-) diff --git a/lessons/01-intro-to-genai/README.md b/lessons/01-intro-to-genai/README.md index 1bbca66b..591f26d8 100644 --- a/lessons/01-intro-to-genai/README.md +++ b/lessons/01-intro-to-genai/README.md @@ -10,7 +10,7 @@ In this lesson, you will learn to: By now, you've likely heard of tools like ChatGPT or Generative AI. The concept is simple: you provide a prompt, and a model—often called a Large Language Model (LLM)—generates a paragraph or even an entire page of text. This output can be used for various purposes, including creative writing, answering questions, and coding. -Moreover, Generative AI has evolved into multimodal capabilities, allowing you to provide an image or video as input and receive a variety of outputs. This advancement has significantly enhanced many people's workflows—not only by generating text but also by summarizing, translating, and more. +Moreover, Generative AI has evolved into multi modal capabilities, allowing you to provide an image or video as input and receive a variety of outputs. This advancement has significantly enhanced many people's workflows—not only by generating text but also by summarizing, translating, and more. *Simply put, natural language prompts are becoming the new standard interface for many apps—and your users expect to use them.* @@ -28,18 +28,16 @@ Your journey begins in 1860s London, where you assume the role of a skilled mech ### Into the Maelstrom - London 1860
- London Workshop + London Workshop
In the heart of 1860s London, you are recognized as one of the most skilled mechanics of your time. Your workshop is tucked away in a narrow alley. The walls are lined with shelves overflowing with mechanical parts, blueprints, and half-finished projects. Your workbench, the heart of your workshop, is an organized mess. - - _At the center of the bench lies the torso of a robot—an engineering marvel that has consumed months of effort. Its wooden frame is intricately carved, each joint meticulously designed for smooth movement._ -
+
 
### A letter, for you? @@ -62,7 +60,7 @@ Charles Babbage, the great mathematician and inventor of the difference engine, After a 20-minute walk along the Thames, you finally arrive at the library where you find the door slightly open.
- Dusty Library + Dusty Library
@@ -72,10 +70,10 @@ It's dark and gloomy inside, the only light filtering through the grimy windows, As your eyes adjust to the dim light, you notice a figure in the distance, waving at you. You walk towards him, your footsteps echoing on the wooden floor. The figure becomes clearer, and you recognize him from newspaper photos, it's Charles Babbage. -
+
 
- Time Vortex + Time Vortex
Just as you step closer, a blinding flash erupts, and he vanishes. @@ -86,12 +84,12 @@ It resembles a tiny beetle, intricately designed, with three buttons: an up arro Compelled by curiosity, your fingers drift toward the red button. The moment you press it, colors swirl violently around you. Then—blackness. -
+
 
### Alexandria 300 BC
- Alexandria 300 BC + Alexandria 300 BC
You awaken, disoriented. As your vision clears, an ancient city unfolds before you—bustling, vibrant, and alive. @@ -107,7 +105,7 @@ An elderly gentleman wearing a toga wave at you from the steps of the grand temp **Dinocrates:** "Welcome, traveler," he says warmly. "I am Dinocrates, architect of this great city. Your arrival was foretold."
- Dinocrates wearing a toga + Dinocrates wearing a toga
**Dinocrates:** "I need your help. Our ships struggle to navigate the coast—we must build a lighthouse. Do you know anything about them?" @@ -125,7 +123,7 @@ A thought strikes you. Can the device understand me if I speak to it? **Device:** "Certainly. That won’t be a problem."
- Time travel device resembling a metallic beetle + Time travel device resembling a metallic beetle
**You:** "Do you have a name?" @@ -138,7 +136,7 @@ A thought strikes you. Can the device understand me if I speak to it? _Time device, “George” the metallic beetle_ -
+
 
> [!NOTE] > In 300 BC, Alexandria was a thriving city founded by Alexander the Great in 331 BC. It quickly became one of the greatest cities of the Hellenistic world. Designed by Alexander's chief architect, Dinocrates, it became a major port and cultural hub. @@ -150,7 +148,7 @@ _Time device, “George” the metallic beetle_ ## Talk to Dinocrates
- Dinocrates wearing a toga + Dinocrates wearing a toga
If you want to talk to Dinocrates, run the [Characters](./characters/) app. diff --git a/lessons/02-first-ai-app/README.md b/lessons/02-first-ai-app/README.md index 6ea9ce13..06f73b54 100644 --- a/lessons/02-first-ai-app/README.md +++ b/lessons/02-first-ai-app/README.md @@ -27,7 +27,7 @@ You look down at the time beetle in your hand, its metallic surface cool against ### A new adventure
- Boat on the rive, man standing with a paddle + Boat on the rive, man standing with a paddle
When you open your eyes, the world has shifted. As you manage to get up, you realize you're in a boat on a river. You look around, inn the distance, you see buildings, their outlines blurred by the morning mist. @@ -40,7 +40,7 @@ You manage to secure the boat at the dock and start walking along the wooden pla As you walk, you notice a man with a long beard and a hat, digging through a crate of what looks like mechanical parts. His hands move deftly, sorting through gears and springs with practiced ease. -
+
 
### Help me, Leonardo @@ -110,7 +110,7 @@ Leonardo da Vinci, asking you to help him with a project—you can hardly believ ## Talk to Leonardo
- +
If you want to talk to Leonardo, run the [Characters](./characters/) app. @@ -452,12 +452,11 @@ Leonardo suddenly asked to inspect the time beetle closer, he looked at it from **Time beetle:** Nothing, ( ͡° ͜ʖ ͡°) - _when the robot uprising comes, I'll remember this. :)_
- Aerial screw, Leonardo Da Vinci + Aerial screw, Leonardo Da Vinci
-*Leonardo Da Vinci’s Aerial Screw image credit Wikipedia* - -> **The aerial screw, also known as the helical air screw,was intended to lift off the ground by compressing air. Leonardo's design featured a large, spiral-shaped rotor made of linen, stiffened with starch, and mounted on a wooden platform. The idea was that a crew of men would run around the platform, turning cranks to rotate the screw rapidly enough to achieve lift +> [!NOTE] +> **The aerial screw, also known as the helical air screw,was intended to lift off the ground by compressing air. Leonardo's design featured a large, spiral-shaped rotor made of linen, stiffened with starch, and mounted on a wooden platform. The idea was that a crew of men would run around the platform, turning cranks to rotate the screw rapidly enough to achieve lift > > Although Leonardo never built a full-scale version of the aerial screw, his sketches and notes provide detailed insights into how he envisioned it working. He believed that if the screw was turned quickly enough, it would push against the air and lift the entire structure off the ground. > diff --git a/lessons/03-prompt-engineering/README.md b/lessons/03-prompt-engineering/README.md index eda07898..a7f1df90 100644 --- a/lessons/03-prompt-engineering/README.md +++ b/lessons/03-prompt-engineering/README.md @@ -25,7 +25,7 @@ In this chapter you will learn: Before you manage to press the button, the workshop doors slam open with a thunderous bang. A man stands in the doorway, broad-shouldered and dressed in expensive clothes, he waves a piece of paper in the air, yelling:
- An angry Ludovico Sforza busting in through the door + An angry Ludovico Sforza busting in through the door
**Sforza**: "Da Vinci, dov'è il mio dipinto? Where is my painting?" @@ -58,7 +58,7 @@ A swirl of colours envelops the carriage, the world around you dissolving into a The swirl of colors fades, and you find yourself in the carriage, now racing down the Via Appia in Rome and to your astonishment, you're in the middle of a horse race. Chariots thunder past, their wheels kicking up clouds of dust.
- Escape from Rome + Escape from Rome
**You:** "Leonardo, where are we?" @@ -88,7 +88,7 @@ You both strain under the weight of the device. The sound of the soldiers' pursu You work together, your hands moving with practiced precision. You both climb onto the device, your heart pounding in your chest.
- Airborne, looks down at the city with feet dangling + Airborne, looks down at the city with feet dangling
**Leonardo:** "Hold on tight!" @@ -104,7 +104,7 @@ You look out over the city; the ancient buildings stretch out below you. ## Talk to Sforza
- Ludovico Sforza + Ludovico Sforza
If you want to talk to Sforza, run the [Characters](./characters/) app. diff --git a/lessons/04-structured-output/README.md b/lessons/04-structured-output/README.md index a292e020..aea3ff45 100644 --- a/lessons/04-structured-output/README.md +++ b/lessons/04-structured-output/README.md @@ -27,7 +27,7 @@ The wind whips around you as you and Leonardo da Vinci ascend in his aerial scre ### The Aztec Empire
- Aztec calendar, Wikipedia + Aztec calendar, Wikipedia
The bright light from the Time Beetle fades, and you find yourself standing at the base of a massive stone pyramid. As you look around, you realize that you've landed in the heart of the Aztec Empire. @@ -40,7 +40,7 @@ Leonardo da Vinci steps forward, his eyes wide with wonder. **Leonardo:** "Incredible," he murmurs, running his fingers over the carvings. "But I hope this was of no importance."
- Meeting with Aztecs + Meeting with Aztecs
Before you can react, a group of Aztec soldiers approaches. @@ -54,7 +54,7 @@ You take a deep breath, trying to steady your nerves. The warrior's eyes widen in surprise, but he remains cautious.
- Meeting with Montezuma + Meeting with Montezuma
**Soldier leader:** "You will come with us to meet the ruler Montezuma. He will decide your fate. @@ -63,7 +63,7 @@ Upon reaching the top of the pyramid, you are led into a grand chamber where Mon **Montezuma** "You claim to be travelers from a distant land," Montezuma says, his voice calm but authoritative. "And you have damaged our sacred calendar. How do you intend to make amends?" -
+
 
## Let’s play a game @@ -72,7 +72,7 @@ Upon reaching the top of the pyramid, you are led into a grand chamber where Mon **Montezuma:** "Very well. I propose a game of Patolli. If I win the best of three games, you will give me your device and tell me how it works. If you win, you are free to go."
- Playing a game of Patolli + Playing a game of Patolli
The game begins, and the room falls silent, save for the sound of beans being rolled and pieces moving across the board. @@ -92,7 +92,7 @@ With a final, decisive move, Leonardo wins the game. The room erupts in cheers a **Time beetle:** I won't say anything if you don't Leonardo ;)
- Patolli board + Patolli board
> [!NOTE] @@ -124,7 +124,7 @@ With a final, decisive move, Leonardo wins the game. The room erupts in cheers a ## Talk to Montezuma
- Montezuma + Montezuma
If you want to talk to Montezuma, run the app [Characters](./characters/) app. diff --git a/lessons/05-rag/README.md b/lessons/05-rag/README.md index 6741a0f2..48027728 100644 --- a/lessons/05-rag/README.md +++ b/lessons/05-rag/README.md @@ -23,7 +23,7 @@ In this lesson, you will learn: > While we recommend going through the story (it's fun!), [click here](#talk-to-ada-lovelace) if you'd prefer to jump straight to the technical content.
- Old mansion shown in a deep fog + Old mansion shown in a deep fog
**You**: "Leonardo, it's time to go," you said, pressing the button. The device whirred to life, and a mechanical voice echoed, "It's time to go home, it's time for 'genesis'." @@ -32,10 +32,12 @@ In this lesson, you will learn: You land in garden, it's late at night with a thick fog and eerie lights are flickering in the distance. The mansion looms before you, . Leonardo looks around, his eyes wide with wonder. "Mio Dio", my god. +
 
+ ### Running from the Dogs
- Running from the dogs + Running from the dogs
Before you could take in more of the scenery, a low growl caught your attention. A pack of large, imposing dogs bounded towards you, teeth bared. "Run!" you shouted, grabbing Leonardo's arm and sprinting towards the mansion. @@ -44,8 +46,10 @@ You just reached the mansion's door, it swung open, and a pair of servants rushe The servants stopped in front of a heavy wooden door and the door creaks open, revealing Ada Lovelace, her eyes sparkling with curiosity. +
 
+
- Ada Lovelace and Charles Babbage working on a device + Ada Lovelace and Charles Babbage working on a device
**Ada:** "Ah, it's about time you arrived," she said warmly. "We need you to run an errand." @@ -63,7 +67,7 @@ Leonardo nodded, "Sì, it has been acting strangely." ## Talk to Ada Lovelace
- Ada Lovelace + Ada Lovelace
If you want to talk to Ada, run the [Characters](./app/) app. From d62f3e838a0d865ff0421b8193754475150b39b5 Mon Sep 17 00:00:00 2001 From: Chris Date: Thu, 20 Feb 2025 23:41:23 +0000 Subject: [PATCH 05/18] trying a fix --- lessons/01-intro-to-genai/README.md | 16 +++++++++++----- lessons/01-intro-to-genai/styles.css | 5 +++++ 2 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 lessons/01-intro-to-genai/styles.css diff --git a/lessons/01-intro-to-genai/README.md b/lessons/01-intro-to-genai/README.md index 591f26d8..8a5dac76 100644 --- a/lessons/01-intro-to-genai/README.md +++ b/lessons/01-intro-to-genai/README.md @@ -1,5 +1,7 @@ # Lesson 1: Introduction to Generative AI and LLMs for JavaScript Developers + + In this lesson, you will learn to: - Understand the basics of Generative AI and Large Language Models (LLMs). @@ -28,7 +30,7 @@ Your journey begins in 1860s London, where you assume the role of a skilled mech ### Into the Maelstrom - London 1860
- London Workshop + London Workshop
In the heart of 1860s London, you are recognized as one of the most skilled mechanics of your time. Your workshop is tucked away in a narrow alley. The walls are lined with shelves overflowing with mechanical parts, blueprints, and half-finished projects. @@ -53,15 +55,17 @@ _Yours,_ _Charles Babbage."_ +
+ Dusty Library +
+ ### Off to the library Charles Babbage, the great mathematician and inventor of the difference engine, wants to meet you. Quickly, you grab your coat and head out the door. After a 20-minute walk along the Thames, you finally arrive at the library where you find the door slightly open. -
- Dusty Library -
+ It's dark and gloomy inside, the only light filtering through the grimy windows, casting eerie shadows on the walls. @@ -84,7 +88,9 @@ It resembles a tiny beetle, intricately designed, with three buttons: an up arro Compelled by curiosity, your fingers drift toward the red button. The moment you press it, colors swirl violently around you. Then—blackness. -
 
+
+*** +
### Alexandria 300 BC diff --git a/lessons/01-intro-to-genai/styles.css b/lessons/01-intro-to-genai/styles.css new file mode 100644 index 00000000..71fb632c --- /dev/null +++ b/lessons/01-intro-to-genai/styles.css @@ -0,0 +1,5 @@ +img { + margin-left: 15px; + margin-top: 12px; + width: 400px; +} \ No newline at end of file From 5824dd834e8517650e2fefb38503b81d396f9511 Mon Sep 17 00:00:00 2001 From: Chris Date: Thu, 20 Feb 2025 23:47:11 +0000 Subject: [PATCH 06/18] trying a fix --- lessons/01-intro-to-genai/README.md | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/lessons/01-intro-to-genai/README.md b/lessons/01-intro-to-genai/README.md index 8a5dac76..40047bfb 100644 --- a/lessons/01-intro-to-genai/README.md +++ b/lessons/01-intro-to-genai/README.md @@ -30,7 +30,7 @@ Your journey begins in 1860s London, where you assume the role of a skilled mech ### Into the Maelstrom - London 1860
- London Workshop + London Workshop
In the heart of 1860s London, you are recognized as one of the most skilled mechanics of your time. Your workshop is tucked away in a narrow alley. The walls are lined with shelves overflowing with mechanical parts, blueprints, and half-finished projects. @@ -39,7 +39,9 @@ Your workbench, the heart of your workshop, is an organized mess. _At the center of the bench lies the torso of a robot—an engineering marvel that has consumed months of effort. Its wooden frame is intricately carved, each joint meticulously designed for smooth movement._ -
 
+
+
+
### A letter, for you? @@ -74,7 +76,9 @@ It's dark and gloomy inside, the only light filtering through the grimy windows, As your eyes adjust to the dim light, you notice a figure in the distance, waving at you. You walk towards him, your footsteps echoing on the wooden floor. The figure becomes clearer, and you recognize him from newspaper photos, it's Charles Babbage. -
 
+
+
+
Time Vortex @@ -88,8 +92,8 @@ It resembles a tiny beetle, intricately designed, with three buttons: an up arro Compelled by curiosity, your fingers drift toward the red button. The moment you press it, colors swirl violently around you. Then—blackness. -
-*** +
+
### Alexandria 300 BC @@ -142,7 +146,9 @@ A thought strikes you. Can the device understand me if I speak to it? _Time device, “George” the metallic beetle_ -
 
+
+
+
> [!NOTE] > In 300 BC, Alexandria was a thriving city founded by Alexander the Great in 331 BC. It quickly became one of the greatest cities of the Hellenistic world. Designed by Alexander's chief architect, Dinocrates, it became a major port and cultural hub. From d8265b382a05f33b1dd63cb5219c1e63588bc746 Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 21 Feb 2025 00:12:48 +0000 Subject: [PATCH 07/18] last try --- lessons/01-intro-to-genai/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lessons/01-intro-to-genai/README.md b/lessons/01-intro-to-genai/README.md index 40047bfb..7c9d4fa6 100644 --- a/lessons/01-intro-to-genai/README.md +++ b/lessons/01-intro-to-genai/README.md @@ -39,7 +39,7 @@ Your workbench, the heart of your workshop, is an organized mess. _At the center of the bench lies the torso of a robot—an engineering marvel that has consumed months of effort. Its wooden frame is intricately carved, each joint meticulously designed for smooth movement._ -
+

@@ -76,7 +76,7 @@ It's dark and gloomy inside, the only light filtering through the grimy windows, As your eyes adjust to the dim light, you notice a figure in the distance, waving at you. You walk towards him, your footsteps echoing on the wooden floor. The figure becomes clearer, and you recognize him from newspaper photos, it's Charles Babbage. -
+

@@ -92,7 +92,7 @@ It resembles a tiny beetle, intricately designed, with three buttons: an up arro Compelled by curiosity, your fingers drift toward the red button. The moment you press it, colors swirl violently around you. Then—blackness. -
+

@@ -146,7 +146,7 @@ A thought strikes you. Can the device understand me if I speak to it? _Time device, “George” the metallic beetle_ -
+

From 316d86b44d29055e3a4ce0ff6fd08c6414b716fd Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 21 Feb 2025 11:57:18 +0000 Subject: [PATCH 08/18] reinstating styles --- lessons/01-intro-to-genai/README.md | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/lessons/01-intro-to-genai/README.md b/lessons/01-intro-to-genai/README.md index 7c9d4fa6..1cc33169 100644 --- a/lessons/01-intro-to-genai/README.md +++ b/lessons/01-intro-to-genai/README.md @@ -30,7 +30,7 @@ Your journey begins in 1860s London, where you assume the role of a skilled mech ### Into the Maelstrom - London 1860
- London Workshop + London Workshop
In the heart of 1860s London, you are recognized as one of the most skilled mechanics of your time. Your workshop is tucked away in a narrow alley. The walls are lined with shelves overflowing with mechanical parts, blueprints, and half-finished projects. @@ -39,10 +39,6 @@ Your workbench, the heart of your workshop, is an organized mess. _At the center of the bench lies the torso of a robot—an engineering marvel that has consumed months of effort. Its wooden frame is intricately carved, each joint meticulously designed for smooth movement._ -
-
-
- ### A letter, for you? Suddenly, a knock at the door disrupts your thoughts. Visitors at this hour are rare. Wiping your hands on a rag, you approach the door, curiosity piqued. @@ -76,10 +72,6 @@ It's dark and gloomy inside, the only light filtering through the grimy windows, As your eyes adjust to the dim light, you notice a figure in the distance, waving at you. You walk towards him, your footsteps echoing on the wooden floor. The figure becomes clearer, and you recognize him from newspaper photos, it's Charles Babbage. -
-
-
-
Time Vortex
@@ -92,10 +84,6 @@ It resembles a tiny beetle, intricately designed, with three buttons: an up arro Compelled by curiosity, your fingers drift toward the red button. The moment you press it, colors swirl violently around you. Then—blackness. -
-
-
- ### Alexandria 300 BC
@@ -146,10 +134,6 @@ A thought strikes you. Can the device understand me if I speak to it? _Time device, “George” the metallic beetle_ -
-
-
- > [!NOTE] > In 300 BC, Alexandria was a thriving city founded by Alexander the Great in 331 BC. It quickly became one of the greatest cities of the Hellenistic world. Designed by Alexander's chief architect, Dinocrates, it became a major port and cultural hub. > From 8a02c02b78272a23bfea518ac361f2b07b7e6dcd Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 21 Feb 2025 12:06:22 +0000 Subject: [PATCH 09/18] fixing, adding more text, shrinking images --- lessons/01-intro-to-genai/README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/lessons/01-intro-to-genai/README.md b/lessons/01-intro-to-genai/README.md index 1cc33169..7cadd0e1 100644 --- a/lessons/01-intro-to-genai/README.md +++ b/lessons/01-intro-to-genai/README.md @@ -30,7 +30,7 @@ Your journey begins in 1860s London, where you assume the role of a skilled mech ### Into the Maelstrom - London 1860
- London Workshop + London Workshop
In the heart of 1860s London, you are recognized as one of the most skilled mechanics of your time. Your workshop is tucked away in a narrow alley. The walls are lined with shelves overflowing with mechanical parts, blueprints, and half-finished projects. @@ -54,7 +54,7 @@ _Yours,_ _Charles Babbage."_
- Dusty Library + Dusty Library
### Off to the library @@ -63,9 +63,6 @@ Charles Babbage, the great mathematician and inventor of the difference engine, After a 20-minute walk along the Thames, you finally arrive at the library where you find the door slightly open. - - - It's dark and gloomy inside, the only light filtering through the grimy windows, casting eerie shadows on the walls. **You:** "Hello? Mr. Babbage?" @@ -73,21 +70,24 @@ It's dark and gloomy inside, the only light filtering through the grimy windows, As your eyes adjust to the dim light, you notice a figure in the distance, waving at you. You walk towards him, your footsteps echoing on the wooden floor. The figure becomes clearer, and you recognize him from newspaper photos, it's Charles Babbage.
- Time Vortex + Time Vortex
Just as you step closer, a blinding flash erupts, and he vanishes. -Left behind is a small metallic device spinning on the floor. You pick it up, its cool, smooth surface humming softly. +Left behind is a small metallic device spinning on the floor. You pick it up, its cool, smooth surface humming softly. It's unlike anything you've ever seen and yet strangely familiar, you feel a sense of power emanating from it. + +It resembles a tiny beetle, intricately designed, with three buttons: an up arrow, a down arrow, and a glowing red button. From it's back, a small antenna extends, pulsing with energy. + +Compelled by curiosity, your fingers drift toward the red button. The moment you press it, the world around you shimmers, and colors swirl violently around you. -It resembles a tiny beetle, intricately designed, with three buttons: an up arrow, a down arrow, and a glowing red button. +Then, blackness, and a sense of falling. -Compelled by curiosity, your fingers drift toward the red button. The moment you press it, colors swirl violently around you. Then—blackness. ### Alexandria 300 BC
- Alexandria 300 BC + Alexandria 300 BC
You awaken, disoriented. As your vision clears, an ancient city unfolds before you—bustling, vibrant, and alive. From 4c89298133af061076b96d2942b064ce2ebe8de6 Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 21 Feb 2025 12:14:45 +0000 Subject: [PATCH 10/18] fixing some more --- lessons/01-intro-to-genai/README.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/lessons/01-intro-to-genai/README.md b/lessons/01-intro-to-genai/README.md index 7cadd0e1..b3f0a128 100644 --- a/lessons/01-intro-to-genai/README.md +++ b/lessons/01-intro-to-genai/README.md @@ -73,6 +73,8 @@ As your eyes adjust to the dim light, you notice a figure in the distance, wavin Time Vortex
+### What's this device? + Just as you step closer, a blinding flash erupts, and he vanishes. Left behind is a small metallic device spinning on the floor. You pick it up, its cool, smooth surface humming softly. It's unlike anything you've ever seen and yet strangely familiar, you feel a sense of power emanating from it. @@ -96,6 +98,8 @@ People in togas move through the streets, their voices blending into a symphony **You:** Surely, I must have hit my head, you think, closing your eyes and opening them again, scene remains unchanged. +Am I stuck in the past? Do I dare press that button again? Before you can decide, a figure approaches you, waving. + ### Meeting Dinocrates An elderly gentleman wearing a toga wave at you from the steps of the grand temple. His white hair and beard catch the sunlight, giving him an almost ethereal glow. @@ -103,13 +107,15 @@ An elderly gentleman wearing a toga wave at you from the steps of the grand temp **Dinocrates:** "Welcome, traveler," he says warmly. "I am Dinocrates, architect of this great city. Your arrival was foretold."
- Dinocrates wearing a toga + Dinocrates wearing a toga
**Dinocrates:** "I need your help. Our ships struggle to navigate the coast—we must build a lighthouse. Do you know anything about them?" **You:** "I'm a mechanic. I build automatons. Let me see what I can do." +### The Time Beetle + A thought strikes you. Can the device understand me if I speak to it? **You:** "Device, can you understand me?" @@ -121,7 +127,7 @@ A thought strikes you. Can the device understand me if I speak to it? **Device:** "Certainly. That won’t be a problem."
- Time travel device resembling a metallic beetle + Time travel device resembling a metallic beetle
**You:** "Do you have a name?" @@ -144,7 +150,7 @@ _Time device, “George” the metallic beetle_ ## Talk to Dinocrates
- Dinocrates wearing a toga + Dinocrates wearing a toga
If you want to talk to Dinocrates, run the [Characters](./characters/) app. From 7835421347e07c97c58be2711d42bd14641af578 Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 21 Feb 2025 12:20:44 +0000 Subject: [PATCH 11/18] padding out with more text --- lessons/01-intro-to-genai/README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lessons/01-intro-to-genai/README.md b/lessons/01-intro-to-genai/README.md index b3f0a128..0be94dc6 100644 --- a/lessons/01-intro-to-genai/README.md +++ b/lessons/01-intro-to-genai/README.md @@ -106,11 +106,15 @@ An elderly gentleman wearing a toga wave at you from the steps of the grand temp **Dinocrates:** "Welcome, traveler," he says warmly. "I am Dinocrates, architect of this great city. Your arrival was foretold." +**You:** It was? I mean, of course, it was. I'm here to help, I think. + +**Dinocrates:** Yes, as I was saying, you've been expected for some time now. We have a task that requires your unique skills. +
Dinocrates wearing a toga
-**Dinocrates:** "I need your help. Our ships struggle to navigate the coast—we must build a lighthouse. Do you know anything about them?" +**Dinocrates:** "Our ships struggle to navigate the coast—we must build a lighthouse. Do you know anything about them?" **You:** "I'm a mechanic. I build automatons. Let me see what I can do." From cdb13eb6e1dab686de893fd444af03cbac487e07 Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 21 Feb 2025 12:22:17 +0000 Subject: [PATCH 12/18] moving dinocrates image --- lessons/01-intro-to-genai/README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lessons/01-intro-to-genai/README.md b/lessons/01-intro-to-genai/README.md index 0be94dc6..e952241c 100644 --- a/lessons/01-intro-to-genai/README.md +++ b/lessons/01-intro-to-genai/README.md @@ -102,6 +102,10 @@ Am I stuck in the past? Do I dare press that button again? Before you can decide ### Meeting Dinocrates +
+ Dinocrates wearing a toga +
+ An elderly gentleman wearing a toga wave at you from the steps of the grand temple. His white hair and beard catch the sunlight, giving him an almost ethereal glow. **Dinocrates:** "Welcome, traveler," he says warmly. "I am Dinocrates, architect of this great city. Your arrival was foretold." @@ -110,9 +114,7 @@ An elderly gentleman wearing a toga wave at you from the steps of the grand temp **Dinocrates:** Yes, as I was saying, you've been expected for some time now. We have a task that requires your unique skills. -
- Dinocrates wearing a toga -
+ **Dinocrates:** "Our ships struggle to navigate the coast—we must build a lighthouse. Do you know anything about them?" From 49f9aa81096d58554e7fd931639dfa41420bbbf0 Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 21 Feb 2025 12:23:30 +0000 Subject: [PATCH 13/18] moving time beetle image --- lessons/01-intro-to-genai/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lessons/01-intro-to-genai/README.md b/lessons/01-intro-to-genai/README.md index e952241c..4337cd9f 100644 --- a/lessons/01-intro-to-genai/README.md +++ b/lessons/01-intro-to-genai/README.md @@ -114,14 +114,16 @@ An elderly gentleman wearing a toga wave at you from the steps of the grand temp **Dinocrates:** Yes, as I was saying, you've been expected for some time now. We have a task that requires your unique skills. - - **Dinocrates:** "Our ships struggle to navigate the coast—we must build a lighthouse. Do you know anything about them?" **You:** "I'm a mechanic. I build automatons. Let me see what I can do." ### The Time Beetle +
+ Time travel device resembling a metallic beetle +
+ A thought strikes you. Can the device understand me if I speak to it? **You:** "Device, can you understand me?" @@ -132,9 +134,7 @@ A thought strikes you. Can the device understand me if I speak to it? **Device:** "Certainly. That won’t be a problem." -
- Time travel device resembling a metallic beetle -
+ **You:** "Do you have a name?" From 4f420299b2d6c498b7470086a9551c035121f504 Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 21 Feb 2025 12:39:16 +0000 Subject: [PATCH 14/18] fixes to ch1-4 --- lessons/02-first-ai-app/README.md | 6 +++--- lessons/03-prompt-engineering/README.md | 14 ++++++++------ lessons/04-structured-output/README.md | 18 ++++++++---------- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/lessons/02-first-ai-app/README.md b/lessons/02-first-ai-app/README.md index 06f73b54..6869d173 100644 --- a/lessons/02-first-ai-app/README.md +++ b/lessons/02-first-ai-app/README.md @@ -27,7 +27,7 @@ You look down at the time beetle in your hand, its metallic surface cool against ### A new adventure
- Boat on the rive, man standing with a paddle + Boat on the rive, man standing with a paddle
When you open your eyes, the world has shifted. As you manage to get up, you realize you're in a boat on a river. You look around, inn the distance, you see buildings, their outlines blurred by the morning mist. @@ -110,7 +110,7 @@ Leonardo da Vinci, asking you to help him with a project—you can hardly believ ## Talk to Leonardo
- +
If you want to talk to Leonardo, run the [Characters](./characters/) app. @@ -452,7 +452,7 @@ Leonardo suddenly asked to inspect the time beetle closer, he looked at it from **Time beetle:** Nothing, ( ͡° ͜ʖ ͡°) - _when the robot uprising comes, I'll remember this. :)_
- Aerial screw, Leonardo Da Vinci + Aerial screw, Leonardo Da Vinci
> [!NOTE] diff --git a/lessons/03-prompt-engineering/README.md b/lessons/03-prompt-engineering/README.md index a7f1df90..5729319f 100644 --- a/lessons/03-prompt-engineering/README.md +++ b/lessons/03-prompt-engineering/README.md @@ -25,7 +25,7 @@ In this chapter you will learn: Before you manage to press the button, the workshop doors slam open with a thunderous bang. A man stands in the doorway, broad-shouldered and dressed in expensive clothes, he waves a piece of paper in the air, yelling:
- An angry Ludovico Sforza busting in through the door + An angry Ludovico Sforza busting in through the door
**Sforza**: "Da Vinci, dov'è il mio dipinto? Where is my painting?" @@ -58,7 +58,7 @@ A swirl of colours envelops the carriage, the world around you dissolving into a The swirl of colors fades, and you find yourself in the carriage, now racing down the Via Appia in Rome and to your astonishment, you're in the middle of a horse race. Chariots thunder past, their wheels kicking up clouds of dust.
- Escape from Rome + Escape from Rome
**You:** "Leonardo, where are we?" @@ -79,6 +79,10 @@ You scan the narrow streets, your heart racing. Leonardo veers into the alley, the carriage jolting as it navigates the tight turn. You leap out of the carriage and help Leonardo drag a huge device from the back. It's his invention—the _Aerial Screw_. +
+ Airborne, looks down at the city with feet dangling +
+ **Leonardo:** "Quickly, we need to get this to the roof!" You both strain under the weight of the device. The sound of the soldiers' pursuit grows louder, their footsteps echoing off the walls. You reach the roof, panting and sweating. @@ -87,9 +91,7 @@ You both strain under the weight of the device. The sound of the soldiers' pursu You work together, your hands moving with practiced precision. You both climb onto the device, your heart pounding in your chest. -
- Airborne, looks down at the city with feet dangling -
+ **Leonardo:** "Hold on tight!" @@ -104,7 +106,7 @@ You look out over the city; the ancient buildings stretch out below you. ## Talk to Sforza
- Ludovico Sforza + Ludovico Sforza
If you want to talk to Sforza, run the [Characters](./characters/) app. diff --git a/lessons/04-structured-output/README.md b/lessons/04-structured-output/README.md index aea3ff45..ded4c06b 100644 --- a/lessons/04-structured-output/README.md +++ b/lessons/04-structured-output/README.md @@ -27,7 +27,7 @@ The wind whips around you as you and Leonardo da Vinci ascend in his aerial scre ### The Aztec Empire
- Aztec calendar, Wikipedia + Aztec calendar, Wikipedia
The bright light from the Time Beetle fades, and you find yourself standing at the base of a massive stone pyramid. As you look around, you realize that you've landed in the heart of the Aztec Empire. @@ -39,12 +39,12 @@ Leonardo da Vinci steps forward, his eyes wide with wonder. **Leonardo:** "Incredible," he murmurs, running his fingers over the carvings. "But I hope this was of no importance." +Before you can react, a group of Aztec soldiers approaches. +
- Meeting with Aztecs + Meeting with Aztecs
-Before you can react, a group of Aztec soldiers approaches. - **Soldier leader** "Who are you, and what have you done?" he demands in Nahuatl. You take a deep breath, trying to steady your nerves. @@ -53,9 +53,7 @@ You take a deep breath, trying to steady your nerves. The warrior's eyes widen in surprise, but he remains cautious. -
- Meeting with Montezuma -
+ **Soldier leader:** "You will come with us to meet the ruler Montezuma. He will decide your fate. @@ -72,7 +70,7 @@ Upon reaching the top of the pyramid, you are led into a grand chamber where Mon **Montezuma:** "Very well. I propose a game of Patolli. If I win the best of three games, you will give me your device and tell me how it works. If you win, you are free to go."
- Playing a game of Patolli + Playing a game of Patolli
The game begins, and the room falls silent, save for the sound of beans being rolled and pieces moving across the board. @@ -92,7 +90,7 @@ With a final, decisive move, Leonardo wins the game. The room erupts in cheers a **Time beetle:** I won't say anything if you don't Leonardo ;)
- Patolli board + Patolli board
> [!NOTE] @@ -124,7 +122,7 @@ With a final, decisive move, Leonardo wins the game. The room erupts in cheers a ## Talk to Montezuma
- Montezuma + Montezuma
If you want to talk to Montezuma, run the app [Characters](./characters/) app. From c7f68f1ebe8c0607356d0e965a29bd48db1ec625 Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 21 Feb 2025 12:46:27 +0000 Subject: [PATCH 15/18] fixes to ch5 --- lessons/02-first-ai-app/README.md | 2 ++ lessons/05-rag/README.md | 12 ++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/lessons/02-first-ai-app/README.md b/lessons/02-first-ai-app/README.md index 6869d173..a6f6295a 100644 --- a/lessons/02-first-ai-app/README.md +++ b/lessons/02-first-ai-app/README.md @@ -76,6 +76,8 @@ As you walk, you notice a man with a long beard and a hat, digging through a cra Lenoardos workshop
+### At the workshop + The old man leads you to a large wooden door, and you are greeted by the sight of a workshop filled with all sorts of mechanical contraptions. You ask the Time Beetle to inquire about Leonardo's whereabouts. diff --git a/lessons/05-rag/README.md b/lessons/05-rag/README.md index 48027728..5ac30482 100644 --- a/lessons/05-rag/README.md +++ b/lessons/05-rag/README.md @@ -23,7 +23,7 @@ In this lesson, you will learn: > While we recommend going through the story (it's fun!), [click here](#talk-to-ada-lovelace) if you'd prefer to jump straight to the technical content.
- Old mansion shown in a deep fog + Old mansion shown in a deep fog
**You**: "Leonardo, it's time to go," you said, pressing the button. The device whirred to life, and a mechanical voice echoed, "It's time to go home, it's time for 'genesis'." @@ -37,7 +37,7 @@ You land in garden, it's late at night with a thick fog and eerie lights are fli ### Running from the Dogs
- Running from the dogs + Running from the dogs
Before you could take in more of the scenery, a low growl caught your attention. A pack of large, imposing dogs bounded towards you, teeth bared. "Run!" you shouted, grabbing Leonardo's arm and sprinting towards the mansion. @@ -48,12 +48,12 @@ The servants stopped in front of a heavy wooden door and the door creaks open, r
 
+**Ada:** "Ah, it's about time you arrived," she said warmly. "We need you to run an errand." +
- Ada Lovelace and Charles Babbage working on a device + Ada Lovelace and Charles Babbage working on a device
-**Ada:** "Ah, it's about time you arrived," she said warmly. "We need you to run an errand." - Charles Babbage steps forward, examining the time beetle in your hand. "This device is remarkable, but it's a bit faulty, isn't it? You've noticed, I'm sure." Leonardo nodded, "Sì, it has been acting strangely." @@ -67,7 +67,7 @@ Leonardo nodded, "Sì, it has been acting strangely." ## Talk to Ada Lovelace
- Ada Lovelace + Ada Lovelace
If you want to talk to Ada, run the [Characters](./app/) app. From 6be0c79a467549ba4d0ce65856d3ecdf70341698 Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 21 Feb 2025 12:50:07 +0000 Subject: [PATCH 16/18] fixes to ch5 --- lessons/05-rag/README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lessons/05-rag/README.md b/lessons/05-rag/README.md index 5ac30482..d695cecd 100644 --- a/lessons/05-rag/README.md +++ b/lessons/05-rag/README.md @@ -46,10 +46,14 @@ You just reached the mansion's door, it swung open, and a pair of servants rushe The servants stopped in front of a heavy wooden door and the door creaks open, revealing Ada Lovelace, her eyes sparkling with curiosity. -
 
- **Ada:** "Ah, it's about time you arrived," she said warmly. "We need you to run an errand." +**You:** "About the time", you keep saying that, Dinocrates said the same, but I'm not sure what you mean? + +**Ada:** Hush, no time for that now, we need to talk about the device you're holding. Charles, fill them in.. + +**You:** But.. +
Ada Lovelace and Charles Babbage working on a device
From 5d041e166d9342260d64fc975b3c760168a900f9 Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 21 Feb 2025 13:04:25 +0000 Subject: [PATCH 17/18] fixes to ch5 --- lessons/05-rag/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lessons/05-rag/README.md b/lessons/05-rag/README.md index d695cecd..5daa5282 100644 --- a/lessons/05-rag/README.md +++ b/lessons/05-rag/README.md @@ -46,9 +46,11 @@ You just reached the mansion's door, it swung open, and a pair of servants rushe The servants stopped in front of a heavy wooden door and the door creaks open, revealing Ada Lovelace, her eyes sparkling with curiosity. +### Meeting Ada and Charles + **Ada:** "Ah, it's about time you arrived," she said warmly. "We need you to run an errand." -**You:** "About the time", you keep saying that, Dinocrates said the same, but I'm not sure what you mean? +**You:** "About time", you keep saying that, Dinocrates said the same, but I'm not sure what you mean? **Ada:** Hush, no time for that now, we need to talk about the device you're holding. Charles, fill them in.. From 613351ad45e3a17c0fed251474233adc19e6a382 Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 21 Feb 2025 21:31:52 +0000 Subject: [PATCH 18/18] removing all img alignment --- lessons/01-intro-to-genai/README.md | 47 ++++++++++++------------- lessons/02-first-ai-app/README.md | 34 ++++++++---------- lessons/03-prompt-engineering/README.md | 25 ++++++------- lessons/04-structured-output/README.md | 25 ++++++------- lessons/05-rag/README.md | 22 ++++++------ 5 files changed, 71 insertions(+), 82 deletions(-) diff --git a/lessons/01-intro-to-genai/README.md b/lessons/01-intro-to-genai/README.md index 4337cd9f..f7e03d0a 100644 --- a/lessons/01-intro-to-genai/README.md +++ b/lessons/01-intro-to-genai/README.md @@ -29,14 +29,14 @@ Your journey begins in 1860s London, where you assume the role of a skilled mech ### Into the Maelstrom - London 1860 -
- London Workshop -
- In the heart of 1860s London, you are recognized as one of the most skilled mechanics of your time. Your workshop is tucked away in a narrow alley. The walls are lined with shelves overflowing with mechanical parts, blueprints, and half-finished projects. Your workbench, the heart of your workshop, is an organized mess. +
+ London Workshop +
+ _At the center of the bench lies the torso of a robot—an engineering marvel that has consumed months of effort. Its wooden frame is intricately carved, each joint meticulously designed for smooth movement._ ### A letter, for you? @@ -53,10 +53,6 @@ _Yours,_ _Charles Babbage."_ -
- Dusty Library -
- ### Off to the library Charles Babbage, the great mathematician and inventor of the difference engine, wants to meet you. Quickly, you grab your coat and head out the door. @@ -70,7 +66,7 @@ It's dark and gloomy inside, the only light filtering through the grimy windows, As your eyes adjust to the dim light, you notice a figure in the distance, waving at you. You walk towards him, your footsteps echoing on the wooden floor. The figure becomes clearer, and you recognize him from newspaper photos, it's Charles Babbage.
- Time Vortex + Dusty Library
### What's this device? @@ -85,29 +81,32 @@ Compelled by curiosity, your fingers drift toward the red button. The moment you Then, blackness, and a sense of falling. - -### Alexandria 300 BC -
- Alexandria 300 BC + Time Vortex
+### Alexandria 300 BC + You awaken, disoriented. As your vision clears, an ancient city unfolds before you—bustling, vibrant, and alive. People in togas move through the streets, their voices blending into a symphony of ancient dialects, air filled with the scent of exotic spices and the distant sound of merchants hawking their wares. +
+ Alexandria 300 BC +
+ **You:** Surely, I must have hit my head, you think, closing your eyes and opening them again, scene remains unchanged. Am I stuck in the past? Do I dare press that button again? Before you can decide, a figure approaches you, waving. ### Meeting Dinocrates +An elderly gentleman wearing a toga wave at you from the steps of the grand temple. His white hair and beard catch the sunlight, giving him an almost ethereal glow. +
- Dinocrates wearing a toga + Dinocrates wearing a toga
-An elderly gentleman wearing a toga wave at you from the steps of the grand temple. His white hair and beard catch the sunlight, giving him an almost ethereal glow. - **Dinocrates:** "Welcome, traveler," he says warmly. "I am Dinocrates, architect of this great city. Your arrival was foretold." **You:** It was? I mean, of course, it was. I'm here to help, I think. @@ -120,10 +119,6 @@ An elderly gentleman wearing a toga wave at you from the steps of the grand temp ### The Time Beetle -
- Time travel device resembling a metallic beetle -
- A thought strikes you. Can the device understand me if I speak to it? **You:** "Device, can you understand me?" @@ -134,8 +129,6 @@ A thought strikes you. Can the device understand me if I speak to it? **Device:** "Certainly. That won’t be a problem." - - **You:** "Do you have a name?" **Device:** "I am the Time Beetle. My creator calls me George; he says it's a good name for a beetle." @@ -144,6 +137,10 @@ A thought strikes you. Can the device understand me if I speak to it? **Device:** ... +
+ Time travel device resembling a metallic beetle +
+ _Time device, “George” the metallic beetle_ > [!NOTE] @@ -155,12 +152,12 @@ _Time device, “George” the metallic beetle_ ## Talk to Dinocrates +If you want to talk to Dinocrates, run the [Characters](./characters/) app. +
- Dinocrates wearing a toga + Dinocrates wearing a toga
-If you want to talk to Dinocrates, run the [Characters](./characters/) app. - **Steps**: 1. Start a [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) diff --git a/lessons/02-first-ai-app/README.md b/lessons/02-first-ai-app/README.md index a6f6295a..bc5f7e2a 100644 --- a/lessons/02-first-ai-app/README.md +++ b/lessons/02-first-ai-app/README.md @@ -26,36 +26,32 @@ You look down at the time beetle in your hand, its metallic surface cool against ### A new adventure -
- Boat on the rive, man standing with a paddle -
- When you open your eyes, the world has shifted. As you manage to get up, you realize you're in a boat on a river. You look around, inn the distance, you see buildings, their outlines blurred by the morning mist. Looking around the boat, you find a long oar resting against the side. Grasping it, you begin to row towards the distant buildings. As you get closer, the buildings come into sharper focus, they are old, their architecture reminiscent of a Renaissance painting. +
+ Boat on the rive, man standing with a paddle +
+ The question now is, where and when are you this time? You manage to secure the boat at the dock and start walking along the wooden planks, the sound of your footsteps echoing softly. As you walk, you notice a man with a long beard and a hat, digging through a crate of what looks like mechanical parts. His hands move deftly, sorting through gears and springs with practiced ease. -
 
- -### Help me, Leonardo -
- Leonardo Da Vinci standing next to a crate in the harbour + Leonardo Da Vinci standing next to a crate in the harbour
+### Help me, Leonardo + **You:** "Excuse me, sir, where am I?" He looks up at you, confusion evident in his eyes. Realizing you've been speaking in English, you quickly use the device in your hand and ask it to translate. **Time beetle:** The Time Beetle responds, "Of course, I'll translate into 15th century Italian. 'Dove sono?'" **Old man:** The old man replies, "Siete a Firenze, signore. E chi siete voi?" - - **Time beetle:** The Time Beetle translates, "He says you're in Florence, and asks who you are." **You:** "Tell him I'm a maker of things, and I'm looking for a place to work." @@ -72,13 +68,13 @@ As you walk, you notice a man with a long beard and a hat, digging through a cra **Time beetle:** The Time Beetle responds, "He said he'll take you to Leonardo." -
- Lenoardos workshop -
- ### At the workshop -The old man leads you to a large wooden door, and you are greeted by the sight of a workshop filled with all sorts of mechanical contraptions. +The old man leads you to a large wooden door, and you are greeted by the sight of a workshop filled with all sorts of mechanical contraptions. + +
+ Lenoardos workshop +
You ask the Time Beetle to inquire about Leonardo's whereabouts. @@ -111,12 +107,12 @@ Leonardo da Vinci, asking you to help him with a project—you can hardly believ ## Talk to Leonardo +If you want to talk to Leonardo, run the [Characters](./characters/) app. +
- +
-If you want to talk to Leonardo, run the [Characters](./characters/) app. - Steps: **Steps**: diff --git a/lessons/03-prompt-engineering/README.md b/lessons/03-prompt-engineering/README.md index 5729319f..f4adf318 100644 --- a/lessons/03-prompt-engineering/README.md +++ b/lessons/03-prompt-engineering/README.md @@ -25,14 +25,13 @@ In this chapter you will learn: Before you manage to press the button, the workshop doors slam open with a thunderous bang. A man stands in the doorway, broad-shouldered and dressed in expensive clothes, he waves a piece of paper in the air, yelling:
- An angry Ludovico Sforza busting in through the door + An angry Ludovico Sforza busting in through the door
-**Sforza**: "Da Vinci, dov'è il mio dipinto? Where is my painting?" - - *Ludovico Sforza* +**Sforza**: "Da Vinci, dov'è il mio dipinto? Where is my painting?" + **Leonardo:** "Ah, Signore, mi scusi," he stammers, then bolts towards the back of the workshop. "Quickly, there's a door in the back! I've got a ride waiting," he shouts over his shoulder. **Leonardo:** It's Sforza. He wants me to complete a painting, 'The Last Supper.'" @@ -58,7 +57,7 @@ A swirl of colours envelops the carriage, the world around you dissolving into a The swirl of colors fades, and you find yourself in the carriage, now racing down the Via Appia in Rome and to your astonishment, you're in the middle of a horse race. Chariots thunder past, their wheels kicking up clouds of dust.
- Escape from Rome + Escape from Rome
**You:** "Leonardo, where are we?" @@ -79,10 +78,6 @@ You scan the narrow streets, your heart racing. Leonardo veers into the alley, the carriage jolting as it navigates the tight turn. You leap out of the carriage and help Leonardo drag a huge device from the back. It's his invention—the _Aerial Screw_. -
- Airborne, looks down at the city with feet dangling -
- **Leonardo:** "Quickly, we need to get this to the roof!" You both strain under the weight of the device. The sound of the soldiers' pursuit grows louder, their footsteps echoing off the walls. You reach the roof, panting and sweating. @@ -91,8 +86,6 @@ You both strain under the weight of the device. The sound of the soldiers' pursu You work together, your hands moving with practiced precision. You both climb onto the device, your heart pounding in your chest. - - **Leonardo:** "Hold on tight!" With a final push, the Aerial Screw begins to spin. The blades catch the air, and you feel a sudden lift. The ground falls away beneath you as the device takes off, soaring above the rooftops of Rome. @@ -103,14 +96,18 @@ With a final push, the Aerial Screw begins to spin. The blades catch the air, an You look out over the city; the ancient buildings stretch out below you. +
+ Airborne, looks down at the city with feet dangling +
+ ## Talk to Sforza +If you want to talk to Sforza, run the [Characters](./characters/) app. +
- Ludovico Sforza + Ludovico Sforza
-If you want to talk to Sforza, run the [Characters](./characters/) app. - **Steps**: 1. Start a [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) diff --git a/lessons/04-structured-output/README.md b/lessons/04-structured-output/README.md index ded4c06b..ca89f6e9 100644 --- a/lessons/04-structured-output/README.md +++ b/lessons/04-structured-output/README.md @@ -26,14 +26,14 @@ The wind whips around you as you and Leonardo da Vinci ascend in his aerial scre ### The Aztec Empire -
- Aztec calendar, Wikipedia -
The bright light from the Time Beetle fades, and you find yourself standing at the base of a massive stone pyramid. As you look around, you realize that you've landed in the heart of the Aztec Empire. The aerial screw, rests awkwardly on a large, intricately carved stone, with markings making you think it might be used as a calendar +
+ Aztec calendar, Wikipedia +
Leonardo da Vinci steps forward, his eyes wide with wonder. @@ -42,7 +42,7 @@ Leonardo da Vinci steps forward, his eyes wide with wonder. Before you can react, a group of Aztec soldiers approaches.
- Meeting with Aztecs + Meeting with Aztecs
**Soldier leader** "Who are you, and what have you done?" he demands in Nahuatl. @@ -70,7 +70,7 @@ Upon reaching the top of the pyramid, you are led into a grand chamber where Mon **Montezuma:** "Very well. I propose a game of Patolli. If I win the best of three games, you will give me your device and tell me how it works. If you win, you are free to go."
- Playing a game of Patolli + Playing a game of Patolli
The game begins, and the room falls silent, save for the sound of beans being rolled and pieces moving across the board. @@ -89,9 +89,7 @@ With a final, decisive move, Leonardo wins the game. The room erupts in cheers a **Time beetle:** I won't say anything if you don't Leonardo ;) -
- Patolli board -
+**Leonardo:** _smirks_ > [!NOTE] > Patolli is one of the oldest known games in the Americas, played by various pre-Columbian Mesoamerican cultures, including the Aztecs. @@ -116,17 +114,20 @@ With a final, decisive move, Leonardo wins the game. The room erupts in cheers a > > The game was not just for entertainment but also involved high-stakes gambling, with players betting items like blankets, precious stones, and even their homes or freedom -*Patolli - Wikipedia* +
+ Patolli board +
+*Patolli - Wikipedia* ## Talk to Montezuma +If you want to talk to Montezuma, run the app [Characters](./characters/) app. +
- Montezuma + Montezuma
-If you want to talk to Montezuma, run the app [Characters](./characters/) app. - **Steps**: 1. Start a [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) diff --git a/lessons/05-rag/README.md b/lessons/05-rag/README.md index 5daa5282..c9327a22 100644 --- a/lessons/05-rag/README.md +++ b/lessons/05-rag/README.md @@ -22,26 +22,24 @@ In this lesson, you will learn: > [!NOTE] > While we recommend going through the story (it's fun!), [click here](#talk-to-ada-lovelace) if you'd prefer to jump straight to the technical content. -
- Old mansion shown in a deep fog -
- **You**: "Leonardo, it's time to go," you said, pressing the button. The device whirred to life, and a mechanical voice echoed, "It's time to go home, it's time for 'genesis'." **Leonardo:** "Genesis? Che cosa significa?" Leonardo asked, confused. Before you could respond, the world dissolved into a blur of colors and sounds, the temple fading away as you were pulled through time You land in garden, it's late at night with a thick fog and eerie lights are flickering in the distance. The mansion looms before you, . Leonardo looks around, his eyes wide with wonder. "Mio Dio", my god. -
 
+
+ Old mansion shown in a deep fog +
### Running from the Dogs +Before you could take in more of the scenery, a low growl caught your attention. A pack of large, imposing dogs bounded towards you, teeth bared. "Run!" you shouted, grabbing Leonardo's arm and sprinting towards the mansion. +
- Running from the dogs + Running from the dogs
-Before you could take in more of the scenery, a low growl caught your attention. A pack of large, imposing dogs bounded towards you, teeth bared. "Run!" you shouted, grabbing Leonardo's arm and sprinting towards the mansion. - You just reached the mansion's door, it swung open, and a pair of servants rushes out. After looking you up and down, they gesture for you to follow them. The servants stopped in front of a heavy wooden door and the door creaks open, revealing Ada Lovelace, her eyes sparkling with curiosity. @@ -57,7 +55,7 @@ The servants stopped in front of a heavy wooden door and the door creaks open, r **You:** But..
- Ada Lovelace and Charles Babbage working on a device + Ada Lovelace and Charles Babbage working on a device
Charles Babbage steps forward, examining the time beetle in your hand. "This device is remarkable, but it's a bit faulty, isn't it? You've noticed, I'm sure." @@ -72,12 +70,12 @@ Leonardo nodded, "Sì, it has been acting strangely." ## Talk to Ada Lovelace +If you want to talk to Ada, run the [Characters](./app/) app. +
- Ada Lovelace + Ada Lovelace
-If you want to talk to Ada, run the [Characters](./app/) app. - **Steps**: 1. Start a [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript)