| | package schema |
| |
|
| | import ( |
| | "encoding/json" |
| |
|
| | "github.com/mudler/xlog" |
| |
|
| | "github.com/mudler/LocalAI/pkg/grpc/proto" |
| | ) |
| |
|
| | type Message struct { |
| | |
| | Role string `json:"role,omitempty" yaml:"role"` |
| |
|
| | |
| | Name string `json:"name,omitempty" yaml:"name"` |
| |
|
| | |
| | Content interface{} `json:"content" yaml:"content"` |
| |
|
| | StringContent string `json:"string_content,omitempty" yaml:"string_content,omitempty"` |
| | StringImages []string `json:"string_images,omitempty" yaml:"string_images,omitempty"` |
| | StringVideos []string `json:"string_videos,omitempty" yaml:"string_videos,omitempty"` |
| | StringAudios []string `json:"string_audios,omitempty" yaml:"string_audios,omitempty"` |
| |
|
| | |
| | FunctionCall interface{} `json:"function_call,omitempty" yaml:"function_call,omitempty"` |
| |
|
| | ToolCalls []ToolCall `json:"tool_calls,omitempty" yaml:"tool_call,omitempty"` |
| |
|
| | |
| | Reasoning *string `json:"reasoning,omitempty" yaml:"reasoning,omitempty"` |
| | } |
| |
|
| | type ToolCall struct { |
| | Index int `json:"index"` |
| | ID string `json:"id"` |
| | Type string `json:"type"` |
| | FunctionCall FunctionCall `json:"function"` |
| | } |
| |
|
| | type FunctionCall struct { |
| | Name string `json:"name,omitempty"` |
| | Arguments string `json:"arguments"` |
| | } |
| |
|
| | type Messages []Message |
| |
|
| | |
| | |
| | func (messages Messages) ToProto() []*proto.Message { |
| | protoMessages := make([]*proto.Message, len(messages)) |
| | for i, message := range messages { |
| | protoMessages[i] = &proto.Message{ |
| | Role: message.Role, |
| | Name: message.Name, |
| | } |
| |
|
| | switch ct := message.Content.(type) { |
| | case string: |
| | protoMessages[i].Content = ct |
| | case []interface{}: |
| | |
| | data, _ := json.Marshal(ct) |
| | resultData := []struct { |
| | Text string `json:"text"` |
| | }{} |
| | json.Unmarshal(data, &resultData) |
| | for _, r := range resultData { |
| | protoMessages[i].Content += r.Text |
| | } |
| | } |
| |
|
| | |
| | if len(message.ToolCalls) > 0 { |
| | toolCallsJSON, err := json.Marshal(message.ToolCalls) |
| | if err != nil { |
| | xlog.Warn("failed to marshal tool_calls to JSON", "error", err) |
| | } else { |
| | protoMessages[i].ToolCalls = string(toolCallsJSON) |
| | } |
| | } |
| |
|
| | |
| | |
| | } |
| | return protoMessages |
| | } |
| |
|