feat(api): Handle tool calls in responses API

Signed-off-by: Richard Palethorpe <io@richiejp.com>
This commit is contained in:
Richard Palethorpe
2025-06-12 05:11:43 +01:00
parent 863c6f3dcb
commit 9e40eea438
3 changed files with 428 additions and 69 deletions

View File

@@ -20,6 +20,10 @@ type Job struct {
UUID string
Metadata map[string]interface{}
DoneFilter bool
// Tools available for this job
BuiltinTools []openai.Tool // Built-in tools like web search
UserTools []openai.Tool // User-defined function tools
pastActions []*ActionRequest
nextAction *Action
@@ -45,6 +49,18 @@ func WithConversationHistory(history []openai.ChatCompletionMessage) JobOption {
}
}
func WithBuiltinTools(tools []openai.Tool) JobOption {
return func(j *Job) {
j.BuiltinTools = tools
}
}
func WithUserTools(tools []openai.Tool) JobOption {
return func(j *Job) {
j.UserTools = tools
}
}
func WithReasoningCallback(f func(ActionCurrentState) bool) JobOption {
return func(r *Job) {
r.ReasoningCallback = f
@@ -227,3 +243,21 @@ func (j *Job) IncrementEvaluationLoop() {
currentLoop := j.GetEvaluationLoop()
j.Metadata["evaluation_loop"] = currentLoop + 1
}
// GetBuiltinTools returns the builtin tools for this job
func (j *Job) GetBuiltinTools() []openai.Tool {
return j.BuiltinTools
}
// GetUserTools returns the user tools for this job
func (j *Job) GetUserTools() []openai.Tool {
return j.UserTools
}
// GetAllTools returns all tools (builtin + user) for this job
func (j *Job) GetAllTools() []openai.Tool {
allTools := make([]openai.Tool, 0, len(j.BuiltinTools)+len(j.UserTools))
allTools = append(allTools, j.BuiltinTools...)
allTools = append(allTools, j.UserTools...)
return allTools
}