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", }) ); }); });