@earendil-works/pi-ai 0.87.0 → 0.99.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/README.md +208 -28
- package/dist/api/anthropic-messages.d.ts.map +1 -1
- package/dist/api/anthropic-messages.js +7 -1
- package/dist/api/anthropic-messages.js.map +1 -1
- package/dist/api/anthropic-messages.lazy.d.ts.map +1 -1
- package/dist/api/azure-openai-responses.d.ts.map +1 -1
- package/dist/api/azure-openai-responses.js +6 -5
- package/dist/api/azure-openai-responses.js.map +1 -1
- package/dist/api/azure-openai-responses.lazy.d.ts.map +1 -1
- package/dist/api/bedrock-converse-stream.d.ts.map +1 -1
- package/dist/api/bedrock-converse-stream.js +1 -0
- package/dist/api/bedrock-converse-stream.js.map +1 -1
- package/dist/api/bedrock-converse-stream.lazy.d.ts.map +1 -1
- package/dist/api/bedrock-converse-stream.lazy.js.map +1 -1
- package/dist/api/cloudflare-ai-binding.d.ts.map +1 -1
- package/dist/api/cloudflare-ai-binding.js.map +1 -1
- package/dist/api/cloudflare-workers-ai-system-one.d.ts +4 -0
- package/dist/api/cloudflare-workers-ai-system-one.d.ts.map +1 -0
- package/dist/api/cloudflare-workers-ai-system-one.js +43 -0
- package/dist/api/cloudflare-workers-ai-system-one.js.map +1 -0
- package/dist/api/cloudflare-workers-ai-system-one.lazy.d.ts +3 -0
- package/dist/api/cloudflare-workers-ai-system-one.lazy.d.ts.map +1 -0
- package/dist/api/cloudflare-workers-ai-system-one.lazy.js +4 -0
- package/dist/api/cloudflare-workers-ai-system-one.lazy.js.map +1 -0
- package/dist/api/cloudflare.d.ts +2 -0
- package/dist/api/cloudflare.d.ts.map +1 -1
- package/dist/api/cloudflare.js +2 -0
- package/dist/api/cloudflare.js.map +1 -1
- package/dist/api/constrained-sampling.d.ts.map +1 -1
- package/dist/api/constrained-sampling.js.map +1 -1
- package/dist/api/github-copilot-headers.d.ts.map +1 -1
- package/dist/api/github-copilot-headers.js.map +1 -1
- package/dist/api/google-generative-ai.d.ts.map +1 -1
- package/dist/api/google-generative-ai.js +1 -0
- package/dist/api/google-generative-ai.js.map +1 -1
- package/dist/api/google-generative-ai.lazy.d.ts.map +1 -1
- package/dist/api/google-shared.d.ts.map +1 -1
- package/dist/api/google-shared.js.map +1 -1
- package/dist/api/google-vertex.d.ts.map +1 -1
- package/dist/api/google-vertex.js +1 -0
- package/dist/api/google-vertex.js.map +1 -1
- package/dist/api/google-vertex.lazy.d.ts.map +1 -1
- package/dist/api/lazy.d.ts.map +1 -1
- package/dist/api/lazy.js.map +1 -1
- package/dist/api/llama-cpp-classify.d.ts +33 -0
- package/dist/api/llama-cpp-classify.d.ts.map +1 -0
- package/dist/api/llama-cpp-classify.js +365 -0
- package/dist/api/llama-cpp-classify.js.map +1 -0
- package/dist/api/llama-cpp-classify.lazy.d.ts +3 -0
- package/dist/api/llama-cpp-classify.lazy.d.ts.map +1 -0
- package/dist/api/llama-cpp-classify.lazy.js +4 -0
- package/dist/api/llama-cpp-classify.lazy.js.map +1 -0
- package/dist/api/mistral-conversations.d.ts +1 -1
- package/dist/api/mistral-conversations.d.ts.map +1 -1
- package/dist/api/mistral-conversations.js +18 -17
- package/dist/api/mistral-conversations.js.map +1 -1
- package/dist/api/mistral-conversations.lazy.d.ts.map +1 -1
- package/dist/api/openai-codex-responses.d.ts.map +1 -1
- package/dist/api/openai-codex-responses.js +20 -4
- package/dist/api/openai-codex-responses.js.map +1 -1
- package/dist/api/openai-codex-responses.lazy.d.ts.map +1 -1
- package/dist/api/openai-completions.d.ts.map +1 -1
- package/dist/api/openai-completions.js +7 -5
- package/dist/api/openai-completions.js.map +1 -1
- package/dist/api/openai-completions.lazy.d.ts.map +1 -1
- package/dist/api/openai-prompt-cache.d.ts.map +1 -1
- package/dist/api/openai-prompt-cache.js.map +1 -1
- package/dist/api/openai-responses-shared.d.ts +2 -1
- package/dist/api/openai-responses-shared.d.ts.map +1 -1
- package/dist/api/openai-responses-shared.js +14 -0
- package/dist/api/openai-responses-shared.js.map +1 -1
- package/dist/api/openai-responses.d.ts.map +1 -1
- package/dist/api/openai-responses.js +26 -9
- package/dist/api/openai-responses.js.map +1 -1
- package/dist/api/openai-responses.lazy.d.ts.map +1 -1
- package/dist/api/openrouter-images.d.ts +2 -1
- package/dist/api/openrouter-images.d.ts.map +1 -1
- package/dist/api/openrouter-images.js +1 -0
- package/dist/api/openrouter-images.js.map +1 -1
- package/dist/api/openrouter-images.lazy.d.ts.map +1 -1
- package/dist/api/openrouter-images.lazy.js.map +1 -1
- package/dist/api/pi-messages.d.ts.map +1 -1
- package/dist/api/pi-messages.js +1 -0
- package/dist/api/pi-messages.js.map +1 -1
- package/dist/api/pi-messages.lazy.d.ts.map +1 -1
- package/dist/api/simple-options.d.ts.map +1 -1
- package/dist/api/simple-options.js +2 -4
- package/dist/api/simple-options.js.map +1 -1
- package/dist/api/system-one-shared.d.ts +23 -0
- package/dist/api/system-one-shared.d.ts.map +1 -0
- package/dist/api/system-one-shared.js +183 -0
- package/dist/api/system-one-shared.js.map +1 -0
- package/dist/api/transform-messages.d.ts.map +1 -1
- package/dist/api/transform-messages.js.map +1 -1
- package/dist/api/typesafe-system-one.d.ts +4 -0
- package/dist/api/typesafe-system-one.d.ts.map +1 -0
- package/dist/api/typesafe-system-one.js +19 -0
- package/dist/api/typesafe-system-one.js.map +1 -0
- package/dist/api/typesafe-system-one.lazy.d.ts +3 -0
- package/dist/api/typesafe-system-one.lazy.d.ts.map +1 -0
- package/dist/api/typesafe-system-one.lazy.js +4 -0
- package/dist/api/typesafe-system-one.lazy.js.map +1 -0
- package/dist/auth/context.d.ts.map +1 -1
- package/dist/auth/context.js.map +1 -1
- package/dist/auth/credential-store.d.ts.map +1 -1
- package/dist/auth/credential-store.js.map +1 -1
- package/dist/auth/helpers.d.ts.map +1 -1
- package/dist/auth/helpers.js +1 -1
- package/dist/auth/helpers.js.map +1 -1
- package/dist/auth/oauth/anthropic.d.ts.map +1 -1
- package/dist/auth/oauth/anthropic.js +19 -128
- package/dist/auth/oauth/anthropic.js.map +1 -1
- package/dist/auth/oauth/callback-server.d.ts +55 -0
- package/dist/auth/oauth/callback-server.d.ts.map +1 -0
- package/dist/auth/oauth/callback-server.js +146 -0
- package/dist/auth/oauth/callback-server.js.map +1 -0
- package/dist/auth/oauth/device-code.d.ts.map +1 -1
- package/dist/auth/oauth/device-code.js.map +1 -1
- package/dist/auth/oauth/github-copilot.d.ts.map +1 -1
- package/dist/auth/oauth/github-copilot.js.map +1 -1
- package/dist/auth/oauth/kimi-coding.d.ts.map +1 -1
- package/dist/auth/oauth/kimi-coding.js.map +1 -1
- package/dist/auth/oauth/load.d.ts +2 -0
- package/dist/auth/oauth/load.d.ts.map +1 -1
- package/dist/auth/oauth/load.js +5 -0
- package/dist/auth/oauth/load.js.map +1 -1
- package/dist/auth/oauth/meta.d.ts.map +1 -1
- package/dist/auth/oauth/meta.js.map +1 -1
- package/dist/auth/oauth/openai-chatgpt.d.ts +9 -0
- package/dist/auth/oauth/openai-chatgpt.d.ts.map +1 -0
- package/dist/auth/oauth/openai-chatgpt.js +266 -0
- package/dist/auth/oauth/openai-chatgpt.js.map +1 -0
- package/dist/auth/oauth/openai-codex.d.ts +1 -1
- package/dist/auth/oauth/openai-codex.d.ts.map +1 -1
- package/dist/auth/oauth/openai-codex.js +20 -124
- package/dist/auth/oauth/openai-codex.js.map +1 -1
- package/dist/auth/oauth/openrouter.d.ts +1 -1
- package/dist/auth/oauth/openrouter.d.ts.map +1 -1
- package/dist/auth/oauth/openrouter.js +19 -138
- package/dist/auth/oauth/openrouter.js.map +1 -1
- package/dist/auth/oauth/pkce.d.ts.map +1 -1
- package/dist/auth/oauth/pkce.js.map +1 -1
- package/dist/auth/oauth/radius.d.ts +1 -1
- package/dist/auth/oauth/radius.d.ts.map +1 -1
- package/dist/auth/oauth/radius.js +21 -89
- package/dist/auth/oauth/radius.js.map +1 -1
- package/dist/auth/oauth/xai.d.ts.map +1 -1
- package/dist/auth/oauth/xai.js.map +1 -1
- package/dist/auth/resolve.d.ts +2 -8
- package/dist/auth/resolve.d.ts.map +1 -1
- package/dist/auth/resolve.js +3 -19
- package/dist/auth/resolve.js.map +1 -1
- package/dist/auth/types.d.ts +10 -1
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/auth/types.js.map +1 -1
- package/dist/bedrock-provider.d.ts.map +1 -1
- package/dist/bun-oauth.d.ts.map +1 -1
- package/dist/bun-oauth.js +2 -0
- package/dist/bun-oauth.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +3 -1
- package/dist/cli.js.map +1 -1
- package/dist/compat/extension-oauth-types.d.ts.map +1 -1
- package/dist/compat.d.ts.map +1 -1
- package/dist/compat.js.map +1 -1
- package/dist/env-api-keys.d.ts.map +1 -1
- package/dist/env-api-keys.js +1 -0
- package/dist/env-api-keys.js.map +1 -1
- package/dist/image-models.d.ts +19 -8
- package/dist/image-models.d.ts.map +1 -1
- package/dist/image-models.js +14 -13
- package/dist/image-models.js.map +1 -1
- package/dist/images-api-registry.d.ts +7 -7
- package/dist/images-api-registry.d.ts.map +1 -1
- package/dist/images-api-registry.js.map +1 -1
- package/dist/images.d.ts +7 -2
- package/dist/images.d.ts.map +1 -1
- package/dist/images.js +5 -0
- package/dist/images.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/legacy-api-aliases.d.ts.map +1 -1
- package/dist/model-catalog.d.ts +25 -9
- package/dist/model-catalog.d.ts.map +1 -1
- package/dist/model-catalog.js +14 -2
- package/dist/model-catalog.js.map +1 -1
- package/dist/models-store.d.ts +3 -2
- package/dist/models-store.d.ts.map +1 -1
- package/dist/models-store.js.map +1 -1
- package/dist/models.d.ts +97 -30
- package/dist/models.d.ts.map +1 -1
- package/dist/models.generated.d.ts +131 -41
- package/dist/models.generated.d.ts.map +1 -1
- package/dist/models.generated.js +131 -41
- package/dist/models.generated.js.map +1 -1
- package/dist/models.js +157 -30
- package/dist/models.js.map +1 -1
- package/dist/oauth.d.ts.map +1 -1
- package/dist/providers/all.d.ts +19 -13
- package/dist/providers/all.d.ts.map +1 -1
- package/dist/providers/all.js +25 -21
- package/dist/providers/all.js.map +1 -1
- package/dist/providers/amazon-bedrock.d.ts.map +1 -1
- package/dist/providers/amazon-bedrock.js.map +1 -1
- package/dist/providers/amazon-bedrock.models.d.ts +4 -2
- package/dist/providers/amazon-bedrock.models.d.ts.map +1 -1
- package/dist/providers/amazon-bedrock.models.js +4 -2
- package/dist/providers/amazon-bedrock.models.js.map +1 -1
- package/dist/providers/ant-ling.d.ts.map +1 -1
- package/dist/providers/ant-ling.js.map +1 -1
- package/dist/providers/ant-ling.models.d.ts +4 -2
- package/dist/providers/ant-ling.models.d.ts.map +1 -1
- package/dist/providers/ant-ling.models.js +4 -2
- package/dist/providers/ant-ling.models.js.map +1 -1
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/anthropic.models.d.ts +4 -2
- package/dist/providers/anthropic.models.d.ts.map +1 -1
- package/dist/providers/anthropic.models.js +4 -2
- package/dist/providers/anthropic.models.js.map +1 -1
- package/dist/providers/azure-openai-responses.d.ts.map +1 -1
- package/dist/providers/azure-openai-responses.js.map +1 -1
- package/dist/providers/azure-openai-responses.models.d.ts +4 -2
- package/dist/providers/azure-openai-responses.models.d.ts.map +1 -1
- package/dist/providers/azure-openai-responses.models.js +4 -2
- package/dist/providers/azure-openai-responses.models.js.map +1 -1
- package/dist/providers/baseten.d.ts.map +1 -1
- package/dist/providers/baseten.js.map +1 -1
- package/dist/providers/baseten.models.d.ts +4 -2
- package/dist/providers/baseten.models.d.ts.map +1 -1
- package/dist/providers/baseten.models.js +4 -2
- package/dist/providers/baseten.models.js.map +1 -1
- package/dist/providers/cerebras.d.ts.map +1 -1
- package/dist/providers/cerebras.js.map +1 -1
- package/dist/providers/cerebras.models.d.ts +4 -2
- package/dist/providers/cerebras.models.d.ts.map +1 -1
- package/dist/providers/cerebras.models.js +4 -2
- package/dist/providers/cerebras.models.js.map +1 -1
- package/dist/providers/cloudflare-ai-gateway.d.ts.map +1 -1
- package/dist/providers/cloudflare-ai-gateway.js.map +1 -1
- package/dist/providers/cloudflare-ai-gateway.models.d.ts +4 -2
- package/dist/providers/cloudflare-ai-gateway.models.d.ts.map +1 -1
- package/dist/providers/cloudflare-ai-gateway.models.js +4 -2
- package/dist/providers/cloudflare-ai-gateway.models.js.map +1 -1
- package/dist/providers/cloudflare-auth.d.ts.map +1 -1
- package/dist/providers/cloudflare-auth.js.map +1 -1
- package/dist/providers/cloudflare-stream.d.ts +6 -2
- package/dist/providers/cloudflare-stream.d.ts.map +1 -1
- package/dist/providers/cloudflare-stream.js +6 -0
- package/dist/providers/cloudflare-stream.js.map +1 -1
- package/dist/providers/cloudflare-workers-ai.d.ts.map +1 -1
- package/dist/providers/cloudflare-workers-ai.js +10 -3
- package/dist/providers/cloudflare-workers-ai.js.map +1 -1
- package/dist/providers/cloudflare-workers-ai.models.d.ts +4 -2
- package/dist/providers/cloudflare-workers-ai.models.d.ts.map +1 -1
- package/dist/providers/cloudflare-workers-ai.models.js +4 -2
- package/dist/providers/cloudflare-workers-ai.models.js.map +1 -1
- package/dist/providers/data/.manifest.json +1 -1
- package/dist/providers/data/amazon-bedrock.json +1 -1
- package/dist/providers/data/ant-ling.json +1 -1
- package/dist/providers/data/anthropic.json +1 -1
- package/dist/providers/data/azure-openai-responses.json +1 -1
- package/dist/providers/data/baseten.json +1 -1
- package/dist/providers/data/cerebras.json +1 -1
- package/dist/providers/data/cloudflare-ai-gateway.json +1 -1
- package/dist/providers/data/cloudflare-workers-ai.json +1 -1
- package/dist/providers/data/deepseek.json +1 -1
- package/dist/providers/data/fireworks.json +1 -1
- package/dist/providers/data/github-copilot.json +1 -1
- package/dist/providers/data/google-vertex.json +1 -1
- package/dist/providers/data/google.json +1 -1
- package/dist/providers/data/groq.json +1 -1
- package/dist/providers/data/huggingface.json +1 -1
- package/dist/providers/data/kimi-coding.json +1 -1
- package/dist/providers/data/meta.json +1 -1
- package/dist/providers/data/minimax-cn.json +1 -1
- package/dist/providers/data/minimax.json +1 -1
- package/dist/providers/data/mistral.json +1 -1
- package/dist/providers/data/moonshotai-cn.json +1 -1
- package/dist/providers/data/moonshotai.json +1 -1
- package/dist/providers/data/nvidia.json +1 -1
- package/dist/providers/data/openai-codex.json +1 -1
- package/dist/providers/data/openai.json +1 -1
- package/dist/providers/data/opencode-go.json +1 -1
- package/dist/providers/data/opencode.json +1 -1
- package/dist/providers/data/openrouter.json +1 -1
- package/dist/providers/data/qwen-token-plan-cn.json +1 -1
- package/dist/providers/data/qwen-token-plan-individual.json +1 -1
- package/dist/providers/data/qwen-token-plan.json +1 -1
- package/dist/providers/data/radius.json +1 -1
- package/dist/providers/data/together.json +1 -1
- package/dist/providers/data/typesafe.json +1 -0
- package/dist/providers/data/vercel-ai-gateway.json +1 -1
- package/dist/providers/data/xai.json +1 -1
- package/dist/providers/data/xiaomi-token-plan-ams.json +1 -1
- package/dist/providers/data/xiaomi-token-plan-cn.json +1 -1
- package/dist/providers/data/xiaomi-token-plan-sgp.json +1 -1
- package/dist/providers/data/xiaomi.json +1 -1
- package/dist/providers/data/zai-coding-cn.json +1 -1
- package/dist/providers/data/zai.json +1 -1
- package/dist/providers/deepseek.d.ts.map +1 -1
- package/dist/providers/deepseek.js.map +1 -1
- package/dist/providers/deepseek.models.d.ts +4 -2
- package/dist/providers/deepseek.models.d.ts.map +1 -1
- package/dist/providers/deepseek.models.js +4 -2
- package/dist/providers/deepseek.models.js.map +1 -1
- package/dist/providers/faux.d.ts +2 -2
- package/dist/providers/faux.d.ts.map +1 -1
- package/dist/providers/faux.js.map +1 -1
- package/dist/providers/fireworks.d.ts.map +1 -1
- package/dist/providers/fireworks.js.map +1 -1
- package/dist/providers/fireworks.models.d.ts +4 -2
- package/dist/providers/fireworks.models.d.ts.map +1 -1
- package/dist/providers/fireworks.models.js +4 -2
- package/dist/providers/fireworks.models.js.map +1 -1
- package/dist/providers/github-copilot.d.ts.map +1 -1
- package/dist/providers/github-copilot.js.map +1 -1
- package/dist/providers/github-copilot.models.d.ts +4 -2
- package/dist/providers/github-copilot.models.d.ts.map +1 -1
- package/dist/providers/github-copilot.models.js +4 -2
- package/dist/providers/github-copilot.models.js.map +1 -1
- package/dist/providers/google-vertex.d.ts.map +1 -1
- package/dist/providers/google-vertex.js.map +1 -1
- package/dist/providers/google-vertex.models.d.ts +4 -2
- package/dist/providers/google-vertex.models.d.ts.map +1 -1
- package/dist/providers/google-vertex.models.js +4 -2
- package/dist/providers/google-vertex.models.js.map +1 -1
- package/dist/providers/google.d.ts.map +1 -1
- package/dist/providers/google.js.map +1 -1
- package/dist/providers/google.models.d.ts +4 -2
- package/dist/providers/google.models.d.ts.map +1 -1
- package/dist/providers/google.models.js +4 -2
- package/dist/providers/google.models.js.map +1 -1
- package/dist/providers/groq.d.ts.map +1 -1
- package/dist/providers/groq.js.map +1 -1
- package/dist/providers/groq.models.d.ts +4 -2
- package/dist/providers/groq.models.d.ts.map +1 -1
- package/dist/providers/groq.models.js +4 -2
- package/dist/providers/groq.models.js.map +1 -1
- package/dist/providers/huggingface.d.ts.map +1 -1
- package/dist/providers/huggingface.js.map +1 -1
- package/dist/providers/huggingface.models.d.ts +4 -2
- package/dist/providers/huggingface.models.d.ts.map +1 -1
- package/dist/providers/huggingface.models.js +4 -2
- package/dist/providers/huggingface.models.js.map +1 -1
- package/dist/providers/images/register-builtins.d.ts +1 -1
- package/dist/providers/images/register-builtins.d.ts.map +1 -1
- package/dist/providers/images/register-builtins.js.map +1 -1
- package/dist/providers/kimi-coding.d.ts.map +1 -1
- package/dist/providers/kimi-coding.js.map +1 -1
- package/dist/providers/kimi-coding.models.d.ts +4 -2
- package/dist/providers/kimi-coding.models.d.ts.map +1 -1
- package/dist/providers/kimi-coding.models.js +4 -2
- package/dist/providers/kimi-coding.models.js.map +1 -1
- package/dist/providers/meta.d.ts.map +1 -1
- package/dist/providers/meta.js.map +1 -1
- package/dist/providers/meta.models.d.ts +4 -2
- package/dist/providers/meta.models.d.ts.map +1 -1
- package/dist/providers/meta.models.js +4 -2
- package/dist/providers/meta.models.js.map +1 -1
- package/dist/providers/minimax-cn.d.ts.map +1 -1
- package/dist/providers/minimax-cn.js.map +1 -1
- package/dist/providers/minimax-cn.models.d.ts +4 -2
- package/dist/providers/minimax-cn.models.d.ts.map +1 -1
- package/dist/providers/minimax-cn.models.js +4 -2
- package/dist/providers/minimax-cn.models.js.map +1 -1
- package/dist/providers/minimax.d.ts.map +1 -1
- package/dist/providers/minimax.js.map +1 -1
- package/dist/providers/minimax.models.d.ts +4 -2
- package/dist/providers/minimax.models.d.ts.map +1 -1
- package/dist/providers/minimax.models.js +4 -2
- package/dist/providers/minimax.models.js.map +1 -1
- package/dist/providers/mistral.d.ts.map +1 -1
- package/dist/providers/mistral.js.map +1 -1
- package/dist/providers/mistral.models.d.ts +4 -2
- package/dist/providers/mistral.models.d.ts.map +1 -1
- package/dist/providers/mistral.models.js +4 -2
- package/dist/providers/mistral.models.js.map +1 -1
- package/dist/providers/moonshotai-cn.d.ts.map +1 -1
- package/dist/providers/moonshotai-cn.js.map +1 -1
- package/dist/providers/moonshotai-cn.models.d.ts +4 -2
- package/dist/providers/moonshotai-cn.models.d.ts.map +1 -1
- package/dist/providers/moonshotai-cn.models.js +4 -2
- package/dist/providers/moonshotai-cn.models.js.map +1 -1
- package/dist/providers/moonshotai.d.ts.map +1 -1
- package/dist/providers/moonshotai.js.map +1 -1
- package/dist/providers/moonshotai.models.d.ts +4 -2
- package/dist/providers/moonshotai.models.d.ts.map +1 -1
- package/dist/providers/moonshotai.models.js +4 -2
- package/dist/providers/moonshotai.models.js.map +1 -1
- package/dist/providers/nvidia.d.ts.map +1 -1
- package/dist/providers/nvidia.js.map +1 -1
- package/dist/providers/nvidia.models.d.ts +4 -2
- package/dist/providers/nvidia.models.d.ts.map +1 -1
- package/dist/providers/nvidia.models.js +4 -2
- package/dist/providers/nvidia.models.js.map +1 -1
- package/dist/providers/openai-codex.d.ts.map +1 -1
- package/dist/providers/openai-codex.js +1 -1
- package/dist/providers/openai-codex.js.map +1 -1
- package/dist/providers/openai-codex.models.d.ts +4 -2
- package/dist/providers/openai-codex.models.d.ts.map +1 -1
- package/dist/providers/openai-codex.models.js +4 -2
- package/dist/providers/openai-codex.models.js.map +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +11 -2
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/openai.models.d.ts +4 -2
- package/dist/providers/openai.models.d.ts.map +1 -1
- package/dist/providers/openai.models.js +4 -2
- package/dist/providers/openai.models.js.map +1 -1
- package/dist/providers/opencode-go.d.ts.map +1 -1
- package/dist/providers/opencode-go.js.map +1 -1
- package/dist/providers/opencode-go.models.d.ts +4 -2
- package/dist/providers/opencode-go.models.d.ts.map +1 -1
- package/dist/providers/opencode-go.models.js +4 -2
- package/dist/providers/opencode-go.models.js.map +1 -1
- package/dist/providers/opencode-headers.d.ts.map +1 -1
- package/dist/providers/opencode-headers.js.map +1 -1
- package/dist/providers/opencode.d.ts +3 -1
- package/dist/providers/opencode.d.ts.map +1 -1
- package/dist/providers/opencode.js +5 -2
- package/dist/providers/opencode.js.map +1 -1
- package/dist/providers/opencode.models.d.ts +4 -2
- package/dist/providers/opencode.models.d.ts.map +1 -1
- package/dist/providers/opencode.models.js +4 -2
- package/dist/providers/opencode.models.js.map +1 -1
- package/dist/providers/openrouter.d.ts.map +1 -1
- package/dist/providers/openrouter.js +11 -2
- package/dist/providers/openrouter.js.map +1 -1
- package/dist/providers/openrouter.models.d.ts +4 -2
- package/dist/providers/openrouter.models.d.ts.map +1 -1
- package/dist/providers/openrouter.models.js +4 -2
- package/dist/providers/openrouter.models.js.map +1 -1
- package/dist/providers/qwen-token-plan-cn.d.ts.map +1 -1
- package/dist/providers/qwen-token-plan-cn.js.map +1 -1
- package/dist/providers/qwen-token-plan-cn.models.d.ts +4 -2
- package/dist/providers/qwen-token-plan-cn.models.d.ts.map +1 -1
- package/dist/providers/qwen-token-plan-cn.models.js +4 -2
- package/dist/providers/qwen-token-plan-cn.models.js.map +1 -1
- package/dist/providers/qwen-token-plan-individual.d.ts.map +1 -1
- package/dist/providers/qwen-token-plan-individual.js.map +1 -1
- package/dist/providers/qwen-token-plan-individual.models.d.ts +4 -2
- package/dist/providers/qwen-token-plan-individual.models.d.ts.map +1 -1
- package/dist/providers/qwen-token-plan-individual.models.js +4 -2
- package/dist/providers/qwen-token-plan-individual.models.js.map +1 -1
- package/dist/providers/qwen-token-plan.d.ts.map +1 -1
- package/dist/providers/qwen-token-plan.js.map +1 -1
- package/dist/providers/qwen-token-plan.models.d.ts +4 -2
- package/dist/providers/qwen-token-plan.models.d.ts.map +1 -1
- package/dist/providers/qwen-token-plan.models.js +4 -2
- package/dist/providers/qwen-token-plan.models.js.map +1 -1
- package/dist/providers/radius-config.d.ts.map +1 -1
- package/dist/providers/radius-config.js.map +1 -1
- package/dist/providers/radius.d.ts.map +1 -1
- package/dist/providers/radius.js.map +1 -1
- package/dist/providers/radius.models.d.ts +4 -2
- package/dist/providers/radius.models.d.ts.map +1 -1
- package/dist/providers/radius.models.js +4 -2
- package/dist/providers/radius.models.js.map +1 -1
- package/dist/providers/together.d.ts.map +1 -1
- package/dist/providers/together.js.map +1 -1
- package/dist/providers/together.models.d.ts +4 -2
- package/dist/providers/together.models.d.ts.map +1 -1
- package/dist/providers/together.models.js +4 -2
- package/dist/providers/together.models.js.map +1 -1
- package/dist/providers/typesafe.d.ts +3 -0
- package/dist/providers/typesafe.d.ts.map +1 -0
- package/dist/providers/typesafe.js +18 -0
- package/dist/providers/typesafe.js.map +1 -0
- package/dist/providers/typesafe.models.d.ts +6 -0
- package/dist/providers/typesafe.models.d.ts.map +1 -0
- package/dist/providers/typesafe.models.js +8 -0
- package/dist/providers/typesafe.models.js.map +1 -0
- package/dist/providers/vercel-ai-gateway.d.ts.map +1 -1
- package/dist/providers/vercel-ai-gateway.js +5 -2
- package/dist/providers/vercel-ai-gateway.js.map +1 -1
- package/dist/providers/vercel-ai-gateway.models.d.ts +4 -2
- package/dist/providers/vercel-ai-gateway.models.d.ts.map +1 -1
- package/dist/providers/vercel-ai-gateway.models.js +4 -2
- package/dist/providers/vercel-ai-gateway.models.js.map +1 -1
- package/dist/providers/xai.d.ts.map +1 -1
- package/dist/providers/xai.js.map +1 -1
- package/dist/providers/xai.models.d.ts +4 -2
- package/dist/providers/xai.models.d.ts.map +1 -1
- package/dist/providers/xai.models.js +4 -2
- package/dist/providers/xai.models.js.map +1 -1
- package/dist/providers/xiaomi-token-plan-ams.d.ts.map +1 -1
- package/dist/providers/xiaomi-token-plan-ams.js.map +1 -1
- package/dist/providers/xiaomi-token-plan-ams.models.d.ts +4 -2
- package/dist/providers/xiaomi-token-plan-ams.models.d.ts.map +1 -1
- package/dist/providers/xiaomi-token-plan-ams.models.js +4 -2
- package/dist/providers/xiaomi-token-plan-ams.models.js.map +1 -1
- package/dist/providers/xiaomi-token-plan-cn.d.ts.map +1 -1
- package/dist/providers/xiaomi-token-plan-cn.js.map +1 -1
- package/dist/providers/xiaomi-token-plan-cn.models.d.ts +4 -2
- package/dist/providers/xiaomi-token-plan-cn.models.d.ts.map +1 -1
- package/dist/providers/xiaomi-token-plan-cn.models.js +4 -2
- package/dist/providers/xiaomi-token-plan-cn.models.js.map +1 -1
- package/dist/providers/xiaomi-token-plan-sgp.d.ts.map +1 -1
- package/dist/providers/xiaomi-token-plan-sgp.js.map +1 -1
- package/dist/providers/xiaomi-token-plan-sgp.models.d.ts +4 -2
- package/dist/providers/xiaomi-token-plan-sgp.models.d.ts.map +1 -1
- package/dist/providers/xiaomi-token-plan-sgp.models.js +4 -2
- package/dist/providers/xiaomi-token-plan-sgp.models.js.map +1 -1
- package/dist/providers/xiaomi.d.ts.map +1 -1
- package/dist/providers/xiaomi.js.map +1 -1
- package/dist/providers/xiaomi.models.d.ts +4 -2
- package/dist/providers/xiaomi.models.d.ts.map +1 -1
- package/dist/providers/xiaomi.models.js +4 -2
- package/dist/providers/xiaomi.models.js.map +1 -1
- package/dist/providers/zai-coding-cn.d.ts.map +1 -1
- package/dist/providers/zai-coding-cn.js.map +1 -1
- package/dist/providers/zai-coding-cn.models.d.ts +4 -2
- package/dist/providers/zai-coding-cn.models.d.ts.map +1 -1
- package/dist/providers/zai-coding-cn.models.js +4 -2
- package/dist/providers/zai-coding-cn.models.js.map +1 -1
- package/dist/providers/zai.d.ts.map +1 -1
- package/dist/providers/zai.js.map +1 -1
- package/dist/providers/zai.models.d.ts +4 -2
- package/dist/providers/zai.models.d.ts.map +1 -1
- package/dist/providers/zai.models.js +4 -2
- package/dist/providers/zai.models.js.map +1 -1
- package/dist/session-resources.d.ts.map +1 -1
- package/dist/session-resources.js.map +1 -1
- package/dist/types.d.ts +141 -21
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/abort-signals.d.ts.map +1 -1
- package/dist/utils/abort-signals.js.map +1 -1
- package/dist/utils/abort.d.ts.map +1 -1
- package/dist/utils/abort.js.map +1 -1
- package/dist/utils/assistant-message-frame.d.ts.map +1 -1
- package/dist/utils/assistant-message-frame.js.map +1 -1
- package/dist/utils/diagnostics.d.ts.map +1 -1
- package/dist/utils/diagnostics.js.map +1 -1
- package/dist/utils/error-body.d.ts.map +1 -1
- package/dist/utils/error-body.js.map +1 -1
- package/dist/utils/estimate.d.ts.map +1 -1
- package/dist/utils/estimate.js.map +1 -1
- package/dist/utils/event-stream.d.ts.map +1 -1
- package/dist/utils/event-stream.js.map +1 -1
- package/dist/utils/hash.d.ts.map +1 -1
- package/dist/utils/hash.js.map +1 -1
- package/dist/utils/headers.d.ts +1 -1
- package/dist/utils/headers.d.ts.map +1 -1
- package/dist/utils/headers.js +10 -8
- package/dist/utils/headers.js.map +1 -1
- package/dist/utils/json-parse.d.ts.map +1 -1
- package/dist/utils/json-parse.js.map +1 -1
- package/dist/utils/model-operations.d.ts +11 -0
- package/dist/utils/model-operations.d.ts.map +1 -0
- package/dist/utils/model-operations.js +47 -0
- package/dist/utils/model-operations.js.map +1 -0
- package/dist/utils/models-error.d.ts +8 -0
- package/dist/utils/models-error.d.ts.map +1 -0
- package/dist/utils/models-error.js +19 -0
- package/dist/utils/models-error.js.map +1 -0
- package/dist/utils/node-http-proxy.d.ts.map +1 -1
- package/dist/utils/node-http-proxy.js.map +1 -1
- package/dist/utils/oauth-page.d.ts.map +1 -0
- package/dist/utils/oauth-page.js.map +1 -0
- package/dist/utils/overflow.d.ts.map +1 -1
- package/dist/utils/overflow.js.map +1 -1
- package/dist/utils/pi-user-agent.d.ts.map +1 -1
- package/dist/utils/pi-user-agent.js.map +1 -1
- package/dist/utils/provider-env.d.ts.map +1 -1
- package/dist/utils/provider-env.js.map +1 -1
- package/dist/utils/provider-retry.d.ts.map +1 -1
- package/dist/utils/provider-retry.js.map +1 -1
- package/dist/utils/retry.d.ts.map +1 -1
- package/dist/utils/retry.js +7 -0
- package/dist/utils/retry.js.map +1 -1
- package/dist/utils/sanitize-unicode.d.ts.map +1 -1
- package/dist/utils/sanitize-unicode.js.map +1 -1
- package/dist/utils/sleep.d.ts.map +1 -1
- package/dist/utils/sleep.js.map +1 -1
- package/dist/utils/text.d.ts.map +1 -1
- package/dist/utils/text.js.map +1 -1
- package/dist/utils/transcript.d.ts.map +1 -1
- package/dist/utils/transcript.js.map +1 -1
- package/dist/utils/typebox-helpers.d.ts.map +1 -1
- package/dist/utils/typebox-helpers.js.map +1 -1
- package/dist/utils/uuid.d.ts.map +1 -1
- package/dist/utils/uuid.js.map +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js.map +1 -1
- package/package.json +5 -6
- package/dist/auth/oauth/oauth-page.d.ts.map +0 -1
- package/dist/auth/oauth/oauth-page.js.map +0 -1
- package/dist/image-models.generated.d.ts +0 -815
- package/dist/image-models.generated.d.ts.map +0 -1
- package/dist/image-models.generated.js +0 -817
- package/dist/image-models.generated.js.map +0 -1
- package/dist/images-models.d.ts +0 -95
- package/dist/images-models.d.ts.map +0 -1
- package/dist/images-models.js +0 -143
- package/dist/images-models.js.map +0 -1
- package/dist/providers/openrouter-images.d.ts +0 -3
- package/dist/providers/openrouter-images.d.ts.map +0 -1
- package/dist/providers/openrouter-images.js +0 -22
- package/dist/providers/openrouter-images.js.map +0 -1
- /package/dist/{auth/oauth → utils}/oauth-page.d.ts +0 -0
- /package/dist/{auth/oauth → utils}/oauth-page.js +0 -0
package/dist/models.js
CHANGED
|
@@ -4,8 +4,19 @@ import { InMemoryCredentialStore } from "./auth/credential-store.js";
|
|
|
4
4
|
import { ModelsError, resolveProviderAuth } from "./auth/resolve.js";
|
|
5
5
|
import { InMemoryModelsStore } from "./models-store.js";
|
|
6
6
|
import { operationSignal, raceWithAbortSignal } from "./utils/abort.js";
|
|
7
|
+
import { assertChatModel, assertClassifierModel, assertImageModel, classifierErrorResult, getModelType, imageErrorResult, isModelType, } from "./utils/model-operations.js";
|
|
7
8
|
import { normalizeContext } from "./utils/transcript.js";
|
|
8
9
|
export { ModelsError } from "./auth/resolve.js";
|
|
10
|
+
export { getModelType, isModelType } from "./utils/model-operations.js";
|
|
11
|
+
const KNOWN_MODEL_TYPES = { chat: true, image: true, classifier: true };
|
|
12
|
+
/** Models from stores and remote sources may have types that only newer versions know. */
|
|
13
|
+
function hasKnownModelType(model) {
|
|
14
|
+
return Object.hasOwn(KNOWN_MODEL_TYPES, getModelType(model));
|
|
15
|
+
}
|
|
16
|
+
/** Drops stored models whose type this version does not know. */
|
|
17
|
+
function withKnownModelTypes(entry) {
|
|
18
|
+
return { ...entry, models: entry.models.filter(hasKnownModelType) };
|
|
19
|
+
}
|
|
9
20
|
function mergeHeaders(base, override) {
|
|
10
21
|
if (!base && !override)
|
|
11
22
|
return undefined;
|
|
@@ -76,9 +87,38 @@ class ModelsImpl {
|
|
|
76
87
|
}
|
|
77
88
|
return models;
|
|
78
89
|
}
|
|
90
|
+
getAllModels(provider) {
|
|
91
|
+
if (provider !== undefined) {
|
|
92
|
+
const entry = this.providers.get(provider);
|
|
93
|
+
if (!entry)
|
|
94
|
+
return [];
|
|
95
|
+
try {
|
|
96
|
+
return entry.getAllModels?.() ?? entry.getModels();
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return [];
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const models = [];
|
|
103
|
+
for (const entry of this.providers.values()) {
|
|
104
|
+
try {
|
|
105
|
+
models.push(...(entry.getAllModels?.() ?? entry.getModels()));
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// Best-effort: ill-behaved providers yield no models.
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return models;
|
|
112
|
+
}
|
|
113
|
+
getModelsOfType(type, provider) {
|
|
114
|
+
return this.getAllModels(provider).filter((model) => isModelType(model, type));
|
|
115
|
+
}
|
|
79
116
|
getModel(provider, id) {
|
|
80
117
|
return this.getModels(provider).find((model) => model.id === id);
|
|
81
118
|
}
|
|
119
|
+
getModelOfType(type, provider, id) {
|
|
120
|
+
return this.getModelsOfType(type, provider).find((model) => model.id === id);
|
|
121
|
+
}
|
|
82
122
|
supersedeProviderRefresh(providerId) {
|
|
83
123
|
const generation = (this.refreshGenerations.get(providerId) ?? 0) + 1;
|
|
84
124
|
this.refreshGenerations.set(providerId, generation);
|
|
@@ -124,7 +164,7 @@ class ModelsImpl {
|
|
|
124
164
|
const stored = await this.modelsStore.read(provider.id, { signal });
|
|
125
165
|
await provider.refreshModels({
|
|
126
166
|
credential,
|
|
127
|
-
stored: stored ? structuredClone(stored) : undefined,
|
|
167
|
+
stored: stored ? withKnownModelTypes(structuredClone(stored)) : undefined,
|
|
128
168
|
publish: (publication) => this.publishProviderModels(provider.id, generation, signal, publication),
|
|
129
169
|
allowNetwork,
|
|
130
170
|
force: allowNetwork ? force : undefined,
|
|
@@ -253,26 +293,47 @@ class ModelsImpl {
|
|
|
253
293
|
})();
|
|
254
294
|
return raceWithAbortSignal(check, signal);
|
|
255
295
|
}
|
|
296
|
+
async getAuthenticatedProviders(providerId, signal) {
|
|
297
|
+
signal.throwIfAborted();
|
|
298
|
+
const providers = providerId
|
|
299
|
+
? [this.providers.get(providerId)].filter((entry) => entry !== undefined)
|
|
300
|
+
: this.getProviders();
|
|
301
|
+
const checks = await Promise.all(providers.map(async (provider) => {
|
|
302
|
+
const credential = await this.readCredential(provider.id, signal);
|
|
303
|
+
return { provider, credential, auth: await this.checkProviderAuth(provider, credential, signal) };
|
|
304
|
+
}));
|
|
305
|
+
return checks.filter((entry) => entry.auth !== undefined);
|
|
306
|
+
}
|
|
256
307
|
getAvailable(providerId, options) {
|
|
257
308
|
const signal = operationSignal(options?.signal);
|
|
258
309
|
const available = (async () => {
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
? [this.providers.get(providerId)].filter((entry) => entry !== undefined)
|
|
262
|
-
: this.getProviders();
|
|
263
|
-
const checks = await Promise.all(providers.map(async (provider) => {
|
|
264
|
-
const credential = await this.readCredential(provider.id, signal);
|
|
265
|
-
return { provider, credential, auth: await this.checkProviderAuth(provider, credential, signal) };
|
|
266
|
-
}));
|
|
267
|
-
return checks.flatMap(({ provider, credential, auth }) => {
|
|
268
|
-
if (!auth)
|
|
269
|
-
return [];
|
|
310
|
+
const providers = await this.getAuthenticatedProviders(providerId, signal);
|
|
311
|
+
return providers.flatMap(({ provider, credential }) => {
|
|
270
312
|
const models = provider.getModels();
|
|
271
313
|
return provider.filterModels?.(models, credential) ?? models;
|
|
272
314
|
});
|
|
273
315
|
})();
|
|
274
316
|
return raceWithAbortSignal(available, signal);
|
|
275
317
|
}
|
|
318
|
+
async getAvailableOfType(type, providerId, options) {
|
|
319
|
+
return (await this.getAllAvailable(providerId, options)).filter((model) => isModelType(model, type));
|
|
320
|
+
}
|
|
321
|
+
getAllAvailable(providerId, options) {
|
|
322
|
+
const signal = operationSignal(options?.signal);
|
|
323
|
+
const available = (async () => {
|
|
324
|
+
const providers = await this.getAuthenticatedProviders(providerId, signal);
|
|
325
|
+
return providers.flatMap(({ provider, credential }) => {
|
|
326
|
+
const models = provider.getAllModels?.() ?? provider.getModels();
|
|
327
|
+
if (provider.filterAllModels)
|
|
328
|
+
return provider.filterAllModels(models, credential);
|
|
329
|
+
if (!provider.filterModels)
|
|
330
|
+
return models;
|
|
331
|
+
const availableChatIds = new Set(provider.filterModels(provider.getModels(), credential).map((model) => model.id));
|
|
332
|
+
return models.filter((model) => !isModelType(model, "chat") || availableChatIds.has(model.id));
|
|
333
|
+
});
|
|
334
|
+
})();
|
|
335
|
+
return raceWithAbortSignal(available, signal);
|
|
336
|
+
}
|
|
276
337
|
async getAuth(providerOrModel, overrides) {
|
|
277
338
|
const signal = operationSignal(overrides?.signal);
|
|
278
339
|
const providerId = typeof providerOrModel === "string" ? providerOrModel : providerOrModel.provider;
|
|
@@ -290,7 +351,7 @@ class ModelsImpl {
|
|
|
290
351
|
},
|
|
291
352
|
};
|
|
292
353
|
}
|
|
293
|
-
async login(providerId, type, interaction) {
|
|
354
|
+
async login(providerId, type, interaction, options) {
|
|
294
355
|
const signal = operationSignal(interaction.signal);
|
|
295
356
|
signal.throwIfAborted();
|
|
296
357
|
const provider = this.providers.get(providerId);
|
|
@@ -300,7 +361,7 @@ class ModelsImpl {
|
|
|
300
361
|
if (!method?.login) {
|
|
301
362
|
throw new ModelsError("auth", `${provider.name} does not support ${type} login`);
|
|
302
363
|
}
|
|
303
|
-
const loginOperation = method.login({ ...interaction, signal });
|
|
364
|
+
const loginOperation = method.login({ ...interaction, signal }, options);
|
|
304
365
|
const credential = await raceWithAbortSignal(loginOperation, signal);
|
|
305
366
|
let mutationStarted = false;
|
|
306
367
|
let markMutationStarted;
|
|
@@ -356,6 +417,10 @@ class ModelsImpl {
|
|
|
356
417
|
}
|
|
357
418
|
return provider;
|
|
358
419
|
}
|
|
420
|
+
requireChatProvider(model) {
|
|
421
|
+
assertChatModel(model);
|
|
422
|
+
return this.requireProvider(model);
|
|
423
|
+
}
|
|
359
424
|
async applyAuth(model, options) {
|
|
360
425
|
this.requireProvider(model);
|
|
361
426
|
const resolution = await this.getAuth(model, {
|
|
@@ -381,7 +446,7 @@ class ModelsImpl {
|
|
|
381
446
|
stream(model, context, options) {
|
|
382
447
|
const transcript = normalizeContext(context);
|
|
383
448
|
return lazyStream(model, async () => {
|
|
384
|
-
const provider = this.
|
|
449
|
+
const provider = this.requireChatProvider(model);
|
|
385
450
|
const { requestModel, requestOptions } = await this.applyAuth(model, options);
|
|
386
451
|
return provider.stream(requestModel, transcript, requestOptions);
|
|
387
452
|
});
|
|
@@ -392,7 +457,7 @@ class ModelsImpl {
|
|
|
392
457
|
streamSimple(model, context, options) {
|
|
393
458
|
const transcript = normalizeContext(context);
|
|
394
459
|
return lazyStream(model, async () => {
|
|
395
|
-
const provider = this.
|
|
460
|
+
const provider = this.requireChatProvider(model);
|
|
396
461
|
const { requestModel, requestOptions } = await this.applyAuth(model, options);
|
|
397
462
|
return provider.streamSimple(requestModel, transcript, requestOptions);
|
|
398
463
|
});
|
|
@@ -402,7 +467,7 @@ class ModelsImpl {
|
|
|
402
467
|
}
|
|
403
468
|
streamDeferred(model, handle, options) {
|
|
404
469
|
return lazyStream(model, async () => {
|
|
405
|
-
const provider = this.
|
|
470
|
+
const provider = this.requireChatProvider(model);
|
|
406
471
|
if (!provider.fetchDeferred) {
|
|
407
472
|
throw new ModelsError("provider", `Provider ${model.provider} does not support deferred responses`);
|
|
408
473
|
}
|
|
@@ -414,31 +479,73 @@ class ModelsImpl {
|
|
|
414
479
|
return this.streamDeferred(model, handle, options).result();
|
|
415
480
|
}
|
|
416
481
|
async cancelDeferred(model, handle, options) {
|
|
417
|
-
const provider = this.
|
|
482
|
+
const provider = this.requireChatProvider(model);
|
|
418
483
|
if (!provider.cancelDeferred) {
|
|
419
484
|
throw new ModelsError("provider", `Provider ${model.provider} does not support deferred responses`);
|
|
420
485
|
}
|
|
421
486
|
const { requestModel, requestOptions } = await this.applyAuth(model, options);
|
|
422
487
|
await provider.cancelDeferred(requestModel, handle, requestOptions);
|
|
423
488
|
}
|
|
489
|
+
async generateImages(model, context, options) {
|
|
490
|
+
try {
|
|
491
|
+
assertImageModel(model);
|
|
492
|
+
const provider = this.requireProvider(model);
|
|
493
|
+
if (!provider.generateImages) {
|
|
494
|
+
throw new ModelsError("provider", `Provider ${model.provider} does not support image generation`);
|
|
495
|
+
}
|
|
496
|
+
const { requestModel, requestOptions } = await this.applyAuth(model, options);
|
|
497
|
+
return await provider.generateImages(requestModel, context, requestOptions);
|
|
498
|
+
}
|
|
499
|
+
catch (error) {
|
|
500
|
+
return imageErrorResult(model, error, options?.signal?.aborted);
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
async classify(model, context, options) {
|
|
504
|
+
try {
|
|
505
|
+
assertClassifierModel(model);
|
|
506
|
+
const provider = this.requireProvider(model);
|
|
507
|
+
if (!provider.classify) {
|
|
508
|
+
throw new ModelsError("provider", `Provider ${model.provider} does not support classification`);
|
|
509
|
+
}
|
|
510
|
+
const { requestModel, requestOptions } = await this.applyAuth(model, options);
|
|
511
|
+
return await provider.classify(requestModel, context, requestOptions);
|
|
512
|
+
}
|
|
513
|
+
catch (error) {
|
|
514
|
+
return classifierErrorResult(model, error, options?.signal?.aborted);
|
|
515
|
+
}
|
|
516
|
+
}
|
|
424
517
|
}
|
|
425
518
|
export function createModels(options) {
|
|
426
519
|
return new ModelsImpl(options);
|
|
427
520
|
}
|
|
428
521
|
/**
|
|
429
522
|
* Builds a provider from parts. Built-in provider factories and models.json
|
|
430
|
-
* custom providers both go through this. A single `api` streams all
|
|
431
|
-
* an `api` map dispatches on `model.api`, and a model whose api has
|
|
432
|
-
* produces a stream error.
|
|
523
|
+
* custom providers both go through this. A single `api` streams all chat
|
|
524
|
+
* models; an `api` map dispatches on `model.api`, and a model whose api has
|
|
525
|
+
* no entry produces a stream error. One-shot operation maps dispatch on
|
|
526
|
+
* `model.api` the same way. At least one concrete implementation across
|
|
527
|
+
* `api`/`images`/`classifiers` is required; empty maps are rejected.
|
|
433
528
|
*/
|
|
434
529
|
export function createProvider(input) {
|
|
530
|
+
const single = input.api && typeof input.api.stream === "function"
|
|
531
|
+
? input.api
|
|
532
|
+
: undefined;
|
|
533
|
+
const byApi = single || !input.api ? undefined : input.api;
|
|
534
|
+
const images = input.images;
|
|
535
|
+
const classifiers = input.classifiers;
|
|
536
|
+
const streams = single ? [single] : Object.values(byApi ?? {}).filter((entry) => entry !== undefined);
|
|
537
|
+
const imageImplementations = Object.values(images ?? {}).filter((entry) => entry !== undefined);
|
|
538
|
+
const classifierImplementations = Object.values(classifiers ?? {}).filter((entry) => entry !== undefined);
|
|
539
|
+
if (streams.length === 0 && imageImplementations.length === 0 && classifierImplementations.length === 0) {
|
|
540
|
+
throw new Error(`Provider ${input.id}: at least one of "api", "images", or "classifiers" is required.`);
|
|
541
|
+
}
|
|
435
542
|
const baselineModels = input.models;
|
|
436
543
|
let dynamicModels = [];
|
|
437
544
|
const fetchModels = input.fetchModels;
|
|
438
545
|
const currentModels = () => {
|
|
439
546
|
const merged = [...baselineModels];
|
|
440
547
|
for (const model of dynamicModels) {
|
|
441
|
-
const index = merged.findIndex((entry) => entry.id === model.id);
|
|
548
|
+
const index = merged.findIndex((entry) => getModelType(entry) === getModelType(model) && entry.id === model.id);
|
|
442
549
|
if (index >= 0)
|
|
443
550
|
merged[index] = model;
|
|
444
551
|
else
|
|
@@ -446,8 +553,6 @@ export function createProvider(input) {
|
|
|
446
553
|
}
|
|
447
554
|
return merged;
|
|
448
555
|
};
|
|
449
|
-
const single = typeof input.api.stream === "function" ? input.api : undefined;
|
|
450
|
-
const byApi = single ? undefined : input.api;
|
|
451
556
|
const apiFor = (model) => single ?? byApi?.[model.api];
|
|
452
557
|
const dispatch = (model, run) => {
|
|
453
558
|
const streams = apiFor(model);
|
|
@@ -464,7 +569,8 @@ export function createProvider(input) {
|
|
|
464
569
|
baseUrl: input.baseUrl,
|
|
465
570
|
headers: input.headers,
|
|
466
571
|
auth: input.auth,
|
|
467
|
-
getModels: currentModels,
|
|
572
|
+
getModels: () => currentModels().filter((model) => isModelType(model, "chat")),
|
|
573
|
+
getAllModels: currentModels,
|
|
468
574
|
refreshModels: fetchModels
|
|
469
575
|
? async (context) => {
|
|
470
576
|
if (context.stored) {
|
|
@@ -481,9 +587,10 @@ export function createProvider(input) {
|
|
|
481
587
|
}
|
|
482
588
|
if (!context.allowNetwork || context.signal.aborted)
|
|
483
589
|
return;
|
|
484
|
-
const
|
|
590
|
+
const fetched = await fetchModels(context);
|
|
485
591
|
if (context.signal.aborted)
|
|
486
592
|
return;
|
|
593
|
+
const refreshed = fetched.filter(hasKnownModelType);
|
|
487
594
|
await context.publish({
|
|
488
595
|
persist: { models: refreshed, checkedAt: Date.now() },
|
|
489
596
|
update: () => {
|
|
@@ -493,10 +600,10 @@ export function createProvider(input) {
|
|
|
493
600
|
}
|
|
494
601
|
: undefined,
|
|
495
602
|
filterModels: input.filterModels,
|
|
603
|
+
filterAllModels: input.filterAllModels,
|
|
496
604
|
stream: (model, context, options) => dispatch(model, (streams) => streams.stream(model, context, options)),
|
|
497
605
|
streamSimple: (model, context, options) => dispatch(model, (streams) => streams.streamSimple(model, context, options)),
|
|
498
606
|
};
|
|
499
|
-
const streams = single ? [single] : Object.values(byApi ?? {}).filter((entry) => entry !== undefined);
|
|
500
607
|
if (streams.some((entry) => entry.fetchDeferred !== undefined)) {
|
|
501
608
|
provider.fetchDeferred = (model, handle, options) => lazyStream(model, async () => {
|
|
502
609
|
const implementation = apiFor(model);
|
|
@@ -515,6 +622,24 @@ export function createProvider(input) {
|
|
|
515
622
|
await implementation.cancelDeferred(model, handle, options);
|
|
516
623
|
};
|
|
517
624
|
}
|
|
625
|
+
if (images && imageImplementations.length > 0) {
|
|
626
|
+
provider.generateImages = async (model, context, options) => {
|
|
627
|
+
const implementation = images[model.api];
|
|
628
|
+
if (!implementation) {
|
|
629
|
+
return imageErrorResult(model, new ModelsError("provider", `Provider ${input.id} has no image generation implementation for "${model.api}"`));
|
|
630
|
+
}
|
|
631
|
+
return implementation.generateImages(model, context, options);
|
|
632
|
+
};
|
|
633
|
+
}
|
|
634
|
+
if (classifiers && classifierImplementations.length > 0) {
|
|
635
|
+
provider.classify = async (model, context, options) => {
|
|
636
|
+
const implementation = classifiers[model.api];
|
|
637
|
+
if (!implementation) {
|
|
638
|
+
return classifierErrorResult(model, new ModelsError("provider", `Provider ${input.id} has no classifier implementation for "${model.api}"`));
|
|
639
|
+
}
|
|
640
|
+
return implementation.classify(model, context, options);
|
|
641
|
+
};
|
|
642
|
+
}
|
|
518
643
|
return provider;
|
|
519
644
|
}
|
|
520
645
|
/**
|
|
@@ -526,9 +651,11 @@ export function createProvider(input) {
|
|
|
526
651
|
* // model: Model<"anthropic-messages">, stream options fully typed
|
|
527
652
|
* }
|
|
528
653
|
* ```
|
|
654
|
+
*
|
|
655
|
+
* Non-chat models never match, even when their api id equals `api`.
|
|
529
656
|
*/
|
|
530
657
|
export function hasApi(model, api) {
|
|
531
|
-
return model.api === api;
|
|
658
|
+
return isModelType(model, "chat") && model.api === api;
|
|
532
659
|
}
|
|
533
660
|
export function calculateCost(model, usage) {
|
|
534
661
|
const inputTokens = usage.input + usage.cacheRead + usage.cacheWrite;
|
|
@@ -583,12 +710,12 @@ export function clampThinkingLevel(model, level) {
|
|
|
583
710
|
return availableLevels[0] ?? "off";
|
|
584
711
|
}
|
|
585
712
|
/**
|
|
586
|
-
* Check if two models are equal by comparing
|
|
713
|
+
* Check if two models are equal by comparing their type, id, and provider.
|
|
587
714
|
* Returns false if either model is null or undefined.
|
|
588
715
|
*/
|
|
589
716
|
export function modelsAreEqual(a, b) {
|
|
590
717
|
if (!a || !b)
|
|
591
718
|
return false;
|
|
592
|
-
return a.id === b.id && a.provider === b.provider;
|
|
719
|
+
return getModelType(a) === getModelType(b) && a.id === b.id && a.provider === b.provider;
|
|
593
720
|
}
|
|
594
721
|
//# sourceMappingURL=models.js.map
|