diff options
| author | Paul Buetow <pbuetow@mimecast.com> | 2026-01-30 12:16:31 +0200 |
|---|---|---|
| committer | Paul Buetow <pbuetow@mimecast.com> | 2026-01-30 12:16:31 +0200 |
| commit | 3f1ab18cbc996c9467dae6d8deb2c26798aff30e (patch) | |
| tree | c1a6cdaad61a37bbdd70ddbe161c05aaf13d09ab /internal/llm | |
| parent | d3e0edbe16459f07506f70611b639d0a0a7f054e (diff) | |
feat: add completion_wait_all config and fix Anthropic system messages
- Add completion_wait_all config option (default true) to wait for all
backends before returning results, or return first result immediately
- Fix Anthropic API: extract system messages to top-level system field
as required by Messages API (was causing 400 errors)
- Add anthropic case to server.go clientFor() for model overrides
Diffstat (limited to 'internal/llm')
| -rw-r--r-- | internal/llm/anthropic.go | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/internal/llm/anthropic.go b/internal/llm/anthropic.go index ebb6826..c0cdc9a 100644 --- a/internal/llm/anthropic.go +++ b/internal/llm/anthropic.go @@ -230,8 +230,21 @@ func buildAnthropicChatRequest(o Options, messages []Message, defaultModel strin Stream: stream, MaxTokens: 4096, // Anthropic requires max_tokens } - req.Messages = make([]anthropicMessage, len(messages)) - for i, m := range messages { + // Anthropic requires system messages in a top-level "system" field, not in messages array + var systemParts []string + var nonSystemMessages []Message + for _, m := range messages { + if m.Role == "system" { + systemParts = append(systemParts, m.Content) + } else { + nonSystemMessages = append(nonSystemMessages, m) + } + } + if len(systemParts) > 0 { + req.System = strings.Join(systemParts, "\n\n") + } + req.Messages = make([]anthropicMessage, len(nonSystemMessages)) + for i, m := range nonSystemMessages { req.Messages[i] = anthropicMessage{ Role: m.Role, Content: m.Content, @@ -246,8 +259,6 @@ func buildAnthropicChatRequest(o Options, messages []Message, defaultModel strin if o.MaxTokens > 0 { req.MaxTokens = o.MaxTokens } - // Note: Anthropic's API doesn't support stop sequences in the same way as OpenAI, - // but we keep them in the request for future compatibility. return req } |
