Spracherkennung für: .ts vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]
import type { Model } from "@mariozechner/pi-ai";
import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
import type { OpenClawConfig } from "../config/config.js";
const createAnthropicVertexStreamFnForModel = vi.fn();
const ensureCustomApiRegistered = vi.fn();
const resolveProviderStreamFn = vi.fn();
const buildTransportAwareSimpleStreamFn = vi.fn();
const prepareTransportAwareSimpleModel = vi.fn();
vi.mock("./anthropic-vertex-stream.js", () => ({
createAnthropicVertexStreamFnForModel,
}));
vi.mock("./custom-api-registry.js", () => ({
ensureCustomApiRegistered,
}));
vi.mock("./provider-transport-stream.js", () => ({
buildTransportAwareSimpleStreamFn,
prepareTransportAwareSimpleModel,
}));
vi.mock("../plugins/provider-runtime.js", async () => {
const actual = await vi.importActual<typeof import("../plugins/provider-runtime.js")>(
"../plugins/provider-runtime.js",
);
return {
...actual,
resolveProviderStreamFn,
};
});
let prepareModelForSimpleCompletion: typeof import("./simple-completion-transport.j s").prepareModelForSimpleCompletion;
describe("prepareModelForSimpleCompletion", () => {
beforeAll(async () => {
({ prepareModelForSimpleCompletion } = await import("./simple-completion-transport.js"));
});
beforeEach(() => {
createAnthropicVertexStreamFnForModel.mockReset();
ensureCustomApiRegistered.mockReset();
resolveProviderStreamFn.mockReset();
buildTransportAwareSimpleStreamFn.mockReset();
prepareTransportAwareSimpleModel.mockReset();
createAnthropicVertexStreamFnForModel.mockReturnValue("vertex-stream");
resolveProviderStreamFn.mockReturnValue("ollama-stream");
buildTransportAwareSimpleStreamFn.mockReturnValue(undefined);
prepareTransportAwareSimpleModel.mockImplementation((model) => model);
});
it("registers the configured Ollama transport and keeps the original api", () => {
const model: Model<"ollama"> = {
id: "llama3",
name: "Llama 3",
api: "ollama",
provider: "ollama",
baseUrl: "http://localhost:11434",
reasoning: false,
input: ["text"],
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
contextWindow: 8192,
maxTokens: 4096,
headers: {},
};
const cfg: OpenClawConfig = {
models: {
providers: {
ollama: {
baseUrl: "http://remote-ollama:11434",
models: [],
},
},
},
};
const result = prepareModelForSimpleCompletion({
model,
cfg,
});
expect(resolveProviderStreamFn).toHaveBeenCalledWith(
expect.objectContaining({
provider: "ollama",
config: cfg,
context: expect.objectContaining({
provider: "ollama",
modelId: "llama3",
model,
}),
}),
);
expect(ensureCustomApiRegistered).toHaveBeenCalledWith("ollama", "ollama-stream");
expect(result).toBe(model);
});
it("uses a custom api alias for Anthropic Vertex simple completions", () => {
const model: Model<"anthropic-messages"> = {
id: "claude-sonnet",
name: "Claude Sonnet",
api: "anthropic-messages",
provider: "anthropic-vertex",
baseUrl: "https://us-central1-aiplatform.googleapis.com",
reasoning: true,
input: ["text"],
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
contextWindow: 200000,
maxTokens: 8192,
};
resolveProviderStreamFn.mockReturnValueOnce(undefined);
const result = prepareModelForSimpleCompletion({ model });
expect(createAnthropicVertexStreamFnForModel).toHaveBeenCalledWith(model);
expect(ensureCustomApiRegistered).toHaveBeenCalledWith(
"openclaw-anthropic-vertex-simple:https%3A%2F%2Fus-central1-aiplatform.googleapis.com",
"vertex-stream",
);
expect(result).toEqual({
...model,
api: "openclaw-anthropic-vertex-simple:https%3A%2F%2Fus-central1-aiplatform.googleapis.com",
});
});
it("uses a transport-aware custom api alias when llm request transport overrides are present", () => {
const model: Model<"openai-responses"> = {
id: "gpt-5",
name: "GPT-5",
api: "openai-responses",
provider: "openai",
baseUrl: "https://api.openai.com/v1",
reasoning: true,
input: ["text"],
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
contextWindow: 200000,
maxTokens: 8192,
};
resolveProviderStreamFn.mockReturnValueOnce(undefined);
buildTransportAwareSimpleStreamFn.mockReturnValueOnce("transport-stream");
prepareTransportAwareSimpleModel.mockReturnValueOnce({
...model,
api: "openclaw-openai-responses-transport",
});
const result = prepareModelForSimpleCompletion({ model });
expect(prepareTransportAwareSimpleModel).toHaveBeenCalledWith(model, { cfg: undefined });
expect(buildTransportAwareSimpleStreamFn).toHaveBeenCalledWith(model, { cfg: undefined });
expect(ensureCustomApiRegistered).toHaveBeenCalledWith(
"openclaw-openai-responses-transport",
"transport-stream",
);
expect(result).toEqual({
...model,
api: "openclaw-openai-responses-transport",
});
});
});
¤ Dauer der Verarbeitung: 0.24 Sekunden
(vorverarbeitet am 2026-04-27)
¤
*© Formatika GbR, Deutschland
|
|