provider-selector-model-redirect.test.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { describe, expect, test, vi } from "vitest";
  2. import type { Provider } from "@/types/provider";
  3. const circuitBreakerMocks = vi.hoisted(() => ({
  4. isCircuitOpen: vi.fn(async () => false),
  5. getCircuitState: vi.fn(() => "closed"),
  6. }));
  7. vi.mock("@/lib/circuit-breaker", () => circuitBreakerMocks);
  8. describe("ProxyProviderResolver.pickRandomProvider - model redirect", () => {
  9. test("filters providers using original model (not redirected current model)", async () => {
  10. const { ProxyProviderResolver } = await import("@/app/v1/_lib/proxy/provider-selector");
  11. vi.spyOn(ProxyProviderResolver as any, "filterByLimits").mockImplementation(
  12. async (...args: unknown[]) => args[0] as Provider[]
  13. );
  14. const providers: Provider[] = [
  15. {
  16. id: 1,
  17. name: "p1",
  18. isEnabled: true,
  19. providerType: "claude",
  20. groupTag: null,
  21. weight: 1,
  22. priority: 0,
  23. costMultiplier: 1,
  24. allowedModels: ["claude-test"],
  25. } as unknown as Provider,
  26. ];
  27. const session = {
  28. originalFormat: "claude",
  29. authState: null,
  30. getProvidersSnapshot: async () => providers,
  31. getOriginalModel: () => "claude-test",
  32. getCurrentModel: () => "glm-test",
  33. clientRequestsContext1m: () => false,
  34. } as any;
  35. const { provider, context } = await (ProxyProviderResolver as any).pickRandomProvider(
  36. session,
  37. []
  38. );
  39. expect(context.requestedModel).toBe("claude-test");
  40. expect(provider?.id).toBe(1);
  41. });
  42. });