feat: add dynamic x-api-provider and reasoning_effort support
- Add per-model provider configuration in config.json - Implement getModelProvider() to fetch provider from model config - Update all header generators to accept dynamic provider parameter - Add reasoning_effort field handling for common endpoint type - Support auto/low/medium/high/off reasoning levels for common models This enables flexible multi-provider support and reasoning control across different endpoint types (anthropic, openai, common).
This commit is contained in:
@@ -154,7 +154,7 @@ export function transformToAnthropic(openaiRequest) {
|
||||
return anthropicRequest;
|
||||
}
|
||||
|
||||
export function getAnthropicHeaders(authHeader, clientHeaders = {}, isStreaming = true, modelId = null) {
|
||||
export function getAnthropicHeaders(authHeader, clientHeaders = {}, isStreaming = true, modelId = null, provider = 'anthropic') {
|
||||
// Generate unique IDs if not provided
|
||||
const sessionId = clientHeaders['x-session-id'] || generateUUID();
|
||||
const messageId = clientHeaders['x-assistant-message-id'] || generateUUID();
|
||||
@@ -165,7 +165,7 @@ export function getAnthropicHeaders(authHeader, clientHeaders = {}, isStreaming
|
||||
'anthropic-version': clientHeaders['anthropic-version'] || '2023-06-01',
|
||||
'authorization': authHeader || '',
|
||||
'x-api-key': 'placeholder',
|
||||
'x-api-provider': 'anthropic',
|
||||
'x-api-provider': provider,
|
||||
'x-factory-client': 'cli',
|
||||
'x-session-id': sessionId,
|
||||
'x-assistant-message-id': messageId,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { logDebug } from '../logger.js';
|
||||
import { getSystemPrompt, getUserAgent } from '../config.js';
|
||||
import { getSystemPrompt, getUserAgent, getModelReasoning } from '../config.js';
|
||||
|
||||
export function transformToCommon(openaiRequest) {
|
||||
logDebug('Transforming OpenAI request to Common format');
|
||||
@@ -39,11 +39,25 @@ export function transformToCommon(openaiRequest) {
|
||||
}
|
||||
}
|
||||
|
||||
// Handle reasoning_effort field based on model configuration
|
||||
const reasoningLevel = getModelReasoning(openaiRequest.model);
|
||||
if (reasoningLevel === 'auto') {
|
||||
// Auto mode: preserve original request's reasoning_effort field exactly as-is
|
||||
// If original request has reasoning_effort field, keep it; otherwise don't add one
|
||||
} else if (reasoningLevel && ['low', 'medium', 'high'].includes(reasoningLevel)) {
|
||||
// Specific level: override with model configuration
|
||||
commonRequest.reasoning_effort = reasoningLevel;
|
||||
} else {
|
||||
// Off or invalid: explicitly remove reasoning_effort field
|
||||
// This ensures any reasoning_effort field from the original request is deleted
|
||||
delete commonRequest.reasoning_effort;
|
||||
}
|
||||
|
||||
logDebug('Transformed Common request', commonRequest);
|
||||
return commonRequest;
|
||||
}
|
||||
|
||||
export function getCommonHeaders(authHeader, clientHeaders = {}) {
|
||||
export function getCommonHeaders(authHeader, clientHeaders = {}, provider = 'baseten') {
|
||||
// Generate unique IDs if not provided
|
||||
const sessionId = clientHeaders['x-session-id'] || generateUUID();
|
||||
const messageId = clientHeaders['x-assistant-message-id'] || generateUUID();
|
||||
@@ -52,7 +66,7 @@ export function getCommonHeaders(authHeader, clientHeaders = {}) {
|
||||
'accept': 'application/json',
|
||||
'content-type': 'application/json',
|
||||
'authorization': authHeader || '',
|
||||
'x-api-provider': 'baseten',
|
||||
'x-api-provider': provider,
|
||||
'x-factory-client': 'cli',
|
||||
'x-session-id': sessionId,
|
||||
'x-assistant-message-id': messageId,
|
||||
|
||||
@@ -133,7 +133,7 @@ export function transformToOpenAI(openaiRequest) {
|
||||
return targetRequest;
|
||||
}
|
||||
|
||||
export function getOpenAIHeaders(authHeader, clientHeaders = {}) {
|
||||
export function getOpenAIHeaders(authHeader, clientHeaders = {}, provider = 'openai') {
|
||||
// Generate unique IDs if not provided
|
||||
const sessionId = clientHeaders['x-session-id'] || generateUUID();
|
||||
const messageId = clientHeaders['x-assistant-message-id'] || generateUUID();
|
||||
@@ -141,7 +141,7 @@ export function getOpenAIHeaders(authHeader, clientHeaders = {}) {
|
||||
const headers = {
|
||||
'content-type': 'application/json',
|
||||
'authorization': authHeader || '',
|
||||
'x-api-provider': 'openai',
|
||||
'x-api-provider': provider,
|
||||
'x-factory-client': 'cli',
|
||||
'x-session-id': sessionId,
|
||||
'x-assistant-message-id': messageId,
|
||||
|
||||
Reference in New Issue
Block a user