new file: newnewnewver.js
modified: newver.js
This commit is contained in:
112
newnewnewver.js
Normal file
112
newnewnewver.js
Normal file
@@ -0,0 +1,112 @@
|
||||
const { Ollama } = require("ollama");
|
||||
|
||||
const ollama = new Ollama({ host: "http://127.0.0.1:11434" });
|
||||
|
||||
const tools = [{
|
||||
type: 'function',
|
||||
function: {
|
||||
name: 'get_weather',
|
||||
description: 'Get current weather for a location with simulated delay.',
|
||||
parameters: {
|
||||
type: 'object',
|
||||
required: ['location'],
|
||||
properties: {
|
||||
location: {
|
||||
type: 'string',
|
||||
description: 'The city and country to get weather for'
|
||||
},
|
||||
unit: {
|
||||
type: 'string',
|
||||
enum: ['celsius', 'fahrenheit']
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}];
|
||||
|
||||
const availableFunctions = {
|
||||
get_weather: async ({ location, unit = 'celsius' }) => {
|
||||
await new Promise(resolve => setTimeout(resolve, 3000));
|
||||
const temp = unit === 'celsius' ? '22°C' : '72°F';
|
||||
return `${location}: ${temp}, sunny (delayed response)`;
|
||||
}
|
||||
};
|
||||
|
||||
async function main() {
|
||||
const messages = [
|
||||
{ role: 'user', content: 'What is the current weather in Paris?' }
|
||||
];
|
||||
|
||||
try {
|
||||
const response = await ollama.chat({
|
||||
model: 'qwen2.5:7b',
|
||||
messages,
|
||||
tools,
|
||||
tool_choice: 'auto',
|
||||
stream: false
|
||||
});
|
||||
|
||||
const message = response.message;
|
||||
|
||||
if (message.tool_calls?.length > 0) {
|
||||
for (const toolCall of message.tool_calls) {
|
||||
try {
|
||||
const toolName = toolCall.function.name;
|
||||
const rawArgs = toolCall.function.arguments;
|
||||
|
||||
console.log(`⚙️ Received tool call for "${toolName}" with args:`, rawArgs);
|
||||
|
||||
// Handle different argument formats
|
||||
let toolArgs;
|
||||
try {
|
||||
toolArgs = typeof rawArgs === 'string'
|
||||
? JSON.parse(rawArgs)
|
||||
: rawArgs;
|
||||
} catch (e) {
|
||||
throw new Error(`Invalid JSON arguments: ${rawArgs}`);
|
||||
}
|
||||
|
||||
if (!availableFunctions[toolName]) {
|
||||
throw new Error(`Tool ${toolName} not available`);
|
||||
}
|
||||
|
||||
const result = await availableFunctions[toolName](toolArgs);
|
||||
|
||||
messages.push(
|
||||
{
|
||||
role: 'assistant',
|
||||
content: null,
|
||||
tool_calls: [toolCall]
|
||||
},
|
||||
{
|
||||
role: 'tool',
|
||||
content: result,
|
||||
tool_call_id: toolCall.id
|
||||
}
|
||||
);
|
||||
} catch (toolError) {
|
||||
console.error('⚠️ Tool error:', toolError.message);
|
||||
messages.push({
|
||||
role: 'tool',
|
||||
content: `Tool error: ${toolError.message}`,
|
||||
tool_call_id: toolCall.id
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const finalResponse = await ollama.chat({
|
||||
model: 'qwen2.5:7b',
|
||||
messages,
|
||||
stream: false
|
||||
});
|
||||
|
||||
console.log('🌍 Final answer:', finalResponse.message.content);
|
||||
} else {
|
||||
console.log('💬 Direct response:', message.content);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('🚨 Chat error:', error.message);
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
Reference in New Issue
Block a user