feat(deepseek): add support for Responses API and Chat Prefix Completion
CI / Lint (push) Has been cancelled
CI / Test (push) Has been cancelled
CI / Build (push) Has been cancelled

This commit is contained in:
2026-08-03 03:53:42 +00:00
parent 2ed027da7c
commit ddb710507d
7 changed files with 72 additions and 4 deletions
+63 -2
View File
@@ -257,9 +257,70 @@ func (p *DeepSeekProvider) ImageGeneration(ctx context.Context, req *models.Imag
}
func (p *DeepSeekProvider) Responses(ctx context.Context, req *models.ResponsesRequest) (*models.ResponsesResponse, error) {
return nil, fmt.Errorf("responses API not supported by deepseek")
stream := req.Stream != nil && *req.Stream
body := BuildOpenAIResponsesBody(req, stream)
resp, err := p.client.R().
SetContext(ctx).
SetHeader("Authorization", "Bearer "+p.apiKey).
SetBody(body).
Post(fmt.Sprintf("%s/responses", p.config.BaseURL))
if err != nil {
return nil, fmt.Errorf("responses request failed: %w", err)
}
if !resp.IsSuccess() {
msg := resp.String()
if msg == "" && resp.RawBody() != nil {
if bodyBytes, err := io.ReadAll(resp.RawBody()); err == nil {
msg = string(bodyBytes)
}
}
return nil, fmt.Errorf("DeepSeek Responses API error (%d): %s", resp.StatusCode(), msg)
}
var respJSON map[string]interface{}
if err := json.Unmarshal(resp.Body(), &respJSON); err != nil {
return nil, fmt.Errorf("failed to parse responses response: %w", err)
}
return ParseOpenAIResponsesResponse(respJSON, req.Model)
}
func (p *DeepSeekProvider) ResponsesStream(ctx context.Context, req *models.ResponsesRequest) (<-chan *models.ResponsesStreamChunk, error) {
return nil, fmt.Errorf("responses API not supported by deepseek")
body := BuildOpenAIResponsesBody(req, true)
resp, err := p.client.R().
SetContext(ctx).
SetHeader("Authorization", "Bearer "+p.apiKey).
SetBody(body).
SetDoNotParseResponse(true).
Post(fmt.Sprintf("%s/responses", p.config.BaseURL))
if err != nil {
return nil, fmt.Errorf("responses stream request failed: %w", err)
}
if !resp.IsSuccess() {
msg := resp.String()
if msg == "" && resp.RawBody() != nil {
if bodyBytes, err := io.ReadAll(resp.RawBody()); err == nil {
msg = string(bodyBytes)
}
}
return nil, fmt.Errorf("DeepSeek Responses API error (%d): %s", resp.StatusCode(), msg)
}
ch := make(chan *models.ResponsesStreamChunk)
go func() {
defer close(ch)
err := StreamOpenAIResponses(resp.RawBody(), ch)
if err != nil {
fmt.Printf("DeepSeek Responses stream error: %v\n", err)
}
}()
return ch, nil
}
+3
View File
@@ -158,6 +158,9 @@ func MessagesToOpenAIJSON(messages []models.UnifiedMessage) ([]interface{}, erro
if m.Name != nil {
msg["name"] = *m.Name
}
if m.Prefix != nil {
msg["prefix"] = *m.Prefix
}
result = append(result, msg)
}
return result, nil