diff --git a/.env.example b/.env.example index 11c83e1..2d1d610 100644 --- a/.env.example +++ b/.env.example @@ -1,6 +1,8 @@ -# OpenAI API Configuration -OPENAI_API_KEY=your_openai_api_key_here +# AI Model Configuration +MODEL_PROVIDER=openai # Options: 'openai' or 'groq' +OPENAI_API_KEY= # Required if MODEL_PROVIDER=openai +GROQ_API_KEY= # Required if MODEL_PROVIDER=groq # Browserbase Configuration -BROWSERBASE_API_KEY=your_browserbase_api_key_here -BROWSERBASE_PROJECT_ID=your_browserbase_project_id_here +BROWSERBASE_API_KEY= +BROWSERBASE_PROJECT_ID= diff --git a/README.md b/README.md index 104e7a6..363783e 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,9 @@ You'll need to set up your API keys: Update `.env.local` with your API keys: -- `OPENAI_API_KEY`: Your OpenAI API key +- `MODEL_PROVIDER`: Choose between 'openai' or 'groq' for the AI model provider +- `OPENAI_API_KEY`: Your OpenAI API key (required if using OpenAI) +- `GROQ_API_KEY`: Your Groq API key (required if using Groq) - `BROWSERBASE_API_KEY`: Your Browserbase API key - `BROWSERBASE_PROJECT_ID`: Your Browserbase project ID diff --git a/app/api/agent/route.ts b/app/api/agent/route.ts index 0cffea9..5c29b23 100644 --- a/app/api/agent/route.ts +++ b/app/api/agent/route.ts @@ -1,10 +1,27 @@ import { NextResponse } from 'next/server'; import { openai } from "@ai-sdk/openai"; +import { groq } from "@ai-sdk/groq"; import { CoreMessage, generateObject, UserContent } from "ai"; import { z } from "zod"; import { ObserveResult, Stagehand } from "@browserbasehq/stagehand"; -const LLMClient = openai("gpt-4o"); +// Model configuration +const MODEL_PROVIDER = process.env.MODEL_PROVIDER || 'openai'; +const MODEL_CONFIG = { + openai: { + provider: openai, + model: "gpt-4o" + }, + groq: { + provider: groq, + model: "deepseek-r1-distill-llama-70b" + } +}; + +// Initialize LLM client based on provider +const LLMClient = MODEL_CONFIG[MODEL_PROVIDER as keyof typeof MODEL_CONFIG].provider( + MODEL_CONFIG[MODEL_PROVIDER as keyof typeof MODEL_CONFIG].model +); type Step = { text: string; diff --git a/package.json b/package.json index 4bae643..c74e3cd 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ }, "dependencies": { "@ai-sdk/openai": "^1.1.2", + "@ai-sdk/groq": "^1.0.0", "@ai-sdk/provider": "^1.0.6", "@browserbasehq/sdk": "^2.0.0", "@browserbasehq/stagehand": "^1.10.1", diff --git a/types/env.d.ts b/types/env.d.ts new file mode 100644 index 0000000..4c75294 --- /dev/null +++ b/types/env.d.ts @@ -0,0 +1,13 @@ +declare global { + namespace NodeJS { + interface ProcessEnv { + MODEL_PROVIDER: 'openai' | 'groq'; + OPENAI_API_KEY?: string; + GROQ_API_KEY?: string; + BROWSERBASE_API_KEY: string; + BROWSERBASE_PROJECT_ID: string; + } + } +} + +export {}; \ No newline at end of file