Documentation Index
Fetch the complete documentation index at: https://mintlify.com/composiohq/composio/llms.txt
Use this file to discover all available pages before exploring further.
The Vercel provider wraps Composio tools for use with the Vercel AI SDK.
Installation
npm install @composio/vercel ai @ai-sdk/openai
Quick Start
import { Composio } from '@composio/core';
import { VercelProvider } from '@composio/vercel';
import { generateText } from 'ai';
import { openai } from '@ai-sdk/openai';
const composio = new Composio({
apiKey: 'your-composio-key',
provider: new VercelProvider()
});
const tools = await composio.tools.get('default', {
toolkits: ['github']
});
const result = await generateText({
model: openai('gpt-4'),
tools,
prompt: 'Create a GitHub issue titled "Bug Report"'
});
console.log(result.text);
Streaming
import { streamText } from 'ai';
const result = streamText({
model: openai('gpt-4'),
tools,
prompt: 'Create a GitHub issue'
});
for await (const chunk of result.textStream) {
process.stdout.write(chunk);
}
Next.js API Route
// app/api/chat/route.ts
import { Composio } from '@composio/core';
import { VercelProvider } from '@composio/vercel';
import { streamText } from 'ai';
import { openai } from '@ai-sdk/openai';
const composio = new Composio({
apiKey: process.env.COMPOSIO_API_KEY!,
provider: new VercelProvider()
});
export async function POST(req: Request) {
const { messages } = await req.json();
const tools = await composio.tools.get('default', {
toolkits: ['github']
});
const result = streamText({
model: openai('gpt-4'),
tools,
messages
});
return result.toDataStreamResponse();
}
Client Component
// app/page.tsx
'use client';
import { useChat } from 'ai/react';
export default function Chat() {
const { messages, input, handleInputChange, handleSubmit } = useChat();
return (
<div>
{messages.map(m => (
<div key={m.id}>
<strong>{m.role}:</strong> {m.content}
</div>
))}
<form onSubmit={handleSubmit}>
<input
value={input}
onChange={handleInputChange}
placeholder="Ask me to create a GitHub issue..."
/>
<button type="submit">Send</button>
</form>
</div>
);
}
Strict Mode
Enable strict mode to remove non-required properties:
const composio = new Composio({
apiKey: 'your-key',
provider: new VercelProvider({ strict: true })
});
import { generateText } from 'ai';
const result = await generateText({
model: openai('gpt-4'),
tools,
prompt: 'Create a GitHub issue'
});
// Access tool calls and results
console.log(result.toolCalls);
console.log(result.toolResults);
The Vercel provider wraps tools in this format:
import { tool } from 'ai';
// Each tool is wrapped as:
const githubTool = tool({
description: 'Create a new GitHub issue',
inputSchema: zodSchema,
execute: async (params) => {
return await composio.tools.execute(...);
}
});
// Tools are organized in a ToolSet
type VercelToolCollection = {
[slug: string]: VercelTool;
};
Best Practices
- Streaming: Use streamText for better UX
- Error Handling: Handle tool execution errors
- Type Safety: Use TypeScript for type safety
- Next.js Integration: Use API routes for server-side execution
- Client Hooks: Use useChat for React components
TypeScript Types
import type { ToolSet, Tool } from 'ai';
// Tool collection
type VercelToolCollection = ToolSet;
// Single tool
type VercelTool = Tool;
Next Steps
OpenAI Provider
Use with OpenAI directly
Tools API
Learn about tools
Connected Accounts
Set up authentication