|
import { loadSettings, expandEnvVars } from '../config/index.js'; |
|
|
|
|
|
|
|
|
|
export interface SmartRoutingConfig { |
|
enabled: boolean; |
|
dbUrl: string; |
|
openaiApiBaseUrl: string; |
|
openaiApiKey: string; |
|
openaiApiEmbeddingModel: string; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function getSmartRoutingConfig(): SmartRoutingConfig { |
|
let settings = loadSettings(); |
|
const smartRoutingSettings: Partial<SmartRoutingConfig> = |
|
settings.systemConfig?.smartRouting || {}; |
|
|
|
return { |
|
|
|
enabled: getConfigValue( |
|
[process.env.SMART_ROUTING_ENABLED], |
|
smartRoutingSettings.enabled, |
|
false, |
|
parseBooleanEnvVar, |
|
), |
|
|
|
|
|
dbUrl: getConfigValue([process.env.DB_URL], smartRoutingSettings.dbUrl, '', expandEnvVars), |
|
|
|
|
|
openaiApiBaseUrl: getConfigValue( |
|
[process.env.OPENAI_API_BASE_URL], |
|
smartRoutingSettings.openaiApiBaseUrl, |
|
'https://api.openai.com/v1', |
|
expandEnvVars, |
|
), |
|
|
|
openaiApiKey: getConfigValue( |
|
[process.env.OPENAI_API_KEY], |
|
smartRoutingSettings.openaiApiKey, |
|
'', |
|
expandEnvVars, |
|
), |
|
|
|
openaiApiEmbeddingModel: getConfigValue( |
|
[process.env.OPENAI_API_EMBEDDING_MODEL], |
|
smartRoutingSettings.openaiApiEmbeddingModel, |
|
'text-embedding-3-small', |
|
expandEnvVars, |
|
), |
|
}; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function getConfigValue<T>( |
|
envVars: (string | undefined)[], |
|
settingsValue: any, |
|
defaultValue: T, |
|
transformer: (value: any) => T, |
|
): T { |
|
|
|
for (const envVar of envVars) { |
|
if (envVar !== undefined && envVar !== null && envVar !== '') { |
|
try { |
|
return transformer(envVar); |
|
} catch (error) { |
|
console.warn(`Failed to transform environment variable "${envVar}":`, error); |
|
continue; |
|
} |
|
} |
|
} |
|
|
|
|
|
if (settingsValue !== undefined && settingsValue !== null) { |
|
try { |
|
return transformer(settingsValue); |
|
} catch (error) { |
|
console.warn('Failed to transform settings value:', error); |
|
} |
|
} |
|
|
|
|
|
return defaultValue; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function parseBooleanEnvVar(value: string): boolean { |
|
if (typeof value === 'boolean') { |
|
return value; |
|
} |
|
|
|
if (typeof value !== 'string') { |
|
return false; |
|
} |
|
|
|
const normalized = value.toLowerCase().trim(); |
|
|
|
|
|
if (normalized === 'true' || normalized === '1' || normalized === 'yes' || normalized === 'on') { |
|
return true; |
|
} |
|
|
|
|
|
if ( |
|
normalized === 'false' || |
|
normalized === '0' || |
|
normalized === 'no' || |
|
normalized === 'off' || |
|
normalized === '' |
|
) { |
|
return false; |
|
} |
|
|
|
|
|
console.warn(`Unrecognized boolean value for smart routing: "${value}", defaulting to false`); |
|
return false; |
|
} |
|
|