53 lines
1.5 KiB
JavaScript
53 lines
1.5 KiB
JavaScript
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;
|
|
}
|