返回 DeepSeek-Reasonix
deepseek_responses.go
根目录 / internal / config / deepseek_responses.go
1 package config
2
3 import (
4 "strings"
5
6 "reasonix/internal/provider"
7 "reasonix/internal/provider/openai"
8 )
9
10 func deepSeekV4EffortOverrides() map[string]ProviderModelOverride {
11 flash := ProviderModelOverride{SupportedEfforts: []string{"disabled", "low", "high", "max"}, DefaultEffort: "high"}
12 return map[string]ProviderModelOverride{
13 "deepseek-flash": flash,
14 "deepseek-v4-flash": flash,
15 openai.OfficialDeepSeekVisionModel: flash,
16 "deepseek-v4-pro": {SupportedEfforts: []string{"disabled", "low", "high", "max"}, DefaultEffort: "high"},
17 }
18 }
19
20 func isOfficialDeepSeekResponsesProvider(p *ProviderEntry) bool {
21 return p != nil && strings.EqualFold(strings.TrimSpace(p.Kind), "responses") &&
22 officialProviderHost(p.BaseURL) == "api.deepseek.com"
23 }
24
25 // backfillOfficialDeepSeekResponsesModels upgrades the previous canned
26 // Flash-only official Responses contract. Settings drops overrides for
27 // unchecked models, so any leftover ModelOverrides means the list is curated.
28 func backfillOfficialDeepSeekResponsesModels(p *ProviderEntry) {
29 backfillOfficialDeepSeekVisionModel(p)
30 if !isOfficialDeepSeekResponsesProvider(p) {
31 return
32 }
33 switch strings.TrimSpace(p.Name) {
34 case "deepseek", "deepseek-responses":
35 default:
36 return
37 }
38 if p.HasModel("deepseek-v4-pro") {
39 backfillOfficialDeepSeekResponsesProPrice(p)
40 return
41 }
42 models := p.ModelList()
43 if len(models) != 1 || models[0] != "deepseek-v4-flash" {
44 return
45 }
46 if len(p.ModelOverrides) > 0 {
47 return
48 }
49 p.Models = mergeModelLists(models, []string{"deepseek-v4-flash", "deepseek-v4-pro"})
50 p.Default = firstKnownModel(p.Default, p.Models, "deepseek-v4-flash")
51 backfillOfficialDeepSeekResponsesProPrice(p)
52 }
53
54 // backfillOfficialDeepSeekResponsesProPrice fills Prices[pro] when a legacy
55 // singular Price would otherwise make Pro inherit the Flash list price.
56 func backfillOfficialDeepSeekResponsesProPrice(p *ProviderEntry) {
57 if p == nil || !p.HasModel("deepseek-v4-pro") || p.Prices["deepseek-v4-pro"] != nil {
58 return
59 }
60 currency := p.ProviderBillingCurrency()
61 if currency == "" {
62 currency = "USD"
63 }
64 price := deepSeekV4PriceForModel(currency, "deepseek-v4-pro")
65 if price == nil {
66 return
67 }
68 if p.Prices == nil {
69 p.Prices = map[string]*provider.Pricing{}
70 }
71 p.Prices["deepseek-v4-pro"] = price
72 }
73
73 lines GO