fix(openai-gateway): extract reasoning_effort in raw Chat Completions path
The forwardAsRawChatCompletions path (used when APIKey accounts target upstreams that don't support Responses API, e.g. DeepSeek) was missing reasoning_effort and service_tier extraction, causing all reasoning effort values to be silently dropped. Extract both from the raw Chat Completions body before forwarding, and propagate them through streamRawChatCompletions / bufferRawChatCompletions to the OpenAIForwardResult.
This commit is contained in:
@@ -73,6 +73,10 @@ func (s *OpenAIGatewayService) forwardAsRawChatCompletions(
|
|||||||
}
|
}
|
||||||
clientStream := gjson.GetBytes(body, "stream").Bool()
|
clientStream := gjson.GetBytes(body, "stream").Bool()
|
||||||
|
|
||||||
|
// 1b. Extract reasoning effort and service tier from the raw body before any transformation.
|
||||||
|
reasoningEffort := extractOpenAIReasoningEffortFromBody(body, originalModel)
|
||||||
|
serviceTier := extractOpenAIServiceTierFromBody(body)
|
||||||
|
|
||||||
// 2. Resolve model mapping (same as ForwardAsChatCompletions)
|
// 2. Resolve model mapping (same as ForwardAsChatCompletions)
|
||||||
billingModel := resolveOpenAIForwardModel(account, originalModel, defaultMappedModel)
|
billingModel := resolveOpenAIForwardModel(account, originalModel, defaultMappedModel)
|
||||||
upstreamModel := normalizeOpenAIModelForUpstream(account, billingModel)
|
upstreamModel := normalizeOpenAIModelForUpstream(account, billingModel)
|
||||||
@@ -206,9 +210,9 @@ func (s *OpenAIGatewayService) forwardAsRawChatCompletions(
|
|||||||
|
|
||||||
// 8. Forward response
|
// 8. Forward response
|
||||||
if clientStream {
|
if clientStream {
|
||||||
return s.streamRawChatCompletions(c, resp, originalModel, billingModel, upstreamModel, startTime)
|
return s.streamRawChatCompletions(c, resp, originalModel, billingModel, upstreamModel, reasoningEffort, serviceTier, startTime)
|
||||||
}
|
}
|
||||||
return s.bufferRawChatCompletions(c, resp, originalModel, billingModel, upstreamModel, startTime)
|
return s.bufferRawChatCompletions(c, resp, originalModel, billingModel, upstreamModel, reasoningEffort, serviceTier, startTime)
|
||||||
}
|
}
|
||||||
|
|
||||||
// streamRawChatCompletions 透传上游 CC SSE 流到客户端,并提取 usage(包括
|
// streamRawChatCompletions 透传上游 CC SSE 流到客户端,并提取 usage(包括
|
||||||
@@ -223,6 +227,8 @@ func (s *OpenAIGatewayService) streamRawChatCompletions(
|
|||||||
originalModel string,
|
originalModel string,
|
||||||
billingModel string,
|
billingModel string,
|
||||||
upstreamModel string,
|
upstreamModel string,
|
||||||
|
reasoningEffort *string,
|
||||||
|
serviceTier *string,
|
||||||
startTime time.Time,
|
startTime time.Time,
|
||||||
) (*OpenAIForwardResult, error) {
|
) (*OpenAIForwardResult, error) {
|
||||||
requestID := resp.Header.Get("x-request-id")
|
requestID := resp.Header.Get("x-request-id")
|
||||||
@@ -288,14 +294,16 @@ func (s *OpenAIGatewayService) streamRawChatCompletions(
|
|||||||
}
|
}
|
||||||
|
|
||||||
return &OpenAIForwardResult{
|
return &OpenAIForwardResult{
|
||||||
RequestID: requestID,
|
RequestID: requestID,
|
||||||
Usage: usage,
|
Usage: usage,
|
||||||
Model: originalModel,
|
Model: originalModel,
|
||||||
BillingModel: billingModel,
|
BillingModel: billingModel,
|
||||||
UpstreamModel: upstreamModel,
|
UpstreamModel: upstreamModel,
|
||||||
Stream: true,
|
ReasoningEffort: reasoningEffort,
|
||||||
Duration: time.Since(startTime),
|
ServiceTier: serviceTier,
|
||||||
FirstTokenMs: firstTokenMs,
|
Stream: true,
|
||||||
|
Duration: time.Since(startTime),
|
||||||
|
FirstTokenMs: firstTokenMs,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -306,6 +314,8 @@ func (s *OpenAIGatewayService) bufferRawChatCompletions(
|
|||||||
originalModel string,
|
originalModel string,
|
||||||
billingModel string,
|
billingModel string,
|
||||||
upstreamModel string,
|
upstreamModel string,
|
||||||
|
reasoningEffort *string,
|
||||||
|
serviceTier *string,
|
||||||
startTime time.Time,
|
startTime time.Time,
|
||||||
) (*OpenAIForwardResult, error) {
|
) (*OpenAIForwardResult, error) {
|
||||||
requestID := resp.Header.Get("x-request-id")
|
requestID := resp.Header.Get("x-request-id")
|
||||||
@@ -340,13 +350,15 @@ func (s *OpenAIGatewayService) bufferRawChatCompletions(
|
|||||||
_, _ = c.Writer.Write(respBody)
|
_, _ = c.Writer.Write(respBody)
|
||||||
|
|
||||||
return &OpenAIForwardResult{
|
return &OpenAIForwardResult{
|
||||||
RequestID: requestID,
|
RequestID: requestID,
|
||||||
Usage: usage,
|
Usage: usage,
|
||||||
Model: originalModel,
|
Model: originalModel,
|
||||||
BillingModel: billingModel,
|
BillingModel: billingModel,
|
||||||
UpstreamModel: upstreamModel,
|
UpstreamModel: upstreamModel,
|
||||||
Stream: false,
|
ReasoningEffort: reasoningEffort,
|
||||||
Duration: time.Since(startTime),
|
ServiceTier: serviceTier,
|
||||||
|
Stream: false,
|
||||||
|
Duration: time.Since(startTime),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user