@srouterhq/server 0.0.0-stage → 0.9.0
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/LICENSE +21 -0
- package/client/dist/assets/am-TQ7Jmdqe.js +1 -0
- package/client/dist/assets/ar-Bf5a7yfC.js +1 -0
- package/client/dist/assets/az-CrosE1xH.js +1 -0
- package/client/dist/assets/bg-BvWnmcUz.js +1 -0
- package/client/dist/assets/bn-ams5TsJp.js +1 -0
- package/client/dist/assets/cs-Dh67CaJ_.js +1 -0
- package/client/dist/assets/da-9WlT8Iq7.js +1 -0
- package/client/dist/assets/de-lWhJJzz7.js +1 -0
- package/client/dist/assets/el-Cu7_GhNq.js +1 -0
- package/client/dist/assets/es-BZuzsBcP.js +1 -0
- package/client/dist/assets/fa-Dwdn-jKS.js +1 -0
- package/client/dist/assets/fi-BFrFyOTy.js +1 -0
- package/client/dist/assets/fr-XhbtmPpj.js +1 -0
- package/client/dist/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
- package/client/dist/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
- package/client/dist/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
- package/client/dist/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
- package/client/dist/assets/geist-mono-cyrillic-ext-wght-normal-I4S5GZfc.woff2 +0 -0
- package/client/dist/assets/geist-mono-cyrillic-wght-normal-BmXc_FBt.woff2 +0 -0
- package/client/dist/assets/geist-mono-latin-ext-wght-normal-DrnZ1wKl.woff2 +0 -0
- package/client/dist/assets/geist-mono-latin-wght-normal-B_7UjwxQ.woff2 +0 -0
- package/client/dist/assets/geist-mono-symbols2-wght-normal-GZpp1pK2.woff2 +0 -0
- package/client/dist/assets/geist-mono-vietnamese-wght-normal-D8KDMBhC.woff2 +0 -0
- package/client/dist/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
- package/client/dist/assets/gu-D0uhLUB8.js +1 -0
- package/client/dist/assets/ha-CVlm9pqp.js +1 -0
- package/client/dist/assets/he-CMIFeoWr.js +1 -0
- package/client/dist/assets/hi-ENTwhBpn.js +1 -0
- package/client/dist/assets/hr-fc03vMy_.js +1 -0
- package/client/dist/assets/hu-YBo2BIYt.js +1 -0
- package/client/dist/assets/id-BEWXYX69.js +1 -0
- package/client/dist/assets/ig-BKLZFKka.js +1 -0
- package/client/dist/assets/index-D9I4KtvR.js +145 -0
- package/client/dist/assets/index-txhEmCdb.css +2 -0
- package/client/dist/assets/it-Bzmei1Y2.js +1 -0
- package/client/dist/assets/ja-BfcpuqEl.js +1 -0
- package/client/dist/assets/ka-CnWjRgLo.js +1 -0
- package/client/dist/assets/km-BAjPR3Qj.js +1 -0
- package/client/dist/assets/kn-B15WKU5m.js +1 -0
- package/client/dist/assets/ko-C61fAB-w.js +1 -0
- package/client/dist/assets/lt-CYTr4_YW.js +1 -0
- package/client/dist/assets/ml-CtqxgyH3.js +1 -0
- package/client/dist/assets/mr-X5TMY7aR.js +1 -0
- package/client/dist/assets/ms-DSg8RqPS.js +1 -0
- package/client/dist/assets/my-D7RqR8uE.js +1 -0
- package/client/dist/assets/ne-DaflxkDj.js +1 -0
- package/client/dist/assets/nl-BOqqtsC8.js +1 -0
- package/client/dist/assets/no-BSHp_StB.js +1 -0
- package/client/dist/assets/or-BkLR9Vub.js +1 -0
- package/client/dist/assets/pa-CarJ2XgI.js +1 -0
- package/client/dist/assets/pl-C2n0V-0k.js +1 -0
- package/client/dist/assets/pt-BR-CqJdNhg2.js +1 -0
- package/client/dist/assets/pt-PT-C_HpMyKz.js +1 -0
- package/client/dist/assets/ro-DVRZqSAS.js +1 -0
- package/client/dist/assets/ru-DwAJG7VC.js +1 -0
- package/client/dist/assets/si-BxUezXm0.js +1 -0
- package/client/dist/assets/sk-eI1VcIfY.js +1 -0
- package/client/dist/assets/sr-CJF3auCr.js +1 -0
- package/client/dist/assets/srouter-logo-C6ZfjGIi.svg +14 -0
- package/client/dist/assets/sv-nqvwHAq_.js +1 -0
- package/client/dist/assets/sw-DWynE2pW.js +1 -0
- package/client/dist/assets/ta-BVM12knC.js +1 -0
- package/client/dist/assets/te-oyzEkF7_.js +1 -0
- package/client/dist/assets/th-COVeE0ZQ.js +1 -0
- package/client/dist/assets/tl-DsJANnQz.js +1 -0
- package/client/dist/assets/tr-B-Fl-urO.js +1 -0
- package/client/dist/assets/uk-C5qketAO.js +1 -0
- package/client/dist/assets/ur-QU9KugfV.js +1 -0
- package/client/dist/assets/uz-DL9cG_mY.js +1 -0
- package/client/dist/assets/vi-CQiVy3Pu.js +1 -0
- package/client/dist/assets/yo-DqazMdrZ.js +1 -0
- package/client/dist/assets/zh-CN-DnYL_Kio.js +1 -0
- package/client/dist/assets/zh-TW-5bdbosKj.js +1 -0
- package/client/dist/favicon.svg +14 -0
- package/client/dist/icons.svg +24 -0
- package/client/dist/index.html +37 -0
- package/dist/app.d.ts +4 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +372 -0
- package/dist/app.js.map +1 -0
- package/dist/db/index.d.ts +49 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +203 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrate/TEMPLATE.d.ts +4 -0
- package/dist/db/migrate/TEMPLATE.d.ts.map +1 -0
- package/dist/db/migrate/TEMPLATE.js +18 -0
- package/dist/db/migrate/TEMPLATE.js.map +1 -0
- package/dist/db/migrate/cli.d.ts +2 -0
- package/dist/db/migrate/cli.d.ts.map +1 -0
- package/dist/db/migrate/cli.js +177 -0
- package/dist/db/migrate/cli.js.map +1 -0
- package/dist/db/migrate/defaults.d.ts +52 -0
- package/dist/db/migrate/defaults.d.ts.map +1 -0
- package/dist/db/migrate/defaults.js +126 -0
- package/dist/db/migrate/defaults.js.map +1 -0
- package/dist/db/migrate/runner.d.ts +16 -0
- package/dist/db/migrate/runner.d.ts.map +1 -0
- package/dist/db/migrate/runner.js +178 -0
- package/dist/db/migrate/runner.js.map +1 -0
- package/dist/db/migrations/20260101_000000_legacy_baseline.d.ts +4 -0
- package/dist/db/migrations/20260101_000000_legacy_baseline.d.ts.map +1 -0
- package/dist/db/migrations/20260101_000000_legacy_baseline.js +2240 -0
- package/dist/db/migrations/20260101_000000_legacy_baseline.js.map +1 -0
- package/dist/db/migrations/20260627_000001_custom_provider_modalities.d.ts +4 -0
- package/dist/db/migrations/20260627_000001_custom_provider_modalities.d.ts.map +1 -0
- package/dist/db/migrations/20260627_000001_custom_provider_modalities.js +27 -0
- package/dist/db/migrations/20260627_000001_custom_provider_modalities.js.map +1 -0
- package/dist/db/migrations/20260627_000002_catalog_model_state.d.ts +4 -0
- package/dist/db/migrations/20260627_000002_catalog_model_state.d.ts.map +1 -0
- package/dist/db/migrations/20260627_000002_catalog_model_state.js +30 -0
- package/dist/db/migrations/20260627_000002_catalog_model_state.js.map +1 -0
- package/dist/db/migrations/20260628_120000_request_aggregates.d.ts +6 -0
- package/dist/db/migrations/20260628_120000_request_aggregates.d.ts.map +1 -0
- package/dist/db/migrations/20260628_120000_request_aggregates.js +104 -0
- package/dist/db/migrations/20260628_120000_request_aggregates.js.map +1 -0
- package/dist/db/migrations/20260630_000001_github_gpt41_context.d.ts +9 -0
- package/dist/db/migrations/20260630_000001_github_gpt41_context.d.ts.map +1 -0
- package/dist/db/migrations/20260630_000001_github_gpt41_context.js +22 -0
- package/dist/db/migrations/20260630_000001_github_gpt41_context.js.map +1 -0
- package/dist/db/migrations/20260706_000001_request_client_info.d.ts +4 -0
- package/dist/db/migrations/20260706_000001_request_client_info.d.ts.map +1 -0
- package/dist/db/migrations/20260706_000001_request_client_info.js +30 -0
- package/dist/db/migrations/20260706_000001_request_client_info.js.map +1 -0
- package/dist/db/migrations/20260706_000002_custom_model_tool_support.d.ts +17 -0
- package/dist/db/migrations/20260706_000002_custom_model_tool_support.d.ts.map +1 -0
- package/dist/db/migrations/20260706_000002_custom_model_tool_support.js +20 -0
- package/dist/db/migrations/20260706_000002_custom_model_tool_support.js.map +1 -0
- package/dist/db/migrations/20260714_000001_profile_chain_backfill.d.ts +12 -0
- package/dist/db/migrations/20260714_000001_profile_chain_backfill.d.ts.map +1 -0
- package/dist/db/migrations/20260714_000001_profile_chain_backfill.js +45 -0
- package/dist/db/migrations/20260714_000001_profile_chain_backfill.js.map +1 -0
- package/dist/db/migrations/20260720_000001_key_health_error.d.ts +5 -0
- package/dist/db/migrations/20260720_000001_key_health_error.d.ts.map +1 -0
- package/dist/db/migrations/20260720_000001_key_health_error.js +16 -0
- package/dist/db/migrations/20260720_000001_key_health_error.js.map +1 -0
- package/dist/db/migrations/20260726_000001_cooldown_probe_provenance.d.ts +4 -0
- package/dist/db/migrations/20260726_000001_cooldown_probe_provenance.d.ts.map +1 -0
- package/dist/db/migrations/20260726_000001_cooldown_probe_provenance.js +38 -0
- package/dist/db/migrations/20260726_000001_cooldown_probe_provenance.js.map +1 -0
- package/dist/db/migrations/20260726_000002_request_attempts.d.ts +4 -0
- package/dist/db/migrations/20260726_000002_request_attempts.d.ts.map +1 -0
- package/dist/db/migrations/20260726_000002_request_attempts.js +43 -0
- package/dist/db/migrations/20260726_000002_request_attempts.js.map +1 -0
- package/dist/db/migrations/20260726_000003_model_source_provenance.d.ts +4 -0
- package/dist/db/migrations/20260726_000003_model_source_provenance.d.ts.map +1 -0
- package/dist/db/migrations/20260726_000003_model_source_provenance.js +80 -0
- package/dist/db/migrations/20260726_000003_model_source_provenance.js.map +1 -0
- package/dist/db/migrations/20260726_000004_media_model_meta.d.ts +4 -0
- package/dist/db/migrations/20260726_000004_media_model_meta.d.ts.map +1 -0
- package/dist/db/migrations/20260726_000004_media_model_meta.js +34 -0
- package/dist/db/migrations/20260726_000004_media_model_meta.js.map +1 -0
- package/dist/db/migrations/20260726_000005_request_served_model.d.ts +4 -0
- package/dist/db/migrations/20260726_000005_request_served_model.d.ts.map +1 -0
- package/dist/db/migrations/20260726_000005_request_served_model.js +31 -0
- package/dist/db/migrations/20260726_000005_request_served_model.js.map +1 -0
- package/dist/db/migrations/20260726_000006_attempt_error_summary.d.ts +4 -0
- package/dist/db/migrations/20260726_000006_attempt_error_summary.d.ts.map +1 -0
- package/dist/db/migrations/20260726_000006_attempt_error_summary.js +29 -0
- package/dist/db/migrations/20260726_000006_attempt_error_summary.js.map +1 -0
- package/dist/db/migrations/20260727_000001_agent_compatibility.d.ts +4 -0
- package/dist/db/migrations/20260727_000001_agent_compatibility.d.ts.map +1 -0
- package/dist/db/migrations/20260727_000001_agent_compatibility.js +41 -0
- package/dist/db/migrations/20260727_000001_agent_compatibility.js.map +1 -0
- package/dist/db/migrations/20260728_000001_tombstone_provenance.d.ts +12 -0
- package/dist/db/migrations/20260728_000001_tombstone_provenance.d.ts.map +1 -0
- package/dist/db/migrations/20260728_000001_tombstone_provenance.js +37 -0
- package/dist/db/migrations/20260728_000001_tombstone_provenance.js.map +1 -0
- package/dist/db/migrations/20260729_000001_custom_model_endpoint_identity.d.ts +4 -0
- package/dist/db/migrations/20260729_000001_custom_model_endpoint_identity.d.ts.map +1 -0
- package/dist/db/migrations/20260729_000001_custom_model_endpoint_identity.js +145 -0
- package/dist/db/migrations/20260729_000001_custom_model_endpoint_identity.js.map +1 -0
- package/dist/db/migrations/20260802_000001_custom_endpoint_host_labels.d.ts +6 -0
- package/dist/db/migrations/20260802_000001_custom_endpoint_host_labels.d.ts.map +1 -0
- package/dist/db/migrations/20260802_000001_custom_endpoint_host_labels.js +52 -0
- package/dist/db/migrations/20260802_000001_custom_endpoint_host_labels.js.map +1 -0
- package/dist/db/migrations/20260805_000001_key_model_scope.d.ts +6 -0
- package/dist/db/migrations/20260805_000001_key_model_scope.d.ts.map +1 -0
- package/dist/db/migrations/20260805_000001_key_model_scope.js +17 -0
- package/dist/db/migrations/20260805_000001_key_model_scope.js.map +1 -0
- package/dist/db/migrations/20260805_000002_client_profiles.d.ts +4 -0
- package/dist/db/migrations/20260805_000002_client_profiles.d.ts.map +1 -0
- package/dist/db/migrations/20260805_000002_client_profiles.js +33 -0
- package/dist/db/migrations/20260805_000002_client_profiles.js.map +1 -0
- package/dist/db/migrations/20260810_000001_api_key_proxy.d.ts +4 -0
- package/dist/db/migrations/20260810_000001_api_key_proxy.d.ts.map +1 -0
- package/dist/db/migrations/20260810_000001_api_key_proxy.js +33 -0
- package/dist/db/migrations/20260810_000001_api_key_proxy.js.map +1 -0
- package/dist/db/migrations/20260819_000001_custom_model_tombstones.d.ts +4 -0
- package/dist/db/migrations/20260819_000001_custom_model_tombstones.d.ts.map +1 -0
- package/dist/db/migrations/20260819_000001_custom_model_tombstones.js +19 -0
- package/dist/db/migrations/20260819_000001_custom_model_tombstones.js.map +1 -0
- package/dist/db/migrations/20260820_000001_playground_conversations.d.ts +4 -0
- package/dist/db/migrations/20260820_000001_playground_conversations.d.ts.map +1 -0
- package/dist/db/migrations/20260820_000001_playground_conversations.js +47 -0
- package/dist/db/migrations/20260820_000001_playground_conversations.js.map +1 -0
- package/dist/db/migrations/20260823_000001_server_logs.d.ts +4 -0
- package/dist/db/migrations/20260823_000001_server_logs.d.ts.map +1 -0
- package/dist/db/migrations/20260823_000001_server_logs.js +53 -0
- package/dist/db/migrations/20260823_000001_server_logs.js.map +1 -0
- package/dist/db/migrations/20260823_000002_backups_table.d.ts +8 -0
- package/dist/db/migrations/20260823_000002_backups_table.d.ts.map +1 -0
- package/dist/db/migrations/20260823_000002_backups_table.js +22 -0
- package/dist/db/migrations/20260823_000002_backups_table.js.map +1 -0
- package/dist/db/migrations/20260823_000003_attempt_key_label.d.ts +19 -0
- package/dist/db/migrations/20260823_000003_attempt_key_label.d.ts.map +1 -0
- package/dist/db/migrations/20260823_000003_attempt_key_label.js +28 -0
- package/dist/db/migrations/20260823_000003_attempt_key_label.js.map +1 -0
- package/dist/db/migrations/20260823_000004_profile_auto_include.d.ts +14 -0
- package/dist/db/migrations/20260823_000004_profile_auto_include.d.ts.map +1 -0
- package/dist/db/migrations/20260823_000004_profile_auto_include.js +25 -0
- package/dist/db/migrations/20260823_000004_profile_auto_include.js.map +1 -0
- package/dist/db/migrations/20260901_000001_idempotency_claims.d.ts +4 -0
- package/dist/db/migrations/20260901_000001_idempotency_claims.d.ts.map +1 -0
- package/dist/db/migrations/20260901_000001_idempotency_claims.js +46 -0
- package/dist/db/migrations/20260901_000001_idempotency_claims.js.map +1 -0
- package/dist/db/migrations/20260901_000002_quota_observation_lookup.d.ts +4 -0
- package/dist/db/migrations/20260901_000002_quota_observation_lookup.d.ts.map +1 -0
- package/dist/db/migrations/20260901_000002_quota_observation_lookup.js +37 -0
- package/dist/db/migrations/20260901_000002_quota_observation_lookup.js.map +1 -0
- package/dist/db/migrations/20260901_000003_request_caller.d.ts +4 -0
- package/dist/db/migrations/20260901_000003_request_caller.d.ts.map +1 -0
- package/dist/db/migrations/20260901_000003_request_caller.js +27 -0
- package/dist/db/migrations/20260901_000003_request_caller.js.map +1 -0
- package/dist/db/migrations/20260902_000001_analytics_latency_percentile_index.d.ts +4 -0
- package/dist/db/migrations/20260902_000001_analytics_latency_percentile_index.d.ts.map +1 -0
- package/dist/db/migrations/20260902_000001_analytics_latency_percentile_index.js +35 -0
- package/dist/db/migrations/20260902_000001_analytics_latency_percentile_index.js.map +1 -0
- package/dist/db/migrations/20260903_000001_mcp_enabled_default.d.ts +4 -0
- package/dist/db/migrations/20260903_000001_mcp_enabled_default.d.ts.map +1 -0
- package/dist/db/migrations/20260903_000001_mcp_enabled_default.js +37 -0
- package/dist/db/migrations/20260903_000001_mcp_enabled_default.js.map +1 -0
- package/dist/db/migrations/20260903_000002_response_cache.d.ts +4 -0
- package/dist/db/migrations/20260903_000002_response_cache.d.ts.map +1 -0
- package/dist/db/migrations/20260903_000002_response_cache.js +53 -0
- package/dist/db/migrations/20260903_000002_response_cache.js.map +1 -0
- package/dist/db/migrations/20260904_000001_key_monthly_budget.d.ts +13 -0
- package/dist/db/migrations/20260904_000001_key_monthly_budget.d.ts.map +1 -0
- package/dist/db/migrations/20260904_000001_key_monthly_budget.js +35 -0
- package/dist/db/migrations/20260904_000001_key_monthly_budget.js.map +1 -0
- package/dist/db/migrations/20260913_000001_request_model_attribution.d.ts +4 -0
- package/dist/db/migrations/20260913_000001_request_model_attribution.d.ts.map +1 -0
- package/dist/db/migrations/20260913_000001_request_model_attribution.js +68 -0
- package/dist/db/migrations/20260913_000001_request_model_attribution.js.map +1 -0
- package/dist/db/migrations/20260914_000001_key_monthly_usage.d.ts +5 -0
- package/dist/db/migrations/20260914_000001_key_monthly_usage.d.ts.map +1 -0
- package/dist/db/migrations/20260914_000001_key_monthly_usage.js +37 -0
- package/dist/db/migrations/20260914_000001_key_monthly_usage.js.map +1 -0
- package/dist/db/migrations/20260915_000001_quota_snapshot_freshness.d.ts +4 -0
- package/dist/db/migrations/20260915_000001_quota_snapshot_freshness.d.ts.map +1 -0
- package/dist/db/migrations/20260915_000001_quota_snapshot_freshness.js +28 -0
- package/dist/db/migrations/20260915_000001_quota_snapshot_freshness.js.map +1 -0
- package/dist/db/migrations/20261004_000001_unified_key_sr_prefix.d.ts +4 -0
- package/dist/db/migrations/20261004_000001_unified_key_sr_prefix.d.ts.map +1 -0
- package/dist/db/migrations/20261004_000001_unified_key_sr_prefix.js +25 -0
- package/dist/db/migrations/20261004_000001_unified_key_sr_prefix.js.map +1 -0
- package/dist/db/migrations/20261005_000001_key_budget_period.d.ts +10 -0
- package/dist/db/migrations/20261005_000001_key_budget_period.d.ts.map +1 -0
- package/dist/db/migrations/20261005_000001_key_budget_period.js +78 -0
- package/dist/db/migrations/20261005_000001_key_budget_period.js.map +1 -0
- package/dist/db/migrations/20261005_000002_key_budget_period_auto.d.ts +21 -0
- package/dist/db/migrations/20261005_000002_key_budget_period_auto.d.ts.map +1 -0
- package/dist/db/migrations/20261005_000002_key_budget_period_auto.js +41 -0
- package/dist/db/migrations/20261005_000002_key_budget_period_auto.js.map +1 -0
- package/dist/db/model-pricing.d.ts +39 -0
- package/dist/db/model-pricing.d.ts.map +1 -0
- package/dist/db/model-pricing.js +274 -0
- package/dist/db/model-pricing.js.map +1 -0
- package/dist/db/node-sqlite.d.ts +9 -0
- package/dist/db/node-sqlite.d.ts.map +1 -0
- package/dist/db/node-sqlite.js +87 -0
- package/dist/db/node-sqlite.js.map +1 -0
- package/dist/db/types.d.ts +22 -0
- package/dist/db/types.d.ts.map +1 -0
- package/dist/db/types.js +2 -0
- package/dist/db/types.js.map +1 -0
- package/dist/docs/docs-page.d.ts +2 -0
- package/dist/docs/docs-page.d.ts.map +1 -0
- package/dist/docs/docs-page.js +319 -0
- package/dist/docs/docs-page.js.map +1 -0
- package/dist/docs/openapi.d.ts +1896 -0
- package/dist/docs/openapi.d.ts.map +1 -0
- package/dist/docs/openapi.js +1096 -0
- package/dist/docs/openapi.js.map +1 -0
- package/dist/env.d.ts +2 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +9 -0
- package/dist/env.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +144 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/anthropic-documents.d.ts +41 -0
- package/dist/lib/anthropic-documents.d.ts.map +1 -0
- package/dist/lib/anthropic-documents.js +132 -0
- package/dist/lib/anthropic-documents.js.map +1 -0
- package/dist/lib/app-version.d.ts +5 -0
- package/dist/lib/app-version.d.ts.map +1 -0
- package/dist/lib/app-version.js +61 -0
- package/dist/lib/app-version.js.map +1 -0
- package/dist/lib/attempt-trace.d.ts +23 -0
- package/dist/lib/attempt-trace.d.ts.map +1 -0
- package/dist/lib/attempt-trace.js +32 -0
- package/dist/lib/attempt-trace.js.map +1 -0
- package/dist/lib/budget.d.ts +6 -0
- package/dist/lib/budget.d.ts.map +1 -0
- package/dist/lib/budget.js +40 -0
- package/dist/lib/budget.js.map +1 -0
- package/dist/lib/client-classifier.d.ts +10 -0
- package/dist/lib/client-classifier.d.ts.map +1 -0
- package/dist/lib/client-classifier.js +126 -0
- package/dist/lib/client-classifier.js.map +1 -0
- package/dist/lib/client-context.d.ts +10 -0
- package/dist/lib/client-context.d.ts.map +1 -0
- package/dist/lib/client-context.js +39 -0
- package/dist/lib/client-context.js.map +1 -0
- package/dist/lib/config.d.ts +33 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +94 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/content.d.ts +33 -0
- package/dist/lib/content.d.ts.map +1 -0
- package/dist/lib/content.js +201 -0
- package/dist/lib/content.js.map +1 -0
- package/dist/lib/credential.d.ts +11 -0
- package/dist/lib/credential.d.ts.map +1 -0
- package/dist/lib/credential.js +18 -0
- package/dist/lib/credential.js.map +1 -0
- package/dist/lib/crypto.d.ts +31 -0
- package/dist/lib/crypto.d.ts.map +1 -0
- package/dist/lib/crypto.js +206 -0
- package/dist/lib/crypto.js.map +1 -0
- package/dist/lib/custom-provider-cleanup.d.ts +13 -0
- package/dist/lib/custom-provider-cleanup.d.ts.map +1 -0
- package/dist/lib/custom-provider-cleanup.js +43 -0
- package/dist/lib/custom-provider-cleanup.js.map +1 -0
- package/dist/lib/db-backup.d.ts +31 -0
- package/dist/lib/db-backup.d.ts.map +1 -0
- package/dist/lib/db-backup.js +255 -0
- package/dist/lib/db-backup.js.map +1 -0
- package/dist/lib/endpoint-scope.d.ts +42 -0
- package/dist/lib/endpoint-scope.d.ts.map +1 -0
- package/dist/lib/endpoint-scope.js +95 -0
- package/dist/lib/endpoint-scope.js.map +1 -0
- package/dist/lib/env-drift.d.ts +17 -0
- package/dist/lib/env-drift.d.ts.map +1 -0
- package/dist/lib/env-drift.js +108 -0
- package/dist/lib/env-drift.js.map +1 -0
- package/dist/lib/error-classify.d.ts +40 -0
- package/dist/lib/error-classify.d.ts.map +1 -0
- package/dist/lib/error-classify.js +687 -0
- package/dist/lib/error-classify.js.map +1 -0
- package/dist/lib/error-redaction.d.ts +8 -0
- package/dist/lib/error-redaction.d.ts.map +1 -0
- package/dist/lib/error-redaction.js +45 -0
- package/dist/lib/error-redaction.js.map +1 -0
- package/dist/lib/fallback-loop.d.ts +306 -0
- package/dist/lib/fallback-loop.d.ts.map +1 -0
- package/dist/lib/fallback-loop.js +1336 -0
- package/dist/lib/fallback-loop.js.map +1 -0
- package/dist/lib/file-permissions.d.ts +98 -0
- package/dist/lib/file-permissions.d.ts.map +1 -0
- package/dist/lib/file-permissions.js +159 -0
- package/dist/lib/file-permissions.js.map +1 -0
- package/dist/lib/gemini-wire.d.ts +76 -0
- package/dist/lib/gemini-wire.d.ts.map +1 -0
- package/dist/lib/gemini-wire.js +392 -0
- package/dist/lib/gemini-wire.js.map +1 -0
- package/dist/lib/guardrails.d.ts +37 -0
- package/dist/lib/guardrails.d.ts.map +1 -0
- package/dist/lib/guardrails.js +106 -0
- package/dist/lib/guardrails.js.map +1 -0
- package/dist/lib/header-value.d.ts +8 -0
- package/dist/lib/header-value.d.ts.map +1 -0
- package/dist/lib/header-value.js +55 -0
- package/dist/lib/header-value.js.map +1 -0
- package/dist/lib/image-normalize.d.ts +21 -0
- package/dist/lib/image-normalize.d.ts.map +1 -0
- package/dist/lib/image-normalize.js +218 -0
- package/dist/lib/image-normalize.js.map +1 -0
- package/dist/lib/inbound-chat.d.ts +48 -0
- package/dist/lib/inbound-chat.d.ts.map +1 -0
- package/dist/lib/inbound-chat.js +406 -0
- package/dist/lib/inbound-chat.js.map +1 -0
- package/dist/lib/key-parser.d.ts +79 -0
- package/dist/lib/key-parser.d.ts.map +1 -0
- package/dist/lib/key-parser.js +701 -0
- package/dist/lib/key-parser.js.map +1 -0
- package/dist/lib/key-proxy.d.ts +49 -0
- package/dist/lib/key-proxy.d.ts.map +1 -0
- package/dist/lib/key-proxy.js +92 -0
- package/dist/lib/key-proxy.js.map +1 -0
- package/dist/lib/log-redaction.d.ts +28 -0
- package/dist/lib/log-redaction.d.ts.map +1 -0
- package/dist/lib/log-redaction.js +166 -0
- package/dist/lib/log-redaction.js.map +1 -0
- package/dist/lib/model-scope.d.ts +9 -0
- package/dist/lib/model-scope.d.ts.map +1 -0
- package/dist/lib/model-scope.js +29 -0
- package/dist/lib/model-scope.js.map +1 -0
- package/dist/lib/one-time-code.d.ts +15 -0
- package/dist/lib/one-time-code.d.ts.map +1 -0
- package/dist/lib/one-time-code.js +41 -0
- package/dist/lib/one-time-code.js.map +1 -0
- package/dist/lib/output-cap.d.ts +24 -0
- package/dist/lib/output-cap.d.ts.map +1 -0
- package/dist/lib/output-cap.js +80 -0
- package/dist/lib/output-cap.js.map +1 -0
- package/dist/lib/password.d.ts +3 -0
- package/dist/lib/password.d.ts.map +1 -0
- package/dist/lib/password.js +27 -0
- package/dist/lib/password.js.map +1 -0
- package/dist/lib/process-safety-net.d.ts +32 -0
- package/dist/lib/process-safety-net.d.ts.map +1 -0
- package/dist/lib/process-safety-net.js +123 -0
- package/dist/lib/process-safety-net.js.map +1 -0
- package/dist/lib/provider-identity.d.ts +37 -0
- package/dist/lib/provider-identity.d.ts.map +1 -0
- package/dist/lib/provider-identity.js +110 -0
- package/dist/lib/provider-identity.js.map +1 -0
- package/dist/lib/provider-size-parser.d.ts +6 -0
- package/dist/lib/provider-size-parser.d.ts.map +1 -0
- package/dist/lib/provider-size-parser.js +72 -0
- package/dist/lib/provider-size-parser.js.map +1 -0
- package/dist/lib/provider-timeout.d.ts +17 -0
- package/dist/lib/provider-timeout.d.ts.map +1 -0
- package/dist/lib/provider-timeout.js +70 -0
- package/dist/lib/provider-timeout.js.map +1 -0
- package/dist/lib/proxy.d.ts +180 -0
- package/dist/lib/proxy.d.ts.map +1 -0
- package/dist/lib/proxy.js +1002 -0
- package/dist/lib/proxy.js.map +1 -0
- package/dist/lib/request-log.d.ts +4 -0
- package/dist/lib/request-log.d.ts.map +1 -0
- package/dist/lib/request-log.js +161 -0
- package/dist/lib/request-log.js.map +1 -0
- package/dist/lib/reset-code.d.ts +5 -0
- package/dist/lib/reset-code.d.ts.map +1 -0
- package/dist/lib/reset-code.js +39 -0
- package/dist/lib/reset-code.js.map +1 -0
- package/dist/lib/retry-hint.d.ts +14 -0
- package/dist/lib/retry-hint.d.ts.map +1 -0
- package/dist/lib/retry-hint.js +36 -0
- package/dist/lib/retry-hint.js.map +1 -0
- package/dist/lib/route-live.d.ts +29 -0
- package/dist/lib/route-live.d.ts.map +1 -0
- package/dist/lib/route-live.js +97 -0
- package/dist/lib/route-live.js.map +1 -0
- package/dist/lib/sampling-params.d.ts +183 -0
- package/dist/lib/sampling-params.d.ts.map +1 -0
- package/dist/lib/sampling-params.js +386 -0
- package/dist/lib/sampling-params.js.map +1 -0
- package/dist/lib/scheduler.d.ts +13 -0
- package/dist/lib/scheduler.d.ts.map +1 -0
- package/dist/lib/scheduler.js +11 -0
- package/dist/lib/scheduler.js.map +1 -0
- package/dist/lib/served-model.d.ts +16 -0
- package/dist/lib/served-model.d.ts.map +1 -0
- package/dist/lib/served-model.js +0 -0
- package/dist/lib/served-model.js.map +1 -0
- package/dist/lib/server-logs.d.ts +132 -0
- package/dist/lib/server-logs.d.ts.map +1 -0
- package/dist/lib/server-logs.js +473 -0
- package/dist/lib/server-logs.js.map +1 -0
- package/dist/lib/setup-code.d.ts +5 -0
- package/dist/lib/setup-code.d.ts.map +1 -0
- package/dist/lib/setup-code.js +35 -0
- package/dist/lib/setup-code.js.map +1 -0
- package/dist/lib/structured-output.d.ts +9 -0
- package/dist/lib/structured-output.d.ts.map +1 -0
- package/dist/lib/structured-output.js +72 -0
- package/dist/lib/structured-output.js.map +1 -0
- package/dist/lib/system-prompt.d.ts +30 -0
- package/dist/lib/system-prompt.d.ts.map +1 -0
- package/dist/lib/system-prompt.js +66 -0
- package/dist/lib/system-prompt.js.map +1 -0
- package/dist/lib/task-type.d.ts +18 -0
- package/dist/lib/task-type.d.ts.map +1 -0
- package/dist/lib/task-type.js +92 -0
- package/dist/lib/task-type.js.map +1 -0
- package/dist/lib/think-tags.d.ts +37 -0
- package/dist/lib/think-tags.d.ts.map +1 -0
- package/dist/lib/think-tags.js +203 -0
- package/dist/lib/think-tags.js.map +1 -0
- package/dist/lib/tool-args.d.ts +36 -0
- package/dist/lib/tool-args.d.ts.map +1 -0
- package/dist/lib/tool-args.js +190 -0
- package/dist/lib/tool-args.js.map +1 -0
- package/dist/lib/tool-call-rescue.d.ts +62 -0
- package/dist/lib/tool-call-rescue.d.ts.map +1 -0
- package/dist/lib/tool-call-rescue.js +258 -0
- package/dist/lib/tool-call-rescue.js.map +1 -0
- package/dist/lib/tool-capability.d.ts +13 -0
- package/dist/lib/tool-capability.d.ts.map +1 -0
- package/dist/lib/tool-capability.js +70 -0
- package/dist/lib/tool-capability.js.map +1 -0
- package/dist/lib/tool-validate.d.ts +44 -0
- package/dist/lib/tool-validate.d.ts.map +1 -0
- package/dist/lib/tool-validate.js +165 -0
- package/dist/lib/tool-validate.js.map +1 -0
- package/dist/lib/ttfb-budget.d.ts +13 -0
- package/dist/lib/ttfb-budget.d.ts.map +1 -0
- package/dist/lib/ttfb-budget.js +153 -0
- package/dist/lib/ttfb-budget.js.map +1 -0
- package/dist/lib/url-guard.d.ts +47 -0
- package/dist/lib/url-guard.d.ts.map +1 -0
- package/dist/lib/url-guard.js +229 -0
- package/dist/lib/url-guard.js.map +1 -0
- package/dist/lib/wake-detect.d.ts +12 -0
- package/dist/lib/wake-detect.d.ts.map +1 -0
- package/dist/lib/wake-detect.js +99 -0
- package/dist/lib/wake-detect.js.map +1 -0
- package/dist/middleware/errorHandler.d.ts +3 -0
- package/dist/middleware/errorHandler.d.ts.map +1 -0
- package/dist/middleware/errorHandler.js +45 -0
- package/dist/middleware/errorHandler.js.map +1 -0
- package/dist/middleware/rateLimit.d.ts +4 -0
- package/dist/middleware/rateLimit.d.ts.map +1 -0
- package/dist/middleware/rateLimit.js +125 -0
- package/dist/middleware/rateLimit.js.map +1 -0
- package/dist/middleware/requireAuth.d.ts +3 -0
- package/dist/middleware/requireAuth.d.ts.map +1 -0
- package/dist/middleware/requireAuth.js +17 -0
- package/dist/middleware/requireAuth.js.map +1 -0
- package/dist/providers/aclide.d.ts +18 -0
- package/dist/providers/aclide.d.ts.map +1 -0
- package/dist/providers/aclide.js +174 -0
- package/dist/providers/aclide.js.map +1 -0
- package/dist/providers/aihorde.d.ts +42 -0
- package/dist/providers/aihorde.d.ts.map +1 -0
- package/dist/providers/aihorde.js +192 -0
- package/dist/providers/aihorde.js.map +1 -0
- package/dist/providers/airforce.d.ts +11 -0
- package/dist/providers/airforce.d.ts.map +1 -0
- package/dist/providers/airforce.js +32 -0
- package/dist/providers/airforce.js.map +1 -0
- package/dist/providers/base.d.ts +177 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +354 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/blaze.d.ts +11 -0
- package/dist/providers/blaze.d.ts.map +1 -0
- package/dist/providers/blaze.js +33 -0
- package/dist/providers/blaze.js.map +1 -0
- package/dist/providers/blockrun.d.ts +14 -0
- package/dist/providers/blockrun.d.ts.map +1 -0
- package/dist/providers/blockrun.js +36 -0
- package/dist/providers/blockrun.js.map +1 -0
- package/dist/providers/clod.d.ts +11 -0
- package/dist/providers/clod.d.ts.map +1 -0
- package/dist/providers/clod.js +39 -0
- package/dist/providers/clod.js.map +1 -0
- package/dist/providers/cloudflare.d.ts +15 -0
- package/dist/providers/cloudflare.d.ts.map +1 -0
- package/dist/providers/cloudflare.js +175 -0
- package/dist/providers/cloudflare.js.map +1 -0
- package/dist/providers/cohere.d.ts +11 -0
- package/dist/providers/cohere.d.ts.map +1 -0
- package/dist/providers/cohere.js +117 -0
- package/dist/providers/cohere.js.map +1 -0
- package/dist/providers/dreamprompting.d.ts +11 -0
- package/dist/providers/dreamprompting.d.ts.map +1 -0
- package/dist/providers/dreamprompting.js +41 -0
- package/dist/providers/dreamprompting.js.map +1 -0
- package/dist/providers/electronhub.d.ts +10 -0
- package/dist/providers/electronhub.d.ts.map +1 -0
- package/dist/providers/electronhub.js +56 -0
- package/dist/providers/electronhub.js.map +1 -0
- package/dist/providers/experiential.d.ts +10 -0
- package/dist/providers/experiential.d.ts.map +1 -0
- package/dist/providers/experiential.js +33 -0
- package/dist/providers/experiential.js.map +1 -0
- package/dist/providers/gizmo.d.ts +15 -0
- package/dist/providers/gizmo.d.ts.map +1 -0
- package/dist/providers/gizmo.js +54 -0
- package/dist/providers/gizmo.js.map +1 -0
- package/dist/providers/google.d.ts +30 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +766 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/index.d.ts +13 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +561 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/llmtr.d.ts +15 -0
- package/dist/providers/llmtr.d.ts.map +1 -0
- package/dist/providers/llmtr.js +51 -0
- package/dist/providers/llmtr.js.map +1 -0
- package/dist/providers/logfare.d.ts +11 -0
- package/dist/providers/logfare.d.ts.map +1 -0
- package/dist/providers/logfare.js +33 -0
- package/dist/providers/logfare.js.map +1 -0
- package/dist/providers/lucidity.d.ts +11 -0
- package/dist/providers/lucidity.d.ts.map +1 -0
- package/dist/providers/lucidity.js +37 -0
- package/dist/providers/lucidity.js.map +1 -0
- package/dist/providers/modelscope.d.ts +50 -0
- package/dist/providers/modelscope.d.ts.map +1 -0
- package/dist/providers/modelscope.js +143 -0
- package/dist/providers/modelscope.js.map +1 -0
- package/dist/providers/moondream.d.ts +17 -0
- package/dist/providers/moondream.d.ts.map +1 -0
- package/dist/providers/moondream.js +140 -0
- package/dist/providers/moondream.js.map +1 -0
- package/dist/providers/openai-compat.d.ts +140 -0
- package/dist/providers/openai-compat.d.ts.map +1 -0
- package/dist/providers/openai-compat.js +537 -0
- package/dist/providers/openai-compat.js.map +1 -0
- package/dist/providers/opencode-free.d.ts +24 -0
- package/dist/providers/opencode-free.d.ts.map +1 -0
- package/dist/providers/opencode-free.js +262 -0
- package/dist/providers/opencode-free.js.map +1 -0
- package/dist/providers/pollinations.d.ts +32 -0
- package/dist/providers/pollinations.d.ts.map +1 -0
- package/dist/providers/pollinations.js +65 -0
- package/dist/providers/pollinations.js.map +1 -0
- package/dist/providers/router9.d.ts +16 -0
- package/dist/providers/router9.d.ts.map +1 -0
- package/dist/providers/router9.js +42 -0
- package/dist/providers/router9.js.map +1 -0
- package/dist/providers/sail.d.ts +44 -0
- package/dist/providers/sail.d.ts.map +1 -0
- package/dist/providers/sail.js +302 -0
- package/dist/providers/sail.js.map +1 -0
- package/dist/providers/septor.d.ts +10 -0
- package/dist/providers/septor.d.ts.map +1 -0
- package/dist/providers/septor.js +36 -0
- package/dist/providers/septor.js.map +1 -0
- package/dist/providers/speechify.d.ts +14 -0
- package/dist/providers/speechify.d.ts.map +1 -0
- package/dist/providers/speechify.js +28 -0
- package/dist/providers/speechify.js.map +1 -0
- package/dist/providers/speka.d.ts +12 -0
- package/dist/providers/speka.d.ts.map +1 -0
- package/dist/providers/speka.js +37 -0
- package/dist/providers/speka.js.map +1 -0
- package/dist/providers/waterfall.d.ts +11 -0
- package/dist/providers/waterfall.d.ts.map +1 -0
- package/dist/providers/waterfall.js +33 -0
- package/dist/providers/waterfall.js.map +1 -0
- package/dist/providers/xkiro.d.ts +71 -0
- package/dist/providers/xkiro.d.ts.map +1 -0
- package/dist/providers/xkiro.js +119 -0
- package/dist/providers/xkiro.js.map +1 -0
- package/dist/providers/zhipu.d.ts +43 -0
- package/dist/providers/zhipu.d.ts.map +1 -0
- package/dist/providers/zhipu.js +95 -0
- package/dist/providers/zhipu.js.map +1 -0
- package/dist/routes/analytics.d.ts +2 -0
- package/dist/routes/analytics.d.ts.map +1 -0
- package/dist/routes/analytics.js +738 -0
- package/dist/routes/analytics.js.map +1 -0
- package/dist/routes/anthropic.d.ts +7 -0
- package/dist/routes/anthropic.d.ts.map +1 -0
- package/dist/routes/anthropic.js +1076 -0
- package/dist/routes/anthropic.js.map +1 -0
- package/dist/routes/auth.d.ts +2 -0
- package/dist/routes/auth.d.ts.map +1 -0
- package/dist/routes/auth.js +310 -0
- package/dist/routes/auth.js.map +1 -0
- package/dist/routes/backups.d.ts +2 -0
- package/dist/routes/backups.d.ts.map +1 -0
- package/dist/routes/backups.js +127 -0
- package/dist/routes/backups.js.map +1 -0
- package/dist/routes/cache.d.ts +2 -0
- package/dist/routes/cache.d.ts.map +1 -0
- package/dist/routes/cache.js +40 -0
- package/dist/routes/cache.js.map +1 -0
- package/dist/routes/client-profiles.d.ts +2 -0
- package/dist/routes/client-profiles.d.ts.map +1 -0
- package/dist/routes/client-profiles.js +128 -0
- package/dist/routes/client-profiles.js.map +1 -0
- package/dist/routes/compression.d.ts +2 -0
- package/dist/routes/compression.d.ts.map +1 -0
- package/dist/routes/compression.js +82 -0
- package/dist/routes/compression.js.map +1 -0
- package/dist/routes/conversations.d.ts +3 -0
- package/dist/routes/conversations.d.ts.map +1 -0
- package/dist/routes/conversations.js +215 -0
- package/dist/routes/conversations.js.map +1 -0
- package/dist/routes/docs.d.ts +2 -0
- package/dist/routes/docs.d.ts.map +1 -0
- package/dist/routes/docs.js +21 -0
- package/dist/routes/docs.js.map +1 -0
- package/dist/routes/embeddings.d.ts +2 -0
- package/dist/routes/embeddings.d.ts.map +1 -0
- package/dist/routes/embeddings.js +255 -0
- package/dist/routes/embeddings.js.map +1 -0
- package/dist/routes/fallback.d.ts +2 -0
- package/dist/routes/fallback.d.ts.map +1 -0
- package/dist/routes/fallback.js +631 -0
- package/dist/routes/fallback.js.map +1 -0
- package/dist/routes/free-tier.d.ts +22 -0
- package/dist/routes/free-tier.d.ts.map +1 -0
- package/dist/routes/free-tier.js +175 -0
- package/dist/routes/free-tier.js.map +1 -0
- package/dist/routes/gemini.d.ts +2 -0
- package/dist/routes/gemini.d.ts.map +1 -0
- package/dist/routes/gemini.js +218 -0
- package/dist/routes/gemini.js.map +1 -0
- package/dist/routes/health.d.ts +2 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +72 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/keys.d.ts +17 -0
- package/dist/routes/keys.d.ts.map +1 -0
- package/dist/routes/keys.js +1787 -0
- package/dist/routes/keys.js.map +1 -0
- package/dist/routes/logs.d.ts +2 -0
- package/dist/routes/logs.d.ts.map +1 -0
- package/dist/routes/logs.js +88 -0
- package/dist/routes/logs.js.map +1 -0
- package/dist/routes/mcp.d.ts +4 -0
- package/dist/routes/mcp.d.ts.map +1 -0
- package/dist/routes/mcp.js +563 -0
- package/dist/routes/mcp.js.map +1 -0
- package/dist/routes/media.d.ts +2 -0
- package/dist/routes/media.d.ts.map +1 -0
- package/dist/routes/media.js +180 -0
- package/dist/routes/media.js.map +1 -0
- package/dist/routes/models.d.ts +2 -0
- package/dist/routes/models.d.ts.map +1 -0
- package/dist/routes/models.js +439 -0
- package/dist/routes/models.js.map +1 -0
- package/dist/routes/ollama.d.ts +7 -0
- package/dist/routes/ollama.d.ts.map +1 -0
- package/dist/routes/ollama.js +595 -0
- package/dist/routes/ollama.js.map +1 -0
- package/dist/routes/profiles.d.ts +3 -0
- package/dist/routes/profiles.d.ts.map +1 -0
- package/dist/routes/profiles.js +431 -0
- package/dist/routes/profiles.js.map +1 -0
- package/dist/routes/proxy.d.ts +32 -0
- package/dist/routes/proxy.d.ts.map +1 -0
- package/dist/routes/proxy.js +2793 -0
- package/dist/routes/proxy.js.map +1 -0
- package/dist/routes/responses.d.ts +1161 -0
- package/dist/routes/responses.d.ts.map +1 -0
- package/dist/routes/responses.js +1521 -0
- package/dist/routes/responses.js.map +1 -0
- package/dist/routes/settings.d.ts +2 -0
- package/dist/routes/settings.d.ts.map +1 -0
- package/dist/routes/settings.js +549 -0
- package/dist/routes/settings.js.map +1 -0
- package/dist/routes/status.d.ts +3 -0
- package/dist/routes/status.d.ts.map +1 -0
- package/dist/routes/status.js +214 -0
- package/dist/routes/status.js.map +1 -0
- package/dist/routes/update.d.ts +31 -0
- package/dist/routes/update.d.ts.map +1 -0
- package/dist/routes/update.js +536 -0
- package/dist/routes/update.js.map +1 -0
- package/dist/routes/url-tokens.d.ts +2 -0
- package/dist/routes/url-tokens.d.ts.map +1 -0
- package/dist/routes/url-tokens.js +31 -0
- package/dist/routes/url-tokens.js.map +1 -0
- package/dist/scripts/export-catalog.d.ts +2 -0
- package/dist/scripts/export-catalog.d.ts.map +1 -0
- package/dist/scripts/export-catalog.js +114 -0
- package/dist/scripts/export-catalog.js.map +1 -0
- package/dist/scripts/rotate-encryption-key.d.ts +81 -0
- package/dist/scripts/rotate-encryption-key.d.ts.map +1 -0
- package/dist/scripts/rotate-encryption-key.js +232 -0
- package/dist/scripts/rotate-encryption-key.js.map +1 -0
- package/dist/scripts/routing-sim.d.ts +2 -0
- package/dist/scripts/routing-sim.d.ts.map +1 -0
- package/dist/scripts/routing-sim.js +130 -0
- package/dist/scripts/routing-sim.js.map +1 -0
- package/dist/scripts/test-all-models.d.ts +2 -0
- package/dist/scripts/test-all-models.d.ts.map +1 -0
- package/dist/scripts/test-all-models.js +56 -0
- package/dist/scripts/test-all-models.js.map +1 -0
- package/dist/services/anthropic-map.d.ts +39 -0
- package/dist/services/anthropic-map.d.ts.map +1 -0
- package/dist/services/anthropic-map.js +138 -0
- package/dist/services/anthropic-map.js.map +1 -0
- package/dist/services/auth.d.ts +30 -0
- package/dist/services/auth.d.ts.map +1 -0
- package/dist/services/auth.js +124 -0
- package/dist/services/auth.js.map +1 -0
- package/dist/services/auto-discover.d.ts +77 -0
- package/dist/services/auto-discover.d.ts.map +1 -0
- package/dist/services/auto-discover.js +1047 -0
- package/dist/services/auto-discover.js.map +1 -0
- package/dist/services/backups.d.ts +67 -0
- package/dist/services/backups.d.ts.map +1 -0
- package/dist/services/backups.js +444 -0
- package/dist/services/backups.js.map +1 -0
- package/dist/services/builtin-model-discovery.d.ts +107 -0
- package/dist/services/builtin-model-discovery.d.ts.map +1 -0
- package/dist/services/builtin-model-discovery.js +296 -0
- package/dist/services/builtin-model-discovery.js.map +1 -0
- package/dist/services/cache.d.ts +190 -0
- package/dist/services/cache.d.ts.map +1 -0
- package/dist/services/cache.js +617 -0
- package/dist/services/cache.js.map +1 -0
- package/dist/services/catalog-sync.d.ts +257 -0
- package/dist/services/catalog-sync.d.ts.map +1 -0
- package/dist/services/catalog-sync.js +1041 -0
- package/dist/services/catalog-sync.js.map +1 -0
- package/dist/services/compression/config.d.ts +33 -0
- package/dist/services/compression/config.d.ts.map +1 -0
- package/dist/services/compression/config.js +158 -0
- package/dist/services/compression/config.js.map +1 -0
- package/dist/services/compression/engines/aging.d.ts +2 -0
- package/dist/services/compression/engines/aging.d.ts.map +1 -0
- package/dist/services/compression/engines/aging.js +53 -0
- package/dist/services/compression/engines/aging.js.map +1 -0
- package/dist/services/compression/engines/custom-filters.d.ts +4 -0
- package/dist/services/compression/engines/custom-filters.d.ts.map +1 -0
- package/dist/services/compression/engines/custom-filters.js +49 -0
- package/dist/services/compression/engines/custom-filters.js.map +1 -0
- package/dist/services/compression/engines/dedup.d.ts +2 -0
- package/dist/services/compression/engines/dedup.d.ts.map +1 -0
- package/dist/services/compression/engines/dedup.js +61 -0
- package/dist/services/compression/engines/dedup.js.map +1 -0
- package/dist/services/compression/engines/filter-definitions.d.ts +75 -0
- package/dist/services/compression/engines/filter-definitions.d.ts.map +1 -0
- package/dist/services/compression/engines/filter-definitions.js +45 -0
- package/dist/services/compression/engines/filter-definitions.js.map +1 -0
- package/dist/services/compression/engines/hard-budget.d.ts +2 -0
- package/dist/services/compression/engines/hard-budget.d.ts.map +1 -0
- package/dist/services/compression/engines/hard-budget.js +52 -0
- package/dist/services/compression/engines/hard-budget.js.map +1 -0
- package/dist/services/compression/engines/index.d.ts +9 -0
- package/dist/services/compression/engines/index.d.ts.map +1 -0
- package/dist/services/compression/engines/index.js +9 -0
- package/dist/services/compression/engines/index.js.map +1 -0
- package/dist/services/compression/engines/jsoncompact.d.ts +3 -0
- package/dist/services/compression/engines/jsoncompact.d.ts.map +1 -0
- package/dist/services/compression/engines/jsoncompact.js +145 -0
- package/dist/services/compression/engines/jsoncompact.js.map +1 -0
- package/dist/services/compression/engines/lite.d.ts +2 -0
- package/dist/services/compression/engines/lite.d.ts.map +1 -0
- package/dist/services/compression/engines/lite.js +34 -0
- package/dist/services/compression/engines/lite.js.map +1 -0
- package/dist/services/compression/engines/read-lifecycle.d.ts +2 -0
- package/dist/services/compression/engines/read-lifecycle.d.ts.map +1 -0
- package/dist/services/compression/engines/read-lifecycle.js +70 -0
- package/dist/services/compression/engines/read-lifecycle.js.map +1 -0
- package/dist/services/compression/engines/relevance.d.ts +2 -0
- package/dist/services/compression/engines/relevance.d.ts.map +1 -0
- package/dist/services/compression/engines/relevance.js +74 -0
- package/dist/services/compression/engines/relevance.js.map +1 -0
- package/dist/services/compression/engines/toolfilter.d.ts +2 -0
- package/dist/services/compression/engines/toolfilter.d.ts.map +1 -0
- package/dist/services/compression/engines/toolfilter.js +195 -0
- package/dist/services/compression/engines/toolfilter.js.map +1 -0
- package/dist/services/compression/fidelity-gate.d.ts +12 -0
- package/dist/services/compression/fidelity-gate.d.ts.map +1 -0
- package/dist/services/compression/fidelity-gate.js +90 -0
- package/dist/services/compression/fidelity-gate.js.map +1 -0
- package/dist/services/compression/helpers.d.ts +9 -0
- package/dist/services/compression/helpers.d.ts.map +1 -0
- package/dist/services/compression/helpers.js +52 -0
- package/dist/services/compression/helpers.js.map +1 -0
- package/dist/services/compression/pipeline.d.ts +7 -0
- package/dist/services/compression/pipeline.d.ts.map +1 -0
- package/dist/services/compression/pipeline.js +245 -0
- package/dist/services/compression/pipeline.js.map +1 -0
- package/dist/services/compression/preservation.d.ts +27 -0
- package/dist/services/compression/preservation.d.ts.map +1 -0
- package/dist/services/compression/preservation.js +109 -0
- package/dist/services/compression/preservation.js.map +1 -0
- package/dist/services/compression/registry.d.ts +6 -0
- package/dist/services/compression/registry.d.ts.map +1 -0
- package/dist/services/compression/registry.js +16 -0
- package/dist/services/compression/registry.js.map +1 -0
- package/dist/services/compression/stats.d.ts +29 -0
- package/dist/services/compression/stats.d.ts.map +1 -0
- package/dist/services/compression/stats.js +55 -0
- package/dist/services/compression/stats.js.map +1 -0
- package/dist/services/compression/types.d.ts +90 -0
- package/dist/services/compression/types.d.ts.map +1 -0
- package/dist/services/compression/types.js +2 -0
- package/dist/services/compression/types.js.map +1 -0
- package/dist/services/context-handoff.d.ts +22 -0
- package/dist/services/context-handoff.d.ts.map +1 -0
- package/dist/services/context-handoff.js +164 -0
- package/dist/services/context-handoff.js.map +1 -0
- package/dist/services/cooldown-probe.d.ts +24 -0
- package/dist/services/cooldown-probe.d.ts.map +1 -0
- package/dist/services/cooldown-probe.js +181 -0
- package/dist/services/cooldown-probe.js.map +1 -0
- package/dist/services/custom-endpoint.d.ts +58 -0
- package/dist/services/custom-endpoint.d.ts.map +1 -0
- package/dist/services/custom-endpoint.js +167 -0
- package/dist/services/custom-endpoint.js.map +1 -0
- package/dist/services/custom-media-register.d.ts +22 -0
- package/dist/services/custom-media-register.d.ts.map +1 -0
- package/dist/services/custom-media-register.js +45 -0
- package/dist/services/custom-media-register.js.map +1 -0
- package/dist/services/custom-model-register.d.ts +50 -0
- package/dist/services/custom-model-register.d.ts.map +1 -0
- package/dist/services/custom-model-register.js +103 -0
- package/dist/services/custom-model-register.js.map +1 -0
- package/dist/services/custom-model-seed.d.ts +18 -0
- package/dist/services/custom-model-seed.d.ts.map +1 -0
- package/dist/services/custom-model-seed.js +42 -0
- package/dist/services/custom-model-seed.js.map +1 -0
- package/dist/services/custom-model-sync.d.ts +37 -0
- package/dist/services/custom-model-sync.d.ts.map +1 -0
- package/dist/services/custom-model-sync.js +118 -0
- package/dist/services/custom-model-sync.js.map +1 -0
- package/dist/services/custom-model-tombstone.d.ts +5 -0
- package/dist/services/custom-model-tombstone.d.ts.map +1 -0
- package/dist/services/custom-model-tombstone.js +30 -0
- package/dist/services/custom-model-tombstone.js.map +1 -0
- package/dist/services/declarative-config.d.ts +356 -0
- package/dist/services/declarative-config.d.ts.map +1 -0
- package/dist/services/declarative-config.js +427 -0
- package/dist/services/declarative-config.js.map +1 -0
- package/dist/services/degradation.d.ts +40 -0
- package/dist/services/degradation.d.ts.map +1 -0
- package/dist/services/degradation.js +119 -0
- package/dist/services/degradation.js.map +1 -0
- package/dist/services/embeddings.d.ts +76 -0
- package/dist/services/embeddings.d.ts.map +1 -0
- package/dist/services/embeddings.js +319 -0
- package/dist/services/embeddings.js.map +1 -0
- package/dist/services/fusion.d.ts +162 -0
- package/dist/services/fusion.d.ts.map +1 -0
- package/dist/services/fusion.js +789 -0
- package/dist/services/fusion.js.map +1 -0
- package/dist/services/gemini-map.d.ts +14 -0
- package/dist/services/gemini-map.d.ts.map +1 -0
- package/dist/services/gemini-map.js +78 -0
- package/dist/services/gemini-map.js.map +1 -0
- package/dist/services/health.d.ts +52 -0
- package/dist/services/health.d.ts.map +1 -0
- package/dist/services/health.js +352 -0
- package/dist/services/health.js.map +1 -0
- package/dist/services/idempotency.d.ts +49 -0
- package/dist/services/idempotency.d.ts.map +1 -0
- package/dist/services/idempotency.js +140 -0
- package/dist/services/idempotency.js.map +1 -0
- package/dist/services/key-budget.d.ts +74 -0
- package/dist/services/key-budget.d.ts.map +1 -0
- package/dist/services/key-budget.js +200 -0
- package/dist/services/key-budget.js.map +1 -0
- package/dist/services/media.d.ts +123 -0
- package/dist/services/media.d.ts.map +1 -0
- package/dist/services/media.js +954 -0
- package/dist/services/media.js.map +1 -0
- package/dist/services/model-discovery.d.ts +126 -0
- package/dist/services/model-discovery.d.ts.map +1 -0
- package/dist/services/model-discovery.js +662 -0
- package/dist/services/model-discovery.js.map +1 -0
- package/dist/services/model-groups.d.ts +149 -0
- package/dist/services/model-groups.d.ts.map +1 -0
- package/dist/services/model-groups.js +314 -0
- package/dist/services/model-groups.js.map +1 -0
- package/dist/services/model-listing.d.ts +18 -0
- package/dist/services/model-listing.d.ts.map +1 -0
- package/dist/services/model-listing.js +94 -0
- package/dist/services/model-listing.js.map +1 -0
- package/dist/services/model-retirement.d.ts +29 -0
- package/dist/services/model-retirement.d.ts.map +1 -0
- package/dist/services/model-retirement.js +86 -0
- package/dist/services/model-retirement.js.map +1 -0
- package/dist/services/model-state.d.ts +90 -0
- package/dist/services/model-state.d.ts.map +1 -0
- package/dist/services/model-state.js +342 -0
- package/dist/services/model-state.js.map +1 -0
- package/dist/services/model-weight-overrides.d.ts +48 -0
- package/dist/services/model-weight-overrides.d.ts.map +1 -0
- package/dist/services/model-weight-overrides.js +127 -0
- package/dist/services/model-weight-overrides.js.map +1 -0
- package/dist/services/notification-emitter.d.ts +50 -0
- package/dist/services/notification-emitter.d.ts.map +1 -0
- package/dist/services/notification-emitter.js +177 -0
- package/dist/services/notification-emitter.js.map +1 -0
- package/dist/services/opencode-free-sync.d.ts +29 -0
- package/dist/services/opencode-free-sync.d.ts.map +1 -0
- package/dist/services/opencode-free-sync.js +206 -0
- package/dist/services/opencode-free-sync.js.map +1 -0
- package/dist/services/penalty-inspector.d.ts +56 -0
- package/dist/services/penalty-inspector.d.ts.map +1 -0
- package/dist/services/penalty-inspector.js +167 -0
- package/dist/services/penalty-inspector.js.map +1 -0
- package/dist/services/profile-models.d.ts +5 -0
- package/dist/services/profile-models.d.ts.map +1 -0
- package/dist/services/profile-models.js +62 -0
- package/dist/services/profile-models.js.map +1 -0
- package/dist/services/provider-credential.d.ts +19 -0
- package/dist/services/provider-credential.d.ts.map +1 -0
- package/dist/services/provider-credential.js +51 -0
- package/dist/services/provider-credential.js.map +1 -0
- package/dist/services/provider-quota.d.ts +64 -0
- package/dist/services/provider-quota.d.ts.map +1 -0
- package/dist/services/provider-quota.js +563 -0
- package/dist/services/provider-quota.js.map +1 -0
- package/dist/services/quirks.d.ts +0 -0
- package/dist/services/quirks.d.ts.map +1 -0
- package/dist/services/quirks.js +0 -0
- package/dist/services/quirks.js.map +1 -0
- package/dist/services/quota-forecast.d.ts +50 -0
- package/dist/services/quota-forecast.d.ts.map +1 -0
- package/dist/services/quota-forecast.js +150 -0
- package/dist/services/quota-forecast.js.map +1 -0
- package/dist/services/quota-outlook.d.ts +4 -0
- package/dist/services/quota-outlook.d.ts.map +1 -0
- package/dist/services/quota-outlook.js +92 -0
- package/dist/services/quota-outlook.js.map +1 -0
- package/dist/services/ratelimit.d.ts +249 -0
- package/dist/services/ratelimit.d.ts.map +1 -0
- package/dist/services/ratelimit.js +1182 -0
- package/dist/services/ratelimit.js.map +1 -0
- package/dist/services/request-retention.d.ts +60 -0
- package/dist/services/request-retention.d.ts.map +1 -0
- package/dist/services/request-retention.js +229 -0
- package/dist/services/request-retention.js.map +1 -0
- package/dist/services/router.d.ts +384 -0
- package/dist/services/router.d.ts.map +1 -0
- package/dist/services/router.js +1986 -0
- package/dist/services/router.js.map +1 -0
- package/dist/services/scoring.d.ts +156 -0
- package/dist/services/scoring.d.ts.map +1 -0
- package/dist/services/scoring.js +435 -0
- package/dist/services/scoring.js.map +1 -0
- package/dist/services/url-tokens.d.ts +15 -0
- package/dist/services/url-tokens.d.ts.map +1 -0
- package/dist/services/url-tokens.js +55 -0
- package/dist/services/url-tokens.js.map +1 -0
- package/package.json +77 -4
- package/README.md +0 -3
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { Db } from '../db/types.js';
|
|
2
|
+
export interface EmbeddingModelRow {
|
|
3
|
+
id: number;
|
|
4
|
+
family: string;
|
|
5
|
+
platform: string;
|
|
6
|
+
model_id: string;
|
|
7
|
+
display_name: string;
|
|
8
|
+
dimensions: number;
|
|
9
|
+
max_input_tokens: number | null;
|
|
10
|
+
priority: number;
|
|
11
|
+
enabled: number;
|
|
12
|
+
quota_label: string;
|
|
13
|
+
key_id: number | null;
|
|
14
|
+
}
|
|
15
|
+
export interface EmbeddingsResult {
|
|
16
|
+
family: string;
|
|
17
|
+
platform: string;
|
|
18
|
+
modelId: string;
|
|
19
|
+
dimensions: number;
|
|
20
|
+
vectors: number[][];
|
|
21
|
+
inputTokens: number;
|
|
22
|
+
}
|
|
23
|
+
export declare class EmbeddingsError extends Error {
|
|
24
|
+
status: number;
|
|
25
|
+
code?: string;
|
|
26
|
+
/** Back-off the upstream provider stated (`Retry-After` header or a
|
|
27
|
+
* retry-delay field in the error body), in milliseconds. Kept separate from
|
|
28
|
+
* the message so the route can answer the client with a real Retry-After
|
|
29
|
+
* instead of a bare 429, the same way the chat router benches keys. */
|
|
30
|
+
retryAfterMs?: number;
|
|
31
|
+
constructor(message: string, status: number, code?: string, retryAfterMs?: number);
|
|
32
|
+
}
|
|
33
|
+
export declare function listEmbeddingModels(): EmbeddingModelRow[];
|
|
34
|
+
export declare function getDefaultFamily(): string;
|
|
35
|
+
/** Map the request's `model` to a family: 'auto'/empty → default; a family
|
|
36
|
+
* name → itself; a provider-specific model id → its family. */
|
|
37
|
+
export declare function resolveFamily(model: string | undefined): string | null;
|
|
38
|
+
/** Provider adapters that can safely receive catalog-managed embedding rows. */
|
|
39
|
+
export declare const EMBEDDING_PLATFORMS: Set<string>;
|
|
40
|
+
export declare function probeEmbeddingDimensions(baseUrl: string, key: string, modelId: string): Promise<number>;
|
|
41
|
+
export interface CustomEmbeddingRegistration {
|
|
42
|
+
keyId: number;
|
|
43
|
+
modelId: string;
|
|
44
|
+
displayName: string | null;
|
|
45
|
+
family: string;
|
|
46
|
+
dimensions: number;
|
|
47
|
+
maxInputTokens: number | null;
|
|
48
|
+
quotaLabel: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Upsert one custom embedding model bound to an endpoint credential — the
|
|
52
|
+
* shared write path behind POST /api/embeddings/custom and the bulk key
|
|
53
|
+
* importer (#382). Throws EmbeddingsError(400) when the family already exists
|
|
54
|
+
* at a different dimension: vectors from mismatched spaces must never mix, so
|
|
55
|
+
* the caller has to pick a new family name instead.
|
|
56
|
+
*/
|
|
57
|
+
export declare function registerCustomEmbeddingModel(db: Db, reg: CustomEmbeddingRegistration): {
|
|
58
|
+
modelDbId: number;
|
|
59
|
+
created: boolean;
|
|
60
|
+
};
|
|
61
|
+
/** Embed `inputs` via the family's provider chain, failing over within the
|
|
62
|
+
* family on any provider error. Throws EmbeddingsError when the chain is dry.
|
|
63
|
+
*
|
|
64
|
+
* `dimensions` (optional): client-supplied output-dimension override forwarded to
|
|
65
|
+
* providers that support MRL truncation (NVIDIA NeMo NIM, Google Gemini Embedding,
|
|
66
|
+
* OpenAI text-embedding-3-*). Providers that ignore the field see an identical
|
|
67
|
+
* request body. The override is independent of the model's native dimension — the
|
|
68
|
+
* family registry still pins the canonical dimension, this just lets callers ask
|
|
69
|
+
* for a smaller vector at the cost of some accuracy. */
|
|
70
|
+
export declare function runEmbeddings(model: string | undefined, inputs: string[], dimensions?: number): Promise<EmbeddingsResult>;
|
|
71
|
+
/** Whole seconds the client should wait before retrying an embeddings request:
|
|
72
|
+
* the soonest upstream back-off when the whole chain was rate limited, else the
|
|
73
|
+
* monthly-budget reset for a local quota block. Undefined means the caller
|
|
74
|
+
* shouldn't set the header. */
|
|
75
|
+
export declare function embeddingsRetryAfterSec(err: EmbeddingsError): number | undefined;
|
|
76
|
+
//# sourceMappingURL=embeddings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../src/services/embeddings.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAGzC,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;4EAGwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAC;gBACV,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;CAMlF;AAeD,wBAAgB,mBAAmB,IAAI,iBAAiB,EAAE,CAIzD;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;+DAC+D;AAC/D,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAMtE;AAeD,gFAAgF;AAChF,eAAO,MAAM,mBAAmB,aAU9B,CAAC;AA8CH,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAO7G;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,2BAA2B,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAyD9H;AA2FD;;;;;;;;wDAQwD;AACxD,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6D/H;AAED;;;gCAGgC;AAChC,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAIhF"}
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
// Embeddings routing. Unlike chat, embeddings can NOT fail over across models:
|
|
2
|
+
// vectors from different models live in incompatible spaces, and silently
|
|
3
|
+
// switching models would corrupt any vector store built on top of us. So the
|
|
4
|
+
// routing unit is a "family" (one model identity + dimension) and failover only
|
|
5
|
+
// walks the providers serving that same family.
|
|
6
|
+
//
|
|
7
|
+
// `model: "auto"` (or empty) routes to the configured default family — so auto
|
|
8
|
+
// always works: with one provider it just uses that one, with several it gets
|
|
9
|
+
// cross-provider redundancy for free.
|
|
10
|
+
import { getDb, getSetting } from '../db/index.js';
|
|
11
|
+
import { secondsUntilNextMonth } from './key-budget.js';
|
|
12
|
+
import { parseRetryAfterMs } from '../providers/base.js';
|
|
13
|
+
import { RetryHintTracker, retryAfterSeconds } from '../lib/retry-hint.js';
|
|
14
|
+
import { getClientContext } from '../lib/client-context.js';
|
|
15
|
+
import { reserveProviderCredential } from './provider-credential.js';
|
|
16
|
+
import { proxyFetch } from '../lib/proxy.js';
|
|
17
|
+
import { bearerAuthHeader } from '../lib/credential.js';
|
|
18
|
+
import { customEndpointKeyIds } from './custom-endpoint.js';
|
|
19
|
+
import { SPEKA_BASE_URL } from '../providers/speka.js';
|
|
20
|
+
export class EmbeddingsError extends Error {
|
|
21
|
+
status;
|
|
22
|
+
code;
|
|
23
|
+
/** Back-off the upstream provider stated (`Retry-After` header or a
|
|
24
|
+
* retry-delay field in the error body), in milliseconds. Kept separate from
|
|
25
|
+
* the message so the route can answer the client with a real Retry-After
|
|
26
|
+
* instead of a bare 429, the same way the chat router benches keys. */
|
|
27
|
+
retryAfterMs;
|
|
28
|
+
constructor(message, status, code, retryAfterMs) {
|
|
29
|
+
super(message);
|
|
30
|
+
this.status = status;
|
|
31
|
+
this.code = code;
|
|
32
|
+
this.retryAfterMs = retryAfterMs;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/** EmbeddingsError for a non-OK upstream response: status, truncated body and
|
|
36
|
+
* any stated back-off read off the `Retry-After` header before the body is
|
|
37
|
+
* consumed. */
|
|
38
|
+
async function upstreamEmbeddingsError(r) {
|
|
39
|
+
const retryAfterMs = parseRetryAfterMs(r.headers?.get('retry-after') ?? null);
|
|
40
|
+
return new EmbeddingsError(`upstream ${r.status}: ${(await r.text()).slice(0, 200)}`, r.status, undefined, retryAfterMs);
|
|
41
|
+
}
|
|
42
|
+
export function listEmbeddingModels() {
|
|
43
|
+
return getDb().prepare('SELECT * FROM embedding_models ORDER BY family, priority').all();
|
|
44
|
+
}
|
|
45
|
+
export function getDefaultFamily() {
|
|
46
|
+
return getSetting('embeddings_default_family') ?? 'gemini-embedding-001';
|
|
47
|
+
}
|
|
48
|
+
/** Map the request's `model` to a family: 'auto'/empty → default; a family
|
|
49
|
+
* name → itself; a provider-specific model id → its family. */
|
|
50
|
+
export function resolveFamily(model) {
|
|
51
|
+
if (!model || model === 'auto')
|
|
52
|
+
return getDefaultFamily();
|
|
53
|
+
const rows = listEmbeddingModels();
|
|
54
|
+
if (rows.some(r => r.family === model))
|
|
55
|
+
return model;
|
|
56
|
+
const byModelId = rows.find(r => r.model_id === model);
|
|
57
|
+
return byModelId?.family ?? null;
|
|
58
|
+
}
|
|
59
|
+
// Rough token estimate when the provider doesn't report usage (~4 chars/token).
|
|
60
|
+
function estimateTokens(inputs) {
|
|
61
|
+
return Math.ceil(inputs.reduce((n, s) => n + s.length, 0) / 4);
|
|
62
|
+
}
|
|
63
|
+
const FETCH_TIMEOUT_MS = 30_000;
|
|
64
|
+
/** Provider adapters that can safely receive catalog-managed embedding rows. */
|
|
65
|
+
export const EMBEDDING_PLATFORMS = new Set([
|
|
66
|
+
'google',
|
|
67
|
+
'nvidia',
|
|
68
|
+
'openrouter',
|
|
69
|
+
'github',
|
|
70
|
+
'cloudflare',
|
|
71
|
+
'huggingface',
|
|
72
|
+
'cohere',
|
|
73
|
+
'sealion',
|
|
74
|
+
'speka',
|
|
75
|
+
]);
|
|
76
|
+
async function openAiStyleEmbed(url, platform, key, modelId, inputs, extra = {}, dimensions) {
|
|
77
|
+
const body = { model: modelId, input: inputs, ...extra };
|
|
78
|
+
// Some providers (NVIDIA NeMo NIM, Google Gemini Embedding, OpenAI v3) support
|
|
79
|
+
// Matryoshka Representation Learning (MRL) — a smaller output_dim is valid and
|
|
80
|
+
// truncates the vector rather than failing. Others (HuggingFace feature-extraction,
|
|
81
|
+
// Cloudflare BGE) ignore unknown fields silently. We only forward the param when
|
|
82
|
+
// the caller asked for an explicit override, so providers that don't accept it
|
|
83
|
+
// see a request body identical to today.
|
|
84
|
+
if (dimensions !== undefined)
|
|
85
|
+
body.dimensions = dimensions;
|
|
86
|
+
const r = await proxyFetch(url, {
|
|
87
|
+
method: 'POST',
|
|
88
|
+
// A custom endpoint with auth off holds the `no-key` sentinel: omit the
|
|
89
|
+
// header instead of sending `Bearer no-key` (#1331).
|
|
90
|
+
headers: { 'Content-Type': 'application/json', ...bearerAuthHeader(key) },
|
|
91
|
+
body: JSON.stringify(body),
|
|
92
|
+
signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),
|
|
93
|
+
}, platform, 'embedding', FETCH_TIMEOUT_MS);
|
|
94
|
+
if (!r.ok) {
|
|
95
|
+
throw await upstreamEmbeddingsError(r);
|
|
96
|
+
}
|
|
97
|
+
const j = (await r.json());
|
|
98
|
+
const data = [...(j.data ?? [])].sort((a, b) => (a.index ?? 0) - (b.index ?? 0));
|
|
99
|
+
return {
|
|
100
|
+
vectors: data.map(d => d.embedding),
|
|
101
|
+
inputTokens: j.usage?.prompt_tokens ?? j.usage?.total_tokens ?? null,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
export async function probeEmbeddingDimensions(baseUrl, key, modelId) {
|
|
105
|
+
const out = await openAiStyleEmbed(`${baseUrl.trim().replace(/\/+$/, '')}/embeddings`, 'custom', key, modelId, ['dimension probe']);
|
|
106
|
+
const vector = out.vectors[0];
|
|
107
|
+
if (!Array.isArray(vector) || vector.length === 0) {
|
|
108
|
+
throw new EmbeddingsError('upstream returned malformed embeddings', 502);
|
|
109
|
+
}
|
|
110
|
+
return vector.length;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Upsert one custom embedding model bound to an endpoint credential — the
|
|
114
|
+
* shared write path behind POST /api/embeddings/custom and the bulk key
|
|
115
|
+
* importer (#382). Throws EmbeddingsError(400) when the family already exists
|
|
116
|
+
* at a different dimension: vectors from mismatched spaces must never mix, so
|
|
117
|
+
* the caller has to pick a new family name instead.
|
|
118
|
+
*/
|
|
119
|
+
export function registerCustomEmbeddingModel(db, reg) {
|
|
120
|
+
const sibling = db.prepare(`
|
|
121
|
+
SELECT dimensions
|
|
122
|
+
FROM embedding_models
|
|
123
|
+
WHERE family = ?
|
|
124
|
+
AND NOT (platform = 'custom' AND model_id = ?)
|
|
125
|
+
LIMIT 1
|
|
126
|
+
`).get(reg.family, reg.modelId);
|
|
127
|
+
if (sibling && sibling.dimensions !== reg.dimensions) {
|
|
128
|
+
throw new EmbeddingsError(`Embedding family '${reg.family}' is ${sibling.dimensions} dimensions, but '${reg.modelId}' returned ${reg.dimensions}. Use a new family name.`, 400);
|
|
129
|
+
}
|
|
130
|
+
const endpointKeyIds = customEndpointKeyIds(db, reg.keyId);
|
|
131
|
+
const existingModel = db.prepare(`
|
|
132
|
+
SELECT id, priority, key_id
|
|
133
|
+
FROM embedding_models
|
|
134
|
+
WHERE platform = 'custom' AND model_id = ?
|
|
135
|
+
LIMIT 1
|
|
136
|
+
`).get(reg.modelId);
|
|
137
|
+
// A model already on this endpoint keeps the key it has; only a move to a
|
|
138
|
+
// different endpoint re-binds it.
|
|
139
|
+
const bindKeyId = existingModel?.key_id != null && endpointKeyIds.has(existingModel.key_id)
|
|
140
|
+
? existingModel.key_id
|
|
141
|
+
: reg.keyId;
|
|
142
|
+
const priority = existingModel?.priority ?? (db.prepare('SELECT COALESCE(MAX(priority), 0) AS maxPriority FROM embedding_models WHERE family = ?')
|
|
143
|
+
.get(reg.family).maxPriority + 1);
|
|
144
|
+
// `display_name` is optional: a new model takes its id, and a model already
|
|
145
|
+
// on record keeps the name it has instead of being reset by a submit that
|
|
146
|
+
// simply left the field blank (#704).
|
|
147
|
+
if (existingModel) {
|
|
148
|
+
db.prepare(`
|
|
149
|
+
UPDATE embedding_models
|
|
150
|
+
SET family = ?,
|
|
151
|
+
display_name = COALESCE(?, display_name),
|
|
152
|
+
dimensions = ?,
|
|
153
|
+
max_input_tokens = ?,
|
|
154
|
+
priority = ?,
|
|
155
|
+
enabled = 1,
|
|
156
|
+
quota_label = ?,
|
|
157
|
+
key_id = ?
|
|
158
|
+
WHERE id = ?
|
|
159
|
+
`).run(reg.family, reg.displayName, reg.dimensions, reg.maxInputTokens, priority, reg.quotaLabel, bindKeyId, existingModel.id);
|
|
160
|
+
return { modelDbId: existingModel.id, created: false };
|
|
161
|
+
}
|
|
162
|
+
const model = db.prepare(`
|
|
163
|
+
INSERT INTO embedding_models
|
|
164
|
+
(family, platform, model_id, display_name, dimensions, max_input_tokens, priority, enabled, quota_label, key_id)
|
|
165
|
+
VALUES (?, 'custom', ?, ?, ?, ?, ?, 1, ?, ?)
|
|
166
|
+
`).run(reg.family, reg.modelId, reg.displayName ?? reg.modelId, reg.dimensions, reg.maxInputTokens, priority, reg.quotaLabel, bindKeyId);
|
|
167
|
+
return { modelDbId: Number(model.lastInsertRowid), created: true };
|
|
168
|
+
}
|
|
169
|
+
async function callProvider(row, credential, inputs, dimensions) {
|
|
170
|
+
const { key } = credential;
|
|
171
|
+
switch (row.platform) {
|
|
172
|
+
case 'custom':
|
|
173
|
+
if (!credential.baseUrl)
|
|
174
|
+
throw new EmbeddingsError('custom embedding provider is missing base_url', 500);
|
|
175
|
+
return openAiStyleEmbed(`${credential.baseUrl}/embeddings`, row.platform, key, row.model_id, inputs, {}, dimensions);
|
|
176
|
+
case 'google':
|
|
177
|
+
return openAiStyleEmbed('https://generativelanguage.googleapis.com/v1beta/openai/embeddings', row.platform, key, row.model_id, inputs, {}, dimensions);
|
|
178
|
+
case 'nvidia':
|
|
179
|
+
// NeMo Retriever NIMs require input_type; 'query' is the symmetric-safe
|
|
180
|
+
// choice for a gateway that can't know whether this is index or query time.
|
|
181
|
+
// MRL models (e.g. llama-nemotron-embed-1b-v2) accept dimensions and truncate.
|
|
182
|
+
return openAiStyleEmbed('https://integrate.api.nvidia.com/v1/embeddings', row.platform, key, row.model_id, inputs, { input_type: 'query' }, dimensions);
|
|
183
|
+
case 'openrouter':
|
|
184
|
+
return openAiStyleEmbed('https://openrouter.ai/api/v1/embeddings', row.platform, key, row.model_id, inputs, {}, dimensions);
|
|
185
|
+
case 'github':
|
|
186
|
+
return openAiStyleEmbed('https://models.github.ai/inference/embeddings', row.platform, key, row.model_id, inputs, {}, dimensions);
|
|
187
|
+
case 'sealion':
|
|
188
|
+
return openAiStyleEmbed('https://api.sea-lion.ai/v1/embeddings', row.platform, key, row.model_id, inputs, {}, dimensions);
|
|
189
|
+
case 'speka':
|
|
190
|
+
return openAiStyleEmbed(`${SPEKA_BASE_URL}/embeddings`, row.platform, key, row.model_id, inputs, { encoding_format: 'float' }, dimensions);
|
|
191
|
+
case 'cloudflare': {
|
|
192
|
+
// Key is stored as "account_id:token".
|
|
193
|
+
const sep = key.indexOf(':');
|
|
194
|
+
if (sep === -1)
|
|
195
|
+
throw new EmbeddingsError('cloudflare key is not in account_id:token form', 500);
|
|
196
|
+
const accountId = key.slice(0, sep);
|
|
197
|
+
const token = key.slice(sep + 1);
|
|
198
|
+
return openAiStyleEmbed(`https://api.cloudflare.com/client/v4/accounts/${accountId}/ai/v1/embeddings`, row.platform, token, row.model_id, inputs, {});
|
|
199
|
+
}
|
|
200
|
+
case 'huggingface': {
|
|
201
|
+
// HF serves embeddings as the feature-extraction task, not /v1/embeddings.
|
|
202
|
+
const r = await proxyFetch(`https://router.huggingface.co/hf-inference/models/${row.model_id}/pipeline/feature-extraction`, {
|
|
203
|
+
method: 'POST',
|
|
204
|
+
headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${key}` },
|
|
205
|
+
body: JSON.stringify({ inputs }),
|
|
206
|
+
signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),
|
|
207
|
+
}, row.platform, 'embedding', FETCH_TIMEOUT_MS);
|
|
208
|
+
if (!r.ok)
|
|
209
|
+
throw await upstreamEmbeddingsError(r);
|
|
210
|
+
const j = await r.json();
|
|
211
|
+
const vectors = Array.isArray(j[0]) ? j : [j];
|
|
212
|
+
return { vectors, inputTokens: null };
|
|
213
|
+
}
|
|
214
|
+
case 'cohere': {
|
|
215
|
+
const r = await proxyFetch('https://api.cohere.com/v2/embed', {
|
|
216
|
+
method: 'POST',
|
|
217
|
+
headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${key}` },
|
|
218
|
+
body: JSON.stringify({
|
|
219
|
+
model: row.model_id,
|
|
220
|
+
texts: inputs,
|
|
221
|
+
input_type: 'search_document',
|
|
222
|
+
embedding_types: ['float'],
|
|
223
|
+
}),
|
|
224
|
+
signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),
|
|
225
|
+
}, row.platform, 'embedding', FETCH_TIMEOUT_MS);
|
|
226
|
+
if (!r.ok)
|
|
227
|
+
throw await upstreamEmbeddingsError(r);
|
|
228
|
+
const j = (await r.json());
|
|
229
|
+
return { vectors: j.embeddings?.float ?? [], inputTokens: j.meta?.billed_units?.input_tokens ?? null };
|
|
230
|
+
}
|
|
231
|
+
default:
|
|
232
|
+
throw new EmbeddingsError(`no embeddings adapter for platform '${row.platform}'`, 500);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
function logEmbeddingRequest(row, keyId, status, inputTokens, latencyMs, error) {
|
|
236
|
+
try {
|
|
237
|
+
const client = getClientContext();
|
|
238
|
+
getDb().prepare(`
|
|
239
|
+
INSERT INTO requests (platform, model_id, key_id, status, input_tokens, output_tokens, latency_ms, error, request_type, client_ip, client_user_agent, client_agent)
|
|
240
|
+
VALUES (?, ?, ?, ?, ?, 0, ?, ?, 'embedding', ?, ?, ?)
|
|
241
|
+
`).run(row.platform, row.model_id, keyId, status, inputTokens, latencyMs, error, client.ip, client.userAgent, client.agent);
|
|
242
|
+
}
|
|
243
|
+
catch (e) {
|
|
244
|
+
console.error('Failed to log embedding request:', e);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
/** Embed `inputs` via the family's provider chain, failing over within the
|
|
248
|
+
* family on any provider error. Throws EmbeddingsError when the chain is dry.
|
|
249
|
+
*
|
|
250
|
+
* `dimensions` (optional): client-supplied output-dimension override forwarded to
|
|
251
|
+
* providers that support MRL truncation (NVIDIA NeMo NIM, Google Gemini Embedding,
|
|
252
|
+
* OpenAI text-embedding-3-*). Providers that ignore the field see an identical
|
|
253
|
+
* request body. The override is independent of the model's native dimension — the
|
|
254
|
+
* family registry still pins the canonical dimension, this just lets callers ask
|
|
255
|
+
* for a smaller vector at the cost of some accuracy. */
|
|
256
|
+
export async function runEmbeddings(model, inputs, dimensions) {
|
|
257
|
+
const family = resolveFamily(model);
|
|
258
|
+
if (!family) {
|
|
259
|
+
throw new EmbeddingsError(`Unknown embedding model '${model}'. Use 'auto', a family name, or a provider model id.`, 400);
|
|
260
|
+
}
|
|
261
|
+
const chain = getDb().prepare('SELECT * FROM embedding_models WHERE family = ? AND enabled = 1 ORDER BY priority').all(family);
|
|
262
|
+
if (chain.length === 0) {
|
|
263
|
+
throw new EmbeddingsError(`No enabled providers for embedding family '${family}'.`, 503);
|
|
264
|
+
}
|
|
265
|
+
let lastError = null;
|
|
266
|
+
// Upstream back-offs across the whole chain: only a chain that was rate
|
|
267
|
+
// limited end to end earns a Retry-After, and then the soonest one.
|
|
268
|
+
const hints = new RetryHintTracker();
|
|
269
|
+
for (const row of chain) {
|
|
270
|
+
const { credential, budgetBlocked, budgetRetryAfterMs } = reserveProviderCredential(row, estimateTokens(inputs));
|
|
271
|
+
if (!credential) {
|
|
272
|
+
if (budgetBlocked) {
|
|
273
|
+
lastError = new EmbeddingsError('Key budget exhausted', 429, 'quota_exceeded');
|
|
274
|
+
hints.record(429, budgetRetryAfterMs ?? secondsUntilNextMonth() * 1000);
|
|
275
|
+
}
|
|
276
|
+
continue;
|
|
277
|
+
}
|
|
278
|
+
const started = Date.now();
|
|
279
|
+
try {
|
|
280
|
+
const out = await callProvider(row, credential, inputs, dimensions);
|
|
281
|
+
if (out.vectors.length !== inputs.length || out.vectors.some(v => !Array.isArray(v) || v.length === 0)) {
|
|
282
|
+
throw new EmbeddingsError('upstream returned malformed embeddings', 502);
|
|
283
|
+
}
|
|
284
|
+
const tokens = out.inputTokens ?? estimateTokens(inputs);
|
|
285
|
+
logEmbeddingRequest(row, credential.id, 'success', tokens, Date.now() - started, null);
|
|
286
|
+
return {
|
|
287
|
+
family,
|
|
288
|
+
platform: row.platform,
|
|
289
|
+
modelId: row.model_id,
|
|
290
|
+
dimensions: out.vectors[0].length,
|
|
291
|
+
vectors: out.vectors,
|
|
292
|
+
inputTokens: tokens,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
catch (err) {
|
|
296
|
+
const e = err instanceof EmbeddingsError ? err : new EmbeddingsError(String(err?.message ?? err), 502);
|
|
297
|
+
logEmbeddingRequest(row, credential.id, 'error', 0, Date.now() - started, e.message.slice(0, 300));
|
|
298
|
+
lastError = e;
|
|
299
|
+
hints.record(e.status, e.retryAfterMs);
|
|
300
|
+
// fall through to the next provider in the family
|
|
301
|
+
}
|
|
302
|
+
finally {
|
|
303
|
+
credential.release();
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
throw new EmbeddingsError(`All providers for embedding family '${family}' failed${lastError ? ` (last: ${lastError.message.slice(0, 160)})` : ' (no usable keys)'}.`, lastError && lastError.status === 429 ? 429 : 502, lastError?.code, lastError && lastError.status === 429 ? hints.retryAfterMs() : undefined);
|
|
307
|
+
}
|
|
308
|
+
/** Whole seconds the client should wait before retrying an embeddings request:
|
|
309
|
+
* the soonest upstream back-off when the whole chain was rate limited, else the
|
|
310
|
+
* monthly-budget reset for a local quota block. Undefined means the caller
|
|
311
|
+
* shouldn't set the header. */
|
|
312
|
+
export function embeddingsRetryAfterSec(err) {
|
|
313
|
+
if (err.retryAfterMs !== undefined)
|
|
314
|
+
return retryAfterSeconds(err.retryAfterMs);
|
|
315
|
+
if (err.code === 'quota_exceeded')
|
|
316
|
+
return secondsUntilNextMonth();
|
|
317
|
+
return undefined;
|
|
318
|
+
}
|
|
319
|
+
//# sourceMappingURL=embeddings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/services/embeddings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ChatMessage, ChatCompletionChoice, ChatCompletionResponse, ChatToolCall, TokenUsage } from '@srouter/shared/types.js';
|
|
3
|
+
import { type FusionCandidate } from './router.js';
|
|
4
|
+
import type { CompletionOptions } from '../providers/base.js';
|
|
5
|
+
export declare const FUSION_MODEL_ID = "fusion";
|
|
6
|
+
export declare function isFusionModel(modelId: string | undefined): boolean;
|
|
7
|
+
export declare const fusionConfigSchema: z.ZodObject<{
|
|
8
|
+
models: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
9
|
+
k: z.ZodOptional<z.ZodNumber>;
|
|
10
|
+
judge: z.ZodOptional<z.ZodString>;
|
|
11
|
+
strategy: z.ZodOptional<z.ZodEnum<["synthesize", "best_of"]>>;
|
|
12
|
+
expose_panel: z.ZodOptional<z.ZodBoolean>;
|
|
13
|
+
}, "strip", z.ZodTypeAny, {
|
|
14
|
+
models?: string[] | undefined;
|
|
15
|
+
k?: number | undefined;
|
|
16
|
+
judge?: string | undefined;
|
|
17
|
+
strategy?: "synthesize" | "best_of" | undefined;
|
|
18
|
+
expose_panel?: boolean | undefined;
|
|
19
|
+
}, {
|
|
20
|
+
models?: string[] | undefined;
|
|
21
|
+
k?: number | undefined;
|
|
22
|
+
judge?: string | undefined;
|
|
23
|
+
strategy?: "synthesize" | "best_of" | undefined;
|
|
24
|
+
expose_panel?: boolean | undefined;
|
|
25
|
+
}>;
|
|
26
|
+
export type FusionConfig = z.infer<typeof fusionConfigSchema>;
|
|
27
|
+
export declare function getFusionMaxK(): number;
|
|
28
|
+
export declare const savedFusionConfigSchema: z.ZodObject<{
|
|
29
|
+
mode: z.ZodEnum<["auto", "explicit"]>;
|
|
30
|
+
models: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
31
|
+
judge: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
32
|
+
k: z.ZodNumber;
|
|
33
|
+
strategy: z.ZodEnum<["synthesize", "best_of"]>;
|
|
34
|
+
expose_panel: z.ZodBoolean;
|
|
35
|
+
}, "strip", z.ZodTypeAny, {
|
|
36
|
+
mode: "auto" | "explicit";
|
|
37
|
+
models: string[];
|
|
38
|
+
k: number;
|
|
39
|
+
judge: string | null;
|
|
40
|
+
strategy: "synthesize" | "best_of";
|
|
41
|
+
expose_panel: boolean;
|
|
42
|
+
}, {
|
|
43
|
+
mode: "auto" | "explicit";
|
|
44
|
+
k: number;
|
|
45
|
+
strategy: "synthesize" | "best_of";
|
|
46
|
+
expose_panel: boolean;
|
|
47
|
+
models?: string[] | undefined;
|
|
48
|
+
judge?: string | null | undefined;
|
|
49
|
+
}>;
|
|
50
|
+
export type SavedFusionConfig = z.infer<typeof savedFusionConfigSchema>;
|
|
51
|
+
export declare function getSavedFusionConfig(): SavedFusionConfig;
|
|
52
|
+
export declare function setSavedFusionConfig(input: SavedFusionConfig): SavedFusionConfig;
|
|
53
|
+
export declare function pruneUnavailableSavedFusionConfig(): SavedFusionConfig;
|
|
54
|
+
/**
|
|
55
|
+
* Merge a request's inline fusion config over the saved dashboard default.
|
|
56
|
+
* Each field present on the request wins; otherwise the saved default applies.
|
|
57
|
+
* An explicit panel only comes from the saved config when its mode is
|
|
58
|
+
* 'explicit' — in 'auto' mode the saved `models` are ignored so the panel is
|
|
59
|
+
* picked fresh off the Fallback Chain.
|
|
60
|
+
*/
|
|
61
|
+
export declare function resolveEffectiveConfig(req: FusionConfig): FusionConfig;
|
|
62
|
+
interface PanelAnswer {
|
|
63
|
+
modelDbId: number;
|
|
64
|
+
platform: string;
|
|
65
|
+
modelId: string;
|
|
66
|
+
displayName: string;
|
|
67
|
+
status: 'ok' | 'failed';
|
|
68
|
+
content?: string;
|
|
69
|
+
toolCalls?: ChatToolCall[];
|
|
70
|
+
rawChoice?: ChatCompletionChoice;
|
|
71
|
+
error?: string;
|
|
72
|
+
usage?: TokenUsage;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Collapse a provider-specific model id to its rough model FAMILY: drop the
|
|
76
|
+
* provider prefix (everything up to the last '/') and any ':tag'/':free' suffix,
|
|
77
|
+
* so e.g. `qwen/qwen3-coder:free` and `qwen3-coder:480b` map to one family.
|
|
78
|
+
* Deliberately a SIMPLE heuristic, not a maintained alias map — cross-provider
|
|
79
|
+
* id naming drifts constantly, so we only want a good-enough signal to avoid
|
|
80
|
+
* stacking the panel with the same model served under two providers.
|
|
81
|
+
*/
|
|
82
|
+
export declare function familyKey(modelId: string): string;
|
|
83
|
+
/**
|
|
84
|
+
* Order a strategy-sorted servable chain for panel diversity along TWO axes:
|
|
85
|
+
* provider (platform) AND model family. Fusion's value comes from genuinely
|
|
86
|
+
* DIFFERENT perspectives (issue #326 spike: a panel only beats the best single
|
|
87
|
+
* model when its members actually disagree); the same model family served by
|
|
88
|
+
* two providers is platform-distinct but perspective-redundant — one viewpoint
|
|
89
|
+
* filling two slots.
|
|
90
|
+
*
|
|
91
|
+
* Two stable passes, each preserving the routing-strategy order it's handed:
|
|
92
|
+
* 1. Provider-first (the existing invariant): one model per distinct platform
|
|
93
|
+
* before doubling up, so the panel spans different backends / failure
|
|
94
|
+
* domains.
|
|
95
|
+
* 2. Family-dedup: within that provider-diverse order, demote any model whose
|
|
96
|
+
* family already appeared — a fresh family takes the slot first, and the
|
|
97
|
+
* redundant copy sinks to the refill tail rather than being dropped.
|
|
98
|
+
* Pure function of its input (unit-tested directly).
|
|
99
|
+
*/
|
|
100
|
+
export declare function diversifyChain(ordered: FusionCandidate[]): FusionCandidate[];
|
|
101
|
+
/**
|
|
102
|
+
* Build the panel plus a refill queue:
|
|
103
|
+
* - `panel` — the K models to run first (explicit list, or provider-diverse
|
|
104
|
+
* picks off the strategy-sorted chain).
|
|
105
|
+
* - `overflow` — the next servable models from the chain, used to refill a slot
|
|
106
|
+
* when a panel model fails outright (auto mode only; an explicit
|
|
107
|
+
* panel is run as-is with no substitution).
|
|
108
|
+
* Diversity = distinct provider AND model family first (see diversifyChain), so
|
|
109
|
+
* both the panel and its refills span genuinely different perspectives before
|
|
110
|
+
* doubling up on either axis.
|
|
111
|
+
*/
|
|
112
|
+
export declare function selectPanel(config: FusionConfig, requirements: {
|
|
113
|
+
requireTools?: boolean;
|
|
114
|
+
requireVision?: boolean;
|
|
115
|
+
estimatedTokens: number;
|
|
116
|
+
}): {
|
|
117
|
+
panel: FusionCandidate[];
|
|
118
|
+
overflow: FusionCandidate[];
|
|
119
|
+
dropped: string[];
|
|
120
|
+
};
|
|
121
|
+
export declare function buildJudgeMessages(original: ChatMessage[], answers: PanelAnswer[], stripImages?: boolean): ChatMessage[];
|
|
122
|
+
export interface FusionResult {
|
|
123
|
+
response: ChatCompletionResponse & {
|
|
124
|
+
x_fusion?: unknown;
|
|
125
|
+
};
|
|
126
|
+
routedVia: string;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Orchestrate a fusion request end to end: select the panel, fan out in
|
|
130
|
+
* parallel, then synthesize survivors with a judge (or best-of). Throws a
|
|
131
|
+
* FusionError when nothing usable comes back so the route can map it to an
|
|
132
|
+
* HTTP status.
|
|
133
|
+
*/
|
|
134
|
+
export declare class FusionError extends Error {
|
|
135
|
+
status: number;
|
|
136
|
+
constructor(message: string, status: number);
|
|
137
|
+
}
|
|
138
|
+
export interface FusionHooks {
|
|
139
|
+
onPanel?: (a: {
|
|
140
|
+
platform: string;
|
|
141
|
+
model: string;
|
|
142
|
+
status: 'ok' | 'failed';
|
|
143
|
+
content?: string;
|
|
144
|
+
tool_calls?: ChatToolCall[];
|
|
145
|
+
error?: string;
|
|
146
|
+
}) => void;
|
|
147
|
+
onJudge?: (j: {
|
|
148
|
+
platform: string;
|
|
149
|
+
model: string;
|
|
150
|
+
}) => void;
|
|
151
|
+
onJudgeDelta?: (text: string) => void;
|
|
152
|
+
}
|
|
153
|
+
export declare function runFusion(params: {
|
|
154
|
+
messages: ChatMessage[];
|
|
155
|
+
config: FusionConfig;
|
|
156
|
+
options: CompletionOptions;
|
|
157
|
+
estimatedTokens: number;
|
|
158
|
+
hooks?: FusionHooks;
|
|
159
|
+
vision?: boolean;
|
|
160
|
+
}): Promise<FusionResult>;
|
|
161
|
+
export {};
|
|
162
|
+
//# sourceMappingURL=fusion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fusion.d.ts","sourceRoot":"","sources":["../../src/services/fusion.ts"],"names":[],"mappings":"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"}
|