- Migrate `compress_image.go` to `internal/imageutil` for better encapsulation. - Reorganize LLM provider implementations into distinct packages (`google`, `openai`, and `anthropic`). - Replace `go_llm` package name with `llm`. - Refactor internal APIs for improved clarity, including renaming `anthropic` to `anthropicImpl` and `google` to `googleImpl`. - Add helper methods and restructure message handling for better separation of concerns.
53 lines
926 B
Go
53 lines
926 B
Go
package llm
|
|
|
|
// ResponseChoice represents a single choice in a response.
|
|
type ResponseChoice struct {
|
|
Index int
|
|
Role Role
|
|
Content string
|
|
Refusal string
|
|
Name string
|
|
Calls []ToolCall
|
|
}
|
|
|
|
func (r ResponseChoice) toRaw() map[string]any {
|
|
res := map[string]any{
|
|
"index": r.Index,
|
|
"role": r.Role,
|
|
"content": r.Content,
|
|
"refusal": r.Refusal,
|
|
"name": r.Name,
|
|
}
|
|
|
|
calls := make([]map[string]any, 0, len(r.Calls))
|
|
for _, call := range r.Calls {
|
|
calls = append(calls, call.toRaw())
|
|
}
|
|
|
|
res["tool_calls"] = calls
|
|
|
|
return res
|
|
}
|
|
|
|
func (r ResponseChoice) toInput() []Input {
|
|
var res []Input
|
|
|
|
for _, call := range r.Calls {
|
|
res = append(res, call)
|
|
}
|
|
|
|
if r.Content != "" || r.Refusal != "" {
|
|
res = append(res, Message{
|
|
Role: RoleAssistant,
|
|
Text: r.Content,
|
|
})
|
|
}
|
|
|
|
return res
|
|
}
|
|
|
|
// Response represents a response from a language model.
|
|
type Response struct {
|
|
Choices []ResponseChoice
|
|
}
|