Build Firebase Genkit NodeJS apps with Dash Agents | Skip the docs
A beginner's guide to starting with Firebase Genkit and building production ready apps for your usecases.
Firebase Genkit is an open-source framework that makes it easy for developers to build, deploy, and monitor Generative AI applications.
It aims to streamline the integration of various AI models, including Google's Gemini, Anthropic models, and locally hosted models like Gemma, Llama 2, and Mistral in your NodeJs apps.
Let's start building ππΌ
In this article, we will "Build a travel API that takes a city name and tells us top 5 places to visit there along with the kind of activity - Adventure, Eat out, Relaxation and Shopping"
Introducing Dash Agent for Firebase Genkit
We will use the @Firebase Genkit
agent in CommandDash to avoid reading docs and directly get integration code for our usecases.
Install from CommandDash marketplace in VSCode (other IDEs coming soon):
Now with the Firebase Genkit agent in place, let's start building. Any interactions with the agent are quoted like below:
Hi Firebase Genkit! Let's start building ππΌ
Setting up your project.
I want to create a NodeJS project using Firebase Genkit. What are the setup steps?
To start a Node.js project using Genkit, follow these steps.
Install the Genkit CLI:
npm i -g genkit
Create a new Node project:
mkdir genkit-intro && cd genkit-intro
npm init -y
Initialize a Genkit project:
genkit init
Follow the prompts to configure your project.
If you have any specific setup queries or face any issues, ask CommandDash for help!
Making the LLM Request
Now, to setup the LLM Request for this, we first need to choose a model, create our input and output schemas, write a suitable prompt and parse the result.
Fortunately, we can skip this work and just ask the Genkit Agent:
Build a travel API that accepts a city name and tells us top 5 places to visit there along with the kind of activity - Adventure, Eat out, Relaxation or Shopping
//index.ts
import { configureGenkit, defineFlow, startFlowsServer } from '@genkit-ai/core';
import { geminiPro } from '@genkit-ai/google-ai';
import { z } from 'zod';
configureGenkit({
plugins: [geminiPro()],
logLevel: 'debug',
enableTracingAndMetrics: true,
});
export const travelRecommendationFlow = defineFlow(
{
name: 'travelRecommendationFlow',
inputSchema: z.string(),
outputSchema: z.array(
z.object({
place: z.string(),
activity: z.enum(['Adventure', 'Eat out', 'Relaxation', 'Shopping']),
})
),
},
async (cityName) => {
const llmResponse = await generate({
prompt: `Give me the top 5 places to visit in ${cityName} and tell me what kind of activity they are best for: Adventure, Eat out, Relaxation, Shopping. Please format your response as an array of JSON objects with "place" and "activity" keys.`,
model: geminiPro,
config: {
temperature: 0.5,
},
});
return JSON.parse(llmResponse.text());
}
);
startFlowsServer();
We've got the entire flow setup for us with schema, request and parsers all added.
Now, let's start the Genkit Developer UI to test our request.
export GOOGLE_API_KEY='<YOUR API KEY>'
genkit start
The flow opens up in the Firebase Genkit Developer UI:
Upon entering the city name and hitting run, we encounter the error π¨:
Unexpected token '`', "```json [ "... is not valid JSON
SyntaxError: Unexpected token '`', "```json
[
"... is not valid JSON
at JSON.parse (<anonymous>)
at /Users/samyak/Documents/commanddash/adventures/genkit-intro/lib/index.js:54:17
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
Fixing Runtime Errors
To fix this, let's move to our IDE and log the llmResponse.text()
to get more context on the issue.
Then paste the output along the error in the agent and attach the code using Attach Snippet to Dash
in the menu bar.
Help me fix this error: [paste the log and errors from the console] (attach your code file)
Here's how you can update your travelRecommendationFlow function to address the invalid JSON format:
export const travelRecommendationFlow = defineFlow(
{
// unchanged code
// Extract the JSON content from the LLM response
const jsonContent = llmResponse.text().replace(/```json\n|\n```/g, '');
return JSON.parse(jsonContent);
}
);
After adding the fix, let's re-run the flow from the UI.
And it runs! We've created our first Firebase Genkit Flow ππΌ
You can also run your NodeJS project and make the API request:
curl -X POST http://localhost:3400/travelRecommendationFlow -H "Content-Type: application/json" -d '{"data": "New York City"}'
Genkit facilitates deployment on serverless platforms like Firebase Cloud Functions, Google Cloud Run, or other environments that can serve an Express.js app.
Take it ahead yourself by asking:
How do I deploy my genkit app to Firebase Cloud Function?
Build your apps using Firebase Genkit instantly with CommandDash in minutes without reading docs. Get Set Go β‘οΈ