added structure for db
This commit is contained in:
+17
-32
@@ -10,6 +10,7 @@ import (
|
||||
"strconv"
|
||||
|
||||
config "git.estatecloud.org/radumaco/souvenir/config"
|
||||
"git.estatecloud.org/radumaco/souvenir/model"
|
||||
)
|
||||
|
||||
type LLMClient struct {
|
||||
@@ -19,15 +20,9 @@ type LLMClient struct {
|
||||
// Request Types
|
||||
|
||||
type ChatRequest struct {
|
||||
Model string `json:"model"`
|
||||
Messages []Message `json:"messages"`
|
||||
Tools []config.Tool `json:"tools,omitempty"`
|
||||
}
|
||||
|
||||
type Message struct {
|
||||
Role string `json:"role"`
|
||||
Content string `json:"content"`
|
||||
ToolCalls []ToolCall `json:"tool_calls,omitempty"`
|
||||
Model string `json:"model"`
|
||||
Messages []model.Message `json:"messages"`
|
||||
Tools []config.Tool `json:"tools,omitempty"`
|
||||
}
|
||||
|
||||
// Response types //
|
||||
@@ -42,20 +37,9 @@ type ChatResponse struct {
|
||||
}
|
||||
|
||||
type Choice struct {
|
||||
Index int `json:"index"`
|
||||
Message Message `json:"message"`
|
||||
FinishReason string `json:"finish_reason"`
|
||||
}
|
||||
|
||||
type ToolCall struct {
|
||||
ID string `json:"id"`
|
||||
Type string `json:"type"`
|
||||
Function ToolCallFunc `json:"function"`
|
||||
}
|
||||
|
||||
type ToolCallFunc struct {
|
||||
Name string `json:"name"`
|
||||
Arguments string `json:"arguments"`
|
||||
Index int `json:"index"`
|
||||
Message model.Message `json:"message"`
|
||||
FinishReason string `json:"finish_reason"`
|
||||
}
|
||||
|
||||
type Usage struct {
|
||||
@@ -64,7 +48,8 @@ type Usage struct {
|
||||
TotalTokens int `json:"total_tokens"`
|
||||
}
|
||||
|
||||
func (client LLMClient) Call(query string, messages []Message) ([]Message, error) {
|
||||
func (client LLMClient) Call(query string, messages []model.Message) ([]model.Message, error) {
|
||||
return []model.Message{{Role: "assistant", Content: "message 1"}, {Role: "assistant", Content: "message 2"}}, nil
|
||||
var logger = slog.Default().With("Component", "LLM Client")
|
||||
requestBody := ChatRequest{
|
||||
Model: client.Cfg.Llm.Model,
|
||||
@@ -73,7 +58,7 @@ func (client LLMClient) Call(query string, messages []Message) ([]Message, error
|
||||
}
|
||||
serialized, err := json.Marshal(requestBody)
|
||||
if err != nil {
|
||||
return []Message{}, err
|
||||
return []model.Message{}, err
|
||||
}
|
||||
|
||||
body := bytes.NewBuffer(serialized)
|
||||
@@ -81,14 +66,14 @@ func (client LLMClient) Call(query string, messages []Message) ([]Message, error
|
||||
req, err := http.NewRequest("POST", client.Cfg.Api.Url, body)
|
||||
if err != nil {
|
||||
logger.Error("There was an error creating the request", "error", err.Error())
|
||||
return []Message{}, err
|
||||
return []model.Message{}, err
|
||||
}
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
req.Header.Set("Authorization", "Bearer "+client.Cfg.Api.Key)
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
if err != nil {
|
||||
logger.Error("There was an error during http call", "error", err.Error())
|
||||
return []Message{}, err
|
||||
return []model.Message{}, err
|
||||
}
|
||||
logger.Debug("LLM Call returned", "response", resp)
|
||||
defer resp.Body.Close()
|
||||
@@ -96,13 +81,13 @@ func (client LLMClient) Call(query string, messages []Message) ([]Message, error
|
||||
data, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
logger.Error("There was an error reading the response body", "error", err.Error())
|
||||
return []Message{}, err
|
||||
return []model.Message{}, err
|
||||
}
|
||||
if resp.StatusCode != 200 && resp.StatusCode != 202 {
|
||||
logger.Error("Call returned non 200 status",
|
||||
"statusCode", resp.StatusCode,
|
||||
"status", resp.Status)
|
||||
return []Message{},
|
||||
return []model.Message{},
|
||||
errors.New("Call returned invalid status " +
|
||||
strconv.Itoa(resp.StatusCode) +
|
||||
resp.Status)
|
||||
@@ -112,13 +97,13 @@ func (client LLMClient) Call(query string, messages []Message) ([]Message, error
|
||||
var response ChatResponse
|
||||
if err := json.Unmarshal(data, &response); err != nil {
|
||||
logger.Error("There was an error parsing the response", "error", err.Error())
|
||||
return []Message{}, err
|
||||
return []model.Message{}, err
|
||||
}
|
||||
|
||||
var result []Message
|
||||
var result []model.Message
|
||||
if len(response.Choices) == 0 {
|
||||
logger.Error("The call returned an empty response")
|
||||
return []Message{}, errors.New("The call returned an empty response")
|
||||
return []model.Message{}, errors.New("The call returned an empty response")
|
||||
}
|
||||
for _, choice := range response.Choices {
|
||||
logger.Error("Appending response message", "message", choice.Message)
|
||||
|
||||
Reference in New Issue
Block a user