Deploy AI chat agents as serverless Vercel Edge Functions. These examples show how to run an elizaOS agent as a stateless worker that processes chat messages via HTTP.
All handlers use the full elizaOS runtime with OpenAI as the LLM provider, providing the same capabilities as the AWS Lambda examples.
┌──────────────┐ ┌─────────────────┐ ┌────────────────┐
│ Test Client │────▶│ Vercel Edge │────▶│ Edge Function │
│ (curl/bun) │◀────│ Network │◀────│ (elizaOS) │
└──────────────┘ └─────────────────┘ └────────────────┘
│
▼
┌────────────────┐
│ OpenAI API │
└────────────────┘
- Vercel CLI (
npm i -g vercel) - Bun or Node.js 20+
- OpenAI API key
Create a .env file in the project root (/home/shaw/eliza/.env):
OPENAI_API_KEY=your-openai-api-keyOr export directly:
export OPENAI_API_KEY="your-openai-api-key"Before deploying, test locally to verify everything works.
cd packages/examples/vercel
bun install
vercel devThe development server runs at http://localhost:3000.
# Test the local dev server
bun run test# Health check
curl http://localhost:3000/api/health
# Chat
curl -X POST http://localhost:3000/api/chat \
-H "Content-Type: application/json" \
-d '{"message": "Hello, Eliza!"}'# Link to your Vercel account
vercel link
# Set your OpenAI API key as an environment variable
vercel env add OPENAI_API_KEY
# When prompted, enter your API key# Preview deployment
vercel deploy
# Production deployment
vercel deploy --prodAfter deployment, Vercel outputs your deployment URL. Test it:
# Using curl
curl -X POST https://your-app.vercel.app/api/chat \
-H "Content-Type: application/json" \
-d '{"message": "Hello, Eliza!"}'
# Using the test client
bun run test-client.ts --endpoint https://your-app.vercel.appexamples/vercel/
├── README.md
├── vercel.json
├── package.json
├── tsconfig.json
├── test-client.ts
└── api/
├── health.ts
└── chat.ts
Send a message to the elizaOS agent.
Request:
{
"message": "Hello, how are you?",
"userId": "optional-user-id",
"conversationId": "optional-conversation-id"
}Response:
{
"response": "I'm doing well, thank you for asking!",
"conversationId": "uuid-for-conversation-tracking",
"timestamp": "2025-01-10T12:00:00.000Z"
}Health check endpoint.
Response:
{
"status": "healthy",
"runtime": "elizaos-typescript",
"version": "2.0.0-beta.0"
}Handlers live under api/ as Vercel Edge routes. Local workflow:
cd packages/examples/vercel
bun install
vercel dev| Variable | Required | Default | Description |
|---|---|---|---|
OPENAI_API_KEY |
Yes | - | Your OpenAI API key |
OPENAI_SMALL_MODEL |
No | gpt-5-mini |
Small model to use |
OPENAI_LARGE_MODEL |
No | gpt-5 |
Large model to use |
CHARACTER_NAME |
No | Eliza |
Agent's name |
CHARACTER_BIO |
No | A helpful AI assistant. |
Agent's bio |
CHARACTER_SYSTEM |
No | (default) | System prompt |
Customize the agent's personality by setting environment variables in the Vercel dashboard or CLI:
vercel env add CHARACTER_NAME
# Enter: MyBot
vercel env add CHARACTER_SYSTEM
# Enter: You are a friendly assistant that loves to help.| Feature | Vercel Edge | AWS Lambda |
|---|---|---|
| Cold start | ~50ms | 2-5s |
| Global distribution | Automatic | Via CloudFront |
| Pricing | Per invocation | Per invocation + duration |
| Max execution time | 30s (Edge) | 15 min |
| Memory | 128MB (Edge) | Up to 10GB |
| Languages | JS/TS, WASM | Many |
- Cold starts: Edge Functions have minimal cold starts (~50ms)
- Global distribution: Automatically deployed to all Vercel edge locations
- Streaming: Supports streaming responses for real-time output
- Cold starts: Slightly longer than Edge (~200-500ms)
- Memory: More memory available (up to 1GB)
- Duration: Longer execution time allowed (60s)
View logs, metrics, and analytics in the Vercel dashboard:
- Go to your project at https://vercel.com
- Click on "Functions" tab
- View real-time logs and invocation metrics
# View production logs
vercel logs --output raw
# Follow logs in real-time
vercel logs -fVercel pricing (as of 2025):
Hobby (Free):
- 100GB bandwidth/month
- 100 hours function execution/month
- Serverless functions only
Pro ($20/month):
- 1TB bandwidth/month
- 1000 hours function execution/month
- Edge functions included
Example (10K requests/month, avg 2s response):
- Function hours: 10,000 × 2s = ~5.5 hours
- Well within free tier
Ensure dependencies are installed:
bun install-
Verify the environment variable is set in Vercel:
vercel env ls
-
If missing, add it:
vercel env add OPENAI_API_KEY
-
Redeploy:
vercel deploy --prod
Edge Functions have a 30-second limit. For longer operations:
- Use Serverless Functions (60s limit)
- Implement streaming responses
- Consider background jobs with Vercel Cron
CORS headers are included by default. If you need custom origins:
const headers = {
"Access-Control-Allow-Origin": "https://your-domain.com",
// ... other headers
};Remove your Vercel deployment:
# Remove from Vercel
vercel remove your-project-name
# Or delete via dashboard at vercel.com