'use strict'; /** * Example: Weather lookup * * Demonstrates basic tool-calling with llmorbiter. * The LLM is given a weather tool and asked about the weather in a city. * * Usage: * OPENROUTER_API_KEY=sk-or-... node examples/weather.js * node examples/weather.js --key sk-or-... --city Tokyo */ import path from 'path'; import { fileURLToPath } from 'url'; import dotenv from 'dotenv'; import { LLMOrbiter, OpenRouterProvider } from '../src/index.js'; import { weatherTool } from './tools/weather.js'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); dotenv.config({ path: path.resolve(__dirname, '.env'), quiet: true }); const args = process.argv.slice(2); function getArg(flag) { const idx = args.indexOf(flag); return idx !== -1 && args[idx + 1] ? args[idx + 1] : null; } const apiKey = getArg('--key') || process.env.OPENROUTER_API_KEY; const model = getArg('--model') || 'deepseek/deepseek-v4-flash-0731'; const city = getArg('--city') || 'Berlin'; if (!apiKey) { console.error('Error: Missing API key. Set OPENROUTER_API_KEY in examples/.env or pass --key '); process.exit(1); } async function main() { const provider = new OpenRouterProvider({ apiKey }); const orbiter = new LLMOrbiter(provider, { onLLMCall: (call) => console.log(`šŸ¤– LLM call: model="${call.model}" tools=${call.toolCount} promptSize=${call.promptSize} messages=${call.messages}`), onStatus: (status) => console.log(`⚔ ${status}`), onToolCall: (call) => console.log(`šŸ”§ Tool called: ${call.name}(${JSON.stringify(call.args)})`), onToolError: (err) => console.log(`āŒ Tool error:`, err.error), onToolResult: (res) => console.log(`šŸ“¦ Tool result:`, res.result), onUsage: (usage) => console.log(`šŸ“Š LLM call usage:`, usage), }); const result = await orbiter.run({ prompt: `What's the weather like in ${city}?`, model, tools: [weatherTool], }); console.log('\nšŸ’¬ Response:', result.content); } main().catch(console.error);