import { Composio } from '@composio/core';
import { GoogleProvider } from '@composio/google';
import { GoogleGenerativeAI } from '@google/genai';
const composio = new Composio({
apiKey: process.env.COMPOSIO_API_KEY!,
provider: new GoogleProvider()
});
const genAI = new GoogleGenerativeAI(process.env.GOOGLE_API_KEY!);
async function runAgent(userMessage: string) {
const tools = await composio.tools.get('default', {
toolkits: ['github']
});
const model = genAI.getGenerativeModel({ model: 'gemini-pro' });
const chat = model.startChat({
tools: [{ functionDeclarations: tools }]
});
let result = await chat.sendMessage(userMessage);
const provider = new GoogleProvider();
while (result.response.candidates?.[0].content.parts.some(
part => 'functionCall' in part
)) {
const parts = result.response.candidates[0].content.parts;
for (const part of parts) {
if ('functionCall' in part) {
const toolResult = await provider.executeToolCall(
'default',
{
name: part.functionCall.name,
args: part.functionCall.args
}
);
result = await chat.sendMessage([
{
functionResponse: {
name: part.functionCall.name,
response: JSON.parse(toolResult)
}
}
]);
}
}
}
return result.response.text();
}
const answer = await runAgent('Create a GitHub issue');
console.log(answer);