@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,537 @@
|
|
|
1
|
+
import { BaseProvider, providerHttpError } from './base.js';
|
|
2
|
+
import { extendedBodyParams, resolveMaxTokens } from '../lib/sampling-params.js';
|
|
3
|
+
import { rescueInlineToolCalls } from '../lib/tool-call-rescue.js';
|
|
4
|
+
import { extractThinkFromMessage } from '../lib/think-tags.js';
|
|
5
|
+
import { repairToolArguments, toolSchemaMap } from '../lib/tool-args.js';
|
|
6
|
+
import { invalidToolCallReasons, isToolArgumentValidationEnabled } from '../lib/tool-validate.js';
|
|
7
|
+
import { recordQuotaObservationsFromResponse } from '../services/provider-quota.js';
|
|
8
|
+
import { providerTimeoutMs } from '../lib/provider-timeout.js';
|
|
9
|
+
import { isAbortLikeError } from '../lib/error-classify.js';
|
|
10
|
+
import { contentToString } from '../lib/content.js';
|
|
11
|
+
import { bearerAuthHeader } from '../lib/credential.js';
|
|
12
|
+
// Shared with the media/embeddings custom-endpoint paths; re-exported so
|
|
13
|
+
// existing imports keep working (#1331).
|
|
14
|
+
export { isAnonymousCredential } from '../lib/credential.js';
|
|
15
|
+
/** Hosts that ARE Moonshot's OpenAI-compatible API (api.moonshot.ai,
|
|
16
|
+
* api.moonshot.cn, api.kimi.com and their subdomains). */
|
|
17
|
+
const MOONSHOT_HOST_SUFFIXES = ['moonshot.ai', 'moonshot.cn', 'kimi.com'];
|
|
18
|
+
/**
|
|
19
|
+
* Whether a base URL points at Moonshot's own API. Moonshot documents an
|
|
20
|
+
* assistant-message `partial: true` prefill flag that no other OpenAI-compatible
|
|
21
|
+
* upstream understands, and there is no built-in moonshot platform — Kimi
|
|
22
|
+
* models are otherwise served by Groq, Cloudflare, OpenRouter, Hugging Face,
|
|
23
|
+
* Ollama, ... — so the flag is gated on the endpoint host, never on the model
|
|
24
|
+
* id. Returns false for anything that does not parse as a URL. (#1038)
|
|
25
|
+
*/
|
|
26
|
+
export function isMoonshotEndpoint(baseUrl) {
|
|
27
|
+
let host;
|
|
28
|
+
try {
|
|
29
|
+
host = new URL(baseUrl).hostname.toLowerCase();
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
return MOONSHOT_HOST_SUFFIXES.some((d) => host === d || host.endsWith(`.${d}`));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Some free-tier upstreams (notably Pollinations) answer HTTP 200 but put an
|
|
38
|
+
* out-of-credits / top-up notice in the assistant message instead of returning
|
|
39
|
+
* a 402. That reads as a successful completion, so the fallback loop never
|
|
40
|
+
* rotates off the dead key (#pollinations-inband). Detect the notice so callers
|
|
41
|
+
* can throw a payment-required error and fail over. Kept deliberately tight —
|
|
42
|
+
* requires the credits phrase AND a top-up/quest/Pollinations marker — so a
|
|
43
|
+
* genuine reply that merely discusses credits does not trip it.
|
|
44
|
+
*/
|
|
45
|
+
export function inBandCreditsError(text) {
|
|
46
|
+
if (!text)
|
|
47
|
+
return null;
|
|
48
|
+
const t = text.toLowerCase();
|
|
49
|
+
const mentionsCredits = t.includes('enough credits') || t.includes('insufficient credit');
|
|
50
|
+
if (!mentionsCredits)
|
|
51
|
+
return null;
|
|
52
|
+
const topUpMarker = t.includes('top up') || t.includes('top-up') ||
|
|
53
|
+
t.includes('complete a quest') || t.includes('pollinations');
|
|
54
|
+
if (!topUpMarker)
|
|
55
|
+
return null;
|
|
56
|
+
return text.trim().slice(0, 200);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Generic provider for platforms that use an OpenAI-compatible API.
|
|
60
|
+
* Covers: Groq, Cerebras, NVIDIA NIM, Mistral, OpenRouter,
|
|
61
|
+
* GitHub Models, Fireworks AI.
|
|
62
|
+
*/
|
|
63
|
+
export class OpenAICompatProvider extends BaseProvider {
|
|
64
|
+
platform;
|
|
65
|
+
name;
|
|
66
|
+
baseUrl;
|
|
67
|
+
extraHeaders;
|
|
68
|
+
validateUrl;
|
|
69
|
+
/** Per-provider HTTP timeout override. OpenAI-compatible gateways often buffer
|
|
70
|
+
* non-streaming responses until generation completes, and reasoning models can
|
|
71
|
+
* take >15s before first byte. Default 60000. */
|
|
72
|
+
timeoutMs;
|
|
73
|
+
/** NVIDIA NIM models reject any request that permits parallel tool calls with
|
|
74
|
+
* `400 This model only supports single tool-calls at once!`. When set, pin
|
|
75
|
+
* parallel_tool_calls to false whenever tools are in play. See issue #255. */
|
|
76
|
+
forceSingleToolCall;
|
|
77
|
+
/** True only for a custom endpoint whose host is Moonshot's own API; see
|
|
78
|
+
* isMoonshotEndpoint(). Gates the assistant `partial` prefill flag (#1038). */
|
|
79
|
+
forwardsPartial;
|
|
80
|
+
constructor(opts) {
|
|
81
|
+
super();
|
|
82
|
+
this.platform = opts.platform;
|
|
83
|
+
this.name = opts.name;
|
|
84
|
+
this.baseUrl = opts.baseUrl;
|
|
85
|
+
this.extraHeaders = opts.extraHeaders ?? {};
|
|
86
|
+
this.validateUrl = opts.validateUrl;
|
|
87
|
+
// PROVIDER_TIMEOUT_<PLATFORM> wins over the registration default (#547).
|
|
88
|
+
this.timeoutMs = providerTimeoutMs(opts.platform, opts.timeoutMs ?? 60_000);
|
|
89
|
+
this.keyless = opts.keyless ?? false;
|
|
90
|
+
this.forceSingleToolCall = opts.forceSingleToolCall ?? false;
|
|
91
|
+
this.forwardsPartial = opts.platform === 'custom' && isMoonshotEndpoint(opts.baseUrl);
|
|
92
|
+
}
|
|
93
|
+
/** Resolve the parallel_tool_calls flag to send upstream. For providers that
|
|
94
|
+
* only accept single tool calls (NVIDIA NIM), force `false` whenever tools are
|
|
95
|
+
* present so the model never tries to emit two at once and 400s; otherwise pass
|
|
96
|
+
* the caller's value through unchanged. See issue #255. */
|
|
97
|
+
resolveParallelToolCalls(options) {
|
|
98
|
+
if (this.forceSingleToolCall && options?.tools && options.tools.length > 0)
|
|
99
|
+
return false;
|
|
100
|
+
return options?.parallel_tool_calls;
|
|
101
|
+
}
|
|
102
|
+
/** Some providers (Groq especially) reject a model's tool call with a 400
|
|
103
|
+
* `tool_use_failed` when the model emitted it as inline DIALECT TEXT
|
|
104
|
+
* (`<function=NAME{...}</function>`, Hermes/Qwen XML, etc.) that the provider's
|
|
105
|
+
* own parser couldn't convert — but they hand back the raw text in
|
|
106
|
+
* `error.failed_generation`. Weaker tool models (e.g. groq llama-3.3-70b) hit
|
|
107
|
+
* this constantly, dead-ending an agent's whole turn even though the call is
|
|
108
|
+
* perfectly recoverable. Reuse the same inline-dialect rescue the proxy already
|
|
109
|
+
* applies to streamed text: parse `failed_generation` into structured
|
|
110
|
+
* tool_calls so the turn succeeds instead of failing over (or exhausting the
|
|
111
|
+
* chain when every enabled tool model behaves the same way). See issue #264. */
|
|
112
|
+
rescueFailedGeneration(errBody, options) {
|
|
113
|
+
const failed = errBody?.error?.failed_generation;
|
|
114
|
+
if (typeof failed !== 'string' || failed.length === 0)
|
|
115
|
+
return null;
|
|
116
|
+
const toolNames = new Set((options?.tools ?? []).map(t => t.function.name));
|
|
117
|
+
if (toolNames.size === 0)
|
|
118
|
+
return null;
|
|
119
|
+
const rescue = rescueInlineToolCalls(failed, toolNames);
|
|
120
|
+
if (!rescue.detected || !rescue.calls?.length)
|
|
121
|
+
return null;
|
|
122
|
+
const schemas = toolSchemaMap(options?.tools);
|
|
123
|
+
const rescued = rescue.calls.map((c, i) => ({
|
|
124
|
+
id: `call_rescued_${i + 1}`,
|
|
125
|
+
type: 'function',
|
|
126
|
+
function: { name: c.name, arguments: repairToolArguments(c.arguments, schemas.get(c.name)) },
|
|
127
|
+
}));
|
|
128
|
+
// Opt-in schema verdict. A rescue that produces schema-invalid arguments
|
|
129
|
+
// has turned the provider's 400 into a "success" the client cannot use, so
|
|
130
|
+
// decline it instead: the original upstream error propagates and the loop
|
|
131
|
+
// fails over exactly as it did before the rescue existed. Declining is the
|
|
132
|
+
// right shape here rather than throwing our own error — we are inside the
|
|
133
|
+
// provider's error path already.
|
|
134
|
+
if (isToolArgumentValidationEnabled() && invalidToolCallReasons(rescued, schemas).length > 0) {
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
return rescued;
|
|
138
|
+
}
|
|
139
|
+
/** Extract the useful text from an upstream error body. Most providers put it
|
|
140
|
+
* at error.message, but NVIDIA NIM answers RFC7807-style ({"title": ...,
|
|
141
|
+
* "detail": "Function id '...': DEGRADED function cannot be invoked"}) — the
|
|
142
|
+
* old error.message-only read collapsed that to "Bad Request", so neither the
|
|
143
|
+
* logs nor the error classifier could ever see the DEGRADED marker (#522). */
|
|
144
|
+
upstreamErrorText(errBody, res) {
|
|
145
|
+
const e = errBody;
|
|
146
|
+
if (typeof e?.error?.message === 'string' && e.error.message)
|
|
147
|
+
return e.error.message;
|
|
148
|
+
if (typeof e?.detail === 'string' && e.detail)
|
|
149
|
+
return e.detail;
|
|
150
|
+
if (typeof e?.title === 'string' && e.title)
|
|
151
|
+
return e.title;
|
|
152
|
+
return res.statusText;
|
|
153
|
+
}
|
|
154
|
+
/** Anonymous access sends NO Authorization header: keyless providers
|
|
155
|
+
* (Kilo's anonymous free tier) holding the stored `no-key` sentinel, and
|
|
156
|
+
* custom endpoints whose stored credential is the same sentinel with auth
|
|
157
|
+
* off. Sending `Bearer no-key` upstream is never right — upstreams read it
|
|
158
|
+
* as an invalid key. A REAL key saved on a keyless platform is used instead
|
|
159
|
+
* of the anonymous path, and a real key on a custom endpoint still gets its
|
|
160
|
+
* bearer (#1331): the presence of a credential decides at request time —
|
|
161
|
+
* Kilo, OVH and AI Horde all accept both modes per their docs. */
|
|
162
|
+
authHeader(apiKey) {
|
|
163
|
+
return bearerAuthHeader(apiKey);
|
|
164
|
+
}
|
|
165
|
+
/** Requesty's Leanstral route rejects greedy sampling when temperature=0.
|
|
166
|
+
* Omitting that value and supplying a neutral top_p keeps the caller's intent
|
|
167
|
+
* deterministic enough while using the provider's supported sampling path. */
|
|
168
|
+
samplingForModel(modelId, options) {
|
|
169
|
+
if (this.platform === 'requesty' &&
|
|
170
|
+
modelId === 'mistral/leanstral-1-5' &&
|
|
171
|
+
options?.temperature === 0) {
|
|
172
|
+
return { temperature: undefined, topP: options.top_p ?? 1 };
|
|
173
|
+
}
|
|
174
|
+
return { temperature: options?.temperature, topP: options?.top_p };
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* OpenAI-compatible endpoints that are strict about unknown nested fields:
|
|
178
|
+
* Mistral returns 422 for provider-private replay fields, Groq rejects
|
|
179
|
+
* assistant `reasoning_content` with 400 (verified in production, #1070),
|
|
180
|
+
* and Cerebras rejects it too — `property 'messages.N.assistant.
|
|
181
|
+
* reasoning_content' is unsupported` (confirmed via vercel/ai#15042 and
|
|
182
|
+
* opencode#26762, and by Cerebras' own docs, which use a `reasoning` field
|
|
183
|
+
* instead). Other gateways ignore the fields, so keep the OpenAI wire
|
|
184
|
+
* shape but strip our internal reasoning / thought-signature extensions
|
|
185
|
+
* before sending to these platforms.
|
|
186
|
+
*/
|
|
187
|
+
static STRICT_PLATFORMS = new Set(['mistral', 'groq', 'cerebras']);
|
|
188
|
+
messagesForPlatform(messages, modelId) {
|
|
189
|
+
if (OpenAICompatProvider.STRICT_PLATFORMS.has(this.platform)) {
|
|
190
|
+
// Rebuild every message from a whitelist of keys, so `partial` and the
|
|
191
|
+
// reasoning extensions never reach these platforms.
|
|
192
|
+
return messages.map((m) => {
|
|
193
|
+
if (m.role === 'assistant') {
|
|
194
|
+
return {
|
|
195
|
+
role: m.role,
|
|
196
|
+
content: m.content,
|
|
197
|
+
...(m.name ? { name: m.name } : {}),
|
|
198
|
+
...(m.tool_calls && m.tool_calls.length > 0 ? {
|
|
199
|
+
tool_calls: m.tool_calls.map((tc) => ({
|
|
200
|
+
id: tc.id,
|
|
201
|
+
type: tc.type,
|
|
202
|
+
function: {
|
|
203
|
+
name: tc.function.name,
|
|
204
|
+
arguments: tc.function.arguments,
|
|
205
|
+
},
|
|
206
|
+
})),
|
|
207
|
+
} : {}),
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
if (m.role === 'tool') {
|
|
211
|
+
return {
|
|
212
|
+
role: m.role,
|
|
213
|
+
content: m.content,
|
|
214
|
+
...(m.tool_call_id ? { tool_call_id: m.tool_call_id } : {}),
|
|
215
|
+
...(m.name ? { name: m.name } : {}),
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
return {
|
|
219
|
+
role: m.role,
|
|
220
|
+
content: m.content,
|
|
221
|
+
...(m.name ? { name: m.name } : {}),
|
|
222
|
+
};
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
// Moonshot's assistant `partial` prefill flag only survives to the wire
|
|
226
|
+
// when this provider IS Moonshot's own API (a custom endpoint on a
|
|
227
|
+
// Moonshot/Kimi host). Every other OpenAI-compatible gateway — including
|
|
228
|
+
// the ones that serve Kimi models, like Groq, Cloudflare or OpenRouter —
|
|
229
|
+
// gets it stripped, since strict upstreams 400/422 on unknown message keys
|
|
230
|
+
// and the rest would ignore it anyway. (#1038)
|
|
231
|
+
const sanitized = this.forwardsPartial ? messages : messages.map((m) => {
|
|
232
|
+
if (m.role === 'assistant' && m.partial !== undefined) {
|
|
233
|
+
const { partial: _partial, ...rest } = m;
|
|
234
|
+
return rest;
|
|
235
|
+
}
|
|
236
|
+
return m;
|
|
237
|
+
});
|
|
238
|
+
// Qwen3.8-Flash-Next accepts exactly one system message, and only at index
|
|
239
|
+
// zero. Profiles can prepend a gateway system prompt to a client's own
|
|
240
|
+
// system message, so coalesce every system instruction before dispatch
|
|
241
|
+
// instead of letting an otherwise valid request fail upstream.
|
|
242
|
+
if (this.platform === 'radeon' && modelId === 'Qwen3.8-Flash-Next') {
|
|
243
|
+
const systems = sanitized.filter(m => m.role === 'system');
|
|
244
|
+
if (systems.length === 1 && sanitized[0]?.role === 'system')
|
|
245
|
+
return sanitized;
|
|
246
|
+
const systemText = systems.map(m => contentToString(m.content)).filter(Boolean).join('\n\n');
|
|
247
|
+
const rest = sanitized.filter(m => m.role !== 'system');
|
|
248
|
+
return systemText ? [{ role: 'system', content: systemText }, ...rest] : rest;
|
|
249
|
+
}
|
|
250
|
+
return sanitized;
|
|
251
|
+
}
|
|
252
|
+
async chatCompletion(apiKey, messages, modelId, options, quotaContext) {
|
|
253
|
+
const sampling = this.samplingForModel(modelId, options);
|
|
254
|
+
const res = await this.fetchWithTimeout(`${this.baseUrl}/chat/completions`, {
|
|
255
|
+
method: 'POST',
|
|
256
|
+
headers: {
|
|
257
|
+
...this.authHeader(apiKey),
|
|
258
|
+
'Content-Type': 'application/json',
|
|
259
|
+
...this.extraHeaders,
|
|
260
|
+
},
|
|
261
|
+
body: JSON.stringify({
|
|
262
|
+
model: modelId,
|
|
263
|
+
messages: this.messagesForPlatform(messages, modelId),
|
|
264
|
+
temperature: sampling.temperature,
|
|
265
|
+
max_tokens: resolveMaxTokens(this.platform, options?.max_tokens, options?.contextBudget),
|
|
266
|
+
top_p: sampling.topP,
|
|
267
|
+
stop: options?.stop,
|
|
268
|
+
tools: options?.tools,
|
|
269
|
+
tool_choice: options?.tool_choice,
|
|
270
|
+
parallel_tool_calls: this.resolveParallelToolCalls(options),
|
|
271
|
+
...extendedBodyParams(this.platform, options),
|
|
272
|
+
}),
|
|
273
|
+
// 'request' bounds: the deadline covers the body read too, so a 200
|
|
274
|
+
// whose body hangs aborts instead of stalling res.json() forever.
|
|
275
|
+
}, options?.timeoutMs ?? this.timeoutMs, { signal: options?.signal, timeoutBounds: 'request' });
|
|
276
|
+
recordQuotaObservationsFromResponse(res, {
|
|
277
|
+
platform: this.platform,
|
|
278
|
+
keyId: quotaContext?.keyId,
|
|
279
|
+
providerAccountId: quotaContext?.providerAccountId,
|
|
280
|
+
modelId,
|
|
281
|
+
quotaPoolKey: quotaContext?.quotaPoolKey,
|
|
282
|
+
endpoint: 'chat/completions',
|
|
283
|
+
});
|
|
284
|
+
if (!res.ok) {
|
|
285
|
+
const err = await res.json().catch(() => ({}));
|
|
286
|
+
const rescued = this.rescueFailedGeneration(err, options);
|
|
287
|
+
if (rescued) {
|
|
288
|
+
console.log(`[${this.name}] Rescued ${rescued.length} inline tool call(s) from a ${res.status} tool_use_failed (#264)`);
|
|
289
|
+
const out = {
|
|
290
|
+
id: `chatcmpl-rescued-${Date.now()}`,
|
|
291
|
+
object: 'chat.completion',
|
|
292
|
+
created: Math.floor(Date.now() / 1000),
|
|
293
|
+
model: modelId,
|
|
294
|
+
choices: [{ index: 0, message: { role: 'assistant', content: null, tool_calls: rescued }, finish_reason: 'tool_calls' }],
|
|
295
|
+
usage: { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 },
|
|
296
|
+
};
|
|
297
|
+
out._routed_via = { platform: this.platform, model: modelId };
|
|
298
|
+
return out;
|
|
299
|
+
}
|
|
300
|
+
throw providerHttpError(res, `${this.name} API error ${res.status}: ${this.upstreamErrorText(err, res)}`, err);
|
|
301
|
+
}
|
|
302
|
+
let data;
|
|
303
|
+
let parseErr;
|
|
304
|
+
try {
|
|
305
|
+
data = await res.json();
|
|
306
|
+
}
|
|
307
|
+
catch (err) {
|
|
308
|
+
// An aborted body read (per-attempt deadline, client disconnect) is not
|
|
309
|
+
// a malformed body — rethrow so it keeps its abort classification
|
|
310
|
+
// instead of reading as a "non-OpenAI-compatible endpoint" below.
|
|
311
|
+
if (isAbortLikeError(err))
|
|
312
|
+
throw err;
|
|
313
|
+
parseErr = err;
|
|
314
|
+
data = undefined;
|
|
315
|
+
}
|
|
316
|
+
if (!data) {
|
|
317
|
+
// A 200 whose body isn't a single JSON document. Two distinct causes:
|
|
318
|
+
// (1) base URL points at a non-OpenAI-compatible API (Ollama's native
|
|
319
|
+
// NDJSON /api endpoints, llama.cpp's non-/v1 server, etc., #189).
|
|
320
|
+
// Typical signals: Content-Type is application/x-ndjson or
|
|
321
|
+
// text/event-stream; parser sees a SECOND JSON object after the
|
|
322
|
+
// first one ends ("Unexpected non-whitespace character after JSON
|
|
323
|
+
// at position <n> (line <n> column <n>)") where <n> sits inside
|
|
324
|
+
// the whitespace between two valid JSON documents.
|
|
325
|
+
// (2) the upstream connection was cut short mid-response — most often
|
|
326
|
+
// Cloudflare's 600-second edge idle keepalive dropping a slow
|
|
327
|
+
// free-tier queue (Kilo provider, NVIDIA nemotron / Poolside
|
|
328
|
+
// Laguna models on Cloudflare-fronted upstreams). Signals: body
|
|
329
|
+
// ends inside a string or mid-token, parser sees
|
|
330
|
+
// "Unexpected end of JSON input"; Content-Type is application/json
|
|
331
|
+
// (CF proxies it transparently); latency_ms ≈ 600000.
|
|
332
|
+
// Without this split every Cloudflare-truncated request was logged as
|
|
333
|
+
// "endpoint is not OpenAI-compatible", which sent operators chasing a
|
|
334
|
+
// base-URL config bug that doesn't exist (#430).
|
|
335
|
+
const msg = parseErr instanceof Error ? parseErr.message : String(parseErr);
|
|
336
|
+
const contentType = (res.headers?.get?.('content-type') ?? '').toLowerCase();
|
|
337
|
+
const looksLikeNdjson = /ndjson|text\/event-stream|x-ndjson/.test(contentType);
|
|
338
|
+
const looksLikeJson = /application\/json/.test(contentType);
|
|
339
|
+
// Truncation = body parsed cleanly until mid-stream EOF/mid-token garbage.
|
|
340
|
+
// Only attribute it to a CDN keepalive when the upstream claims to be
|
|
341
|
+
// sending JSON (Content-Type: application/json). Without that hint,
|
|
342
|
+
// the parser is more likely choking on NDJSON, native API output, or
|
|
343
|
+
// HTML — all "wrong endpoint" cases. This is the safe default.
|
|
344
|
+
const looksTruncated = /Unexpected end of JSON input/.test(msg) ||
|
|
345
|
+
(/Unexpected non-whitespace character after JSON at position/.test(msg) && looksLikeJson && !looksLikeNdjson);
|
|
346
|
+
if (looksTruncated) {
|
|
347
|
+
throw new Error(`${this.name} returned 200 but the response body was truncated mid-stream ` +
|
|
348
|
+
`(likely an idle-keepalive timeout at an upstream proxy or CDN, e.g. Cloudflare's ` +
|
|
349
|
+
`600s edge limit). Retry, or switch to a faster model/upstream.`);
|
|
350
|
+
}
|
|
351
|
+
throw new Error(`${this.name} returned 200 with a non-JSON body — the endpoint is not OpenAI-compatible. ` +
|
|
352
|
+
`Check the base URL (for Ollama use http://host:11434/v1, for llama.cpp/vLLM/LM Studio the /v1 path).`);
|
|
353
|
+
}
|
|
354
|
+
normalizeChoices(data);
|
|
355
|
+
// #pollinations-inband: a 200 whose body is really an out-of-credits notice
|
|
356
|
+
// must fail over, not be returned as the answer. The "402 ... insufficient
|
|
357
|
+
// credit" wording makes isPaymentRequiredError classify it as retryable and
|
|
358
|
+
// bench the key with the day-long payment-required cooldown.
|
|
359
|
+
const creditsNotice = inBandCreditsError((data.choices ?? []).map(c => contentToString(c.message?.content)).join('\n'));
|
|
360
|
+
if (creditsNotice) {
|
|
361
|
+
throw new Error(`${this.name} API error 402: insufficient credit (upstream returned 200 with an out-of-credits notice): ${creditsNotice}`);
|
|
362
|
+
}
|
|
363
|
+
data._routed_via = { platform: this.platform, model: modelId };
|
|
364
|
+
return data;
|
|
365
|
+
}
|
|
366
|
+
async *streamChatCompletion(apiKey, messages, modelId, options, quotaContext) {
|
|
367
|
+
const sampling = this.samplingForModel(modelId, options);
|
|
368
|
+
const res = await this.fetchWithTimeout(`${this.baseUrl}/chat/completions`, {
|
|
369
|
+
method: 'POST',
|
|
370
|
+
headers: {
|
|
371
|
+
...this.authHeader(apiKey),
|
|
372
|
+
'Content-Type': 'application/json',
|
|
373
|
+
...this.extraHeaders,
|
|
374
|
+
},
|
|
375
|
+
body: JSON.stringify({
|
|
376
|
+
model: modelId,
|
|
377
|
+
messages: this.messagesForPlatform(messages, modelId),
|
|
378
|
+
temperature: sampling.temperature,
|
|
379
|
+
max_tokens: resolveMaxTokens(this.platform, options?.max_tokens, options?.contextBudget),
|
|
380
|
+
top_p: sampling.topP,
|
|
381
|
+
stop: options?.stop,
|
|
382
|
+
tools: options?.tools,
|
|
383
|
+
tool_choice: options?.tool_choice,
|
|
384
|
+
parallel_tool_calls: this.resolveParallelToolCalls(options),
|
|
385
|
+
...extendedBodyParams(this.platform, options),
|
|
386
|
+
stream: true,
|
|
387
|
+
stream_options: options?.stream_options,
|
|
388
|
+
}),
|
|
389
|
+
// Default 'headers' bounds: the deadline dies at response headers, and
|
|
390
|
+
// the client signal + stall watchdog own the stream from there.
|
|
391
|
+
}, options?.timeoutMs ?? this.timeoutMs, { signal: options?.signal });
|
|
392
|
+
recordQuotaObservationsFromResponse(res, {
|
|
393
|
+
platform: this.platform,
|
|
394
|
+
keyId: quotaContext?.keyId,
|
|
395
|
+
providerAccountId: quotaContext?.providerAccountId,
|
|
396
|
+
modelId,
|
|
397
|
+
quotaPoolKey: quotaContext?.quotaPoolKey,
|
|
398
|
+
endpoint: 'chat/completions',
|
|
399
|
+
});
|
|
400
|
+
if (!res.ok) {
|
|
401
|
+
const err = await res.json().catch(() => ({}));
|
|
402
|
+
const rescued = this.rescueFailedGeneration(err, options);
|
|
403
|
+
if (rescued) {
|
|
404
|
+
console.log(`[${this.name}] Rescued ${rescued.length} inline tool call(s) from a ${res.status} tool_use_failed (stream, #264)`);
|
|
405
|
+
const base = { id: `chatcmpl-rescued-${Date.now()}`, object: 'chat.completion.chunk', created: Math.floor(Date.now() / 1000), model: modelId };
|
|
406
|
+
yield { ...base, choices: [{ index: 0, delta: { role: 'assistant' }, finish_reason: null }] };
|
|
407
|
+
yield { ...base, choices: [{ index: 0, delta: { tool_calls: rescued.map((c, i) => ({ index: i, ...c })) }, finish_reason: null }] };
|
|
408
|
+
yield { ...base, choices: [{ index: 0, delta: {}, finish_reason: 'tool_calls' }] };
|
|
409
|
+
return;
|
|
410
|
+
}
|
|
411
|
+
throw providerHttpError(res, `${this.name} API error ${res.status}: ${this.upstreamErrorText(err, res)}`, err);
|
|
412
|
+
}
|
|
413
|
+
// First-byte grace (#584): the same chat timeout that bounded the headers
|
|
414
|
+
// also budgets the first stream read — NIM-style providers send SSE
|
|
415
|
+
// headers instantly, then prefill long prompts for minutes.
|
|
416
|
+
yield* this.guardInBandCreditsError(this.readSseStream(res, { firstByteTimeoutMs: options?.timeoutMs ?? this.timeoutMs }));
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* #pollinations-inband: wrap a chat stream so an in-band out-of-credits notice
|
|
420
|
+
* (a 200 that streams the top-up message as content) fails over instead of
|
|
421
|
+
* being shown as the answer. Only the FIRST content-bearing chunk is inspected
|
|
422
|
+
* — a Pollinations credits notice arrives as a single canned message — so the
|
|
423
|
+
* stream is otherwise byte-for-byte unchanged: reasoning/role chunks pass
|
|
424
|
+
* straight through (first-token ttfb intact) and every chunk after the first
|
|
425
|
+
* content one is untouched. Throwing on that first content chunk happens before
|
|
426
|
+
* it reaches the proxy's commit point, so the fallback loop can still rotate.
|
|
427
|
+
*/
|
|
428
|
+
async *guardInBandCreditsError(src) {
|
|
429
|
+
let sawContent = false;
|
|
430
|
+
for await (const chunk of src) {
|
|
431
|
+
if (!sawContent) {
|
|
432
|
+
const content = (chunk.choices ?? [])
|
|
433
|
+
.map(c => c.delta?.content)
|
|
434
|
+
.filter((c) => typeof c === 'string')
|
|
435
|
+
.join('');
|
|
436
|
+
if (content) {
|
|
437
|
+
sawContent = true;
|
|
438
|
+
const notice = inBandCreditsError(content);
|
|
439
|
+
if (notice) {
|
|
440
|
+
throw new Error(`${this.name} API error 402: insufficient credit (upstream streamed an out-of-credits notice): ${notice}`);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
yield chunk;
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
/** This provider's OpenAI-style model catalog URL. */
|
|
448
|
+
get modelsUrl() {
|
|
449
|
+
return `${this.baseUrl}/models`;
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* GET a catalog-style endpoint with this provider's auth header, extra
|
|
453
|
+
* headers, proxy routing, timeout policy and quota bookkeeping. Shared by
|
|
454
|
+
* validateKey (which only reads the status) and custom-endpoint model
|
|
455
|
+
* discovery (#488), which also reads the body — one place owns how we talk
|
|
456
|
+
* to a provider's /models route.
|
|
457
|
+
*
|
|
458
|
+
* Note: transport errors (DNS / timeout / TLS) propagate to the caller.
|
|
459
|
+
* health.ts catches them and marks status='error' WITHOUT incrementing the
|
|
460
|
+
* consecutive-failure counter — only confirmed 401/403 disables a key.
|
|
461
|
+
*/
|
|
462
|
+
fetchCatalogEndpoint(url, apiKey, quotaContext) {
|
|
463
|
+
// 30s (not 10s): some upstreams return a large /v1/models catalog that
|
|
464
|
+
// takes >10s from high-latency regions (e.g. NVIDIA NIM measured ~11.2s
|
|
465
|
+
// from India). A 10s cap aborted those calls and health.ts marked a
|
|
466
|
+
// perfectly good key status='error'. 30s aligns with chatCompletion's
|
|
467
|
+
// own slow-upstream allowance and costs nothing for fast providers.
|
|
468
|
+
return this.fetchWithTimeout(url, {
|
|
469
|
+
method: 'GET',
|
|
470
|
+
headers: {
|
|
471
|
+
...this.authHeader(apiKey),
|
|
472
|
+
...this.extraHeaders,
|
|
473
|
+
},
|
|
474
|
+
// 'request' bounds: a catalog body that hangs mid-transfer must not
|
|
475
|
+
// stall the health cycle past the deadline.
|
|
476
|
+
}, 30000, { timeoutBounds: 'request' }).then(res => {
|
|
477
|
+
recordQuotaObservationsFromResponse(res, {
|
|
478
|
+
platform: this.platform,
|
|
479
|
+
keyId: quotaContext?.keyId,
|
|
480
|
+
providerAccountId: quotaContext?.providerAccountId,
|
|
481
|
+
quotaPoolKey: quotaContext?.quotaPoolKey,
|
|
482
|
+
endpoint: 'models',
|
|
483
|
+
});
|
|
484
|
+
return res;
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
/** The raw `${baseUrl}/models` response, body unread. Used by custom-endpoint
|
|
488
|
+
* model discovery (#488); unlike validateKey it always hits /models, never a
|
|
489
|
+
* provider-specific validateUrl, because the caller wants the catalog. */
|
|
490
|
+
fetchModelCatalog(apiKey, quotaContext) {
|
|
491
|
+
return this.fetchCatalogEndpoint(this.modelsUrl, apiKey, quotaContext);
|
|
492
|
+
}
|
|
493
|
+
async validateKey(apiKey, quotaContext) {
|
|
494
|
+
const res = await this.fetchCatalogEndpoint(this.validateUrl ?? this.modelsUrl, apiKey, quotaContext);
|
|
495
|
+
return this.validationResult(res);
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
/**
|
|
499
|
+
* Some providers (Z.ai glm-4.5-flash, Cloudflare DeepSeek-R1-distill, others)
|
|
500
|
+
* return reasoning models' actual answer in `message.reasoning_content` with
|
|
501
|
+
* `message.content === ""`. Fold reasoning_content into content so OpenAI-
|
|
502
|
+
* compatible clients see a non-empty assistant message.
|
|
503
|
+
*
|
|
504
|
+
* Other providers (Mistral magistral-medium) return `message.content` as an
|
|
505
|
+
* array of text segments instead of a string. Flatten to string.
|
|
506
|
+
*/
|
|
507
|
+
function normalizeChoices(data) {
|
|
508
|
+
for (const choice of data.choices ?? []) {
|
|
509
|
+
const msg = choice.message;
|
|
510
|
+
// Flatten array content (Mistral magistral) → join text segments.
|
|
511
|
+
if (Array.isArray(msg.content)) {
|
|
512
|
+
msg.content = msg.content
|
|
513
|
+
.map(seg => (typeof seg === 'string' ? seg : (seg.text ?? '')))
|
|
514
|
+
.join('');
|
|
515
|
+
}
|
|
516
|
+
// Inline `<think>…</think>` extraction (DeepSeek-style) BEFORE the fold
|
|
517
|
+
// below: a leading think block moves out of content into
|
|
518
|
+
// reasoning_content. Runs before the fold so a think-only message (no
|
|
519
|
+
// answer after the block) still folds back into content and is never
|
|
520
|
+
// returned as an empty assistant message.
|
|
521
|
+
extractThinkFromMessage(msg);
|
|
522
|
+
// Fold reasoning into content if content is empty AND there are no
|
|
523
|
+
// tool_calls. With tool_calls present, content=null is the correct OpenAI
|
|
524
|
+
// shape; folding reasoning would confuse clients that branch on content.
|
|
525
|
+
// Field naming varies by provider: Z.ai uses `reasoning_content`, Ollama
|
|
526
|
+
// uses `reasoning`. Prefer `reasoning_content` when both are set.
|
|
527
|
+
const hasToolCalls = Array.isArray(msg.tool_calls) && msg.tool_calls.length > 0;
|
|
528
|
+
if (!hasToolCalls && (msg.content === '' || msg.content == null)) {
|
|
529
|
+
const fold = (typeof msg.reasoning_content === 'string' && msg.reasoning_content.length > 0)
|
|
530
|
+
? msg.reasoning_content
|
|
531
|
+
: (typeof msg.reasoning === 'string' && msg.reasoning.length > 0 ? msg.reasoning : null);
|
|
532
|
+
if (fold !== null)
|
|
533
|
+
msg.content = fold;
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
//# sourceMappingURL=openai-compat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-compat.js","sourceRoot":"","sources":["../../src/providers/openai-compat.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ChatCompletionChunk, ChatCompletionResponse, ChatMessage } from '@srouter/shared/types.js';
|
|
2
|
+
import { BaseProvider, type CompletionOptions, type KeyValidationResult } from './base.js';
|
|
3
|
+
import { type QuotaObservationContext } from '../services/provider-quota.js';
|
|
4
|
+
/**
|
|
5
|
+
* OpenCode Free � keyless provider that spoofs the official OpenCode CLI
|
|
6
|
+
* identity to access the zen free tier without a real API key.
|
|
7
|
+
*
|
|
8
|
+
* The upstream ALWAYS requires stream: true; stream: false or omitted
|
|
9
|
+
* results in 403 FreeTierError. Non-streaming callers get a synthetic
|
|
10
|
+
* single-chunk response assembled from the SSE stream.
|
|
11
|
+
*/
|
|
12
|
+
export declare class OpenCodeFreeProvider extends BaseProvider {
|
|
13
|
+
readonly platform: "opencode-free";
|
|
14
|
+
readonly name = "OpenCode Free";
|
|
15
|
+
keyless: boolean;
|
|
16
|
+
private identityHeaders;
|
|
17
|
+
validateKey(_apiKey: string, _quotaContext?: QuotaObservationContext): Promise<KeyValidationResult>;
|
|
18
|
+
private buildBody;
|
|
19
|
+
private fetchChat;
|
|
20
|
+
chatCompletion(_apiKey: string, messages: ChatMessage[], modelId: string, options?: CompletionOptions, quotaContext?: QuotaObservationContext): Promise<ChatCompletionResponse>;
|
|
21
|
+
streamChatCompletion(_apiKey: string, messages: ChatMessage[], modelId: string, options?: CompletionOptions, quotaContext?: QuotaObservationContext): AsyncGenerator<ChatCompletionChunk>;
|
|
22
|
+
private assembleResponse;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=opencode-free.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode-free.d.ts","sourceRoot":"","sources":["../../src/providers/opencode-free.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,sBAAsB,EACtB,WAAW,EAEZ,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,YAAY,EAEZ,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACzB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAuC,KAAK,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AA+FlH;;;;;;;GAOG;AACH,qBAAa,oBAAqB,SAAQ,YAAY;IACpD,QAAQ,CAAC,QAAQ,EAAG,eAAe,CAAU;IAC7C,QAAQ,CAAC,IAAI,mBAAmB;IACvB,OAAO,UAAQ;IAIxB,OAAO,CAAC,eAAe;IAgBjB,WAAW,CACf,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,uBAAuB,GACtC,OAAO,CAAC,mBAAmB,CAAC;IAiB/B,OAAO,CAAC,SAAS;YA2BH,SAAS;IAkCjB,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,iBAAiB,EAC3B,YAAY,CAAC,EAAE,uBAAuB,GACrC,OAAO,CAAC,sBAAsB,CAAC;IAsB3B,oBAAoB,CACzB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,iBAAiB,EAC3B,YAAY,CAAC,EAAE,uBAAuB,GACrC,cAAc,CAAC,mBAAmB,CAAC;IAkBtC,OAAO,CAAC,gBAAgB;CAoEzB"}
|