You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

99 lines
2.8 KiB

import { beforeEach, describe, expect, it, vi } from "vitest";
const {
mockStreamText,
mockConvertToModelMessages,
mockStepCountIs,
mockCreateOpenAICompatible,
mockNewApiWGProvider,
} = vi.hoisted(() => ({
mockStreamText: vi.fn(),
mockConvertToModelMessages: vi.fn(),
mockStepCountIs: vi.fn(),
mockCreateOpenAICompatible: vi.fn(),
mockNewApiWGProvider: vi.fn(),
}));
vi.mock("ai", () => ({
streamText: mockStreamText,
convertToModelMessages: mockConvertToModelMessages,
stepCountIs: mockStepCountIs,
}));
vi.mock("@ai-sdk/openai-compatible", () => ({
createOpenAICompatible: mockCreateOpenAICompatible,
}));
vi.mock("@/lib/chat/tools", () => ({
buildEditSystemPrompt: vi.fn(() => "system prompt"),
createChatTools: vi.fn(() => ({ editWorkflow: {} })),
}));
vi.mock("@/lib/chat/contextBuilder", () => ({
buildWorkflowContext: vi.fn(() => ({ nodes: [] })),
}));
vi.mock("@/lib/chat/subgraphExtractor", () => ({
extractSubgraph: vi.fn(() => ({
selectedNodes: [],
selectedEdges: [],
restSummary: null,
})),
}));
import { POST } from "../route";
describe("/api/chat route", () => {
beforeEach(() => {
vi.clearAllMocks();
process.env.NEWAPIWG_API_KEY = "";
process.env.NEWAPIWG_BASE_URL = "";
mockNewApiWGProvider.mockReturnValue("newapiwg-model");
mockCreateOpenAICompatible.mockReturnValue(mockNewApiWGProvider);
mockConvertToModelMessages.mockResolvedValue([]);
mockStepCountIs.mockReturnValue("step-limit");
mockStreamText.mockReturnValue({
toUIMessageStreamResponse: () => new Response("ok"),
});
});
it("uses NewApiWG Doubao Seed 2.0 Lite for chat requests", async () => {
const request = new Request("http://localhost/api/chat", {
method: "POST",
headers: {
Authorization: "Bearer login-token",
"X-NewApiWG-Key": "browser-newapi-key",
"X-NewApiWG-Base-URL": "https://llmapitest.popi.art/v1",
},
body: JSON.stringify({
messages: [],
workflowState: { nodes: [], edges: [] },
selectedNodeIds: [],
}),
});
const response = await POST(request);
expect(response.status).toBe(200);
expect(mockCreateOpenAICompatible).toHaveBeenCalledWith({
name: "newapiwg",
apiKey: "browser-newapi-key",
baseURL: "https://llmapitest.popi.art/v1",
headers: {
"X-User-Authorization": "Bearer login-token",
"X-User-Token": "login-token",
token: "login-token",
},
});
expect(mockNewApiWGProvider).toHaveBeenCalledWith("doubao-seed-2-0-lite-260428");
expect(mockStreamText).toHaveBeenCalledWith(
expect.objectContaining({
model: "newapiwg-model",
system: "system prompt",
toolChoice: "auto",
stopWhen: "step-limit",
})
);
});
});