An Open-Source clone of Open AI's Deep Research experiment. Instead of using a fine-tuned version of o3, this method uses Firecrawl's extract + search with a reasoning model to deep research the web.
Check out the demo here

This template ships with OpenAI gpt-4o as the default. However, with the AI SDK, you can switch LLM providers to OpenAI, Anthropic, Cohere, and many more with just a few lines of code.
This repo is compatible with OpenRouter and OpenAI. To use OpenRouter, you need to set the OPENROUTER_API_KEY environment variable.
By default, the function timeout is set to 300 seconds (5 minutes). If you're using Vercel's Hobby tier, you'll need to reduce this to 60 seconds. You can adjust this by changing the MAX_DURATION environment variable in your .env file:
MAX_DURATION=60
Learn more about it here
You can deploy your own version of the Next.js AI Chatbot to Vercel with one click:
You will need to use the environment variables defined in .env.example to run Next.js AI Chatbot. It's recommended you use Vercel Environment Variables for this, but a .env file is all that is necessary.
Note: You should not commit your
.envfile or it will expose secrets that will allow others to control access to your various OpenAI and authentication provider accounts.
npm i -g vercel.vercel directory): vercel linkvercel env pullpnpm install
pnpm db:migrate
pnpm dev
Your app template should now be running on localhost:3000.
If you want to use a model other than the default, you will need to install the dependencies for that model.
TogetherAI's Deepseek:
pnpm add @ai-sdk/togetherai
Note: Maximum rate limit https://docs.together.ai/docs/rate-limits
The application uses a separate model for reasoning tasks (like research analysis and structured outputs). This can be configured using the REASONING_MODEL environment variable.
| Provider | Models | Notes |
|---|---|---|
| OpenAI | gpt-4o, o1, o3-mini |
Native JSON schema support |
| TogetherAI | deepseek-ai/DeepSeek-R1 |
Requires BYPASS_JSON_VALIDATION=true |
BYPASS_JSON_VALIDATION=true in your .env fileREASONING_MODEL is specified, it defaults to o1-minio1-miniAdd to your .env file:
# Choose one of: deepseek-reasoner, deepseek-ai/DeepSeek-R1
REASONING_MODEL=deepseek-ai/DeepSeek-R1
# Required when using models that don't support JSON schema (like deepseek-reasoner)
BYPASS_JSON_VALIDATION=true
The reasoning model is automatically used when the application needs structured outputs or complex analysis, regardless of which model the user has selected for general chat.
$ claude mcp add open-deep-research \
-- python -m otcore.mcp_server <graph>