in gollm/openai.go [176:206]
func (cs *openAIChatSession) SetFunctionDefinitions(defs []*FunctionDefinition) error {
cs.functionDefinitions = defs
cs.tools = nil // Clear previous tools
if len(defs) > 0 {
cs.tools = make([]openai.ChatCompletionToolParam, len(defs))
for i, gollmDef := range defs {
// Basic conversion, assuming schema is compatible or nil
var params openai.FunctionParameters
if gollmDef.Parameters != nil {
// NOTE: This assumes gollmDef.Parameters is directly marshalable to JSON
// that fits openai.FunctionParameters. May need refinement.
bytes, err := gollmDef.Parameters.ToRawSchema()
if err != nil {
return fmt.Errorf("failed to convert schema for function %s: %w", gollmDef.Name, err)
}
if err := json.Unmarshal(bytes, ¶ms); err != nil {
return fmt.Errorf("failed to unmarshal schema for function %s: %w", gollmDef.Name, err)
}
}
cs.tools[i] = openai.ChatCompletionToolParam{
Function: openai.FunctionDefinitionParam{
Name: gollmDef.Name,
Description: openai.String(gollmDef.Description),
Parameters: params,
},
}
}
}
klog.V(1).Infof("Set %d function definitions for OpenAI chat session", len(cs.functionDefinitions))
return nil
}