feat(llm): support OpenAI Responses API via per-provider api_type

This commit is contained in:
loveuer
2026-08-13 11:46:23 +08:00
parent c8d8329dbb
commit 425f6ee5ee
9 changed files with 979 additions and 4 deletions
+17 -2
View File
@@ -204,10 +204,18 @@ func (m *Manager) CurrentThinking() string {
return m.provider.Thinking
}
func (m *Manager) CurrentAPIType() string {
if m.provider.APIType == "" {
return config.APITypeChat
}
return m.provider.APIType
}
func (m *Manager) Info() string {
var b strings.Builder
fmt.Fprintf(&b, "provider: %s\n", m.CurrentProvider())
fmt.Fprintf(&b, "model: %s\n", m.CurrentModel())
fmt.Fprintf(&b, "api: %s\n", m.CurrentAPIType())
fmt.Fprintf(&b, "thinking: %s\n", m.CurrentThinking())
fmt.Fprintf(&b, "providers: %s\n", strings.Join(m.providerNames(), ", "))
fmt.Fprintf(&b, "models: %s\n", strings.Join(m.provider.Models, ", "))
@@ -223,7 +231,7 @@ func (m *Manager) SetProvider(name string) (string, error) {
}
m.providerName = name
m.provider = provider
m.syncAgent(llm.NewOpenAICompatibleClient(provider.BaseURL, provider.APIKey, m.httpClient))
m.syncAgent(providerClient(provider, m.httpClient))
return "Switched provider.\n" + m.summary(), nil
}
@@ -257,7 +265,14 @@ func (m *Manager) SetThinking(level string) (string, error) {
}
func (m *Manager) summary() string {
return fmt.Sprintf("provider: %s\nmodel: %s\nthinking: %s", m.CurrentProvider(), m.CurrentModel(), m.CurrentThinking())
return fmt.Sprintf("provider: %s\nmodel: %s\napi: %s\nthinking: %s", m.CurrentProvider(), m.CurrentModel(), m.CurrentAPIType(), m.CurrentThinking())
}
func providerClient(provider config.ProviderConfig, httpClient *http.Client) llm.Provider {
if provider.APIType == config.APITypeResponses {
return llm.NewOpenAIResponsesClient(provider.BaseURL, provider.APIKey, httpClient)
}
return llm.NewOpenAICompatibleClient(provider.BaseURL, provider.APIKey, httpClient)
}
func (m *Manager) maxContextTokens() int {