Files
Dominik Kundel 243a1b0276 Initial commit
Co-authored-by: Zhuohan Li <zhuohan@openai.com>
Co-authored-by: Maratyszcza <marat@openai.com>
Co-authored-by: Volodymyr Kyrylov <vol@wilab.org.ua>
2025-08-05 08:19:49 -07:00

91 lines
2.2 KiB
TypeScript

import { OpenAI } from "openai";
import {
Agent,
run,
setDefaultOpenAIClient,
setOpenAIAPI,
setTracingDisabled,
tool,
MCPServerStdio,
} from "@openai/agents";
import { z } from "zod";
import path from "node:path";
import process from "node:process";
import { styleText } from "node:util";
import { createInterface } from "node:readline/promises";
async function prompt(question: string) {
const rl = createInterface({
input: process.stdin,
output: process.stdout,
});
const answer = await rl.question(question);
rl.close();
return answer;
}
const openai = new OpenAI({
apiKey: "local",
baseURL: "http://localhost:11434/v1",
});
const samplesDir = path.join(process.cwd());
const mcpServer = new MCPServerStdio({
name: "Filesystem MCP Server, via npx",
fullCommand: `npx -y @modelcontextprotocol/server-filesystem ${samplesDir}`,
});
await mcpServer.connect();
setTracingDisabled(true);
setDefaultOpenAIClient(openai);
setOpenAIAPI("chat_completions");
const searchTool = tool({
name: "get_current_weather",
description: "Get the current weather in a given location",
parameters: z.object({
location: z.string(),
}),
execute: async ({ location }) => {
return `The weather in ${location} is sunny.`;
},
});
const agent = new Agent({
name: "My Agent",
instructions: "You are a helpful assistant.",
tools: [searchTool],
model: "gpt-oss:20b-test",
mcpServers: [mcpServer],
});
const input = await prompt("> ");
const result = await run(agent, input, {
stream: true,
});
for await (const event of result) {
if (event.type === "raw_model_stream_event" && event.data.type === "model") {
if (event.data.event.choices[0].delta.content) {
process.stdout.write(event.data.event.choices[0].delta.content);
} else if (event.data.event.choices[0].delta.reasoning) {
process.stdout.write(event.data.event.choices[0].delta.reasoning);
}
} else if (
event.type === "run_item_stream_event" &&
event.item.type === "tool_call_item" &&
event.item.rawItem.type == "function_call"
) {
console.log(
`\nCalling ${event.item.rawItem.name} with: ${event.item.rawItem.arguments}`
);
}
}
console.log("\n");
await result.completed;
await mcpServer.close();