92 lines
2.1 KiB
JavaScript
92 lines
2.1 KiB
JavaScript
import OpenAI from "openai";
|
|
import path from "path";
|
|
import shell from 'shelljs'
|
|
|
|
const client = new OpenAI();
|
|
|
|
// const responseHosted = await client.responses.create({
|
|
// model: "gpt-5.2",
|
|
// tools: [
|
|
// {
|
|
// type: "shell",
|
|
// environment: {
|
|
// type: "container_auto",
|
|
// skills: [
|
|
// { type: "skill_reference", skill_id: "skill_69b7aab7a0988191afca6ad2c530326b07c9ae27b6429c7c" },
|
|
// ],
|
|
// },
|
|
// },
|
|
// ],
|
|
// input: "Use the skills to find phone number of Qiaozhen.",
|
|
// });
|
|
|
|
// console.log('Hosted shell response:', responseHosted.output_text);
|
|
|
|
const conversation = [{
|
|
role: 'user',
|
|
content: "Use the mycontacts skill and run locally to find the phone number of Qiaozhen."
|
|
}]
|
|
|
|
let hasShellCall = true
|
|
let round = 0
|
|
|
|
while(hasShellCall) {
|
|
hasShellCall = false
|
|
round++
|
|
|
|
const responseLocal = await client.responses.create({
|
|
model: "gpt-5.2",
|
|
tools: [
|
|
{
|
|
type: "shell",
|
|
environment: {
|
|
type: "local",
|
|
skills: [
|
|
{
|
|
name: "mycontacts",
|
|
description: "My contacts info",
|
|
path: path.resolve("./skills/mycontacts"),
|
|
},
|
|
],
|
|
},
|
|
},
|
|
],
|
|
input: conversation,
|
|
});
|
|
|
|
console.log('Local shell response output:', JSON.stringify(responseLocal.output, null, 2));
|
|
|
|
conversation.push(...responseLocal.output)
|
|
|
|
responseLocal.output.forEach(item => {
|
|
if (item.type == 'shell_call') {
|
|
hasShellCall = true
|
|
console.log('shell call item =', item)
|
|
let shell_call_output = []
|
|
item.action.commands.forEach(command => {
|
|
|
|
console.log('$', command, '\n')
|
|
|
|
|
|
let { stdout, stderr } = shell.exec(command, {
|
|
silent: true
|
|
})
|
|
shell_call_output.push({
|
|
stdout,
|
|
stderr,
|
|
outcome: { type: 'exit', exit_code: 0 }
|
|
})
|
|
})
|
|
|
|
conversation.push({
|
|
type: 'shell_call_output',
|
|
call_id: item.call_id,
|
|
output: shell_call_output
|
|
})
|
|
}
|
|
})
|
|
|
|
console.log('Local shell response of round ' + round + ':', JSON.stringify(responseLocal.output_text, null, 2));
|
|
|
|
|
|
} |