返回 DeepSeek-Reasonix
effort.go
根目录 / internal / provider / openai / effort.go
1 // Effort vocabulary and per-request depth resolution: which reasoning levels
2 // an endpoint accepts, and how a Request.EffortOverride maps onto them.
3 package openai
4
5 import (
6 "strings"
7
8 "reasonix/internal/provider"
9 )
10
11 // configuredThinkingType reads the optional explicit `thinking` config field —
12 // a vendor-agnostic escape hatch (credit @eghrhegpe, #5063) for OpenAI-
13 // compatible providers we don't auto-detect (e.g. opencode.ai). Unknown values
14 // are ignored so a typo never breaks a request.
15 func configuredThinkingType(cfg provider.Config) string {
16 t, _ := cfg.Extra["thinking"].(string)
17 t = strings.ToLower(strings.TrimSpace(t))
18 if t != "enabled" && t != "disabled" {
19 return ""
20 }
21 return t
22 }
23
24 // requestEffort resolves one request's reasoning depth: a vocabulary-approved
25 // EffortOverride wins after Stream validation; omission inherits configuration.
26 func (c *client) requestEffort(req provider.Request) string {
27 if req.EffortOverride != "" {
28 return req.EffortOverride
29 }
30 return c.effort
31 }
32
33 func (c *client) deepSeekRequestThinking(req provider.Request) string {
34 if req.EffortOverride != "" && !c.thinkingLocked {
35 if req.EffortOverride == "disabled" {
36 return "disabled"
37 }
38 return "enabled"
39 }
40 if c.thinkingType == "disabled" || req.EffortOverride == "disabled" {
41 return "disabled"
42 }
43 return "enabled"
44 }
45
46 func supportsEffort(levels []string, want string) bool {
47 want = strings.ToLower(strings.TrimSpace(want))
48 for _, level := range levels {
49 if strings.ToLower(strings.TrimSpace(level)) == want {
50 return true
51 }
52 }
53 return false
54 }
55
56 func hasExplicitSupportedEfforts(levels []string) bool {
57 for _, level := range levels {
58 level = strings.ToLower(strings.TrimSpace(level))
59 if level != "" && level != "auto" {
60 return true
61 }
62 }
63 return false
64 }
65
65 lines GO