File size: 3,581 Bytes
76289e7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | import { describe, expect, it } from "vitest";
import { OPENCLAW_EMBEDDED_CONTEXT_ENGINE_HOST } from "./host-compat.js";
import { buildContextEngineRuntimeSettings } from "./runtime-settings.js";
describe("context engine runtime settings", () => {
it("builds declared normal runtime settings from host and model inputs", () => {
const settings = buildContextEngineRuntimeSettings({
contextEngineHost: OPENCLAW_EMBEDDED_CONTEXT_ENGINE_HOST,
harnessId: "embedded",
runtimeId: "direct",
provider: "openai",
requestedModel: "gpt-5.5",
resolvedModel: "gpt-5.5",
selectedContextEngineId: "hypermem",
contextEngineSelectionSource: "configured",
promptTokenBudget: 128_000,
maxOutputTokens: 8192,
});
expect(settings).toMatchObject({
schemaVersion: 1,
runtime: {
host: "openclaw",
mode: "normal",
harnessId: "embedded",
runtimeId: "direct",
},
model: {
requested: "gpt-5.5",
resolved: "gpt-5.5",
provider: "openai",
},
contextEngineSelection: {
selectedId: "hypermem",
source: "configured",
},
executionHost: {
id: OPENCLAW_EMBEDDED_CONTEXT_ENGINE_HOST.id,
label: OPENCLAW_EMBEDDED_CONTEXT_ENGINE_HOST.label,
},
limits: {
promptTokenBudget: 128_000,
maxOutputTokens: 8192,
},
diagnostics: {
fallbackReason: null,
degradedReason: null,
},
});
});
it("marks fallback mode when a fallback reason is present", () => {
const settings = buildContextEngineRuntimeSettings({
contextEngineHost: OPENCLAW_EMBEDDED_CONTEXT_ENGINE_HOST,
resolvedModel: "gpt-5-mini",
fallbackReason: "primary_unavailable",
});
expect(settings.runtime.mode).toBe("fallback");
expect(settings.diagnostics.fallbackReason).toBe("provider_unavailable");
});
it("preserves known fallback reason codes", () => {
const settings = buildContextEngineRuntimeSettings({
contextEngineHost: OPENCLAW_EMBEDDED_CONTEXT_ENGINE_HOST,
resolvedModel: "gpt-5-mini",
fallbackReason: "provider_timeout",
});
expect(settings.runtime.mode).toBe("fallback");
expect(settings.diagnostics.fallbackReason).toBe("provider_timeout");
});
it("marks fallback mode when resolved model differs from the requested model", () => {
const settings = buildContextEngineRuntimeSettings({
contextEngineHost: OPENCLAW_EMBEDDED_CONTEXT_ENGINE_HOST,
requestedModel: "openai/gpt-5.5",
resolvedModel: "anthropic/claude-sonnet-4-6",
});
expect(settings.runtime.mode).toBe("fallback");
expect(settings.diagnostics.fallbackReason).toBeNull();
});
it("marks degraded mode when a degraded reason is present", () => {
const settings = buildContextEngineRuntimeSettings({
contextEngineHost: OPENCLAW_EMBEDDED_CONTEXT_ENGINE_HOST,
resolvedModel: "gpt-5-mini",
degradedReason: "context_pressure_high",
});
expect(settings.runtime.mode).toBe("degraded");
expect(settings.diagnostics.degradedReason).toBe("context_overflow");
});
it("keeps host and selection ids nullable when unknown", () => {
const settings = buildContextEngineRuntimeSettings({
contextEngineHost: {
...OPENCLAW_EMBEDDED_CONTEXT_ENGINE_HOST,
id: "",
},
});
expect(settings.contextEngineSelection).toEqual({
selectedId: null,
source: "unknown",
});
expect(settings.executionHost.id).toBeNull();
});
});
|