ollama_cloud_messages_max_tokens.go 1.1 KB

12345678910111213141516171819202122232425262728
  1. package service
  2. import (
  3. "strings"
  4. "github.com/tidwall/gjson"
  5. )
  6. // clampOllamaCloudAnthropicMessagesMaxTokens 是 Anthropic Messages 出站
  7. // (/v1/messages,含 CC / Responses 桥接与 passthrough)的 max_tokens clamp 钩子,
  8. // 与 raw CC / Responses 路径共用 cap 配置与实现。判定与出站 URL 组装同源:调用方
  9. // 传入本次实际选用的 Anthropic 上游 base_url(GetBaseURL 或
  10. // GetAnthropicProtocolBaseURL,不用 GetOpenAIBaseURL——adaptive 时那是 CC/Responses
  11. // 地址),与真实出站组装一样先 TrimRight "/"(urlvalidator 与
  12. // nativeAnthropicTargetURL 同款归一化),仅当其为 ollama.com 且 body 中映射后出站
  13. // model 为 DeepSeek 系时压到 cap,否则原样返回。
  14. func clampOllamaCloudAnthropicMessagesMaxTokens(account *Account, baseURL string, body []byte) []byte {
  15. if account == nil || len(body) == 0 {
  16. return body
  17. }
  18. if !isOllamaCloudBaseURL(strings.TrimRight(strings.TrimSpace(baseURL), "/")) {
  19. return body
  20. }
  21. if !isDeepSeekModel(gjson.GetBytes(body, "model").String()) {
  22. return body
  23. }
  24. return clampOllamaCloudMaxTokens(account, body)
  25. }