| 1 | package responses |
| 2 | |
| 3 | import ( |
| 4 | "reasonix/internal/netclient" |
| 5 | "reasonix/internal/provider" |
| 6 | ) |
| 7 | |
| 8 | func newFromConfig(cfg provider.Config) (provider.Provider, error) { |
| 9 | cfg = provider.ApplyOpenCodeGoContract("responses", cfg) |
| 10 | effort, _ := cfg.Extra["effort"].(string) |
| 11 | mode, _ := cfg.Extra["mode"].(string) |
| 12 | webSearch, _ := cfg.Extra["web_search"].(bool) |
| 13 | var stateful *bool |
| 14 | switch value := cfg.Extra["stateful"].(type) { |
| 15 | case bool: |
| 16 | stateful = &value |
| 17 | case *bool: |
| 18 | stateful = value |
| 19 | } |
| 20 | proxy, _ := cfg.Extra["proxy_spec"].(netclient.ProxySpec) |
| 21 | keyEnv, _ := cfg.Extra["api_key_env"].(string) |
| 22 | keySource, _ := cfg.Extra["api_key_source"].(string) |
| 23 | maxOutputTokens, _ := cfg.Extra["max_output_tokens"].(int) |
| 24 | requestURL, _ := cfg.Extra["request_url"].(string) |
| 25 | return New(Config{ |
| 26 | HTTPClient: cfg.HTTPClient, |
| 27 | Name: cfg.Name, DisplayName: cfg.DisplayName, Protocol: cfg.Protocol, APIKey: cfg.APIKey, BaseURL: cfg.BaseURL, Model: cfg.Model, |
| 28 | ModelInfo: cfg.ModelInfo, |
| 29 | Effort: effort, Mode: mode, Stateful: stateful, WebSearch: webSearch, Proxy: proxy, |
| 30 | KeyEnv: keyEnv, KeySource: keySource, MaxOutputTokens: maxOutputTokens, RequestURL: requestURL, |
| 31 | // Extra 原样透传:vision 等能力开关由调用方(boot/CLI)写入 |
| 32 | // cfg.Extra,factory 若丢弃则 New() 读不到(评审 #7234 第 3 点)。 |
| 33 | Extra: cfg.Extra, |
| 34 | }), nil |
| 35 | } |
| 36 |