init
This commit is contained in:
82
2-tc-function.mjs
Normal file
82
2-tc-function.mjs
Normal file
@@ -0,0 +1,82 @@
|
||||
import OpenAI from 'openai'
|
||||
const openai = new OpenAI({
|
||||
apiKey:
|
||||
'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'
|
||||
}) // or set environment: export OPENAI_API_KEY=...
|
||||
|
||||
const my = {
|
||||
model: 'gpt-5-nano'
|
||||
}
|
||||
|
||||
const tools = [
|
||||
{
|
||||
type: 'function',
|
||||
name: 'get_horoscope',
|
||||
description: "Get today's horoscope for an astrological sign.",
|
||||
parameters: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
sign: {
|
||||
type: 'string',
|
||||
description: 'An astrological sign like Taurus or Aquarius'
|
||||
}
|
||||
},
|
||||
required: ['sign']
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
const api = {
|
||||
get_horoscope ({ sign } = {}) {
|
||||
return sign + ' Next Tuesday you will befriend a baby otter.'
|
||||
}
|
||||
}
|
||||
|
||||
// Create a running input list we will add to over time
|
||||
let input = [
|
||||
{ role: 'user', content: 'What is my horoscope? I am an Aquarius.' }
|
||||
]
|
||||
|
||||
// 2. Prompt the model with tools defined
|
||||
let response = await openai.responses.create({
|
||||
model: my.model,
|
||||
tools,
|
||||
input
|
||||
})
|
||||
|
||||
console.log('==========Response 1. round')
|
||||
console.log(JSON.stringify(response, null, 2)) // response.output_text/output_parsed
|
||||
|
||||
input.push(...response.output) // add the model's response to the input, including any function calls, otherwise the next request reports: 'BadRequestError: 400 No tool call found for function call output with call_id ...'
|
||||
|
||||
response.output.forEach(item => {
|
||||
if (item.type == 'function_call') {
|
||||
if (typeof api[item.name] === 'function') {
|
||||
console.log('function call =', item)
|
||||
|
||||
const function_call_output = api[item.name](JSON.parse(item.arguments))
|
||||
console.log('function call output =', function_call_output)
|
||||
|
||||
// 4. Provide function call results to the model
|
||||
input.push({
|
||||
type: 'function_call_output',
|
||||
call_id: item.call_id,
|
||||
output: function_call_output.toString()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
console.log('=========Input appended with function call output')
|
||||
console.log(JSON.stringify(input, null, 2))
|
||||
|
||||
response = await openai.responses.create({
|
||||
model: my.model,
|
||||
//instructions: 'Respond only with a horoscope generated by a tool.',
|
||||
tools,
|
||||
input
|
||||
})
|
||||
|
||||
// 5. The model should be able to give a response!
|
||||
console.log('============Final output:')
|
||||
console.log(JSON.stringify(response.output, null, 2))
|
||||
Reference in New Issue
Block a user