import { Composio } from '@composio/core';
import { AnthropicProvider } from '@composio/anthropic';
import Anthropic from '@anthropic-ai/sdk';
const composio = new Composio({
apiKey: process.env.COMPOSIO_API_KEY!,
provider: new AnthropicProvider()
});
const anthropic = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY!
});
async function runAgent(userMessage: string) {
const tools = await composio.tools.get('default', {
toolkits: ['github']
});
const messages: Anthropic.Messages.MessageParam[] = [
{ role: 'user', content: userMessage }
];
let response = await anthropic.messages.create({
model: 'claude-3-opus-20240229',
max_tokens: 4096,
tools,
messages
});
const provider = new AnthropicProvider();
while (response.stop_reason === 'tool_use') {
// Handle tool calls
const toolResults = await provider.handleToolCalls(
'default',
response
);
// Add tool results to conversation
messages.push(
{ role: 'assistant', content: response.content },
...toolResults
);
// Get next response
response = await anthropic.messages.create({
model: 'claude-3-opus-20240229',
max_tokens: 4096,
tools,
messages
});
}
// Extract final text response
const textContent = response.content.find(
block => block.type === 'text'
);
return textContent?.type === 'text' ? textContent.text : '';
}
const result = await runAgent('Create an issue in my repo');
console.log(result);