import { z } from "zod"; const envSchema = z.object({ OLLAMA_BASE_URL: z.string().url(), OLLAMA_MODEL: z.string().min(1), }); const openAIExperimentEnvSchema = z.object({ OPENAI_API_KEY: z.string().min(1), }); export const OPENAI_UI_JOURNEY_EXPERIMENT_PROVIDER = "openai"; export const OPENAI_TERRA_MODEL = "gpt-5.6-terra"; export function isOpenAIUiJourneyExperiment() { return process.env.CONFIDENCE_ENGINE_EXPERIMENT_PROVIDER === OPENAI_UI_JOURNEY_EXPERIMENT_PROVIDER; } export function getConfig() { if (isOpenAIUiJourneyExperiment()) { const parsed = openAIExperimentEnvSchema.safeParse({ OPENAI_API_KEY: process.env.OPENAI_API_KEY, }); if (!parsed.success) return { ok: false, error: parsed.error.flatten().fieldErrors }; return { ok: true, config: { provider: OPENAI_UI_JOURNEY_EXPERIMENT_PROVIDER, modelName: OPENAI_TERRA_MODEL }, }; } const parsed = envSchema.safeParse({ OLLAMA_BASE_URL: process.env.OLLAMA_BASE_URL, OLLAMA_MODEL: process.env.OLLAMA_MODEL, }); if (!parsed.success) { return { ok: false, error: parsed.error.flatten().fieldErrors }; } return { ok: true, config: { ...parsed.data, provider: "ollama", modelName: parsed.data.OLLAMA_MODEL } }; } export function assertConfig() { const result = getConfig(); if (!result.ok) { throw new Error( "Invalid configuration:\n" + Object.entries(result.error).map(([k, v]) => ` ${k}: ${v}`).join("\n") ); } return result.config; }