experiment(confidence-engine): route UI journey provider centrally

This commit is contained in:
2026-09-07 09:35:53 +01:00
parent 642a969b18
commit bb3082d633
15 changed files with 158 additions and 17 deletions
+43
View File
@@ -4,6 +4,7 @@ import {
createOpenAIStrictSchema,
createOpenAIReconstructionProvider,
getProvider,
getProviderModelName,
normaliseOpenAITransportResponse,
reconstructionJsonSchema,
} from "@/lib/llm/provider.js";
@@ -11,6 +12,48 @@ import { reconstructionV2Schema } from "@/lib/reconstruction/schema.js";
import { z } from "zod";
describe("OllamaLlmProvider chat capability detection", () => {
it("keeps Ollama and its configured model when no experiment provider is selected", () => {
const previousExperimentProvider = process.env.CONFIDENCE_ENGINE_EXPERIMENT_PROVIDER;
const previousModel = process.env.OLLAMA_MODEL;
const previousOpenAIKey = process.env.OPENAI_API_KEY;
delete process.env.CONFIDENCE_ENGINE_EXPERIMENT_PROVIDER;
process.env.OLLAMA_MODEL = "qwen-default";
process.env.OPENAI_API_KEY = "present-but-not-selected";
try {
expect(getProvider().constructor.name).toBe("OllamaLlmProvider");
expect(getProviderModelName()).toBe("qwen-default");
} finally {
if (previousExperimentProvider === undefined) delete process.env.CONFIDENCE_ENGINE_EXPERIMENT_PROVIDER;
else process.env.CONFIDENCE_ENGINE_EXPERIMENT_PROVIDER = previousExperimentProvider;
if (previousModel === undefined) delete process.env.OLLAMA_MODEL;
else process.env.OLLAMA_MODEL = previousModel;
if (previousOpenAIKey === undefined) delete process.env.OPENAI_API_KEY;
else process.env.OPENAI_API_KEY = previousOpenAIKey;
}
});
it("selects the existing OpenAI provider and Terra only for the explicit experiment configuration", () => {
const previousExperimentProvider = process.env.CONFIDENCE_ENGINE_EXPERIMENT_PROVIDER;
const previousModel = process.env.OLLAMA_MODEL;
const previousOpenAIKey = process.env.OPENAI_API_KEY;
process.env.CONFIDENCE_ENGINE_EXPERIMENT_PROVIDER = "openai";
process.env.OPENAI_API_KEY = "test-key";
process.env.OLLAMA_MODEL = "qwen-default";
try {
expect(getProvider().constructor.name).toBe("OpenAIReconstructionProvider");
expect(getProviderModelName()).toBe("gpt-5.6-terra");
} finally {
if (previousExperimentProvider === undefined) delete process.env.CONFIDENCE_ENGINE_EXPERIMENT_PROVIDER;
else process.env.CONFIDENCE_ENGINE_EXPERIMENT_PROVIDER = previousExperimentProvider;
if (previousModel === undefined) delete process.env.OLLAMA_MODEL;
else process.env.OLLAMA_MODEL = previousModel;
if (previousOpenAIKey === undefined) delete process.env.OPENAI_API_KEY;
else process.env.OPENAI_API_KEY = previousOpenAIKey;
}
});
it("uses the configured model for the chat probe and keeps the chat path", async () => {
const originalBaseUrl = process.env.OLLAMA_BASE_URL;
const fetchSpy = vi.fn()