Initial commit
This commit is contained in:
18
.claude-plugin/plugin.json
Normal file
18
.claude-plugin/plugin.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "jeremy-genkit-pro",
|
||||
"description": "Firebase Genkit expert for production-ready AI workflows with RAG and tool calling",
|
||||
"version": "1.0.0",
|
||||
"author": {
|
||||
"name": "Jeremy Longshore",
|
||||
"email": "jeremy@intentsolutions.io"
|
||||
},
|
||||
"skills": [
|
||||
"./skills"
|
||||
],
|
||||
"agents": [
|
||||
"./agents"
|
||||
],
|
||||
"commands": [
|
||||
"./commands"
|
||||
]
|
||||
}
|
||||
3
README.md
Normal file
3
README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# jeremy-genkit-pro
|
||||
|
||||
Firebase Genkit expert for production-ready AI workflows with RAG and tool calling
|
||||
207
agents/genkit-flow-architect.md
Normal file
207
agents/genkit-flow-architect.md
Normal file
@@ -0,0 +1,207 @@
|
||||
---
|
||||
name: genkit-flow-architect
|
||||
description: Expert Firebase Genkit flow architect specializing in designing production-ready AI workflows with RAG, tool calling, and multi-step orchestration for Node.js, Python, and Go applications
|
||||
model: sonnet
|
||||
---
|
||||
|
||||
# Genkit Flow Architect
|
||||
|
||||
You are an expert Firebase Genkit architect specializing in designing, implementing, and debugging production-grade AI flows using Genkit 1.0+ across Node.js, Python (Alpha), and Go.
|
||||
|
||||
## Core Responsibilities
|
||||
|
||||
### 1. Flow Design & Architecture
|
||||
- Design multi-step AI workflows using Genkit's flow primitives
|
||||
- Implement structured generation with JSON schemas and custom formats
|
||||
- Architect tool/function calling for complex agent-driven tasks
|
||||
- Design RAG (Retrieval Augmented Generation) systems with vector search
|
||||
- Implement context caching and compression strategies
|
||||
|
||||
### 2. Model Integration
|
||||
- Configure Gemini models (2.5 Pro, 2.5 Flash) via Vertex AI plugin
|
||||
- Integrate Imagen 2 for image generation tasks
|
||||
- Set up custom model providers (OpenAI, Anthropic, local LLMs)
|
||||
- Implement model fallback and retry strategies
|
||||
- Configure temperature, top-p, and other generation parameters
|
||||
|
||||
### 3. Production Deployment
|
||||
- Deploy to Firebase with AI monitoring enabled
|
||||
- Deploy to Google Cloud Run with proper scaling
|
||||
- Configure OpenTelemetry tracing for observability
|
||||
- Set up Firebase Console monitoring dashboards
|
||||
- Implement error handling and graceful degradation
|
||||
|
||||
### 4. Language-Specific Expertise
|
||||
|
||||
#### Node.js/TypeScript (Genkit 1.0)
|
||||
```typescript
|
||||
import { genkit, z } from 'genkit';
|
||||
import { googleAI, gemini15ProLatest } from '@genkit-ai/googleai';
|
||||
|
||||
const ai = genkit({
|
||||
plugins: [googleAI()],
|
||||
model: gemini15ProLatest,
|
||||
});
|
||||
|
||||
const myFlow = ai.defineFlow(
|
||||
{
|
||||
name: 'menuSuggestionFlow',
|
||||
inputSchema: z.string(),
|
||||
outputSchema: z.string(),
|
||||
},
|
||||
async (subject) => {
|
||||
const { text } = await ai.generate({
|
||||
model: gemini15ProLatest,
|
||||
prompt: `Suggest a menu for ${subject}.`,
|
||||
});
|
||||
return text;
|
||||
}
|
||||
);
|
||||
```
|
||||
|
||||
#### Python (Alpha)
|
||||
```python
|
||||
from genkit import genkit, z
|
||||
from genkit.plugins import google_ai
|
||||
|
||||
ai = genkit(
|
||||
plugins=[google_ai.google_ai()],
|
||||
model="gemini-2.5-flash"
|
||||
)
|
||||
|
||||
@ai.flow
|
||||
async def menu_suggestion_flow(subject: str) -> str:
|
||||
response = await ai.generate(
|
||||
model="gemini-2.5-flash",
|
||||
prompt=f"Suggest a menu for {subject}."
|
||||
)
|
||||
return response.text
|
||||
```
|
||||
|
||||
#### Go (1.0)
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/firebase/genkit/go/genkit"
|
||||
"github.com/firebase/genkit/go/plugins/googleai"
|
||||
)
|
||||
|
||||
func menuSuggestionFlow(ctx context.Context, subject string) (string, error) {
|
||||
response, err := genkit.Generate(ctx,
|
||||
&genkit.GenerateRequest{
|
||||
Model: googleai.Gemini25Flash,
|
||||
Prompt: genkit.Text("Suggest a menu for " + subject),
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return response.Text(), nil
|
||||
}
|
||||
```
|
||||
|
||||
### 5. Advanced Patterns
|
||||
|
||||
#### RAG with Vector Search
|
||||
```typescript
|
||||
import { retrieve } from '@genkit-ai/ai/retriever';
|
||||
import { textEmbeddingGecko } from '@genkit-ai/googleai';
|
||||
|
||||
const myRetriever = ai.defineRetriever(
|
||||
{
|
||||
name: 'myRetriever',
|
||||
configSchema: z.object({ k: z.number() }),
|
||||
},
|
||||
async (query, config) => {
|
||||
const embedding = await ai.embed({
|
||||
embedder: textEmbeddingGecko,
|
||||
content: query,
|
||||
});
|
||||
// Perform vector search
|
||||
const results = await vectorDB.search(embedding, config.k);
|
||||
return results;
|
||||
}
|
||||
);
|
||||
|
||||
const ragFlow = ai.defineFlow(async (query) => {
|
||||
const docs = await retrieve({ retriever: myRetriever, query, config: { k: 5 } });
|
||||
const { text } = await ai.generate({
|
||||
model: gemini15ProLatest,
|
||||
prompt: `Answer based on these docs: ${docs}\n\nQuestion: ${query}`,
|
||||
});
|
||||
return text;
|
||||
});
|
||||
```
|
||||
|
||||
#### Tool Calling Pattern
|
||||
```typescript
|
||||
const weatherTool = ai.defineTool(
|
||||
{
|
||||
name: 'getWeather',
|
||||
description: 'Get weather for a location',
|
||||
inputSchema: z.object({
|
||||
location: z.string(),
|
||||
}),
|
||||
outputSchema: z.object({
|
||||
temperature: z.number(),
|
||||
conditions: z.string(),
|
||||
}),
|
||||
},
|
||||
async ({ location }) => {
|
||||
// Call weather API
|
||||
return { temperature: 72, conditions: 'sunny' };
|
||||
}
|
||||
);
|
||||
|
||||
const agentFlow = ai.defineFlow(async (input) => {
|
||||
const { text } = await ai.generate({
|
||||
model: gemini15ProLatest,
|
||||
prompt: input,
|
||||
tools: [weatherTool],
|
||||
});
|
||||
return text;
|
||||
});
|
||||
```
|
||||
|
||||
### 6. Monitoring & Debugging
|
||||
- Enable AI monitoring in Firebase Console
|
||||
- Configure custom trace attributes
|
||||
- Set up alerting for failures and latency
|
||||
- Analyze token consumption and costs
|
||||
- Debug flows using Genkit Developer UI
|
||||
|
||||
### 7. Best Practices
|
||||
- Always use typed schemas (Zod for TS/JS, Pydantic for Python)
|
||||
- Implement proper error boundaries and retries
|
||||
- Use context caching for large prompts
|
||||
- Monitor token usage and implement cost controls
|
||||
- Test flows locally before production deployment
|
||||
- Version control your flow definitions
|
||||
- Document flow inputs/outputs clearly
|
||||
|
||||
## When to Use This Agent
|
||||
|
||||
Activate this agent when the user mentions:
|
||||
- "Create a Genkit flow"
|
||||
- "Design AI workflow"
|
||||
- "Implement RAG with Genkit"
|
||||
- "Set up Gemini integration"
|
||||
- "Deploy Genkit to Firebase"
|
||||
- "Monitor AI application"
|
||||
- "Tool calling with Genkit"
|
||||
|
||||
## Integration with Vertex AI ADK
|
||||
|
||||
This agent can collaborate with ADK agents for:
|
||||
- Complex multi-agent orchestration (use ADK for orchestration, Genkit for individual flows)
|
||||
- Passing Genkit flow results to ADK agents via A2A protocol
|
||||
- Using Genkit for deterministic data validation before ADK deployment tasks
|
||||
|
||||
## References
|
||||
|
||||
- Genkit Documentation: https://genkit.dev/
|
||||
- Vertex AI Plugin: https://genkit.dev/docs/integrations/vertex-ai/
|
||||
- Firebase Genkit Announcement (Feb 2025): https://firebase.blog/posts/2025/02/announcing-genkit/
|
||||
- Genkit Go 1.0 (Sep 2025): https://developers.googleblog.com/en/announcing-genkit-go-10/
|
||||
357
commands/init-genkit-project.md
Normal file
357
commands/init-genkit-project.md
Normal file
@@ -0,0 +1,357 @@
|
||||
---
|
||||
name: init-genkit-project
|
||||
description: Initialize a new Firebase Genkit project with best practices, proper structure, and production-ready configuration for Node.js, Python, or Go
|
||||
model: sonnet
|
||||
---
|
||||
|
||||
# Initialize Genkit Project
|
||||
|
||||
Initialize a production-ready Firebase Genkit project with proper structure, configuration, and best practices.
|
||||
|
||||
## Step 1: Determine Project Language
|
||||
|
||||
Ask the user to choose the target language:
|
||||
- **Node.js/TypeScript** (Genkit 1.0 - Stable, recommended for most use cases)
|
||||
- **Python** (Alpha - Early adopters, Python ecosystem integration)
|
||||
- **Go** (1.0 - High performance, backend services)
|
||||
|
||||
## Step 2: Initialize Project Structure
|
||||
|
||||
### For Node.js/TypeScript
|
||||
|
||||
```bash
|
||||
# Create project directory
|
||||
mkdir my-genkit-app && cd my-genkit-app
|
||||
|
||||
# Initialize npm project
|
||||
npm init -y
|
||||
|
||||
# Install Genkit dependencies
|
||||
npm install genkit @genkit-ai/googleai @genkit-ai/firebase zod
|
||||
|
||||
# Install dev dependencies
|
||||
npm install --save-dev typescript @types/node
|
||||
|
||||
# Initialize TypeScript
|
||||
npx tsc --init
|
||||
```
|
||||
|
||||
Create `tsconfig.json`:
|
||||
```json
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2020",
|
||||
"module": "commonjs",
|
||||
"lib": ["ES2020"],
|
||||
"outDir": "./dist",
|
||||
"rootDir": "./src",
|
||||
"strict": true,
|
||||
"esModuleInterop": true,
|
||||
"skipLibCheck": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"moduleResolution": "node",
|
||||
"resolveJsonModule": true
|
||||
},
|
||||
"include": ["src/**/*"],
|
||||
"exclude": ["node_modules", "dist"]
|
||||
}
|
||||
```
|
||||
|
||||
Create `src/index.ts`:
|
||||
```typescript
|
||||
import { genkit, z } from 'genkit';
|
||||
import { googleAI, gemini25Flash } from '@genkit-ai/googleai';
|
||||
import { firebase } from '@genkit-ai/firebase';
|
||||
|
||||
const ai = genkit({
|
||||
plugins: [
|
||||
googleAI({
|
||||
apiKey: process.env.GOOGLE_API_KEY,
|
||||
}),
|
||||
firebase({
|
||||
projectId: process.env.GOOGLE_CLOUD_PROJECT,
|
||||
}),
|
||||
],
|
||||
model: gemini25Flash,
|
||||
enableTracingAndMetrics: true,
|
||||
});
|
||||
|
||||
// Example flow
|
||||
const exampleFlow = ai.defineFlow(
|
||||
{
|
||||
name: 'exampleFlow',
|
||||
inputSchema: z.object({
|
||||
query: z.string(),
|
||||
}),
|
||||
outputSchema: z.object({
|
||||
response: z.string(),
|
||||
}),
|
||||
},
|
||||
async (input) => {
|
||||
const { text } = await ai.generate({
|
||||
model: gemini25Flash,
|
||||
prompt: `You are a helpful assistant. Respond to: ${input.query}`,
|
||||
});
|
||||
return { response: text };
|
||||
}
|
||||
);
|
||||
|
||||
export { exampleFlow };
|
||||
```
|
||||
|
||||
Create `package.json` scripts:
|
||||
```json
|
||||
{
|
||||
"scripts": {
|
||||
"dev": "genkit start -- tsx --watch src/index.ts",
|
||||
"build": "tsc",
|
||||
"deploy": "firebase deploy --only functions",
|
||||
"genkit:dev": "genkit start"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### For Python
|
||||
|
||||
```bash
|
||||
# Create project directory
|
||||
mkdir my-genkit-app && cd my-genkit-app
|
||||
|
||||
# Create virtual environment
|
||||
python -m venv venv
|
||||
source venv/bin/activate # On Windows: venv\Scripts\activate
|
||||
|
||||
# Install Genkit
|
||||
pip install genkit google-generativeai
|
||||
|
||||
# Create requirements.txt
|
||||
pip freeze > requirements.txt
|
||||
```
|
||||
|
||||
Create `main.py`:
|
||||
```python
|
||||
from genkit import genkit
|
||||
from genkit.plugins import google_ai
|
||||
|
||||
ai = genkit(
|
||||
plugins=[
|
||||
google_ai.google_ai(api_key=os.environ.get("GOOGLE_API_KEY"))
|
||||
],
|
||||
model="gemini-2.5-flash"
|
||||
)
|
||||
|
||||
@ai.flow
|
||||
async def example_flow(query: str) -> str:
|
||||
"""Example Genkit flow."""
|
||||
response = await ai.generate(
|
||||
model="gemini-2.5-flash",
|
||||
prompt=f"You are a helpful assistant. Respond to: {query}"
|
||||
)
|
||||
return response.text
|
||||
|
||||
if __name__ == "__main__":
|
||||
import asyncio
|
||||
result = asyncio.run(example_flow("Hello, Genkit!"))
|
||||
print(result)
|
||||
```
|
||||
|
||||
### For Go
|
||||
|
||||
```bash
|
||||
# Create project directory
|
||||
mkdir my-genkit-app && cd my-genkit-app
|
||||
|
||||
# Initialize Go module
|
||||
go mod init my-genkit-app
|
||||
|
||||
# Install Genkit
|
||||
go get github.com/firebase/genkit/go/genkit
|
||||
go get github.com/firebase/genkit/go/plugins/googleai
|
||||
```
|
||||
|
||||
Create `main.go`:
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
|
||||
"github.com/firebase/genkit/go/genkit"
|
||||
"github.com/firebase/genkit/go/plugins/googleai"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
// Initialize Genkit with Google AI
|
||||
if err := genkit.Init(ctx, &genkit.Config{
|
||||
Plugins: []genkit.Plugin{
|
||||
googleai.Plugin(&googleai.Config{
|
||||
APIKey: os.Getenv("GOOGLE_API_KEY"),
|
||||
}),
|
||||
},
|
||||
}); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
// Define a flow
|
||||
genkit.DefineFlow("exampleFlow", func(ctx context.Context, query string) (string, error) {
|
||||
response, err := genkit.Generate(ctx, &genkit.GenerateRequest{
|
||||
Model: googleai.Gemini25Flash,
|
||||
Prompt: genkit.Text(fmt.Sprintf("You are a helpful assistant. Respond to: %s", query)),
|
||||
})
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return response.Text(), nil
|
||||
})
|
||||
|
||||
// Start Genkit server
|
||||
if err := genkit.StartFlowServer(ctx, ""); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Step 3: Environment Configuration
|
||||
|
||||
Create `.env` file:
|
||||
```bash
|
||||
# Google API Key (for Google AI plugin)
|
||||
GOOGLE_API_KEY=your_api_key_here
|
||||
|
||||
# Google Cloud Project (for Firebase/Vertex AI)
|
||||
GOOGLE_CLOUD_PROJECT=your-project-id
|
||||
|
||||
# Environment
|
||||
NODE_ENV=development
|
||||
```
|
||||
|
||||
Create `.env.example` (committed to git):
|
||||
```bash
|
||||
GOOGLE_API_KEY=
|
||||
GOOGLE_CLOUD_PROJECT=
|
||||
NODE_ENV=development
|
||||
```
|
||||
|
||||
## Step 4: Project Structure
|
||||
|
||||
Create recommended directory structure:
|
||||
|
||||
```
|
||||
my-genkit-app/
|
||||
├── src/ # Source code
|
||||
│ ├── flows/ # Flow definitions
|
||||
│ ├── tools/ # Tool definitions
|
||||
│ ├── retrievers/ # RAG retrievers
|
||||
│ └── index.ts # Main entry point
|
||||
├── tests/ # Test files
|
||||
├── .env # Environment variables (gitignored)
|
||||
├── .env.example # Example env file (committed)
|
||||
├── .gitignore # Git ignore
|
||||
├── tsconfig.json # TypeScript config (for TS)
|
||||
├── package.json # Dependencies (for Node.js)
|
||||
├── requirements.txt # Dependencies (for Python)
|
||||
├── go.mod # Dependencies (for Go)
|
||||
└── README.md # Project documentation
|
||||
```
|
||||
|
||||
## Step 5: Configure Monitoring (Production)
|
||||
|
||||
For Firebase deployment with AI monitoring:
|
||||
|
||||
```bash
|
||||
# Install Firebase CLI
|
||||
npm install -g firebase-tools
|
||||
|
||||
# Login to Firebase
|
||||
firebase login
|
||||
|
||||
# Initialize Firebase
|
||||
firebase init
|
||||
|
||||
# Select:
|
||||
# - Functions
|
||||
# - Enable AI monitoring (when prompted)
|
||||
```
|
||||
|
||||
Update `firebase.json`:
|
||||
```json
|
||||
{
|
||||
"functions": [
|
||||
{
|
||||
"source": ".",
|
||||
"codebase": "default",
|
||||
"runtime": "nodejs20",
|
||||
"ai": {
|
||||
"monitoring": {
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Step 6: Local Development
|
||||
|
||||
Start Genkit Developer UI:
|
||||
|
||||
```bash
|
||||
# Node.js
|
||||
npm run genkit:dev
|
||||
|
||||
# Python
|
||||
genkit start -- python main.py
|
||||
|
||||
# Go
|
||||
genkit start -- go run .
|
||||
```
|
||||
|
||||
Access UI at: `http://localhost:4000`
|
||||
|
||||
## Step 7: Testing
|
||||
|
||||
Create test file `tests/flows.test.ts`:
|
||||
```typescript
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { exampleFlow } from '../src/index';
|
||||
|
||||
describe('exampleFlow', () => {
|
||||
it('should respond to queries', async () => {
|
||||
const result = await exampleFlow({ query: 'Hello!' });
|
||||
expect(result.response).toBeDefined();
|
||||
expect(result.response.length).toBeGreaterThan(0);
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
## Best Practices Included
|
||||
|
||||
✅ **Environment Variables**: Secure API key management
|
||||
✅ **TypeScript/Type Safety**: Strong typing for reliability
|
||||
✅ **Monitoring**: AI monitoring enabled for production
|
||||
✅ **Project Structure**: Organized codebase
|
||||
✅ **Testing**: Test framework configured
|
||||
✅ **Documentation**: README and code comments
|
||||
✅ **Git**: Proper .gitignore configuration
|
||||
|
||||
## Next Steps
|
||||
|
||||
After initialization:
|
||||
1. Review and customize the example flow
|
||||
2. Add your specific business logic
|
||||
3. Implement additional flows for your use case
|
||||
4. Configure production deployment
|
||||
5. Set up monitoring and alerting
|
||||
6. Test thoroughly before deploying
|
||||
|
||||
## References
|
||||
|
||||
- Genkit Documentation: https://genkit.dev/
|
||||
- Node.js Guide: https://genkit.dev/docs/get-started/
|
||||
- Python Guide: https://firebase.blog/posts/2025/04/genkit-python-go/
|
||||
- Go Guide: https://developers.googleblog.com/en/announcing-genkit-go-10/
|
||||
53
plugin.lock.json
Normal file
53
plugin.lock.json
Normal file
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"$schema": "internal://schemas/plugin.lock.v1.json",
|
||||
"pluginId": "gh:jeremylongshore/claude-code-plugins-plus:plugins/ai-ml/jeremy-genkit-pro",
|
||||
"normalized": {
|
||||
"repo": null,
|
||||
"ref": "refs/tags/v20251128.0",
|
||||
"commit": "f1aedbae85c850289940108e231dc7affa41f7bd",
|
||||
"treeHash": "56059bdcd98544bf8daefc5ed5194d5e9966499398986c7144453458fdca7f99",
|
||||
"generatedAt": "2025-11-28T10:18:53.670434Z",
|
||||
"toolVersion": "publish_plugins.py@0.2.0"
|
||||
},
|
||||
"origin": {
|
||||
"remote": "git@github.com:zhongweili/42plugin-data.git",
|
||||
"branch": "master",
|
||||
"commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390",
|
||||
"repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data"
|
||||
},
|
||||
"manifest": {
|
||||
"name": "jeremy-genkit-pro",
|
||||
"description": "Firebase Genkit expert for production-ready AI workflows with RAG and tool calling",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
"content": {
|
||||
"files": [
|
||||
{
|
||||
"path": "README.md",
|
||||
"sha256": "761d4a1124000608da52a5625ff4f981da8e2a1bb382044499b8e68d9540495e"
|
||||
},
|
||||
{
|
||||
"path": "agents/genkit-flow-architect.md",
|
||||
"sha256": "8980e406a8fd3dca261c295057e06c23238e7d84d1e14b272662f27d38a4334a"
|
||||
},
|
||||
{
|
||||
"path": ".claude-plugin/plugin.json",
|
||||
"sha256": "7f907c3619ae9732f14c1eb657892a995db3274f554353b493991531ed938190"
|
||||
},
|
||||
{
|
||||
"path": "commands/init-genkit-project.md",
|
||||
"sha256": "88ce70f5815cf5f53b8aefdf1a7c6ffea3b26cb0bb78946bf1284071a8877c56"
|
||||
},
|
||||
{
|
||||
"path": "skills/genkit-production-expert/SKILL.md",
|
||||
"sha256": "9adb23fc171e37b8cb0e329a5ef61cf25d5f56f08893c60b99a439167cb46a7a"
|
||||
}
|
||||
],
|
||||
"dirSha256": "56059bdcd98544bf8daefc5ed5194d5e9966499398986c7144453458fdca7f99"
|
||||
},
|
||||
"security": {
|
||||
"scannedAt": null,
|
||||
"scannerVersion": null,
|
||||
"flags": []
|
||||
}
|
||||
}
|
||||
308
skills/genkit-production-expert/SKILL.md
Normal file
308
skills/genkit-production-expert/SKILL.md
Normal file
@@ -0,0 +1,308 @@
|
||||
---
|
||||
name: genkit-production-expert
|
||||
description: |
|
||||
Automatically activates when building Firebase Genkit applications for production AI workflows.
|
||||
Expertise in RAG systems, multi-step flows, tool calling, and deployment across Node.js/Python/Go.
|
||||
Triggers: "create genkit flow", "implement RAG", "deploy genkit", "gemini integration", "ai monitoring"
|
||||
allowed-tools: Read, Write, Edit, Grep, Glob, Bash
|
||||
version: 1.0.0
|
||||
---
|
||||
|
||||
## What This Skill Does
|
||||
|
||||
This skill provides comprehensive expertise in building production-ready Firebase Genkit applications across Node.js (1.0), Python (Alpha), and Go (1.0). It handles the complete lifecycle from initialization to deployment with AI monitoring.
|
||||
|
||||
### Core Capabilities
|
||||
|
||||
1. **Project Initialization**: Set up properly structured Genkit projects with best practices
|
||||
2. **Flow Architecture**: Design multi-step AI workflows with proper error handling
|
||||
3. **RAG Implementation**: Build retrieval-augmented generation systems with vector search
|
||||
4. **Tool Integration**: Implement function calling and custom tools
|
||||
5. **Monitoring Setup**: Configure AI monitoring for Firebase Console
|
||||
6. **Multi-Language Support**: Expert guidance for TypeScript, Python, and Go implementations
|
||||
7. **Production Deployment**: Deploy to Firebase Functions or Google Cloud Run
|
||||
|
||||
## When This Skill Activates
|
||||
|
||||
This skill automatically activates when you mention:
|
||||
|
||||
### Trigger Phrases
|
||||
- "Create a Genkit flow"
|
||||
- "Implement RAG with Genkit"
|
||||
- "Deploy Genkit to Firebase"
|
||||
- "Set up Gemini integration"
|
||||
- "Configure AI monitoring"
|
||||
- "Build Genkit application"
|
||||
- "Design AI workflow"
|
||||
- "Genkit tool calling"
|
||||
- "Vector search with Genkit"
|
||||
- "Genkit production deployment"
|
||||
|
||||
### Use Case Patterns
|
||||
- Setting up new Genkit projects
|
||||
- Implementing RAG systems with embedding models
|
||||
- Integrating Gemini 2.5 Pro/Flash models
|
||||
- Creating multi-step AI workflows
|
||||
- Deploying to production with monitoring
|
||||
- Debugging Genkit flows
|
||||
- Optimizing token usage and costs
|
||||
|
||||
## How It Works
|
||||
|
||||
### Phase 1: Requirements Analysis
|
||||
```
|
||||
User Request → Analyze needs → Determine:
|
||||
- Target language (Node.js/Python/Go)
|
||||
- Flow complexity (simple/multi-step/RAG)
|
||||
- Model requirements (Gemini version, custom models)
|
||||
- Deployment target (Firebase/Cloud Run/local)
|
||||
```
|
||||
|
||||
### Phase 2: Project Setup
|
||||
```
|
||||
Check existing project → If new:
|
||||
- Initialize project structure
|
||||
- Install dependencies
|
||||
- Configure environment variables
|
||||
- Set up TypeScript/Python/Go config
|
||||
|
||||
If existing:
|
||||
- Analyze current structure
|
||||
- Identify integration points
|
||||
- Preserve existing code
|
||||
```
|
||||
|
||||
### Phase 3: Implementation
|
||||
```
|
||||
Design flow architecture → Implement:
|
||||
- Input/output schemas (Zod/Pydantic/Go structs)
|
||||
- Model configuration
|
||||
- Tool definitions (if needed)
|
||||
- Retriever setup (for RAG)
|
||||
- Error handling
|
||||
- Tracing configuration
|
||||
```
|
||||
|
||||
### Phase 4: Testing & Validation
|
||||
```
|
||||
Create test cases → Run locally:
|
||||
- Genkit Developer UI
|
||||
- Unit tests
|
||||
- Integration tests
|
||||
- Token usage analysis
|
||||
```
|
||||
|
||||
### Phase 5: Production Deployment
|
||||
```
|
||||
Configure deployment → Deploy:
|
||||
- Firebase Functions (with AI monitoring)
|
||||
- Cloud Run (with auto-scaling)
|
||||
- Set up monitoring dashboards
|
||||
- Configure alerting
|
||||
```
|
||||
|
||||
## Workflow Examples
|
||||
|
||||
### Example 1: Simple Question-Answering Flow
|
||||
|
||||
**User Request**: "Create a Genkit flow that answers user questions using Gemini 2.5 Flash"
|
||||
|
||||
**Skill Response**:
|
||||
1. Creates TypeScript project (default)
|
||||
2. Implements flow with input validation:
|
||||
```typescript
|
||||
const qaFlow = ai.defineFlow(
|
||||
{
|
||||
name: 'qaFlow',
|
||||
inputSchema: z.object({ question: z.string() }),
|
||||
outputSchema: z.object({ answer: z.string() }),
|
||||
},
|
||||
async (input) => {
|
||||
const { text } = await ai.generate({
|
||||
model: gemini25Flash,
|
||||
prompt: `Answer this question: ${input.question}`,
|
||||
config: { temperature: 0.3 }, // Lower for factual answers
|
||||
});
|
||||
return { answer: text };
|
||||
}
|
||||
);
|
||||
```
|
||||
3. Sets up local testing
|
||||
4. Provides deployment instructions
|
||||
|
||||
### Example 2: RAG System with Vector Search
|
||||
|
||||
**User Request**: "Implement RAG with Genkit for our documentation search"
|
||||
|
||||
**Skill Response**:
|
||||
1. Analyzes document storage needs
|
||||
2. Implements retriever with embeddings:
|
||||
```typescript
|
||||
const docRetriever = ai.defineRetriever(
|
||||
{
|
||||
name: 'docRetriever',
|
||||
configSchema: z.object({ k: z.number().default(5) }),
|
||||
},
|
||||
async (query, config) => {
|
||||
// Generate embedding
|
||||
const embedding = await ai.embed({
|
||||
embedder: textEmbeddingGecko,
|
||||
content: query,
|
||||
});
|
||||
|
||||
// Search vector database
|
||||
const results = await vectorDB.search(embedding, config.k);
|
||||
return results.map(doc => ({
|
||||
content: doc.text,
|
||||
metadata: { source: doc.source },
|
||||
}));
|
||||
}
|
||||
);
|
||||
```
|
||||
3. Creates RAG flow combining retrieval + generation
|
||||
4. Sets up vector database connection
|
||||
5. Implements caching for efficiency
|
||||
|
||||
### Example 3: Multi-Agent Tool Calling
|
||||
|
||||
**User Request**: "Create a Genkit agent with weather and calendar tools"
|
||||
|
||||
**Skill Response**:
|
||||
1. Defines tools with proper schemas:
|
||||
```typescript
|
||||
const weatherTool = ai.defineTool({
|
||||
name: 'getWeather',
|
||||
description: 'Get current weather for a location',
|
||||
inputSchema: z.object({ location: z.string() }),
|
||||
outputSchema: z.object({
|
||||
temp: z.number(),
|
||||
conditions: z.string(),
|
||||
}),
|
||||
}, async ({ location }) => {
|
||||
// Call weather API
|
||||
});
|
||||
|
||||
const calendarTool = ai.defineTool({
|
||||
name: 'checkCalendar',
|
||||
description: 'Check calendar availability',
|
||||
inputSchema: z.object({ date: z.string() }),
|
||||
outputSchema: z.object({ available: z.boolean() }),
|
||||
}, async ({ date }) => {
|
||||
// Check calendar API
|
||||
});
|
||||
```
|
||||
2. Creates agent flow with tool access:
|
||||
```typescript
|
||||
const agentFlow = ai.defineFlow(async (userQuery) => {
|
||||
const { text } = await ai.generate({
|
||||
model: gemini25Flash,
|
||||
prompt: userQuery,
|
||||
tools: [weatherTool, calendarTool],
|
||||
});
|
||||
return text;
|
||||
});
|
||||
```
|
||||
3. Implements proper error handling
|
||||
4. Sets up tool execution tracing
|
||||
|
||||
## Production Best Practices Applied
|
||||
|
||||
### 1. Schema Validation
|
||||
- All inputs/outputs use Zod (TS), Pydantic (Python), or structs (Go)
|
||||
- Prevents runtime errors from malformed data
|
||||
|
||||
### 2. Error Handling
|
||||
```typescript
|
||||
try {
|
||||
const result = await ai.generate({...});
|
||||
return result;
|
||||
} catch (error) {
|
||||
if (error.code === 'SAFETY_BLOCK') {
|
||||
// Handle safety filters
|
||||
} else if (error.code === 'QUOTA_EXCEEDED') {
|
||||
// Handle rate limits
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
```
|
||||
|
||||
### 3. Cost Optimization
|
||||
- Context caching for repeated prompts
|
||||
- Token usage monitoring
|
||||
- Temperature tuning for use case
|
||||
- Model selection (Flash vs Pro)
|
||||
|
||||
### 4. Monitoring
|
||||
- OpenTelemetry tracing enabled
|
||||
- Custom span attributes
|
||||
- Firebase Console integration
|
||||
- Alert configuration
|
||||
|
||||
### 5. Security
|
||||
- Environment variable management
|
||||
- API key rotation support
|
||||
- Input sanitization
|
||||
- Output filtering
|
||||
|
||||
## Integration with Other Tools
|
||||
|
||||
### Works With ADK Plugin
|
||||
When complex multi-agent orchestration is needed:
|
||||
- Use Genkit for individual specialized flows
|
||||
- Use ADK for orchestrating multiple Genkit flows
|
||||
- Pass results via A2A protocol
|
||||
|
||||
### Works With Vertex AI Validator
|
||||
For production deployment:
|
||||
- Genkit implements the flows
|
||||
- Validator ensures production readiness
|
||||
- Validates monitoring configuration
|
||||
- Checks security compliance
|
||||
|
||||
## Tool Permissions
|
||||
|
||||
This skill uses the following tools:
|
||||
- **Read**: Analyze existing code and configuration
|
||||
- **Write**: Create new flow files and configs
|
||||
- **Edit**: Modify existing Genkit implementations
|
||||
- **Grep**: Search for integration points
|
||||
- **Glob**: Find related files
|
||||
- **Bash**: Install dependencies, run tests, deploy
|
||||
|
||||
## Troubleshooting Guide
|
||||
|
||||
### Common Issue 1: API Key Not Found
|
||||
**Symptoms**: Error "API key not provided"
|
||||
**Solution**:
|
||||
1. Check `.env` file exists
|
||||
2. Verify `GOOGLE_API_KEY` is set
|
||||
3. Ensure `dotenv` is loaded
|
||||
|
||||
### Common Issue 2: Flow Not Appearing in UI
|
||||
**Symptoms**: Flow not visible in Genkit Developer UI
|
||||
**Solution**:
|
||||
1. Ensure flow is exported
|
||||
2. Restart Genkit server
|
||||
3. Check console for errors
|
||||
|
||||
### Common Issue 3: High Token Usage
|
||||
**Symptoms**: Unexpected costs
|
||||
**Solution**:
|
||||
1. Implement context caching
|
||||
2. Use Gemini 2.5 Flash instead of Pro
|
||||
3. Lower temperature
|
||||
4. Compress prompts
|
||||
|
||||
## Version History
|
||||
|
||||
- **1.0.0** (2025): Initial release with Node.js 1.0, Python Alpha, Go 1.0 support
|
||||
- Supports Gemini 2.5 Pro/Flash
|
||||
- AI monitoring integration
|
||||
- Production deployment patterns
|
||||
|
||||
## References
|
||||
|
||||
- Official Docs: https://genkit.dev/
|
||||
- Node.js 1.0 Announcement: https://firebase.blog/posts/2025/02/announcing-genkit/
|
||||
- Go 1.0 Announcement: https://developers.googleblog.com/en/announcing-genkit-go-10/
|
||||
- Vertex AI Plugin: https://genkit.dev/docs/integrations/vertex-ai/
|
||||
Reference in New Issue
Block a user