@jsonstudio/rcc 0.89.1189 → 0.89.1348
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -0
- package/configsamples/config.json +426 -0
- package/configsamples/config.reference.json +58 -0
- package/configsamples/provider/crs/config.v1.json +46 -0
- package/configsamples/provider/glm/config.v1.json +81 -0
- package/configsamples/provider/glm-anthropic/config.v1.json +45 -0
- package/configsamples/provider/iflow/config.v1.json +74 -0
- package/configsamples/provider/kimi/config.v1.json +41 -0
- package/configsamples/provider/lmstudio/config.v1.json +101 -0
- package/configsamples/provider/mimo/config.v1.json +35 -0
- package/configsamples/provider/modelscope/config.v1.json +96 -0
- package/configsamples/provider/qwen/config.v1.json +38 -0
- package/configsamples/provider/tab/config.v1.json +50 -0
- package/configsamples/provider/tabglm/config.v1.json +49 -0
- package/dist/build-info.js +2 -2
- package/dist/cli/commands/code.js +12 -6
- package/dist/cli/commands/code.js.map +1 -1
- package/dist/cli/commands/config.d.ts +2 -1
- package/dist/cli/commands/config.js +74 -103
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/examples.js +6 -6
- package/dist/cli/commands/examples.js.map +1 -1
- package/dist/cli/commands/init.d.ts +28 -0
- package/dist/cli/commands/init.js +91 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/port.js +10 -2
- package/dist/cli/commands/port.js.map +1 -1
- package/dist/cli/commands/restart.js +5 -2
- package/dist/cli/commands/restart.js.map +1 -1
- package/dist/cli/commands/start.js +25 -22
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/status.js +1 -0
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/stop.js +1 -0
- package/dist/cli/commands/stop.js.map +1 -1
- package/dist/cli/config/bundled-docs.d.ts +20 -0
- package/dist/cli/config/bundled-docs.js +91 -0
- package/dist/cli/config/bundled-docs.js.map +1 -0
- package/dist/cli/config/init-config.d.ts +36 -0
- package/dist/cli/config/init-config.js +180 -0
- package/dist/cli/config/init-config.js.map +1 -0
- package/dist/cli/config/init-provider-catalog.d.ts +8 -0
- package/dist/cli/config/init-provider-catalog.js +187 -0
- package/dist/cli/config/init-provider-catalog.js.map +1 -0
- package/dist/cli/register/init-command.d.ts +3 -0
- package/dist/cli/register/init-command.js +5 -0
- package/dist/cli/register/init-command.js.map +1 -0
- package/dist/cli.js +28 -3
- package/dist/cli.js.map +1 -1
- package/dist/client/gemini-cli/gemini-cli-protocol-client.js +1 -1
- package/dist/client/gemini-cli/gemini-cli-protocol-client.js.map +1 -1
- package/dist/config/risk-control-config.d.ts +94 -0
- package/dist/config/risk-control-config.js +196 -0
- package/dist/config/risk-control-config.js.map +1 -0
- package/dist/constants/index.d.ts +6 -0
- package/dist/constants/index.js +13 -0
- package/dist/constants/index.js.map +1 -1
- package/dist/docs/daemon-admin-ui.html +2113 -190
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/manager/modules/health/index.d.ts +1 -1
- package/dist/manager/modules/quota/antigravity-quota-manager.d.ts +70 -0
- package/dist/manager/modules/quota/antigravity-quota-manager.js +442 -0
- package/dist/manager/modules/quota/antigravity-quota-manager.js.map +1 -0
- package/dist/manager/modules/quota/index.d.ts +3 -127
- package/dist/manager/modules/quota/index.js +2 -1093
- package/dist/manager/modules/quota/index.js.map +1 -1
- package/dist/manager/modules/quota/provider-key-normalization.d.ts +3 -0
- package/dist/manager/modules/quota/provider-key-normalization.js +155 -0
- package/dist/manager/modules/quota/provider-key-normalization.js.map +1 -0
- package/dist/manager/modules/quota/provider-quota-daemon.cooldown.d.ts +9 -0
- package/dist/manager/modules/quota/provider-quota-daemon.cooldown.js +115 -0
- package/dist/manager/modules/quota/provider-quota-daemon.cooldown.js.map +1 -0
- package/dist/manager/modules/quota/provider-quota-daemon.d.ts +77 -0
- package/dist/manager/modules/quota/provider-quota-daemon.events.d.ts +12 -0
- package/dist/manager/modules/quota/provider-quota-daemon.events.js +237 -0
- package/dist/manager/modules/quota/provider-quota-daemon.events.js.map +1 -0
- package/dist/manager/modules/quota/provider-quota-daemon.js +404 -0
- package/dist/manager/modules/quota/provider-quota-daemon.js.map +1 -0
- package/dist/manager/modules/quota/provider-quota-daemon.model-backoff.d.ts +11 -0
- package/dist/manager/modules/quota/provider-quota-daemon.model-backoff.js +189 -0
- package/dist/manager/modules/quota/provider-quota-daemon.model-backoff.js.map +1 -0
- package/dist/manager/modules/quota/provider-quota-daemon.snapshot.d.ts +8 -0
- package/dist/manager/modules/quota/provider-quota-daemon.snapshot.js +96 -0
- package/dist/manager/modules/quota/provider-quota-daemon.snapshot.js.map +1 -0
- package/dist/manager/modules/quota/provider-quota-daemon.view.d.ts +19 -0
- package/dist/manager/modules/quota/provider-quota-daemon.view.js +37 -0
- package/dist/manager/modules/quota/provider-quota-daemon.view.js.map +1 -0
- package/dist/manager/modules/routing/index.d.ts +1 -0
- package/dist/manager/modules/routing/index.js +11 -25
- package/dist/manager/modules/routing/index.js.map +1 -1
- package/dist/manager/quota/provider-quota-center.d.ts +2 -0
- package/dist/manager/quota/provider-quota-center.js +80 -82
- package/dist/manager/quota/provider-quota-center.js.map +1 -1
- package/dist/modules/llmswitch/bridge.d.ts +16 -18
- package/dist/modules/llmswitch/bridge.js +314 -71
- package/dist/modules/llmswitch/bridge.js.map +1 -1
- package/dist/modules/llmswitch/core-loader.d.ts +4 -2
- package/dist/modules/llmswitch/core-loader.js +32 -20
- package/dist/modules/llmswitch/core-loader.js.map +1 -1
- package/dist/modules/pipeline/utils/colored-logger.js +3 -2
- package/dist/modules/pipeline/utils/colored-logger.js.map +1 -1
- package/dist/modules/pipeline/utils/debug-logger.js +1 -1
- package/dist/modules/pipeline/utils/debug-logger.js.map +1 -1
- package/dist/providers/auth/iflow-cookie-auth.js +0 -2
- package/dist/providers/auth/iflow-cookie-auth.js.map +1 -1
- package/dist/providers/auth/oauth-lifecycle.js +2 -23
- package/dist/providers/auth/oauth-lifecycle.js.map +1 -1
- package/dist/providers/core/config/camoufox-launcher.js +35 -4
- package/dist/providers/core/config/camoufox-launcher.js.map +1 -1
- package/dist/providers/core/runtime/antigravity-quota-client.js +6 -3
- package/dist/providers/core/runtime/antigravity-quota-client.js.map +1 -1
- package/dist/providers/core/runtime/base-provider.d.ts +2 -2
- package/dist/providers/core/runtime/base-provider.js +74 -69
- package/dist/providers/core/runtime/base-provider.js.map +1 -1
- package/dist/providers/core/runtime/gemini-cli-http-provider.js +6 -4
- package/dist/providers/core/runtime/gemini-cli-http-provider.js.map +1 -1
- package/dist/providers/core/runtime/http-request-executor.js +2 -2
- package/dist/providers/core/runtime/http-request-executor.js.map +1 -1
- package/dist/providers/core/runtime/http-transport-provider.d.ts +14 -0
- package/dist/providers/core/runtime/http-transport-provider.js +111 -5
- package/dist/providers/core/runtime/http-transport-provider.js.map +1 -1
- package/dist/providers/core/runtime/provider-error-classifier.js +10 -0
- package/dist/providers/core/runtime/provider-error-classifier.js.map +1 -1
- package/dist/providers/core/runtime/provider-factory.js +7 -5
- package/dist/providers/core/runtime/provider-factory.js.map +1 -1
- package/dist/providers/core/runtime/provider-runtime-metadata.d.ts +6 -0
- package/dist/providers/core/runtime/provider-runtime-metadata.js.map +1 -1
- package/dist/providers/core/runtime/responses-provider.d.ts +1 -7
- package/dist/providers/core/runtime/responses-provider.js +12 -93
- package/dist/providers/core/runtime/responses-provider.js.map +1 -1
- package/dist/providers/core/strategies/oauth-auth-code-flow.js +12 -8
- package/dist/providers/core/strategies/oauth-auth-code-flow.js.map +1 -1
- package/dist/providers/core/utils/http-client.js +16 -3
- package/dist/providers/core/utils/http-client.js.map +1 -1
- package/dist/providers/core/utils/provider-error-logger.d.ts +1 -1
- package/dist/providers/core/utils/provider-error-reporter.d.ts +3 -1
- package/dist/providers/core/utils/provider-error-reporter.js +3 -0
- package/dist/providers/core/utils/provider-error-reporter.js.map +1 -1
- package/dist/providers/core/utils/snapshot-writer.js +1 -4
- package/dist/providers/core/utils/snapshot-writer.js.map +1 -1
- package/dist/providers/mock/mock-provider-runtime.js +57 -27
- package/dist/providers/mock/mock-provider-runtime.js.map +1 -1
- package/dist/scripts/camoufox/launch-auth.mjs +193 -58
- package/dist/server/handlers/handler-utils.js +3 -2
- package/dist/server/handlers/handler-utils.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/auth-handler.d.ts +2 -0
- package/dist/server/runtime/http-server/daemon-admin/auth-handler.js +103 -0
- package/dist/server/runtime/http-server/daemon-admin/auth-handler.js.map +1 -0
- package/dist/server/runtime/http-server/daemon-admin/auth-session.d.ts +5 -0
- package/dist/server/runtime/http-server/daemon-admin/auth-session.js +77 -0
- package/dist/server/runtime/http-server/daemon-admin/auth-session.js.map +1 -0
- package/dist/server/runtime/http-server/daemon-admin/auth-store.d.ts +18 -0
- package/dist/server/runtime/http-server/daemon-admin/auth-store.js +89 -0
- package/dist/server/runtime/http-server/daemon-admin/auth-store.js.map +1 -0
- package/dist/server/runtime/http-server/daemon-admin/credentials-handler.js +1 -2
- package/dist/server/runtime/http-server/daemon-admin/credentials-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/providers-handler.js +226 -24
- package/dist/server/runtime/http-server/daemon-admin/providers-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/quota-handler.js +47 -8
- package/dist/server/runtime/http-server/daemon-admin/quota-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/restart-handler.js +1 -1
- package/dist/server/runtime/http-server/daemon-admin/restart-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/stats-handler.js +1 -1
- package/dist/server/runtime/http-server/daemon-admin/stats-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/status-handler.js +68 -4
- package/dist/server/runtime/http-server/daemon-admin/status-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin-routes.d.ts +3 -4
- package/dist/server/runtime/http-server/daemon-admin-routes.js +9 -14
- package/dist/server/runtime/http-server/daemon-admin-routes.js.map +1 -1
- package/dist/server/runtime/http-server/executor-metadata.js +1 -1
- package/dist/server/runtime/http-server/executor-metadata.js.map +1 -1
- package/dist/server/runtime/http-server/executor-response.js +0 -16
- package/dist/server/runtime/http-server/executor-response.js.map +1 -1
- package/dist/server/runtime/http-server/hub-shadow-compare.d.ts +18 -0
- package/dist/server/runtime/http-server/hub-shadow-compare.js +256 -0
- package/dist/server/runtime/http-server/hub-shadow-compare.js.map +1 -0
- package/dist/server/runtime/http-server/index.d.ts +7 -2
- package/dist/server/runtime/http-server/index.js +287 -49
- package/dist/server/runtime/http-server/index.js.map +1 -1
- package/dist/server/runtime/http-server/middleware.js +19 -1
- package/dist/server/runtime/http-server/middleware.js.map +1 -1
- package/dist/server/runtime/http-server/request-executor.js +10 -19
- package/dist/server/runtime/http-server/request-executor.js.map +1 -1
- package/dist/server/runtime/http-server/routes.js +8 -2
- package/dist/server/runtime/http-server/routes.js.map +1 -1
- package/dist/server/runtime/http-server/session-dir.d.ts +2 -0
- package/dist/server/runtime/http-server/session-dir.js +59 -0
- package/dist/server/runtime/http-server/session-dir.js.map +1 -0
- package/dist/server/runtime/http-server/types.d.ts +0 -4
- package/dist/server/utils/utf8-chunk-buffer.js +6 -3
- package/dist/server/utils/utf8-chunk-buffer.js.map +1 -1
- package/dist/server/utils/warmup-storm-tracker.js +1 -1
- package/dist/server/utils/warmup-storm-tracker.js.map +1 -1
- package/dist/server-factory.d.ts +6 -28
- package/dist/server-factory.js +8 -93
- package/dist/server-factory.js.map +1 -1
- package/dist/token-daemon/index.js +2 -2
- package/dist/token-daemon/index.js.map +1 -1
- package/dist/token-daemon/provider-registry.js +0 -1
- package/dist/token-daemon/provider-registry.js.map +1 -1
- package/dist/token-daemon/server-utils.js +8 -9
- package/dist/token-daemon/server-utils.js.map +1 -1
- package/dist/token-daemon/token-utils.js +1 -1
- package/dist/token-daemon/token-utils.js.map +1 -1
- package/dist/tools/semantic-replay.js +2 -2
- package/dist/tools/semantic-replay.js.map +1 -1
- package/dist/tools/stats-request-events.d.ts +1 -1
- package/dist/tools/stats-usage.js +6 -3
- package/dist/tools/stats-usage.js.map +1 -1
- package/dist/utils/errorsamples.d.ts +5 -0
- package/dist/utils/errorsamples.js +27 -0
- package/dist/utils/errorsamples.js.map +1 -0
- package/dist/utils/llms-engine-shadow.d.ts +19 -0
- package/dist/utils/llms-engine-shadow.js +209 -0
- package/dist/utils/llms-engine-shadow.js.map +1 -0
- package/dist/utils/runtime-versions.d.ts +1 -0
- package/dist/utils/runtime-versions.js +39 -0
- package/dist/utils/runtime-versions.js.map +1 -0
- package/docs/ARCHITECTURE.md +402 -0
- package/docs/CODEX_AND_CLAUDE_CODE.md +69 -0
- package/docs/CONFIG_ARCHITECTURE.md +517 -0
- package/docs/ERROR_HANDLING_AUDIT.md +0 -0
- package/docs/GCLI2API_PARITY_GAPS.md +98 -0
- package/docs/INSTALLATION_AND_QUICKSTART.md +74 -0
- package/docs/INSTRUCTION_MARKUP.md +89 -0
- package/docs/MODULE_ENHANCEMENT_SYSTEM.md +666 -0
- package/docs/PORTS.md +36 -0
- package/docs/PROVIDERS_BUILTIN.md +111 -0
- package/docs/PROVIDER_TYPES.md +55 -0
- package/docs/SERVERTOOL_CLOCK_DESIGN.md +233 -0
- package/docs/USAGE_HANDLING_ANALYSIS.md +335 -0
- package/docs/USER_CONFIG_PARSER_CHANGES.md +175 -0
- package/docs/V3_INBOUND_OUTBOUND_DESIGN.md +86 -0
- package/docs/VIRTUAL_ROUTER_PRIORITY_AND_HEALTH.md +125 -0
- package/docs/anthropic-request-golden-samples.md +50 -0
- package/docs/ccr-alignment-enhancetool.md +105 -0
- package/docs/chat-glm-500-analysis.md +79 -0
- package/docs/chat-request-golden-samples.md +42 -0
- package/docs/chat-semantic-expansion-plan.md +82 -0
- package/docs/cli-command-inventory.md +76 -0
- package/docs/codex-samples-replay.md +50 -0
- package/docs/daemon-admin-api-design.md +350 -0
- package/docs/daemon-admin-module-structure.md +169 -0
- package/docs/daemon-admin-ui.html +3394 -0
- package/docs/debug-system-design.md +734 -0
- package/docs/debugging/gemini-sse-root-cause.md +52 -0
- package/docs/debugging/sse_encoding_failure_analysis.md +53 -0
- package/docs/dry-run/README.md +721 -0
- package/docs/error-handling-v2.md +92 -0
- package/docs/exec-command-guard-policy.example.v1.json +42 -0
- package/docs/fixes/gemini-protocol-mapping.md +57 -0
- package/docs/fixes/oauth-portal-timing-fix.md +202 -0
- package/docs/fixes/web-search-hop3-fix.md +265 -0
- package/docs/glm-api-reference.md +390 -0
- package/docs/glm-chat-completions.md +1779 -0
- package/docs/glm-history-inline-images.md +44 -0
- package/docs/golden-ci-library.md +66 -0
- package/docs/lmstudio-dry-run-summary.md +203 -0
- package/docs/lmstudio-tool-calling.md +214 -0
- package/docs/mapping-tables/anthropic-to-openai.json +290 -0
- package/docs/mapping-tables/iflow-to-openai.json +215 -0
- package/docs/mapping-tables/openai-passthrough.json +190 -0
- package/docs/mapping-tables/openai-to-iflow.json +227 -0
- package/docs/monitoring/Design.md +61 -0
- package/docs/multi-token-auth-guide.md +66 -0
- package/docs/oauth-authentication-guide.md +168 -0
- package/docs/oauth-iflow-implementation.md +153 -0
- package/docs/pipeline-routing-report.md +209 -0
- package/docs/plans/manager-daemon/PLAN.md +86 -0
- package/docs/plans/provider-config-v2-plan.md +176 -0
- package/docs/plans/provider-runtime-manager-plan.md +209 -0
- package/docs/plans/transparent-429-failover.md +89 -0
- package/docs/plans/unified-hub-framework-v1.md +245 -0
- package/docs/provider-config-v2-ui-design.md +181 -0
- package/docs/provider-quota-design.md +129 -0
- package/docs/providers/gemini-provider.md +62 -0
- package/docs/providers/lmstudio-v2-migration-report.md +102 -0
- package/docs/providers/provider-composite-design.md +142 -0
- package/docs/providers/provider-composite-testing.md +98 -0
- package/docs/providers/provider-type-only-migration.md +111 -0
- package/docs/rccx-wasm-migration.md +74 -0
- package/docs/refactoring/architecture-comparison-diagram.md +140 -0
- package/docs/refactoring/compatibility-v2-architecture-design.md +738 -0
- package/docs/refactoring/workflow-compatibility-refactoring-design.md +361 -0
- package/docs/reports/routing-classification-report.json +24 -0
- package/docs/reports/routing-classification-report.md +18 -0
- package/docs/reports/thinking-keywords-report.json +19 -0
- package/docs/responses/README.md +156 -0
- package/docs/responses-generic-provider.md +86 -0
- package/docs/responses-passthrough-provider-design.md +202 -0
- package/docs/routing-awrr-health-weighted-round-robin.md +179 -0
- package/docs/routing-instructions.md +393 -0
- package/docs/stop-message-auto.md +225 -0
- package/docs/streaming-flow.html +30 -0
- package/docs/streaming-flow.md +182 -0
- package/docs/token-daemon-preview.html +490 -0
- package/docs/token-refresh-daemon-plan.md +269 -0
- package/docs/transformation-tables/Gemini-FinishReason/345/256/214/346/225/264/350/275/254/346/215/242/350/241/250.json +233 -0
- package/docs/transformation-tables/README.md +225 -0
- package/docs/transformation-tables/claude-code-router-anthropic-to-gemini.json +283 -0
- package/docs/transformation-tables/claude-code-router-anthropic-to-openai.json +208 -0
- package/docs/transformation-tables/claude-code-router-openai-to-anthropic.json +261 -0
- package/docs/transformation-tables/claude-code-router-openai-to-gemini.json +208 -0
- package/docs/transformation-tables/claude-code-router-openai-to-lmstudio.json +182 -0
- package/docs/transformation-tables/claude-code-router-openai-to-ollama.json +250 -0
- package/docs/transformation-tables/claude-code-router-openai-to-textgenwebui.json +295 -0
- package/docs/transformation-tables/claude-code-router-provider-conversions.json +193 -0
- package/docs/transformation-tables//345/256/214/346/225/264/347/232/204/345/267/245/345/205/267/346/211/247/350/241/214/346/265/201/347/250/213/350/275/254/346/215/242/350/241/250.json +299 -0
- package/docs/transformation-tables//345/257/271/350/257/235/345/216/206/345/217/262/347/273/264/346/212/244/345/210/206/346/236/220.md +134 -0
- package/docs/transformation-tables//345/267/245/345/205/267/350/260/203/347/224/250/346/250/241/345/274/217/345/210/206/346/236/220.md +158 -0
- package/docs/transformation-tables//347/212/266/346/200/201/347/256/241/347/220/206/351/234/200/346/261/202/345/210/206/346/236/220.md +175 -0
- package/docs/transformation-tables//351/235/231/346/200/201/350/241/250vs/345/212/250/346/200/201/345/210/206/346/236/220.md +189 -0
- package/docs/transformation-tables//351/235/231/346/200/201/350/241/250/345/207/206/347/241/256/346/200/247/350/257/204/344/274/260.md +179 -0
- package/docs/transformation-tables//351/235/236/346/265/201/345/274/217/345/234/272/346/231/257/345/210/206/346/236/220.md +189 -0
- package/docs/v2-architecture/IMPLEMENTATION-ROADMAP.md +367 -0
- package/docs/v2-architecture/OPTIMIZED-DESIGN.md +827 -0
- package/docs/v2-architecture/PRERUN-CONNECTION-DESIGN.md +716 -0
- package/docs/v2-architecture/README.md +551 -0
- package/docs/verification/modelscope-verify.md +59 -0
- package/docs/web-search-service-design.md +322 -0
- package/package.json +12 -7
- package/scripts/camoufox/launch-auth.mjs +193 -58
- package/scripts/monitor-diff.mjs +126 -0
- package/scripts/pack-mode.mjs +19 -1
- package/scripts/pack-rcc.mjs +63 -0
- package/scripts/unified-hub-shadow-compare.mjs +33 -13
- package/scripts/verify-e2e-toolcall.mjs +115 -26
- package/dist/modules/llmswitch/pipeline-registry.d.ts +0 -57
- package/dist/modules/llmswitch/pipeline-registry.js +0 -229
- package/dist/modules/llmswitch/pipeline-registry.js.map +0 -1
- package/dist/server/RouteCodexServer.d.ts +0 -13
- package/dist/server/RouteCodexServer.js +0 -25
- package/dist/server/RouteCodexServer.js.map +0 -1
- package/dist/v2/conversion/hub/snapshot-recorder.d.ts +0 -12
- package/dist/v2/conversion/hub/snapshot-recorder.js +0 -22
- package/dist/v2/conversion/hub/snapshot-recorder.js.map +0 -1
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
# Claude Code Router Transformation Tables Reference
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This document contains comprehensive transformation tables extracted from the Claude Code Router repository. The tables describe how to convert between different LLM API formats, focusing on Anthropic, OpenAI, and Gemini protocols, as well as various OpenAI-compatible providers.
|
|
6
|
+
|
|
7
|
+
## Architecture Analysis
|
|
8
|
+
|
|
9
|
+
The Claude Code Router uses an **agent-based architecture** rather than static transformation tables. Protocol conversion happens dynamically through:
|
|
10
|
+
|
|
11
|
+
1. **Agent System**: Different agents handle specific types of requests (e.g., image processing)
|
|
12
|
+
2. **Stream Processing**: Real-time transformation of streaming responses
|
|
13
|
+
3. **Tool Integration**: Dynamic tool calling and response handling
|
|
14
|
+
4. **Configuration-Driven**: JSON-based configuration for routing and transformation
|
|
15
|
+
|
|
16
|
+
## Transformation Tables
|
|
17
|
+
|
|
18
|
+
### 1. Anthropic ↔ OpenAI Conversion
|
|
19
|
+
|
|
20
|
+
**File**: `claude-code-router-anthropic-to-openai.json`
|
|
21
|
+
**Reverse**: `claude-code-router-openai-to-anthropic.json`
|
|
22
|
+
|
|
23
|
+
#### Key Mappings:
|
|
24
|
+
- **Model Mapping**: Claude models → GPT models
|
|
25
|
+
- `claude-3-5-sonnet-20241022` → `gpt-4o`
|
|
26
|
+
- `claude-3-5-haiku-20241022` → `gpt-4o-mini`
|
|
27
|
+
- `claude-3-opus-20240229` → `gpt-4-turbo`
|
|
28
|
+
|
|
29
|
+
- **Message Structure**:
|
|
30
|
+
- Anthropic: `{type: "text", text: "content"}`
|
|
31
|
+
- OpenAI: `{role: "user", content: "content"}`
|
|
32
|
+
|
|
33
|
+
- **Tool Calling**:
|
|
34
|
+
- Anthropic: `tool_use` with `input` object
|
|
35
|
+
- OpenAI: `tool_calls` with `arguments` string
|
|
36
|
+
|
|
37
|
+
- **Streaming Events**:
|
|
38
|
+
- `content_block_start` → `tool_calls_start`
|
|
39
|
+
- `content_block_delta` → `tool_calls_delta`
|
|
40
|
+
- `content_block_stop` → `tool_calls_stop`
|
|
41
|
+
|
|
42
|
+
### 2. Anthropic ↔ Gemini Conversion
|
|
43
|
+
|
|
44
|
+
**File**: `claude-code-router-anthropic-to-gemini.json`
|
|
45
|
+
|
|
46
|
+
#### Key Mappings:
|
|
47
|
+
- **Model Mapping**: Claude models → Gemini models
|
|
48
|
+
- `claude-3-5-sonnet-20241022` → `gemini-1.5-pro`
|
|
49
|
+
- `claude-3-5-haiku-20241022` → `gemini-1.5-flash`
|
|
50
|
+
|
|
51
|
+
- **Message Structure**:
|
|
52
|
+
- Anthropic: `messages` array
|
|
53
|
+
- Gemini: `contents` array with `parts`
|
|
54
|
+
|
|
55
|
+
- **Parameters**:
|
|
56
|
+
- `max_tokens` → `generationConfig.maxOutputTokens`
|
|
57
|
+
- `temperature` → `generationConfig.temperature`
|
|
58
|
+
- `stop_sequences` → `generationConfig.stopSequences`
|
|
59
|
+
|
|
60
|
+
### 3. OpenAI → Compatible Providers
|
|
61
|
+
|
|
62
|
+
#### LMStudio
|
|
63
|
+
**File**: `claude-code-router-openai-to-lmstudio.json`
|
|
64
|
+
- **Direct Mapping**: LMStudio is fully OpenAI-compatible
|
|
65
|
+
- **No Transformation Needed**: Same API structure
|
|
66
|
+
- **Local Model Support**: Handles model loading dynamically
|
|
67
|
+
|
|
68
|
+
#### Ollama
|
|
69
|
+
**File**: `claude-code-router-openai-to-ollama.json`
|
|
70
|
+
- **Endpoint Changes**: `/v1/chat/completions` → `/api/chat`
|
|
71
|
+
- **Parameter Mapping**: `max_tokens` → `options.num_predict`
|
|
72
|
+
- **Stream Format**: JSON lines instead of SSE
|
|
73
|
+
- **No Authentication**: Removes API key requirements
|
|
74
|
+
|
|
75
|
+
#### Text Generation WebUI
|
|
76
|
+
**File**: `claude-code-router-openai-to-textgenwebui.json`
|
|
77
|
+
- **Full Compatibility**: OpenAI-compatible endpoints
|
|
78
|
+
- **Extended Parameters**: Additional generation parameters
|
|
79
|
+
- **Multiple Backends**: Supports various model backends
|
|
80
|
+
|
|
81
|
+
## Agent System Patterns
|
|
82
|
+
|
|
83
|
+
### Image Processing Agent
|
|
84
|
+
The Claude Code Router includes a specialized image processing agent:
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
class ImageAgent implements IAgent {
|
|
88
|
+
name = "image";
|
|
89
|
+
tools: Map<string, ITool>;
|
|
90
|
+
|
|
91
|
+
// Image caching mechanism
|
|
92
|
+
private imageCache: ImageCache;
|
|
93
|
+
|
|
94
|
+
// Tool: analyzeImage
|
|
95
|
+
tools.set('analyzeImage', {
|
|
96
|
+
name: "analyzeImage",
|
|
97
|
+
description: "Analyse image or images by ID and extract information...",
|
|
98
|
+
parameters: {
|
|
99
|
+
imageId: "array of IDs to analyse",
|
|
100
|
+
task: "detailed task description",
|
|
101
|
+
regions: "optional regions of interest"
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Stream Processing
|
|
108
|
+
The router uses sophisticated stream processing:
|
|
109
|
+
|
|
110
|
+
```typescript
|
|
111
|
+
// SSE Parser Transform
|
|
112
|
+
class SSEParserTransform extends TransformStream<string, any> {
|
|
113
|
+
// Parses Server-Sent Events into structured data
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// SSE Serializer Transform
|
|
117
|
+
class SSESerializerTransform extends TransformStream<any, string> {
|
|
118
|
+
// Serializes structured data back to SSE format
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Configuration Patterns
|
|
123
|
+
|
|
124
|
+
### Router Configuration
|
|
125
|
+
```typescript
|
|
126
|
+
interface RouterConfig {
|
|
127
|
+
providers: ProviderConfig[];
|
|
128
|
+
HOST: string;
|
|
129
|
+
PORT: number;
|
|
130
|
+
APIKEY?: string;
|
|
131
|
+
Router: {
|
|
132
|
+
image?: string; // Image model for agent
|
|
133
|
+
default?: string; // Default model
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Agent Configuration
|
|
139
|
+
```typescript
|
|
140
|
+
interface AgentConfig {
|
|
141
|
+
name: string;
|
|
142
|
+
tools: Map<string, ITool>;
|
|
143
|
+
shouldHandle: (req: any, config: any) => boolean;
|
|
144
|
+
reqHandler: (req: any, config: any) => void;
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Transformation Patterns
|
|
149
|
+
|
|
150
|
+
### 1. Content Structure Conversion
|
|
151
|
+
- **Text Content**: Direct mapping with role/type conversion
|
|
152
|
+
- **Image Content**: URL/source format conversion with caching
|
|
153
|
+
- **Tool Content**: Function call format conversion
|
|
154
|
+
|
|
155
|
+
### 2. Parameter Mapping
|
|
156
|
+
- **Direct Mapping**: Same parameter name and value
|
|
157
|
+
- **Nested Mapping**: Parameter moved to nested object
|
|
158
|
+
- **Value Transformation**: Parameter value conversion
|
|
159
|
+
- **Array Processing**: Stop sequences and similar array parameters
|
|
160
|
+
|
|
161
|
+
### 3. Stream Event Mapping
|
|
162
|
+
- **Event Type Conversion**: Different event names for same concept
|
|
163
|
+
- **Data Structure Conversion**: Different data formats for same information
|
|
164
|
+
- **Tool Call Handling**: Special handling for tool calling in streams
|
|
165
|
+
|
|
166
|
+
### 4. Error Handling
|
|
167
|
+
- **Error Format**: Different error response structures
|
|
168
|
+
- **Error Codes**: Provider-specific error codes
|
|
169
|
+
- **Error Messages**: Human-readable error descriptions
|
|
170
|
+
|
|
171
|
+
## Best Practices
|
|
172
|
+
|
|
173
|
+
### 1. Model Mapping
|
|
174
|
+
- Use appropriate model equivalents
|
|
175
|
+
- Consider model capabilities and limitations
|
|
176
|
+
- Handle model-specific features
|
|
177
|
+
|
|
178
|
+
### 2. Message Structure
|
|
179
|
+
- Preserve conversation context
|
|
180
|
+
- Handle role conversions correctly
|
|
181
|
+
- Maintain message order and relationships
|
|
182
|
+
|
|
183
|
+
### 3. Tool Calling
|
|
184
|
+
- Convert function signatures appropriately
|
|
185
|
+
- Handle parameter serialization/deserialization
|
|
186
|
+
- Manage tool call IDs and references
|
|
187
|
+
|
|
188
|
+
### 4. Stream Processing
|
|
189
|
+
- Handle chunked responses correctly
|
|
190
|
+
- Maintain stream state and context
|
|
191
|
+
- Process events in correct order
|
|
192
|
+
|
|
193
|
+
### 5. Error Handling
|
|
194
|
+
- Provide meaningful error messages
|
|
195
|
+
- Handle provider-specific errors
|
|
196
|
+
- Maintain API compatibility
|
|
197
|
+
|
|
198
|
+
## Implementation Notes
|
|
199
|
+
|
|
200
|
+
### 1. Performance Considerations
|
|
201
|
+
- Use caching for frequently accessed data
|
|
202
|
+
- Minimize transformation overhead
|
|
203
|
+
- Optimize stream processing
|
|
204
|
+
|
|
205
|
+
### 2. Compatibility
|
|
206
|
+
- Test with multiple provider versions
|
|
207
|
+
- Handle API version differences
|
|
208
|
+
- Maintain backward compatibility
|
|
209
|
+
|
|
210
|
+
### 3. Extensibility
|
|
211
|
+
- Design for new providers
|
|
212
|
+
- Support custom transformations
|
|
213
|
+
- Allow configuration overrides
|
|
214
|
+
|
|
215
|
+
## Conclusion
|
|
216
|
+
|
|
217
|
+
The Claude Code Router demonstrates a sophisticated approach to LLM API conversion through its agent-based architecture. While it doesn't use static transformation tables, the patterns observed provide valuable insights for building similar systems. The key takeaways are:
|
|
218
|
+
|
|
219
|
+
1. **Dynamic Processing**: Handle conversions at runtime rather than static mappings
|
|
220
|
+
2. **Stream Processing**: Real-time transformation of streaming responses
|
|
221
|
+
3. **Agent Architecture**: Specialized agents for specific types of requests
|
|
222
|
+
4. **Configuration-Driven**: Flexible configuration system for routing and transformation
|
|
223
|
+
5. **Extensibility**: Design for adding new providers and features
|
|
224
|
+
|
|
225
|
+
These transformation tables serve as a reference for understanding the patterns and mappings needed for LLM API conversion, which can be adapted for other systems and use cases.
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
{
|
|
2
|
+
"sourceProvider": "Anthropic",
|
|
3
|
+
"targetProvider": "Gemini",
|
|
4
|
+
"description": "Transformation table for converting Anthropic API format to Google Gemini API format",
|
|
5
|
+
"version": "1.0",
|
|
6
|
+
"requestMappings": {
|
|
7
|
+
"model": {
|
|
8
|
+
"sourcePath": "model",
|
|
9
|
+
"targetPath": "model",
|
|
10
|
+
"transform": "modelMapping",
|
|
11
|
+
"mapping": {
|
|
12
|
+
"claude-3-5-sonnet-20241022": "gemini-1.5-pro",
|
|
13
|
+
"claude-3-5-haiku-20241022": "gemini-1.5-flash",
|
|
14
|
+
"claude-3-opus-20240229": "gemini-1.0-pro",
|
|
15
|
+
"claude-3-sonnet-20240229": "gemini-1.0-pro",
|
|
16
|
+
"claude-3-haiku-20240307": "gemini-1.0-pro"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"messages": {
|
|
20
|
+
"sourcePath": "messages",
|
|
21
|
+
"targetPath": "contents",
|
|
22
|
+
"transform": "messageToContentsConversion",
|
|
23
|
+
"conversionRules": {
|
|
24
|
+
"system": {
|
|
25
|
+
"targetType": "system_instruction",
|
|
26
|
+
"parts": [
|
|
27
|
+
{
|
|
28
|
+
"text": "string"
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
"user": {
|
|
33
|
+
"targetType": "user",
|
|
34
|
+
"parts": [
|
|
35
|
+
{
|
|
36
|
+
"text": "string"
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
"assistant": {
|
|
41
|
+
"targetType": "model",
|
|
42
|
+
"parts": [
|
|
43
|
+
{
|
|
44
|
+
"text": "string"
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"maxTokens": {
|
|
51
|
+
"sourcePath": "max_tokens",
|
|
52
|
+
"targetPath": "generationConfig.maxOutputTokens",
|
|
53
|
+
"transform": "directMapping"
|
|
54
|
+
},
|
|
55
|
+
"temperature": {
|
|
56
|
+
"sourcePath": "temperature",
|
|
57
|
+
"targetPath": "generationConfig.temperature",
|
|
58
|
+
"transform": "directMapping"
|
|
59
|
+
},
|
|
60
|
+
"topP": {
|
|
61
|
+
"sourcePath": "top_p",
|
|
62
|
+
"targetPath": "generationConfig.topP",
|
|
63
|
+
"transform": "directMapping"
|
|
64
|
+
},
|
|
65
|
+
"topK": {
|
|
66
|
+
"sourcePath": "top_k",
|
|
67
|
+
"targetPath": "generationConfig.topK",
|
|
68
|
+
"transform": "directMapping"
|
|
69
|
+
},
|
|
70
|
+
"stopSequences": {
|
|
71
|
+
"sourcePath": "stop_sequences",
|
|
72
|
+
"targetPath": "generationConfig.stopSequences",
|
|
73
|
+
"transform": "arrayMapping"
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"responseMappings": {
|
|
77
|
+
"candidates": {
|
|
78
|
+
"sourcePath": "content",
|
|
79
|
+
"targetPath": "candidates",
|
|
80
|
+
"transform": "contentToCandidatesConversion"
|
|
81
|
+
},
|
|
82
|
+
"usageMetadata": {
|
|
83
|
+
"sourcePath": "usage",
|
|
84
|
+
"targetPath": "usageMetadata",
|
|
85
|
+
"transform": "usageToUsageMetadataConversion"
|
|
86
|
+
},
|
|
87
|
+
"model": {
|
|
88
|
+
"sourcePath": "model",
|
|
89
|
+
"targetPath": "modelVersion",
|
|
90
|
+
"transform": "reverseModelMapping"
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
"contentStructureMappings": {
|
|
94
|
+
"textContent": {
|
|
95
|
+
"sourceFormat": {
|
|
96
|
+
"type": "text",
|
|
97
|
+
"text": "string"
|
|
98
|
+
},
|
|
99
|
+
"targetFormat": {
|
|
100
|
+
"role": "string",
|
|
101
|
+
"parts": [
|
|
102
|
+
{
|
|
103
|
+
"text": "string"
|
|
104
|
+
}
|
|
105
|
+
]
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
"imageContent": {
|
|
109
|
+
"sourceFormat": {
|
|
110
|
+
"type": "image",
|
|
111
|
+
"source": "object"
|
|
112
|
+
},
|
|
113
|
+
"targetFormat": {
|
|
114
|
+
"role": "user",
|
|
115
|
+
"parts": [
|
|
116
|
+
{
|
|
117
|
+
"inline_data": {
|
|
118
|
+
"mime_type": "string",
|
|
119
|
+
"data": "string"
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
]
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
"toolUseContent": {
|
|
126
|
+
"sourceFormat": {
|
|
127
|
+
"type": "tool_use",
|
|
128
|
+
"id": "string",
|
|
129
|
+
"name": "string",
|
|
130
|
+
"input": "object"
|
|
131
|
+
},
|
|
132
|
+
"targetFormat": {
|
|
133
|
+
"role": "model",
|
|
134
|
+
"parts": [
|
|
135
|
+
{
|
|
136
|
+
"functionCall": {
|
|
137
|
+
"name": "string",
|
|
138
|
+
"args": "object"
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
]
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
"generationConfigMappings": {
|
|
146
|
+
"candidateCount": {
|
|
147
|
+
"sourcePath": "candidate_count",
|
|
148
|
+
"targetPath": "candidateCount",
|
|
149
|
+
"transform": "directMapping"
|
|
150
|
+
},
|
|
151
|
+
"maxOutputTokens": {
|
|
152
|
+
"sourcePath": "max_tokens",
|
|
153
|
+
"targetPath": "maxOutputTokens",
|
|
154
|
+
"transform": "directMapping"
|
|
155
|
+
},
|
|
156
|
+
"temperature": {
|
|
157
|
+
"sourcePath": "temperature",
|
|
158
|
+
"targetPath": "temperature",
|
|
159
|
+
"transform": "directMapping"
|
|
160
|
+
},
|
|
161
|
+
"topP": {
|
|
162
|
+
"sourcePath": "top_p",
|
|
163
|
+
"targetPath": "topP",
|
|
164
|
+
"transform": "directMapping"
|
|
165
|
+
},
|
|
166
|
+
"topK": {
|
|
167
|
+
"sourcePath": "top_k",
|
|
168
|
+
"targetPath": "topK",
|
|
169
|
+
"transform": "directMapping"
|
|
170
|
+
},
|
|
171
|
+
"stopSequences": {
|
|
172
|
+
"sourcePath": "stop_sequences",
|
|
173
|
+
"targetPath": "stopSequences",
|
|
174
|
+
"transform": "arrayMapping"
|
|
175
|
+
},
|
|
176
|
+
"responseMimeType": {
|
|
177
|
+
"sourcePath": "response_mime_type",
|
|
178
|
+
"targetPath": "responseMimeType",
|
|
179
|
+
"transform": "directMapping"
|
|
180
|
+
},
|
|
181
|
+
"responseSchema": {
|
|
182
|
+
"sourcePath": "response_schema",
|
|
183
|
+
"targetPath": "responseSchema",
|
|
184
|
+
"transform": "directMapping"
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
"safetySettings": {
|
|
188
|
+
"category": {
|
|
189
|
+
"sourcePath": "safety_settings.category",
|
|
190
|
+
"targetPath": "category",
|
|
191
|
+
"transform": "directMapping"
|
|
192
|
+
},
|
|
193
|
+
"threshold": {
|
|
194
|
+
"sourcePath": "safety_settings.threshold",
|
|
195
|
+
"targetPath": "threshold",
|
|
196
|
+
"transform": "directMapping"
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
"toolMappings": {
|
|
200
|
+
"toolDefinition": {
|
|
201
|
+
"sourceFormat": {
|
|
202
|
+
"name": "string",
|
|
203
|
+
"description": "string",
|
|
204
|
+
"input_schema": "object"
|
|
205
|
+
},
|
|
206
|
+
"targetFormat": {
|
|
207
|
+
"functionDeclarations": [
|
|
208
|
+
{
|
|
209
|
+
"name": "string",
|
|
210
|
+
"description": "string",
|
|
211
|
+
"parameters": "object"
|
|
212
|
+
}
|
|
213
|
+
]
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
"toolResult": {
|
|
217
|
+
"sourceFormat": {
|
|
218
|
+
"type": "tool_result",
|
|
219
|
+
"tool_use_id": "string",
|
|
220
|
+
"content": "string"
|
|
221
|
+
},
|
|
222
|
+
"targetFormat": {
|
|
223
|
+
"role": "user",
|
|
224
|
+
"parts": [
|
|
225
|
+
{
|
|
226
|
+
"functionResponse": {
|
|
227
|
+
"name": "string",
|
|
228
|
+
"response": "object"
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
]
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
"functionResponseMappings": {
|
|
236
|
+
"functionCall": {
|
|
237
|
+
"sourceFormat": {
|
|
238
|
+
"type": "tool_use",
|
|
239
|
+
"id": "string",
|
|
240
|
+
"name": "string",
|
|
241
|
+
"input": "object"
|
|
242
|
+
},
|
|
243
|
+
"targetFormat": {
|
|
244
|
+
"functionCall": {
|
|
245
|
+
"name": "string",
|
|
246
|
+
"args": "object"
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
"functionResponse": {
|
|
251
|
+
"sourceFormat": {
|
|
252
|
+
"type": "tool_result",
|
|
253
|
+
"tool_use_id": "string",
|
|
254
|
+
"content": "string"
|
|
255
|
+
},
|
|
256
|
+
"targetFormat": {
|
|
257
|
+
"functionResponse": {
|
|
258
|
+
"name": "string",
|
|
259
|
+
"response": "object"
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
"errorMappings": {
|
|
265
|
+
"errorType": {
|
|
266
|
+
"sourceFormat": {
|
|
267
|
+
"type": "error",
|
|
268
|
+
"error": {
|
|
269
|
+
"type": "string",
|
|
270
|
+
"message": "string"
|
|
271
|
+
}
|
|
272
|
+
},
|
|
273
|
+
"targetFormat": {
|
|
274
|
+
"error": {
|
|
275
|
+
"code": "number",
|
|
276
|
+
"message": "string",
|
|
277
|
+
"status": "string",
|
|
278
|
+
"details": "array"
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|