(question string, writer io.Writer, history []*RawMessage, prompt string, knowledgeMessages []*RawMessage, toolSession *ToolSession, lang string)
| 237 | } |
| 238 | |
| 239 | func (p *VolcengineModelProvider) QueryText(question string, writer io.Writer, history []*RawMessage, prompt string, knowledgeMessages []*RawMessage, toolSession *ToolSession, lang string) (*ModelResult, error) { |
| 240 | ctx := context.Background() |
| 241 | flusher, ok := writer.(http.Flusher) |
| 242 | if !ok { |
| 243 | return nil, fmt.Errorf(i18n.Translate(lang, "model:writer does not implement http.Flusher")) |
| 244 | } |
| 245 | |
| 246 | client := arkruntime.NewClientWithApiKey(p.apiKey) |
| 247 | |
| 248 | messages := p.buildMessages(question, history, prompt, knowledgeMessages) |
| 249 | |
| 250 | request := model.CreateChatCompletionRequest{ |
| 251 | Model: p.subType, |
| 252 | Messages: messages, |
| 253 | Temperature: &p.temperature, |
| 254 | TopP: &p.topP, |
| 255 | StreamOptions: &model.StreamOptions{IncludeUsage: true}, |
| 256 | } |
| 257 | |
| 258 | thinkingType := model.ThinkingTypeDisabled |
| 259 | if p.enableThinking { |
| 260 | thinkingType = model.ThinkingTypeEnabled |
| 261 | } |
| 262 | request.Thinking = &model.Thinking{Type: thinkingType} |
| 263 | |
| 264 | flushData := func(data, eventType string) error { |
| 265 | if _, err := fmt.Fprintf(writer, "event: %s\ndata: %s\n\n", eventType, data); err != nil { |
| 266 | return err |
| 267 | } |
| 268 | flusher.Flush() |
| 269 | return nil |
| 270 | } |
| 271 | |
| 272 | stream, err := client.CreateChatCompletionStream(ctx, request) |
| 273 | if err != nil { |
| 274 | logs.Error("stream chat error: %v", err) |
| 275 | return nil, err |
| 276 | } |
| 277 | defer stream.Close() |
| 278 | |
| 279 | modelResult := newModelResult(0, 0, 0) |
| 280 | var reasoningData strings.Builder |
| 281 | isLeadingReturn := true |
| 282 | |
| 283 | for { |
| 284 | response, recvErr := stream.Recv() |
| 285 | |
| 286 | if response.Usage != nil { |
| 287 | modelResult.PromptTokenCount += response.Usage.PromptTokens |
| 288 | modelResult.ResponseTokenCount += response.Usage.CompletionTokens |
| 289 | modelResult.TotalTokenCount += response.Usage.TotalTokens |
| 290 | } |
| 291 | |
| 292 | if recvErr != nil { |
| 293 | if recvErr == io.EOF { |
| 294 | break |
| 295 | } |
| 296 | return nil, recvErr |
nothing calls this directly
no test coverage detected