spb/zyquo-router Public MIT
One local endpoint, every AI provider — a private OpenAI-compatible LLM gateway for your Mac (170 models, 12 providers).
Swift 95.7%
Python 2.3%
Shell 1.2%
Makefile 0.9%
1//2// RequestRouterTests.swift3// Zyquo Router4//5// Author: Simon-Pierre Boucher6// Mail: contact@spboucher.ai7//8// Model-resolution rules: namespaced IDs, unambiguous bare IDs, aliases,9// disabled models, ambiguity across providers.10//1112import XCTest13@testable import ZyquoRouter1415final class RequestRouterTests: XCTestCase {16 private func model(_ id: String, _ provider: ProviderID) -> AIModel {17 AIModel(18 id: id,19 provider: provider,20 displayName: id,21 contextWindow: 128_000,22 maxOutputTokens: nil,23 capabilities: ModelCapabilities(),24 pricing: nil,25 parameterSupport: ParameterSupport()26 )27 }2829 private var router: RequestRouter {30 RequestRouter(31 catalog: [32 model("alpha-1", .openai),33 model("shared-model", .together),34 model("shared-model", .deepinfra),35 model("meta-llama/Llama-4", .deepinfra),36 ],37 aliases: ["fast": "openai/alpha-1"],38 disabledIDs: ["together/shared-model"]39 )40 }4142 func testNamespacedResolution() throws {43 let resolution = try router.resolve("openai/alpha-1")44 XCTAssertEqual(resolution.namespacedID, "openai/alpha-1")45 XCTAssertEqual(resolution.model.provider, .openai)46 }4748 func testBareIDUnambiguous() throws {49 XCTAssertEqual(try router.resolve("alpha-1").namespacedID, "openai/alpha-1")50 }5152 func testModelIDContainingSlash() throws {53 XCTAssertEqual(54 try router.resolve("deepinfra/meta-llama/Llama-4").namespacedID,55 "deepinfra/meta-llama/Llama-4"56 )57 // Bare form works too: "meta-llama" is not a provider prefix.58 XCTAssertEqual(59 try router.resolve("meta-llama/Llama-4").namespacedID,60 "deepinfra/meta-llama/Llama-4"61 )62 }6364 func testAlias() throws {65 XCTAssertEqual(try router.resolve("fast").namespacedID, "openai/alpha-1")66 }6768 func testAmbiguousBareID() {69 XCTAssertThrowsError(try router.resolve("shared-model")) { error in70 guard case RequestRouter.RoutingError.ambiguousModel(_, let candidates) = error else {71 return XCTFail("expected ambiguity, got \(error)")72 }73 XCTAssertEqual(Set(candidates), ["together/shared-model", "deepinfra/shared-model"])74 }75 }7677 func testDisabledModel() {78 XCTAssertThrowsError(try router.resolve("together/shared-model")) { error in79 guard case RequestRouter.RoutingError.disabledModel = error else {80 return XCTFail("expected disabled, got \(error)")81 }82 }83 }8485 func testUnknownModel() {86 XCTAssertThrowsError(try router.resolve("nope")) { error in87 guard case RequestRouter.RoutingError.unknownModel = error else {88 return XCTFail("expected unknown, got \(error)")89 }90 }91 }9293 func testFullCatalogHasNoAmbiguousNamespacedIDs() {94 let ids = ModelCatalogData.all.map { RequestRouter.namespacedID(for: $0) }95 XCTAssertEqual(ids.count, Set(ids).count, "namespaced IDs must be unique")96 }97}98