@@ -34,41 +34,23 @@ func NewChatRequestFromConfig(cfg *Config) *ChatRequest {
34
34
}
35
35
36
36
// Chat sends a chat request to the specified OpenAI model.
37
- func (c * Client ) Chat (ctx context.Context , request * schemas.ChatRequest ) (* schemas.ChatResponse , error ) {
37
+ func (c * Client ) Chat (ctx context.Context , params * schemas.ChatParams ) (* schemas.ChatResponse , error ) {
38
38
// Create a new chat request
39
- chatRequest := c .createRequestSchema (request )
40
- chatRequest .Stream = false
39
+ // TODO: consider using objectpool to optimize memory allocation
40
+ chatReq := * c .chatRequestTemplate // hoping to get a copy of the template
41
+ chatReq .ApplyParams (params )
42
+
43
+ chatReq .Stream = false
41
44
42
- chatResponse , err := c .doChatRequest (ctx , chatRequest )
45
+ chatResponse , err := c .doChatRequest (ctx , & chatReq )
43
46
44
47
if err != nil {
45
48
return nil , err
46
49
}
47
50
48
- if len (chatResponse .ModelResponse .Message .Content ) == 0 {
49
- return nil , ErrEmptyResponse
50
- }
51
-
52
51
return chatResponse , nil
53
52
}
54
53
55
- // createRequestSchema creates a new ChatRequest object based on the given request.
56
- func (c * Client ) createRequestSchema (request * schemas.ChatRequest ) * ChatRequest {
57
- // TODO: consider using objectpool to optimize memory allocation
58
- chatRequest := * c .chatRequestTemplate // hoping to get a copy of the template
59
-
60
- chatRequest .Messages = make ([]ChatMessage , 0 , len (request .MessageHistory )+ 1 )
61
-
62
- // Add items from messageHistory first and the new chat message last
63
- for _ , message := range request .MessageHistory {
64
- chatRequest .Messages = append (chatRequest .Messages , ChatMessage {Role : message .Role , Content : message .Content })
65
- }
66
-
67
- chatRequest .Messages = append (chatRequest .Messages , ChatMessage {Role : request .Message .Role , Content : request .Message .Content })
68
-
69
- return & chatRequest
70
- }
71
-
72
54
func (c * Client ) doChatRequest (ctx context.Context , payload * ChatRequest ) (* schemas.ChatResponse , error ) {
73
55
// Build request payload
74
56
rawPayload , err := json .Marshal (payload )
@@ -133,6 +115,12 @@ func (c *Client) doChatRequest(ctx context.Context, payload *ChatRequest) (*sche
133
115
return nil , err
134
116
}
135
117
118
+ modelChoice := chatCompletion .Choices [0 ]
119
+
120
+ if len (modelChoice .Message .Content ) == 0 {
121
+ return nil , ErrEmptyResponse
122
+ }
123
+
136
124
// Map response to ChatResponse schema
137
125
response := schemas.ChatResponse {
138
126
ID : chatCompletion .ID ,
@@ -145,8 +133,8 @@ func (c *Client) doChatRequest(ctx context.Context, payload *ChatRequest) (*sche
145
133
"system_fingerprint" : chatCompletion .SystemFingerprint ,
146
134
},
147
135
Message : schemas.ChatMessage {
148
- Role : chatCompletion . Choices [ 0 ] .Message .Role ,
149
- Content : chatCompletion . Choices [ 0 ] .Message .Content ,
136
+ Role : modelChoice .Message .Role ,
137
+ Content : modelChoice .Message .Content ,
150
138
},
151
139
TokenUsage : schemas.TokenUsage {
152
140
PromptTokens : chatCompletion .Usage .PromptTokens ,
0 commit comments