1+ import ai.koog.agents.core.agent.AIAgent
2+ import ai.koog.agents.core.tools.ToolRegistry
3+ import ai.koog.agents.core.tools.reflect.asTools
4+ import ai.koog.agents.features.eventHandler.feature.handleEvents
5+ import ai.koog.agents.mcp.McpToolRegistryProvider
6+ import ai.koog.prompt.executor.clients.google.GoogleModels
7+ import ai.koog.prompt.executor.clients.openai.OpenAIModels
8+ import ai.koog.prompt.executor.llms.all.simpleGoogleAIExecutor
9+ import ai.koog.prompt.executor.llms.all.simpleOpenAIExecutor
10+ import kotlin.uuid.ExperimentalUuidApi
11+ import kotlin.uuid.Uuid
12+
13+ val openAIApiKey = " "
14+ val apiKeyGoogle = " "
15+
16+
17+
18+ @OptIn(ExperimentalUuidApi ::class )
19+ suspend fun runKoogAgent () {
20+ val agent = AIAgent (
21+ executor = simpleOpenAIExecutor(openAIApiKey),
22+ // executor = simpleGoogleAIExecutor(apiKeyGoogle),
23+ llmModel = OpenAIModels .Chat .GPT4o ,
24+ // llmModel = GoogleModels.Gemini1_5Pro,
25+ toolRegistry = createToolSetRegistry()
26+ ) {
27+ handleEvents {
28+ onToolCall { tool: ai.koog.agents.core.tools.Tool <* , * >, toolArgs: ai.koog.agents.core.tools.Tool .Args ->
29+ println (" Tool called: tool ${tool.name} , args $toolArgs " )
30+ }
31+
32+ onAgentRunError { strategyName: String , sessionUuid: Uuid ? , throwable: Throwable ->
33+ println (" An error occurred: ${throwable.message} \n ${throwable.stackTraceToString()} " )
34+ }
35+
36+ onAgentFinished { strategyName, result ->
37+ println (" Agent (strategy = $strategyName ) finished with result: $result " )
38+ }
39+ }
40+ }
41+
42+ agent.run (
43+ """
44+ Get emission data for France, Germany for 2023 and 2024.
45+ Use units of millions for the emissions data.
46+ Also get best estimate of population for each country and show per-capita emissions.
47+ """ .trimIndent()
48+ )
49+ }
50+
51+
52+ suspend fun createToolSetRegistry (): ToolRegistry {
53+ val processClimateTrace = ProcessBuilder (" java" , " -jar" ,
54+ " ./mcp-server/build/libs/serverAll.jar" , " --stdio"
55+ ).start()
56+ val transportClimateTrace = McpToolRegistryProvider .defaultStdioTransport(processClimateTrace)
57+ val toolRegistryClimateTrace = McpToolRegistryProvider .fromTransport(transportClimateTrace)
58+
59+ val localToolSetRegistry = ToolRegistry { tools(ClimateTraceTool ().asTools()) }
60+
61+ // Can use either local toolset or one based on MCP server
62+ // return toolRegistryClimateTrace
63+ return localToolSetRegistry
64+ }
0 commit comments