@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,107 @@
|
|
|
1
|
+
import type { Db } from '../db/types.js';
|
|
2
|
+
import type { Scheduler } from '../lib/scheduler.js';
|
|
3
|
+
import type { Platform } from '@srouter/shared/types.js';
|
|
4
|
+
import { OpenAICompatProvider } from '../providers/openai-compat.js';
|
|
5
|
+
import { type DiscoveredModel } from './model-discovery.js';
|
|
6
|
+
/** Built-in platforms eligible for discovery. Each is OpenAI-compatible and has
|
|
7
|
+
* zero rows, enabled or disabled, in the signed live catalog (checked against
|
|
8
|
+
* 2026.09.27). Remove a platform here in the same change that adds it to the
|
|
9
|
+
* catalog; managedPlatforms in the catalog covers binaries already shipped. */
|
|
10
|
+
export declare const BUILTIN_DISCOVERY_PLATFORMS: readonly Platform[];
|
|
11
|
+
/** `BUILTIN_MODEL_DISCOVERY`: 'manual' (default) keeps only the dashboard's
|
|
12
|
+
* Fetch models action, so nothing is registered without the operator picking
|
|
13
|
+
* it; 'auto' also discovers on key save, after a healthy check and on the
|
|
14
|
+
* custom-model sync cadence; 'off' disables both. Manual is the default
|
|
15
|
+
* because these providers bill funded accounts (SiliconFlow, LongCat) and
|
|
16
|
+
* label paid models inconsistently, so an automatic pass could route traffic
|
|
17
|
+
* to models that cost money. */
|
|
18
|
+
export type BuiltinDiscoveryMode = 'auto' | 'manual' | 'off';
|
|
19
|
+
export declare function builtinDiscoveryMode(): BuiltinDiscoveryMode;
|
|
20
|
+
export type IneligibleReason = 'disabled' | 'not_allowlisted' | 'not_openai_compatible' | 'catalog_managed';
|
|
21
|
+
export interface DiscoveryEligibility {
|
|
22
|
+
eligible: boolean;
|
|
23
|
+
reason?: IneligibleReason;
|
|
24
|
+
/** The registered adapter, when eligible. */
|
|
25
|
+
provider?: OpenAICompatProvider;
|
|
26
|
+
}
|
|
27
|
+
/** Whether `platform` may fill its model list from its own /models. */
|
|
28
|
+
export declare function builtinDiscoveryEligibility(db: Db, platform: string): DiscoveryEligibility;
|
|
29
|
+
export declare function isBuiltinDiscoveryEligible(db: Db, platform: string): boolean;
|
|
30
|
+
/** A human sentence for an ineligible platform, for route errors. */
|
|
31
|
+
export declare function ineligibleMessage(platform: string, reason: IneligibleReason | undefined): string;
|
|
32
|
+
interface KeyRow {
|
|
33
|
+
id: number;
|
|
34
|
+
platform: string;
|
|
35
|
+
encrypted_key: string;
|
|
36
|
+
iv: string;
|
|
37
|
+
auth_tag: string;
|
|
38
|
+
proxy_encrypted?: string | null;
|
|
39
|
+
proxy_iv?: string | null;
|
|
40
|
+
proxy_auth_tag?: string | null;
|
|
41
|
+
}
|
|
42
|
+
/** Fetch the platform's /models with one of its keys, through that key's own
|
|
43
|
+
* proxy (#590), exactly as the health check reaches it. */
|
|
44
|
+
export declare function discoverBuiltinModels(provider: OpenAICompatProvider, key: KeyRow, apiKeyOverride?: string): Promise<DiscoveredModel[]>;
|
|
45
|
+
/** Discovered model ids already present on this platform, in any provenance. */
|
|
46
|
+
export declare function registeredModelIds(db: Db, platform: string): Set<string>;
|
|
47
|
+
export interface DiscoveredEntry {
|
|
48
|
+
modelId: string;
|
|
49
|
+
contextWindow?: number;
|
|
50
|
+
vision?: boolean;
|
|
51
|
+
}
|
|
52
|
+
export interface RegisterDiscoveredResult {
|
|
53
|
+
created: string[];
|
|
54
|
+
/** Already present (catalog, user or earlier discovery): left untouched. */
|
|
55
|
+
existing: string[];
|
|
56
|
+
/** Deleted by the operator and not lifted (automatic passes only). */
|
|
57
|
+
tombstoned: string[];
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Insert discovered chat models for a built-in platform. INSERT-only: a row
|
|
61
|
+
* that already exists for (platform, model_id) in the built-in scope is never
|
|
62
|
+
* updated, so catalog rows, user rows and anything the operator tuned by hand
|
|
63
|
+
* all win. `explicit` marks a pick the operator made in the dashboard, which
|
|
64
|
+
* lifts a previous deletion, the way re-adding a custom model does (#926).
|
|
65
|
+
*/
|
|
66
|
+
export declare function registerDiscoveredModels(db: Db, platform: string, entries: DiscoveredEntry[], options: {
|
|
67
|
+
explicit: boolean;
|
|
68
|
+
}): RegisterDiscoveredResult;
|
|
69
|
+
/**
|
|
70
|
+
* Which discovered models an AUTOMATIC pass may register. Stricter than a
|
|
71
|
+
* dashboard pick, because nobody looked at the list:
|
|
72
|
+
* - chat only: embedding, image, audio, transcription and video ids are
|
|
73
|
+
* skipped (#1051), as in the custom-model sync;
|
|
74
|
+
* - an upstream that prices a model and says it is not free is skipped;
|
|
75
|
+
* - CUSTOM_MODEL_SYNC_FREE_PATTERNS, when set, applies here too (#746).
|
|
76
|
+
*/
|
|
77
|
+
export declare function autoRegistrable(models: DiscoveredModel[]): {
|
|
78
|
+
accepted: DiscoveredModel[];
|
|
79
|
+
nonChat: number;
|
|
80
|
+
paid: number;
|
|
81
|
+
};
|
|
82
|
+
export interface BuiltinDiscoveryResult {
|
|
83
|
+
platforms: number;
|
|
84
|
+
added: number;
|
|
85
|
+
skipped: number;
|
|
86
|
+
tombstoned: number;
|
|
87
|
+
nonChatSkipped: number;
|
|
88
|
+
paidSkipped: number;
|
|
89
|
+
failures: Array<{
|
|
90
|
+
platform: string;
|
|
91
|
+
error: string;
|
|
92
|
+
}>;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* One automatic discovery pass over every eligible platform that has a usable
|
|
96
|
+
* key (or just `only`, when given). ADD-ONLY, like the custom-model sync: a
|
|
97
|
+
* model that vanishes upstream is left for the health and retirement paths.
|
|
98
|
+
*/
|
|
99
|
+
export declare function runBuiltinModelDiscovery(db: Db, only?: string): Promise<BuiltinDiscoveryResult>;
|
|
100
|
+
export declare function triggerBuiltinModelDiscovery(db: Db, platform: string, reason: 'key_added' | 'healthy'): Promise<BuiltinDiscoveryResult> | null;
|
|
101
|
+
/** Test hook: forget event throttling between cases. */
|
|
102
|
+
export declare function resetBuiltinDiscoveryThrottle(): void;
|
|
103
|
+
/** Run the pass on the custom-model sync cadence (CUSTOM_MODEL_SYNC_INTERVAL_MS,
|
|
104
|
+
* daily by default; 0 disables both). */
|
|
105
|
+
export declare function startBuiltinModelDiscovery(db: Db, scheduler: Scheduler): (() => void) | null;
|
|
106
|
+
export {};
|
|
107
|
+
//# sourceMappingURL=builtin-model-discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtin-model-discovery.d.ts","sourceRoot":"","sources":["../../src/services/builtin-model-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import { getProvider } from '../providers/index.js';
|
|
2
|
+
import { OpenAICompatProvider } from '../providers/openai-compat.js';
|
|
3
|
+
import { decrypt } from '../lib/crypto.js';
|
|
4
|
+
import { decryptProxyUrl } from '../lib/key-proxy.js';
|
|
5
|
+
import { withKeyProxy } from '../lib/proxy.js';
|
|
6
|
+
import { discoverProviderModels } from './model-discovery.js';
|
|
7
|
+
import { appliedCatalogPlatforms, DISCOVERED_MODEL_SOURCE } from './catalog-sync.js';
|
|
8
|
+
import { clearCatalogModelTombstone, isCatalogModelTombstoned } from './model-state.js';
|
|
9
|
+
import { customModelSeed } from './custom-model-seed.js';
|
|
10
|
+
import { ensureModelInProfiles } from './profile-models.js';
|
|
11
|
+
import { customModelSyncFreePatterns, customModelSyncIntervalMs } from './custom-model-sync.js';
|
|
12
|
+
// ── Model discovery for built-in providers the catalog does not carry (#1348) ──
|
|
13
|
+
//
|
|
14
|
+
// Some registered OpenAI-compatible providers have NO rows in the signed
|
|
15
|
+
// catalog, so a healthy key for them served nothing and the dashboard had no
|
|
16
|
+
// way to fill the gap. This asks the provider's own /models (through the
|
|
17
|
+
// registered adapter, with the operator's own key) and registers what it
|
|
18
|
+
// serves, the same way custom-endpoint discovery (#488) does.
|
|
19
|
+
//
|
|
20
|
+
// The signed, audited catalog stays authoritative:
|
|
21
|
+
// - Only an explicit allowlist of platforms is eligible. The rule behind the
|
|
22
|
+
// list is "zero rows in the signed catalog on every tier". A free install
|
|
23
|
+
// cannot see the Premium (live) catalog, so it cannot tell a provider the
|
|
24
|
+
// catalog has never carried from one still inside its 30-day Premium window
|
|
25
|
+
// (radeon, routeway) or one the audit keeps switched off with disabled rows
|
|
26
|
+
// (reka, navy, opencode, orcarouter, xfyun). Discovering those would hand
|
|
27
|
+
// free installs models the catalog gates or has ruled out, so the list is
|
|
28
|
+
// decided here, in the binary, not inferred at runtime.
|
|
29
|
+
// - Even an allowlisted platform stops being eligible the moment the applied
|
|
30
|
+
// catalog manages it (any row, or a managedPlatforms entry), or the local
|
|
31
|
+
// DB holds catalog-owned rows for it (the bundled baseline before the first
|
|
32
|
+
// sync). catalog-sync then adopts or retires the discovered rows.
|
|
33
|
+
// - Rows are written with models.source = 'discovered', never 'user': a
|
|
34
|
+
// 'user' row outranks the catalog on a collision, a discovered row never
|
|
35
|
+
// does. Writes are INSERT-only: an existing row (catalog, user or an earlier
|
|
36
|
+
// discovery the operator has since tuned) is never touched.
|
|
37
|
+
// - Deleting a discovered model records a catalog tombstone (they count as
|
|
38
|
+
// catalog-managed, see isCatalogManagedModel), and every automatic pass
|
|
39
|
+
// honors it. Only an explicit pick in the dashboard lifts it.
|
|
40
|
+
/** Built-in platforms eligible for discovery. Each is OpenAI-compatible and has
|
|
41
|
+
* zero rows, enabled or disabled, in the signed live catalog (checked against
|
|
42
|
+
* 2026.09.27). Remove a platform here in the same change that adds it to the
|
|
43
|
+
* catalog; managedPlatforms in the catalog covers binaries already shipped. */
|
|
44
|
+
export const BUILTIN_DISCOVERY_PLATFORMS = ['github', 'longcat', 'siliconflow'];
|
|
45
|
+
export function builtinDiscoveryMode() {
|
|
46
|
+
const raw = process.env.BUILTIN_MODEL_DISCOVERY?.trim().toLowerCase();
|
|
47
|
+
if (raw === 'auto' || raw === 'off')
|
|
48
|
+
return raw;
|
|
49
|
+
if (raw === '0' || raw === 'false' || raw === 'disabled')
|
|
50
|
+
return 'off';
|
|
51
|
+
return 'manual';
|
|
52
|
+
}
|
|
53
|
+
/** Whether `platform` may fill its model list from its own /models. */
|
|
54
|
+
export function builtinDiscoveryEligibility(db, platform) {
|
|
55
|
+
if (builtinDiscoveryMode() === 'off')
|
|
56
|
+
return { eligible: false, reason: 'disabled' };
|
|
57
|
+
if (!BUILTIN_DISCOVERY_PLATFORMS.includes(platform)) {
|
|
58
|
+
return { eligible: false, reason: 'not_allowlisted' };
|
|
59
|
+
}
|
|
60
|
+
const provider = getProvider(platform);
|
|
61
|
+
if (!(provider instanceof OpenAICompatProvider))
|
|
62
|
+
return { eligible: false, reason: 'not_openai_compatible' };
|
|
63
|
+
if (appliedCatalogPlatforms(db).has(platform) || hasCatalogOwnedRows(db, platform)) {
|
|
64
|
+
return { eligible: false, reason: 'catalog_managed' };
|
|
65
|
+
}
|
|
66
|
+
return { eligible: true, provider };
|
|
67
|
+
}
|
|
68
|
+
export function isBuiltinDiscoveryEligible(db, platform) {
|
|
69
|
+
return builtinDiscoveryEligibility(db, platform).eligible;
|
|
70
|
+
}
|
|
71
|
+
/** A human sentence for an ineligible platform, for route errors. */
|
|
72
|
+
export function ineligibleMessage(platform, reason) {
|
|
73
|
+
switch (reason) {
|
|
74
|
+
case 'disabled':
|
|
75
|
+
return 'Model discovery for built-in providers is turned off (BUILTIN_MODEL_DISCOVERY=off).';
|
|
76
|
+
case 'catalog_managed':
|
|
77
|
+
return `${platform} models come from the catalog, so they cannot be fetched from the provider.`;
|
|
78
|
+
default:
|
|
79
|
+
return `${platform} models come from the catalog, not from the provider's model list.`;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Catalog-owned rows for this platform in the local DB: chat rows the catalog
|
|
83
|
+
// (or the bundled baseline) wrote, or any embedding / media row, which only
|
|
84
|
+
// the catalog and the bundled baseline write for a built-in platform.
|
|
85
|
+
function hasCatalogOwnedRows(db, platform) {
|
|
86
|
+
const row = db.prepare(`
|
|
87
|
+
SELECT (SELECT COUNT(*) FROM models WHERE platform = ? AND source = 'catalog')
|
|
88
|
+
+ (SELECT COUNT(*) FROM embedding_models WHERE platform = ?)
|
|
89
|
+
+ (SELECT COUNT(*) FROM media_models WHERE platform = ?) AS c
|
|
90
|
+
`).get(platform, platform, platform);
|
|
91
|
+
return row.c > 0;
|
|
92
|
+
}
|
|
93
|
+
/** Fetch the platform's /models with one of its keys, through that key's own
|
|
94
|
+
* proxy (#590), exactly as the health check reaches it. */
|
|
95
|
+
export async function discoverBuiltinModels(provider, key, apiKeyOverride) {
|
|
96
|
+
const apiKey = apiKeyOverride?.trim() || decrypt(key.encrypted_key, key.iv, key.auth_tag);
|
|
97
|
+
return withKeyProxy(decryptProxyUrl(key), () => discoverProviderModels(provider, apiKey, provider.modelsUrl.replace(/\/models\/?$/, '')));
|
|
98
|
+
}
|
|
99
|
+
/** Discovered model ids already present on this platform, in any provenance. */
|
|
100
|
+
export function registeredModelIds(db, platform) {
|
|
101
|
+
return new Set(db.prepare("SELECT model_id FROM models WHERE platform = ? AND endpoint_scope = ''").all(platform)
|
|
102
|
+
.map(r => r.model_id));
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Insert discovered chat models for a built-in platform. INSERT-only: a row
|
|
106
|
+
* that already exists for (platform, model_id) in the built-in scope is never
|
|
107
|
+
* updated, so catalog rows, user rows and anything the operator tuned by hand
|
|
108
|
+
* all win. `explicit` marks a pick the operator made in the dashboard, which
|
|
109
|
+
* lifts a previous deletion, the way re-adding a custom model does (#926).
|
|
110
|
+
*/
|
|
111
|
+
export function registerDiscoveredModels(db, platform, entries, options) {
|
|
112
|
+
return db.transaction(() => {
|
|
113
|
+
const result = { created: [], existing: [], tombstoned: [] };
|
|
114
|
+
const seed = customModelSeed(db);
|
|
115
|
+
const exists = db.prepare("SELECT 1 FROM models WHERE platform = ? AND model_id = ? AND endpoint_scope = ''");
|
|
116
|
+
const insert = db.prepare(`
|
|
117
|
+
INSERT INTO models
|
|
118
|
+
(platform, model_id, display_name, intelligence_rank, speed_rank, size_label,
|
|
119
|
+
rpm_limit, rpd_limit, tpm_limit, tpd_limit, monthly_token_budget, context_window, enabled, key_id,
|
|
120
|
+
supports_tools, supports_vision, source, endpoint_scope)
|
|
121
|
+
VALUES (@platform, @modelId, @modelId, @intelligenceRank, @speedRank, @sizeLabel,
|
|
122
|
+
NULL, NULL, NULL, NULL, '', @contextWindow, 1, NULL,
|
|
123
|
+
1, @vision, @source, '')
|
|
124
|
+
ON CONFLICT(platform, model_id, endpoint_scope) DO NOTHING
|
|
125
|
+
`);
|
|
126
|
+
const selectId = db.prepare("SELECT id FROM models WHERE platform = ? AND model_id = ? AND endpoint_scope = ''");
|
|
127
|
+
const inChain = db.prepare('SELECT 1 FROM fallback_config WHERE model_db_id = ?');
|
|
128
|
+
const maxPriority = db.prepare('SELECT COALESCE(MAX(priority), 0) AS m FROM fallback_config');
|
|
129
|
+
const addToChain = db.prepare('INSERT INTO fallback_config (model_db_id, priority, enabled) VALUES (?, ?, 1)');
|
|
130
|
+
for (const entry of entries) {
|
|
131
|
+
if (exists.get(platform, entry.modelId)) {
|
|
132
|
+
result.existing.push(entry.modelId);
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
if (isCatalogModelTombstoned(db, 'chat', platform, entry.modelId)) {
|
|
136
|
+
if (!options.explicit) {
|
|
137
|
+
result.tombstoned.push(entry.modelId);
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
clearCatalogModelTombstone(db, 'chat', platform, entry.modelId);
|
|
141
|
+
}
|
|
142
|
+
insert.run({
|
|
143
|
+
platform,
|
|
144
|
+
modelId: entry.modelId,
|
|
145
|
+
intelligenceRank: seed.intelligenceRank,
|
|
146
|
+
speedRank: seed.speedRank,
|
|
147
|
+
sizeLabel: seed.sizeLabel,
|
|
148
|
+
contextWindow: entry.contextWindow ?? null,
|
|
149
|
+
vision: entry.vision ? 1 : 0,
|
|
150
|
+
source: DISCOVERED_MODEL_SOURCE,
|
|
151
|
+
});
|
|
152
|
+
const row = selectId.get(platform, entry.modelId);
|
|
153
|
+
if (!inChain.get(row.id)) {
|
|
154
|
+
addToChain.run(row.id, maxPriority.get().m + 1);
|
|
155
|
+
}
|
|
156
|
+
ensureModelInProfiles(db, row.id);
|
|
157
|
+
result.created.push(entry.modelId);
|
|
158
|
+
}
|
|
159
|
+
return result;
|
|
160
|
+
})();
|
|
161
|
+
}
|
|
162
|
+
/** Glob match where `*` matches any run of chars (incl. empty). */
|
|
163
|
+
function patternMatches(pattern, id) {
|
|
164
|
+
const escaped = pattern.split('*').map(seg => seg.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
|
|
165
|
+
return new RegExp(`^${escaped.join('.*')}$`).test(id);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Which discovered models an AUTOMATIC pass may register. Stricter than a
|
|
169
|
+
* dashboard pick, because nobody looked at the list:
|
|
170
|
+
* - chat only: embedding, image, audio, transcription and video ids are
|
|
171
|
+
* skipped (#1051), as in the custom-model sync;
|
|
172
|
+
* - an upstream that prices a model and says it is not free is skipped;
|
|
173
|
+
* - CUSTOM_MODEL_SYNC_FREE_PATTERNS, when set, applies here too (#746).
|
|
174
|
+
*/
|
|
175
|
+
export function autoRegistrable(models) {
|
|
176
|
+
const freePatterns = customModelSyncFreePatterns();
|
|
177
|
+
const accepted = [];
|
|
178
|
+
let nonChat = 0;
|
|
179
|
+
let paid = 0;
|
|
180
|
+
for (const model of models) {
|
|
181
|
+
if (model.kind !== undefined) {
|
|
182
|
+
nonChat += 1;
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
if (model.priceNote !== undefined && model.isFree !== true) {
|
|
186
|
+
paid += 1;
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
if (freePatterns.length > 0 && !freePatterns.some(p => patternMatches(p, model.id))) {
|
|
190
|
+
paid += 1;
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
accepted.push(model);
|
|
194
|
+
}
|
|
195
|
+
return { accepted, nonChat, paid };
|
|
196
|
+
}
|
|
197
|
+
function usableKeys(db, platform) {
|
|
198
|
+
return db.prepare(`
|
|
199
|
+
SELECT id, platform, encrypted_key, iv, auth_tag, proxy_encrypted, proxy_iv, proxy_auth_tag
|
|
200
|
+
FROM api_keys
|
|
201
|
+
WHERE platform = ? AND enabled = 1 AND status != 'invalid'
|
|
202
|
+
ORDER BY CASE status WHEN 'healthy' THEN 0 ELSE 1 END, id
|
|
203
|
+
`).all(platform);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* One automatic discovery pass over every eligible platform that has a usable
|
|
207
|
+
* key (or just `only`, when given). ADD-ONLY, like the custom-model sync: a
|
|
208
|
+
* model that vanishes upstream is left for the health and retirement paths.
|
|
209
|
+
*/
|
|
210
|
+
export async function runBuiltinModelDiscovery(db, only) {
|
|
211
|
+
const result = {
|
|
212
|
+
platforms: 0, added: 0, skipped: 0, tombstoned: 0, nonChatSkipped: 0, paidSkipped: 0, failures: [],
|
|
213
|
+
};
|
|
214
|
+
if (builtinDiscoveryMode() !== 'auto')
|
|
215
|
+
return result;
|
|
216
|
+
const platforms = only ? [only] : [...BUILTIN_DISCOVERY_PLATFORMS];
|
|
217
|
+
for (const platform of platforms) {
|
|
218
|
+
const eligibility = builtinDiscoveryEligibility(db, platform);
|
|
219
|
+
if (!eligibility.eligible || !eligibility.provider)
|
|
220
|
+
continue;
|
|
221
|
+
const keys = usableKeys(db, platform);
|
|
222
|
+
if (keys.length === 0)
|
|
223
|
+
continue;
|
|
224
|
+
result.platforms += 1;
|
|
225
|
+
try {
|
|
226
|
+
const discovered = await discoverBuiltinModels(eligibility.provider, keys[0]);
|
|
227
|
+
// Re-check after the network round-trip: a catalog sync may have landed
|
|
228
|
+
// in between, and the catalog always wins.
|
|
229
|
+
if (!isBuiltinDiscoveryEligible(db, platform))
|
|
230
|
+
continue;
|
|
231
|
+
const { accepted, nonChat, paid } = autoRegistrable(discovered);
|
|
232
|
+
result.nonChatSkipped += nonChat;
|
|
233
|
+
result.paidSkipped += paid;
|
|
234
|
+
const registered = registerDiscoveredModels(db, platform, accepted.map(m => ({ modelId: m.id, contextWindow: m.contextWindow, vision: m.vision })), { explicit: false });
|
|
235
|
+
result.added += registered.created.length;
|
|
236
|
+
result.skipped += registered.existing.length;
|
|
237
|
+
result.tombstoned += registered.tombstoned.length;
|
|
238
|
+
if (registered.created.length > 0) {
|
|
239
|
+
console.log(`[builtin-model-discovery] ${platform}: registered ${registered.created.length} discovered model(s)`);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
catch (err) {
|
|
243
|
+
const message = err?.message ?? String(err);
|
|
244
|
+
result.failures.push({ platform, error: message });
|
|
245
|
+
console.error(`[builtin-model-discovery] ${platform}: ${message}`);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return result;
|
|
249
|
+
}
|
|
250
|
+
// Event-driven passes (key saved, key checked healthy) for one platform. At
|
|
251
|
+
// most one in flight per platform, and a platform that already has models is
|
|
252
|
+
// left to the scheduled pass, so the 5-minute health cycle never turns into a
|
|
253
|
+
// 5-minute /models poll.
|
|
254
|
+
const inFlight = new Map();
|
|
255
|
+
const lastEventRunMs = new Map();
|
|
256
|
+
const EVENT_MIN_GAP_MS = 60 * 60 * 1000;
|
|
257
|
+
export function triggerBuiltinModelDiscovery(db, platform, reason) {
|
|
258
|
+
if (builtinDiscoveryMode() !== 'auto')
|
|
259
|
+
return null;
|
|
260
|
+
if (!isBuiltinDiscoveryEligible(db, platform))
|
|
261
|
+
return null;
|
|
262
|
+
const pending = inFlight.get(platform);
|
|
263
|
+
if (pending)
|
|
264
|
+
return pending;
|
|
265
|
+
if (reason === 'healthy') {
|
|
266
|
+
const hasModels = db.prepare('SELECT 1 FROM models WHERE platform = ? LIMIT 1').get(platform);
|
|
267
|
+
if (hasModels)
|
|
268
|
+
return null;
|
|
269
|
+
const last = lastEventRunMs.get(platform) ?? 0;
|
|
270
|
+
if (Date.now() - last < EVENT_MIN_GAP_MS)
|
|
271
|
+
return null;
|
|
272
|
+
}
|
|
273
|
+
lastEventRunMs.set(platform, Date.now());
|
|
274
|
+
const run = runBuiltinModelDiscovery(db, platform)
|
|
275
|
+
.catch((err) => {
|
|
276
|
+
console.error(`[builtin-model-discovery] ${platform}: ${err?.message ?? err}`);
|
|
277
|
+
return { platforms: 0, added: 0, skipped: 0, tombstoned: 0, nonChatSkipped: 0, paidSkipped: 0, failures: [] };
|
|
278
|
+
})
|
|
279
|
+
.finally(() => inFlight.delete(platform));
|
|
280
|
+
inFlight.set(platform, run);
|
|
281
|
+
return run;
|
|
282
|
+
}
|
|
283
|
+
/** Test hook: forget event throttling between cases. */
|
|
284
|
+
export function resetBuiltinDiscoveryThrottle() {
|
|
285
|
+
inFlight.clear();
|
|
286
|
+
lastEventRunMs.clear();
|
|
287
|
+
}
|
|
288
|
+
/** Run the pass on the custom-model sync cadence (CUSTOM_MODEL_SYNC_INTERVAL_MS,
|
|
289
|
+
* daily by default; 0 disables both). */
|
|
290
|
+
export function startBuiltinModelDiscovery(db, scheduler) {
|
|
291
|
+
const intervalMs = customModelSyncIntervalMs();
|
|
292
|
+
if (intervalMs <= 0 || builtinDiscoveryMode() !== 'auto')
|
|
293
|
+
return null;
|
|
294
|
+
return scheduler.every(intervalMs, () => { void runBuiltinModelDiscovery(db); }, { name: 'builtin-model-discovery' });
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=builtin-model-discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtin-model-discovery.js","sourceRoot":"","sources":["../../src/services/builtin-model-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import type { ChatMessage } from '@srouter/shared/types.js';
|
|
2
|
+
export declare const CACHE_ENABLED_SETTING = "response_cache_enabled";
|
|
3
|
+
/**
|
|
4
|
+
* Master switch. Default off so adopting the cache is an explicit choice. The
|
|
5
|
+
* settings-table value wins when present (dashboard toggle, no restart), then
|
|
6
|
+
* the RESPONSE_CACHE env var, then off.
|
|
7
|
+
*/
|
|
8
|
+
export declare function isCacheEnabled(): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Write-through to SQLite. Only meaningful when the cache itself is on, so an
|
|
11
|
+
* install that never enabled caching persists nothing and the feature is inert.
|
|
12
|
+
* Separately switchable because persisting plaintext model responses to disk is
|
|
13
|
+
* a privacy decision an operator may want to decline while still caching.
|
|
14
|
+
*/
|
|
15
|
+
export declare function cachePersistenceEnabled(): boolean;
|
|
16
|
+
/** Entry lifetime. Default 1h: long enough to absorb retries and agent re-runs,
|
|
17
|
+
* short enough that a refreshed catalog or key changes answers soon after. */
|
|
18
|
+
export declare function cacheTtlMs(): number;
|
|
19
|
+
/** Above this temperature a request wants variety, so it is never cached.
|
|
20
|
+
* Default 1.0 caches everything when enabled (max quota savings); lower it to
|
|
21
|
+
* restrict caching to (near-)deterministic calls. */
|
|
22
|
+
export declare function cacheMaxTemperature(): number;
|
|
23
|
+
/** Hard cap on stored entries; least-recently-used are evicted past this.
|
|
24
|
+
* Bounds memory use. */
|
|
25
|
+
export declare function cacheMaxEntries(): number;
|
|
26
|
+
export declare function isCacheableTemperature(temperature?: number | null): boolean;
|
|
27
|
+
export type CacheDirective = 'default' | 'off' | 'on';
|
|
28
|
+
export declare function parseCacheDirective(header: string | string[] | undefined, cacheControl?: string | string[] | undefined): CacheDirective;
|
|
29
|
+
/** Resolve the global switch + per-request directive into a single yes/no. */
|
|
30
|
+
export declare function cacheActive(directive: CacheDirective): boolean;
|
|
31
|
+
export interface CacheKeyInput {
|
|
32
|
+
model: string | undefined;
|
|
33
|
+
messages: ChatMessage[];
|
|
34
|
+
temperature?: number;
|
|
35
|
+
top_p?: number;
|
|
36
|
+
max_tokens?: number;
|
|
37
|
+
tools?: unknown;
|
|
38
|
+
tool_choice?: unknown;
|
|
39
|
+
stop?: unknown;
|
|
40
|
+
response_format?: unknown;
|
|
41
|
+
n?: unknown;
|
|
42
|
+
seed?: unknown;
|
|
43
|
+
presence_penalty?: unknown;
|
|
44
|
+
frequency_penalty?: unknown;
|
|
45
|
+
logit_bias?: unknown;
|
|
46
|
+
logprobs?: unknown;
|
|
47
|
+
top_logprobs?: unknown;
|
|
48
|
+
reasoning_effort?: unknown;
|
|
49
|
+
compression?: unknown;
|
|
50
|
+
}
|
|
51
|
+
export declare function computeCacheKey(input: CacheKeyInput): string;
|
|
52
|
+
export interface CachedResponse {
|
|
53
|
+
body: unknown;
|
|
54
|
+
platform: string;
|
|
55
|
+
modelId: string;
|
|
56
|
+
keyId: number | null;
|
|
57
|
+
promptTokens: number;
|
|
58
|
+
completionTokens: number;
|
|
59
|
+
}
|
|
60
|
+
export interface StoreInput {
|
|
61
|
+
body: unknown;
|
|
62
|
+
platform: string;
|
|
63
|
+
modelId: string;
|
|
64
|
+
keyId: number | null;
|
|
65
|
+
promptTokens: number;
|
|
66
|
+
completionTokens: number;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Test-only: run the queued write-through immediately instead of on the next
|
|
70
|
+
* tick, so a synchronous test can assert on what actually reached SQLite.
|
|
71
|
+
*/
|
|
72
|
+
export declare function __flushPersistenceForTests(): void;
|
|
73
|
+
/**
|
|
74
|
+
* Test-only: drop the in-memory LRU while leaving the SQLite table intact, the
|
|
75
|
+
* way a process restart does. (clearCache() is the user-facing flush and wipes
|
|
76
|
+
* both, so it cannot stand in for a restart.) Pending write-through is drained
|
|
77
|
+
* first, since a real restart's writes had already landed. Streaming entries
|
|
78
|
+
* are memory-only (never written through), so a restart drops them too.
|
|
79
|
+
*/
|
|
80
|
+
export declare function __resetMemoryForTests(): void;
|
|
81
|
+
/**
|
|
82
|
+
* Look up a cached completion. Returns null on a miss or when the entry has aged
|
|
83
|
+
* past the TTL (expired entries are deleted lazily on read, in memory and on
|
|
84
|
+
* disk). A hit bumps the entry's hit_count and moves it to most-recently-used.
|
|
85
|
+
*/
|
|
86
|
+
export declare function getCachedResponse(cacheKey: string, now?: number): CachedResponse | null;
|
|
87
|
+
/**
|
|
88
|
+
* Store a successful completion. Overwrites any existing entry for the key (a
|
|
89
|
+
* re-generation refreshes the cached answer, its TTL, and its hit count).
|
|
90
|
+
* Enforces the entry cap by evicting the least-recently-used entries. Best-
|
|
91
|
+
* effort: an unserializable body is skipped so caching can never break a
|
|
92
|
+
* request that already succeeded.
|
|
93
|
+
*
|
|
94
|
+
* SQLite persistence: when the cache is on, the entry is also written through
|
|
95
|
+
* to the response_cache table so it survives a restart (the daily quota-reset
|
|
96
|
+
* re-run pattern). The write is deferred to the next tick and best-effort, so
|
|
97
|
+
* it never sits on — or throws into — the proxy hot path; a DB failure degrades
|
|
98
|
+
* to in-memory-only, exactly as before.
|
|
99
|
+
*/
|
|
100
|
+
export declare function storeCachedResponse(cacheKey: string, input: StoreInput, now?: number): void;
|
|
101
|
+
/**
|
|
102
|
+
* Reload unexpired entries from SQLite into the in-memory LRU, bounded by
|
|
103
|
+
* RESPONSE_CACHE_MAX_ENTRIES. Called once at startup (after initDb) from both
|
|
104
|
+
* boot paths, server/src/index.ts and desktop/src/server-host.ts; expired rows
|
|
105
|
+
* are purged opportunistically. Best-effort: any DB error leaves the cache
|
|
106
|
+
* empty (memory-only), matching the pre-persistence behavior.
|
|
107
|
+
*/
|
|
108
|
+
export declare function loadCacheFromDb(now?: number): void;
|
|
109
|
+
/**
|
|
110
|
+
* Ceiling on one cached stream's replay payload. A single long answer must not
|
|
111
|
+
* be able to pin megabytes of SSE text in memory, and a stream past this size
|
|
112
|
+
* is cheap to regenerate relative to what it costs to hold. The caller stops
|
|
113
|
+
* buffering at this point too (proxy.ts), so an oversize stream never fully
|
|
114
|
+
* materializes; this is the store-side backstop.
|
|
115
|
+
*/
|
|
116
|
+
export declare const STREAM_CACHE_MAX_BYTES: number;
|
|
117
|
+
export interface CachedStreamResponse {
|
|
118
|
+
/** The whole SSE sequence, ready to write in one go. */
|
|
119
|
+
sse: string;
|
|
120
|
+
platform: string;
|
|
121
|
+
modelId: string;
|
|
122
|
+
keyId: number | null;
|
|
123
|
+
promptTokens: number;
|
|
124
|
+
completionTokens: number;
|
|
125
|
+
}
|
|
126
|
+
export interface StoreStreamInput {
|
|
127
|
+
frames: string[];
|
|
128
|
+
platform: string;
|
|
129
|
+
modelId: string;
|
|
130
|
+
keyId: number | null;
|
|
131
|
+
promptTokens: number;
|
|
132
|
+
completionTokens: number;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Look up a cached stream. Returns null on a miss or when the entry has aged
|
|
136
|
+
* past the TTL. A hit bumps hit_count and moves the entry to MRU, and — like
|
|
137
|
+
* the JSON lookup — counts into the process-wide hit/miss tallies behind the
|
|
138
|
+
* dashboard's hit rate, so streaming traffic is not invisible there.
|
|
139
|
+
*/
|
|
140
|
+
export declare function getCachedStreamResponse(cacheKey: string, now?: number): CachedStreamResponse | null;
|
|
141
|
+
/**
|
|
142
|
+
* Store a completed SSE frame sequence for replay. The frames are the verbatim
|
|
143
|
+
* `data: {...}\n\n` lines (including the final `[DONE]`) the client received,
|
|
144
|
+
* concatenated, so a hit reproduces the stream byte-for-byte. Best-effort like
|
|
145
|
+
* the JSON store: an empty or oversize sequence is silently skipped, and the
|
|
146
|
+
* entry shares the JSON store's entry cap.
|
|
147
|
+
*/
|
|
148
|
+
export declare function storeCachedStreamResponse(cacheKey: string, input: StoreStreamInput, now?: number): void;
|
|
149
|
+
export interface CacheStats {
|
|
150
|
+
/**
|
|
151
|
+
* Entries held across BOTH stores (JSON completions + streaming replays),
|
|
152
|
+
* which is also what the shared RESPONSE_CACHE_MAX_ENTRIES cap bounds. One
|
|
153
|
+
* prompt asked both streaming and non-streaming therefore counts twice —
|
|
154
|
+
* they are two independent replayable artifacts, and two slots of the cap.
|
|
155
|
+
*/
|
|
156
|
+
entries: number;
|
|
157
|
+
/** Hits accumulated by the entries currently held, restored from SQLite. */
|
|
158
|
+
totalHits: number;
|
|
159
|
+
/** Hits ARE the savings: each one avoided a full provider round-trip. */
|
|
160
|
+
estimatedRequestsSaved: number;
|
|
161
|
+
savedPromptTokens: number;
|
|
162
|
+
savedCompletionTokens: number;
|
|
163
|
+
/** Lookups since this process started — the two halves of the ratio below. */
|
|
164
|
+
lookupHits: number;
|
|
165
|
+
lookupMisses: number;
|
|
166
|
+
/** 0..1 share of this process's lookups that hit (no lookups yet → 0). */
|
|
167
|
+
hitRate: number;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Aggregate cache stats for the dashboard. "saved" tokens are the provider
|
|
171
|
+
* tokens that hits avoided spending: hit_count x the entry's token counts,
|
|
172
|
+
* summed, i.e. the free-tier quota the cache gave back. Those ride on the
|
|
173
|
+
* entries, so they survive a restart along with the persisted rows.
|
|
174
|
+
*
|
|
175
|
+
* hitRate is deliberately computed from the process-lifetime lookup tallies
|
|
176
|
+
* instead of totalHits: totalHits only counts the entries still held, so an
|
|
177
|
+
* eviction (or a TTL expiry) would silently retire hits that really happened
|
|
178
|
+
* and drag the reported rate down forever.
|
|
179
|
+
*/
|
|
180
|
+
export declare function getCacheStats(): CacheStats;
|
|
181
|
+
/**
|
|
182
|
+
* Drop every cached entry, in memory AND on disk. Returns the number removed.
|
|
183
|
+
* The persisted table has to go too: DELETE /api/cache is how an operator
|
|
184
|
+
* forces fresh answers (changed keys, a bad reply, a privacy request), and a
|
|
185
|
+
* flush that left the rows behind would resurrect all of it on the next
|
|
186
|
+
* restart. Queued write-through is discarded for the same reason. Runs inline
|
|
187
|
+
* rather than deferred: this is an admin route, not the proxy hot path.
|
|
188
|
+
*/
|
|
189
|
+
export declare function clearCache(): number;
|
|
190
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/services/cache.ts"],"names":[],"mappings":"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"}
|