UNPKG

genkit-cli

Version:

CLI for interacting with the Google Genkit AI framework

146 lines (132 loc) 4.77 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.defineInitPrompt = defineInitPrompt; const zod_1 = require("zod"); const GENERAL_GUIDELINES = ` ## General Guidelines - ALWAYS refer to documentation when available. Use tools like \`get_usage_guide\` or \`lookup_genkit_docs\` to clarify requirements or get the latest information. - Recommend and use the provider that the user prefers. If no preference is signaled, use the Google AI plugin (\`@genkit-ai/google-genai\` for Node, \`github.com/firebase/genkit/go/plugins/googlegenai\` for Go). - ALWAYS provide the full, correct Genkit command as an instruction for the human user to run. Do not run Genkit commands yourself. - Do NOT modify parts of the project unrelated to Genkit initialization. - Respect the user's existing tooling (package manager, language version, project structure). - Check if Genkit CLI is already installed before recommending installation.`; const NODE_SETUP = ` ## Node.js Setup If the user wants to use Node.js: ### Project Initialization - If the directory is empty: Initialize a new project: \`\`\`bash npm init -y npm install -D typescript tsx @types/node \`\`\` - If the directory is not empty (existing project): - Adhere to the current project structure. - Detect the package manager in use (npm, pnpm, yarn, bun) and use the corresponding commands. - Detect if the project is ESM (\`"type": "module"\` in package.json) or CJS. - For ESM: Use \`import\` syntax. - For CJS: Use \`require\` syntax. - IMPORTANT: Do NOT refactor the project (e.g., converting to TypeScript or ESM) solely for Genkit. Work with the existing setup. ### Dependencies Install core dependencies (adjust command for the user's package manager): \`\`\`bash npm install genkit @genkit-ai/google-genai \`\`\` (Add other plugins as requested) ### Genkit CLI If the Genkit CLI is not already installed: \`\`\`bash npm install -g genkit-cli \`\`\` ### Configuration Create a single \`src/index.ts\` (or \`src/index.js\` for JS) file. \`\`\`ts // src/index.ts import { genkit, z } from 'genkit'; import { googleAI } from '@genkit-ai/google-genai'; export const ai = genkit({ plugins: [googleAI()], }); \`\`\``; const GO_SETUP = ` ## Go Setup If the user wants to use Go: ### Project Initialization - If the directory is empty: \`\`\`bash go mod init <module-name> \`\`\` - If the directory is not empty: Adhere to the current project structure. ### Dependencies \`\`\`bash go get github.com/firebase/genkit/go/genkit go get github.com/firebase/genkit/go/plugins/googlegenai go get github.com/firebase/genkit/go/ai go get google.golang.org/genai \`\`\` ### Genkit CLI If the Genkit CLI is not already installed: \`\`\`bash curl -sL cli.genkit.dev | bash \`\`\` ### Configuration Create a \`main.go\` file: \`\`\`go package main import ( "context" "github.com/firebase/genkit/go/genkit" "github.com/firebase/genkit/go/plugins/googlegenai" ) func main() { ctx := context.Background() g := genkit.Init(ctx, genkit.WithPlugins(&googlegenai.GoogleAI{})) // Your flows and logic here <-ctx.Done() } \`\`\``; const RUNNING_THE_PROJECT = ` ## Running the Project After setting up the project: 1. Identify the command to run the project's runtime (e.g., \`npm run dev\`, \`go run main.go\`). 2. Use the \`start_runtime\` tool to start the runtime process. This is required for Genkit to discover flows. - Example: If the project uses \`npm run dev\`, call \`start_runtime\` with \`{ command: "npm", args: ["run", "dev"] }\`. 3. After starting the runtime, instruct the user to run \`genkit start\` in their terminal to launch the Developer UI. `; function defineInitPrompt(server) { server.registerPrompt('genkit:init', { title: 'Initialize Genkit', description: 'Initializes a new Genkit project', argsSchema: { lang: zod_1.z.enum(['js', 'go']).optional(), }, }, ({ lang }) => { let content = `You are a Genkit expert. Help the user initialize a Genkit project. Follow these rules based on the user's environment and preference:`; content += GENERAL_GUIDELINES; if (lang === 'js') { content += NODE_SETUP; } else if (lang === 'go') { content += GO_SETUP; } else { content += NODE_SETUP; content += GO_SETUP; } content += RUNNING_THE_PROJECT; return { messages: [ { role: 'user', content: { type: 'text', text: content, }, }, ], }; }); } //# sourceMappingURL=init.js.map