@nodetool-ai/runtime 0.8.1 → 0.8.3
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/dist/.nodetool-build-stamp +1 -1
- package/dist/context.d.ts +31 -3
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +369 -160
- package/dist/context.js.map +1 -1
- package/dist/generation-registry.d.ts +8 -0
- package/dist/generation-registry.d.ts.map +1 -1
- package/dist/generation-registry.js +18 -0
- package/dist/generation-registry.js.map +1 -1
- package/dist/host-binaries.d.ts.map +1 -1
- package/dist/host-binaries.js +18 -10
- package/dist/host-binaries.js.map +1 -1
- package/dist/image-codec.d.ts +2 -0
- package/dist/image-codec.d.ts.map +1 -1
- package/dist/image-codec.js +23 -3
- package/dist/image-codec.js.map +1 -1
- package/dist/image-model-tasks.d.ts +35 -0
- package/dist/image-model-tasks.d.ts.map +1 -0
- package/dist/image-model-tasks.js +67 -0
- package/dist/image-model-tasks.js.map +1 -0
- package/dist/index.d.ts +14 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/media-ref-bytes.d.ts +18 -2
- package/dist/media-ref-bytes.d.ts.map +1 -1
- package/dist/media-ref-bytes.js +26 -16
- package/dist/media-ref-bytes.js.map +1 -1
- package/dist/node-executor.d.ts +6 -0
- package/dist/node-executor.d.ts.map +1 -1
- package/dist/prompt-asset-refs.d.ts +12 -1
- package/dist/prompt-asset-refs.d.ts.map +1 -1
- package/dist/prompt-asset-refs.js +9 -4
- package/dist/prompt-asset-refs.js.map +1 -1
- package/dist/providers/aki-provider.d.ts +2 -0
- package/dist/providers/aki-provider.d.ts.map +1 -1
- package/dist/providers/aki-provider.js +6 -0
- package/dist/providers/aki-provider.js.map +1 -1
- package/dist/providers/api-route-provider.d.ts +22 -0
- package/dist/providers/api-route-provider.d.ts.map +1 -0
- package/dist/providers/api-route-provider.js +56 -0
- package/dist/providers/api-route-provider.js.map +1 -0
- package/dist/providers/atlascloud-provider.d.ts +2 -0
- package/dist/providers/atlascloud-provider.d.ts.map +1 -1
- package/dist/providers/atlascloud-provider.js +22 -0
- package/dist/providers/atlascloud-provider.js.map +1 -1
- package/dist/providers/base-provider.d.ts +36 -24
- package/dist/providers/base-provider.d.ts.map +1 -1
- package/dist/providers/base-provider.js +145 -150
- package/dist/providers/base-provider.js.map +1 -1
- package/dist/providers/chatgpt-provider.d.ts +48 -0
- package/dist/providers/chatgpt-provider.d.ts.map +1 -0
- package/dist/providers/chatgpt-provider.js +506 -0
- package/dist/providers/chatgpt-provider.js.map +1 -0
- package/dist/providers/claude-agent-provider.d.ts +6 -36
- package/dist/providers/claude-agent-provider.d.ts.map +1 -1
- package/dist/providers/claude-agent-provider.js +208 -26
- package/dist/providers/claude-agent-provider.js.map +1 -1
- package/dist/providers/codex-provider.d.ts +2 -0
- package/dist/providers/codex-provider.d.ts.map +1 -1
- package/dist/providers/codex-provider.js +15 -2
- package/dist/providers/codex-provider.js.map +1 -1
- package/dist/providers/cohere-provider.d.ts +2 -1
- package/dist/providers/cohere-provider.d.ts.map +1 -1
- package/dist/providers/cohere-provider.js +5 -0
- package/dist/providers/cohere-provider.js.map +1 -1
- package/dist/providers/context-window.d.ts.map +1 -1
- package/dist/providers/context-window.js +1 -0
- package/dist/providers/context-window.js.map +1 -1
- package/dist/providers/core-tools.d.ts +2 -1
- package/dist/providers/core-tools.d.ts.map +1 -1
- package/dist/providers/core-tools.js +2 -1
- package/dist/providers/core-tools.js.map +1 -1
- package/dist/providers/cost-calculator.d.ts.map +1 -1
- package/dist/providers/cost-calculator.js +9 -0
- package/dist/providers/cost-calculator.js.map +1 -1
- package/dist/providers/credential-check.d.ts +8 -0
- package/dist/providers/credential-check.d.ts.map +1 -1
- package/dist/providers/credential-check.js +27 -0
- package/dist/providers/credential-check.js.map +1 -1
- package/dist/providers/custom-openai-provider.d.ts +2 -0
- package/dist/providers/custom-openai-provider.d.ts.map +1 -1
- package/dist/providers/custom-openai-provider.js +27 -1
- package/dist/providers/custom-openai-provider.js.map +1 -1
- package/dist/providers/dreamina-models.d.ts +5 -0
- package/dist/providers/dreamina-models.d.ts.map +1 -0
- package/dist/providers/dreamina-models.js +57 -0
- package/dist/providers/dreamina-models.js.map +1 -0
- package/dist/providers/dreamina-music.d.ts +52 -0
- package/dist/providers/dreamina-music.d.ts.map +1 -0
- package/dist/providers/dreamina-music.js +115 -0
- package/dist/providers/dreamina-music.js.map +1 -0
- package/dist/providers/dreamina-provider.d.ts +64 -0
- package/dist/providers/dreamina-provider.d.ts.map +1 -0
- package/dist/providers/dreamina-provider.js +1001 -0
- package/dist/providers/dreamina-provider.js.map +1 -0
- package/dist/providers/elevenlabs-provider.d.ts +2 -1
- package/dist/providers/elevenlabs-provider.d.ts.map +1 -1
- package/dist/providers/elevenlabs-provider.js +5 -0
- package/dist/providers/elevenlabs-provider.js.map +1 -1
- package/dist/providers/evolink-provider.d.ts +2 -0
- package/dist/providers/evolink-provider.d.ts.map +1 -1
- package/dist/providers/evolink-provider.js +8 -0
- package/dist/providers/evolink-provider.js.map +1 -1
- package/dist/providers/extension-tab.d.ts +29 -0
- package/dist/providers/extension-tab.d.ts.map +1 -0
- package/dist/providers/extension-tab.js +144 -0
- package/dist/providers/extension-tab.js.map +1 -0
- package/dist/providers/fake-provider.d.ts +5 -2
- package/dist/providers/fake-provider.d.ts.map +1 -1
- package/dist/providers/fake-provider.js +73 -9
- package/dist/providers/fake-provider.js.map +1 -1
- package/dist/providers/fake-schema-answer.d.ts +10 -0
- package/dist/providers/fake-schema-answer.d.ts.map +1 -0
- package/dist/providers/fake-schema-answer.js +64 -0
- package/dist/providers/fake-schema-answer.js.map +1 -0
- package/dist/providers/fal-provider.d.ts +2 -1
- package/dist/providers/fal-provider.d.ts.map +1 -1
- package/dist/providers/fal-provider.js +32 -2
- package/dist/providers/fal-provider.js.map +1 -1
- package/dist/providers/gemini-provider.d.ts +2 -1
- package/dist/providers/gemini-provider.d.ts.map +1 -1
- package/dist/providers/gemini-provider.js +15 -0
- package/dist/providers/gemini-provider.js.map +1 -1
- package/dist/providers/gemini-web-provider.d.ts +76 -0
- package/dist/providers/gemini-web-provider.d.ts.map +1 -0
- package/dist/providers/gemini-web-provider.js +752 -0
- package/dist/providers/gemini-web-provider.js.map +1 -0
- package/dist/providers/higgsfield-provider.d.ts +2 -1
- package/dist/providers/higgsfield-provider.d.ts.map +1 -1
- package/dist/providers/higgsfield-provider.js +12 -0
- package/dist/providers/higgsfield-provider.js.map +1 -1
- package/dist/providers/huggingface-provider.d.ts +2 -1
- package/dist/providers/huggingface-provider.d.ts.map +1 -1
- package/dist/providers/huggingface-provider.js +27 -1
- package/dist/providers/huggingface-provider.js.map +1 -1
- package/dist/providers/index.d.ts +14 -3
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +48 -9
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/jina-provider.d.ts +2 -1
- package/dist/providers/jina-provider.d.ts.map +1 -1
- package/dist/providers/jina-provider.js +5 -0
- package/dist/providers/jina-provider.js.map +1 -1
- package/dist/providers/kie-provider.d.ts +2 -1
- package/dist/providers/kie-provider.d.ts.map +1 -1
- package/dist/providers/kie-provider.js +14 -0
- package/dist/providers/kie-provider.js.map +1 -1
- package/dist/providers/llama-provider.d.ts +12 -1
- package/dist/providers/llama-provider.d.ts.map +1 -1
- package/dist/providers/llama-provider.js +29 -5
- package/dist/providers/llama-provider.js.map +1 -1
- package/dist/providers/lmstudio-provider.js +2 -2
- package/dist/providers/lmstudio-provider.js.map +1 -1
- package/dist/providers/loop-tracing.d.ts +17 -0
- package/dist/providers/loop-tracing.d.ts.map +1 -0
- package/dist/providers/loop-tracing.js +132 -0
- package/dist/providers/loop-tracing.js.map +1 -0
- package/dist/providers/manifest-models.d.ts +2 -12
- package/dist/providers/manifest-models.d.ts.map +1 -1
- package/dist/providers/manifest-models.js +45 -3
- package/dist/providers/manifest-models.js.map +1 -1
- package/dist/providers/meshy-provider.d.ts +2 -1
- package/dist/providers/meshy-provider.d.ts.map +1 -1
- package/dist/providers/meshy-provider.js +6 -0
- package/dist/providers/meshy-provider.js.map +1 -1
- package/dist/providers/meta-provider.d.ts +53 -6
- package/dist/providers/meta-provider.d.ts.map +1 -1
- package/dist/providers/meta-provider.js +289 -6
- package/dist/providers/meta-provider.js.map +1 -1
- package/dist/providers/meta-segmentation.d.ts +27 -0
- package/dist/providers/meta-segmentation.d.ts.map +1 -0
- package/dist/providers/meta-segmentation.js +141 -0
- package/dist/providers/meta-segmentation.js.map +1 -0
- package/dist/providers/meta-transcription.d.ts +31 -0
- package/dist/providers/meta-transcription.d.ts.map +1 -0
- package/dist/providers/meta-transcription.js +187 -0
- package/dist/providers/meta-transcription.js.map +1 -0
- package/dist/providers/minimax-provider.d.ts +2 -0
- package/dist/providers/minimax-provider.d.ts.map +1 -1
- package/dist/providers/minimax-provider.js +11 -0
- package/dist/providers/minimax-provider.js.map +1 -1
- package/dist/providers/mistral-provider.d.ts +2 -0
- package/dist/providers/mistral-provider.d.ts.map +1 -1
- package/dist/providers/mistral-provider.js +5 -0
- package/dist/providers/mistral-provider.js.map +1 -1
- package/dist/providers/node-llama-cpp-provider.d.ts +8 -4
- package/dist/providers/node-llama-cpp-provider.d.ts.map +1 -1
- package/dist/providers/node-llama-cpp-provider.js +83 -61
- package/dist/providers/node-llama-cpp-provider.js.map +1 -1
- package/dist/providers/nodetool-provider.d.ts +1 -1
- package/dist/providers/nodetool-provider.d.ts.map +1 -1
- package/dist/providers/nodetool-provider.js +0 -2
- package/dist/providers/nodetool-provider.js.map +1 -1
- package/dist/providers/ollama-provider.d.ts +25 -1
- package/dist/providers/ollama-provider.d.ts.map +1 -1
- package/dist/providers/ollama-provider.js +145 -27
- package/dist/providers/ollama-provider.js.map +1 -1
- package/dist/providers/openai-compat/client.d.ts +10 -1
- package/dist/providers/openai-compat/client.d.ts.map +1 -1
- package/dist/providers/openai-compat/client.js +21 -3
- package/dist/providers/openai-compat/client.js.map +1 -1
- package/dist/providers/openai-compat/index.d.ts +1 -1
- package/dist/providers/openai-compat/index.d.ts.map +1 -1
- package/dist/providers/openai-compat/index.js +1 -1
- package/dist/providers/openai-compat/index.js.map +1 -1
- package/dist/providers/openai-compat/types.d.ts +4 -0
- package/dist/providers/openai-compat/types.d.ts.map +1 -1
- package/dist/providers/openai-compat-provider.d.ts +11 -0
- package/dist/providers/openai-compat-provider.d.ts.map +1 -1
- package/dist/providers/openai-compat-provider.js +47 -2
- package/dist/providers/openai-compat-provider.js.map +1 -1
- package/dist/providers/openai-provider.d.ts +23 -2
- package/dist/providers/openai-provider.d.ts.map +1 -1
- package/dist/providers/openai-provider.js +102 -21
- package/dist/providers/openai-provider.js.map +1 -1
- package/dist/providers/openrouter-provider.d.ts +52 -1
- package/dist/providers/openrouter-provider.d.ts.map +1 -1
- package/dist/providers/openrouter-provider.js +372 -11
- package/dist/providers/openrouter-provider.js.map +1 -1
- package/dist/providers/opper-provider.d.ts +31 -0
- package/dist/providers/opper-provider.d.ts.map +1 -0
- package/dist/providers/opper-provider.js +91 -0
- package/dist/providers/opper-provider.js.map +1 -0
- package/dist/providers/provider-error.d.ts.map +1 -1
- package/dist/providers/provider-error.js +7 -1
- package/dist/providers/provider-error.js.map +1 -1
- package/dist/providers/provider-generations.d.ts +2 -2
- package/dist/providers/provider-generations.js +2 -2
- package/dist/providers/provider-request-log.d.ts.map +1 -1
- package/dist/providers/provider-request-log.js +19 -7
- package/dist/providers/provider-request-log.js.map +1 -1
- package/dist/providers/python-provider.d.ts +6 -1
- package/dist/providers/python-provider.d.ts.map +1 -1
- package/dist/providers/python-provider.js +35 -14
- package/dist/providers/python-provider.js.map +1 -1
- package/dist/providers/replicate-provider.d.ts +2 -1
- package/dist/providers/replicate-provider.d.ts.map +1 -1
- package/dist/providers/replicate-provider.js +22 -0
- package/dist/providers/replicate-provider.js.map +1 -1
- package/dist/providers/requesty-provider.d.ts +30 -0
- package/dist/providers/requesty-provider.d.ts.map +1 -0
- package/dist/providers/requesty-provider.js +87 -0
- package/dist/providers/requesty-provider.js.map +1 -0
- package/dist/providers/responses-api.d.ts +12 -2
- package/dist/providers/responses-api.d.ts.map +1 -1
- package/dist/providers/responses-api.js +54 -3
- package/dist/providers/responses-api.js.map +1 -1
- package/dist/providers/reve-provider.d.ts +2 -1
- package/dist/providers/reve-provider.d.ts.map +1 -1
- package/dist/providers/reve-provider.js +6 -0
- package/dist/providers/reve-provider.js.map +1 -1
- package/dist/providers/rodin-provider.d.ts +2 -1
- package/dist/providers/rodin-provider.d.ts.map +1 -1
- package/dist/providers/rodin-provider.js +6 -0
- package/dist/providers/rodin-provider.js.map +1 -1
- package/dist/providers/scripted-provider.d.ts.map +1 -1
- package/dist/providers/scripted-provider.js +6 -1
- package/dist/providers/scripted-provider.js.map +1 -1
- package/dist/providers/together-operations.d.ts +27 -0
- package/dist/providers/together-operations.d.ts.map +1 -0
- package/dist/providers/together-operations.js +95 -0
- package/dist/providers/together-operations.js.map +1 -0
- package/dist/providers/together-provider.d.ts +5 -8
- package/dist/providers/together-provider.d.ts.map +1 -1
- package/dist/providers/together-provider.js +54 -159
- package/dist/providers/together-provider.js.map +1 -1
- package/dist/providers/topaz-provider.d.ts +2 -1
- package/dist/providers/topaz-provider.d.ts.map +1 -1
- package/dist/providers/topaz-provider.js +5 -0
- package/dist/providers/topaz-provider.js.map +1 -1
- package/dist/providers/types.d.ts +54 -0
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js.map +1 -1
- package/dist/providers/useapi-provider.d.ts +2 -1
- package/dist/providers/useapi-provider.d.ts.map +1 -1
- package/dist/providers/useapi-provider.js +8 -0
- package/dist/providers/useapi-provider.js.map +1 -1
- package/dist/providers/vllm-provider.d.ts +9 -4
- package/dist/providers/vllm-provider.d.ts.map +1 -1
- package/dist/providers/vllm-provider.js +16 -8
- package/dist/providers/vllm-provider.js.map +1 -1
- package/dist/providers/voyage-provider.d.ts +2 -1
- package/dist/providers/voyage-provider.d.ts.map +1 -1
- package/dist/providers/voyage-provider.js +5 -0
- package/dist/providers/voyage-provider.js.map +1 -1
- package/dist/providers/xai-provider.d.ts +2 -0
- package/dist/providers/xai-provider.d.ts.map +1 -1
- package/dist/providers/xai-provider.js +8 -0
- package/dist/providers/xai-provider.js.map +1 -1
- package/dist/python-bridge-base.d.ts +16 -6
- package/dist/python-bridge-base.d.ts.map +1 -1
- package/dist/python-bridge-base.js +117 -40
- package/dist/python-bridge-base.js.map +1 -1
- package/dist/python-bridge-codec.d.ts +16 -1
- package/dist/python-bridge-codec.d.ts.map +1 -1
- package/dist/python-bridge-codec.js +60 -2
- package/dist/python-bridge-codec.js.map +1 -1
- package/dist/python-bridge-framing.d.ts +10 -1
- package/dist/python-bridge-framing.d.ts.map +1 -1
- package/dist/python-bridge-framing.js +33 -8
- package/dist/python-bridge-framing.js.map +1 -1
- package/dist/python-bridge-types.d.ts +26 -5
- package/dist/python-bridge-types.d.ts.map +1 -1
- package/dist/python-bridge-types.js.map +1 -1
- package/dist/python-node-executor.d.ts +14 -3
- package/dist/python-node-executor.d.ts.map +1 -1
- package/dist/python-node-executor.js +185 -3
- package/dist/python-node-executor.js.map +1 -1
- package/dist/python-stdio-bridge.d.ts +6 -0
- package/dist/python-stdio-bridge.d.ts.map +1 -1
- package/dist/python-stdio-bridge.js +25 -2
- package/dist/python-stdio-bridge.js.map +1 -1
- package/dist/recommended-models.d.ts.map +1 -1
- package/dist/recommended-models.js +20 -0
- package/dist/recommended-models.js.map +1 -1
- package/dist/run-context.d.ts +20 -0
- package/dist/run-context.d.ts.map +1 -0
- package/dist/run-context.js +18 -0
- package/dist/run-context.js.map +1 -0
- package/dist/run-trace-context.d.ts +5 -0
- package/dist/run-trace-context.d.ts.map +1 -0
- package/dist/run-trace-context.js +33 -0
- package/dist/run-trace-context.js.map +1 -0
- package/dist/run-trace-processor.d.ts +65 -0
- package/dist/run-trace-processor.d.ts.map +1 -0
- package/dist/run-trace-processor.js +418 -0
- package/dist/run-trace-processor.js.map +1 -0
- package/dist/run-trace-scope.d.ts +28 -0
- package/dist/run-trace-scope.d.ts.map +1 -0
- package/dist/run-trace-scope.js +51 -0
- package/dist/run-trace-scope.js.map +1 -0
- package/dist/run-trace-serialization.d.ts +5 -0
- package/dist/run-trace-serialization.d.ts.map +1 -0
- package/dist/run-trace-serialization.js +114 -0
- package/dist/run-trace-serialization.js.map +1 -0
- package/dist/span-record.d.ts +4 -0
- package/dist/span-record.d.ts.map +1 -0
- package/dist/span-record.js +48 -0
- package/dist/span-record.js.map +1 -0
- package/dist/storage-workspace.d.ts +3 -0
- package/dist/storage-workspace.d.ts.map +1 -1
- package/dist/storage-workspace.js +32 -17
- package/dist/storage-workspace.js.map +1 -1
- package/dist/swappable-python-bridge.d.ts +6 -6
- package/dist/swappable-python-bridge.d.ts.map +1 -1
- package/dist/swappable-python-bridge.js +10 -10
- package/dist/swappable-python-bridge.js.map +1 -1
- package/dist/telemetry.d.ts +9 -3
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +53 -20
- package/dist/telemetry.js.map +1 -1
- package/dist/testing.d.ts +1 -1
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +55 -3
- package/dist/testing.js.map +1 -1
- package/dist/trace-exporters.d.ts +2 -30
- package/dist/trace-exporters.d.ts.map +1 -1
- package/dist/trace-exporters.js +4 -42
- package/dist/trace-exporters.js.map +1 -1
- package/dist/traced-storage.d.ts +17 -0
- package/dist/traced-storage.d.ts.map +1 -0
- package/dist/traced-storage.js +41 -0
- package/dist/traced-storage.js.map +1 -0
- package/dist/tracing-helpers.d.ts +15 -22
- package/dist/tracing-helpers.d.ts.map +1 -1
- package/dist/tracing-helpers.js +38 -6
- package/dist/tracing-helpers.js.map +1 -1
- package/dist/trim-video-window.d.ts +8 -0
- package/dist/trim-video-window.d.ts.map +1 -0
- package/dist/trim-video-window.js +50 -0
- package/dist/trim-video-window.js.map +1 -0
- package/package.json +21 -5
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
import { createLogger } from "@nodetool-ai/config";
|
|
2
2
|
import { OpenAICompatProvider } from "./openai-compat-provider.js";
|
|
3
|
+
import { fetchWithRetry, pollUntilTerminal } from "./http-transport.js";
|
|
4
|
+
import { bytesToImageDataUri } from "./image-mime.js";
|
|
5
|
+
import { sniffAudioMimeOrNull } from "./audio-mime.js";
|
|
3
6
|
import { isString } from "@nodetool-ai/protocol";
|
|
4
7
|
// Stryker disable next-line StringLiteral: logger name is diagnostic, not asserted.
|
|
5
8
|
const log = createLogger("nodetool.runtime.providers.openrouter");
|
|
9
|
+
const OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1";
|
|
10
|
+
/** Attribution headers sent with every OpenRouter request. */
|
|
11
|
+
const OPENROUTER_HEADERS = {
|
|
12
|
+
// Stryker disable next-line StringLiteral
|
|
13
|
+
"HTTP-Referer": "https://github.com/nodetool-ai/nodetool-core",
|
|
14
|
+
// Stryker disable next-line StringLiteral
|
|
15
|
+
"X-Title": "NodeTool"
|
|
16
|
+
};
|
|
6
17
|
/** Known image-capable models on OpenRouter. */
|
|
7
18
|
const OPENROUTER_IMAGE_MODELS = [
|
|
8
19
|
{
|
|
@@ -10,9 +21,86 @@ const OPENROUTER_IMAGE_MODELS = [
|
|
|
10
21
|
name: "Stable Diffusion XL",
|
|
11
22
|
provider: "openrouter",
|
|
12
23
|
supportedTasks: ["text_to_image"]
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
id: "google/gemini-2.5-flash-image",
|
|
27
|
+
name: "Gemini 2.5 Flash Image",
|
|
28
|
+
provider: "openrouter",
|
|
29
|
+
supportedTasks: ["text_to_image", "image_to_image"]
|
|
13
30
|
}
|
|
14
31
|
];
|
|
32
|
+
const VIDEO_POLL_INTERVAL_MS = 5000;
|
|
33
|
+
/** Default polling window when the caller sets no timeout. */
|
|
34
|
+
const VIDEO_DEFAULT_TIMEOUT_SECONDS = 20 * 60;
|
|
35
|
+
function stringList(value) {
|
|
36
|
+
return Array.isArray(value)
|
|
37
|
+
? value.filter((v) => typeof v === "string")
|
|
38
|
+
: [];
|
|
39
|
+
}
|
|
40
|
+
function numberList(value) {
|
|
41
|
+
return Array.isArray(value)
|
|
42
|
+
? value.filter((v) => typeof v === "number")
|
|
43
|
+
: [];
|
|
44
|
+
}
|
|
45
|
+
/** `input_audio.format` values OpenRouter accepts, by sniffed MIME type. */
|
|
46
|
+
const AUDIO_FORMAT_BY_MIME = {
|
|
47
|
+
"audio/wav": "wav",
|
|
48
|
+
"audio/mpeg": "mp3",
|
|
49
|
+
"audio/ogg": "ogg",
|
|
50
|
+
"audio/flac": "flac"
|
|
51
|
+
};
|
|
52
|
+
function architectureOf(row) {
|
|
53
|
+
const architecture = row.architecture;
|
|
54
|
+
return architecture && typeof architecture === "object"
|
|
55
|
+
? architecture
|
|
56
|
+
: {};
|
|
57
|
+
}
|
|
58
|
+
/** The enum values of one `supported_parameters` entry, or `[]`. */
|
|
59
|
+
function parameterValues(row, name) {
|
|
60
|
+
const parameters = row.supported_parameters;
|
|
61
|
+
if (!parameters || typeof parameters !== "object")
|
|
62
|
+
return [];
|
|
63
|
+
const entry = parameters[name];
|
|
64
|
+
if (!entry || typeof entry !== "object")
|
|
65
|
+
return [];
|
|
66
|
+
return stringList(entry.values);
|
|
67
|
+
}
|
|
68
|
+
function withNegativePrompt(prompt, negativePrompt) {
|
|
69
|
+
return negativePrompt
|
|
70
|
+
? `${prompt.trim()}\n\nDo not include: ${negativePrompt.trim()}`
|
|
71
|
+
: prompt;
|
|
72
|
+
}
|
|
73
|
+
/** The message OpenRouter puts in `error` (a string or `{ message }`). */
|
|
74
|
+
function errorText(body) {
|
|
75
|
+
const error = body.error;
|
|
76
|
+
if (typeof error === "string")
|
|
77
|
+
return error;
|
|
78
|
+
if (error && typeof error === "object") {
|
|
79
|
+
const message = error.message;
|
|
80
|
+
if (typeof message === "string")
|
|
81
|
+
return message;
|
|
82
|
+
}
|
|
83
|
+
return JSON.stringify(body).slice(0, 500);
|
|
84
|
+
}
|
|
85
|
+
function reportedCost(body) {
|
|
86
|
+
const usage = body.usage;
|
|
87
|
+
if (!usage || typeof usage !== "object")
|
|
88
|
+
return undefined;
|
|
89
|
+
const cost = usage.cost;
|
|
90
|
+
return typeof cost === "number" ? cost : undefined;
|
|
91
|
+
}
|
|
15
92
|
export class OpenRouterProvider extends OpenAICompatProvider {
|
|
93
|
+
declaredCapabilities() {
|
|
94
|
+
return [
|
|
95
|
+
"text_to_image",
|
|
96
|
+
"image_to_image",
|
|
97
|
+
"text_to_video",
|
|
98
|
+
"image_to_video",
|
|
99
|
+
"text_to_speech",
|
|
100
|
+
"automatic_speech_recognition",
|
|
101
|
+
"generate_embedding"
|
|
102
|
+
];
|
|
103
|
+
}
|
|
16
104
|
static requiredSecrets() {
|
|
17
105
|
return ["OPENROUTER_API_KEY"];
|
|
18
106
|
}
|
|
@@ -24,16 +112,10 @@ export class OpenRouterProvider extends OpenAICompatProvider {
|
|
|
24
112
|
super({
|
|
25
113
|
providerId: "openrouter",
|
|
26
114
|
apiKey,
|
|
27
|
-
baseURL:
|
|
115
|
+
baseURL: OPENROUTER_BASE_URL,
|
|
28
116
|
// Attribution headers ride every chat request (and the SDK fallback);
|
|
29
117
|
// the same header values are asserted on the /models fetch below.
|
|
30
|
-
|
|
31
|
-
defaultHeaders: {
|
|
32
|
-
// Stryker disable next-line StringLiteral
|
|
33
|
-
"HTTP-Referer": "https://github.com/nodetool-ai/nodetool-core",
|
|
34
|
-
// Stryker disable next-line StringLiteral
|
|
35
|
-
"X-Title": "NodeTool"
|
|
36
|
-
}
|
|
118
|
+
defaultHeaders: OPENROUTER_HEADERS
|
|
37
119
|
}, options);
|
|
38
120
|
}
|
|
39
121
|
getContainerEnv() {
|
|
@@ -72,6 +154,19 @@ export class OpenRouterProvider extends OpenAICompatProvider {
|
|
|
72
154
|
yield* super.generateMessages({ ...args, messages: convertedMessages });
|
|
73
155
|
}
|
|
74
156
|
async textToImage(params) {
|
|
157
|
+
const size = this.resolveImageSize(params.width ?? undefined, params.height ?? undefined);
|
|
158
|
+
return this.generateImage(params, [], size);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Edit or compose from source images. OpenRouter's image API takes them as
|
|
162
|
+
* `input_references`; entity reference images arrive here already appended
|
|
163
|
+
* to `images` by the base provider.
|
|
164
|
+
*/
|
|
165
|
+
async imageToImage(images, params) {
|
|
166
|
+
const size = this.resolveImageSize(params.targetWidth ?? undefined, params.targetHeight ?? undefined);
|
|
167
|
+
return this.generateImage(params, images, size);
|
|
168
|
+
}
|
|
169
|
+
async generateImage(params, inputs, size) {
|
|
75
170
|
if (!params.prompt) {
|
|
76
171
|
throw new Error("The input prompt cannot be empty.");
|
|
77
172
|
}
|
|
@@ -82,13 +177,26 @@ export class OpenRouterProvider extends OpenAICompatProvider {
|
|
|
82
177
|
model: params.model.id,
|
|
83
178
|
prompt
|
|
84
179
|
};
|
|
85
|
-
const size = this.resolveImageSize(params.width ?? undefined, params.height ?? undefined);
|
|
86
180
|
if (size)
|
|
87
181
|
request.size = size;
|
|
88
182
|
if (params.quality)
|
|
89
183
|
request.quality = params.quality;
|
|
184
|
+
// Gemini image models ignore `size`; OpenRouter reads the shape from here.
|
|
185
|
+
if (params.aspectRatio)
|
|
186
|
+
request.aspect_ratio = params.aspectRatio;
|
|
187
|
+
if (params.resolution)
|
|
188
|
+
request.resolution = params.resolution;
|
|
189
|
+
if (inputs.length > 0) {
|
|
190
|
+
request.input_references = inputs.map((bytes) => ({
|
|
191
|
+
type: "image_url",
|
|
192
|
+
image_url: { url: bytesToImageDataUri(bytes) }
|
|
193
|
+
}));
|
|
194
|
+
}
|
|
90
195
|
// Stryker disable next-line StringLiteral,ObjectLiteral: diagnostic log, not asserted.
|
|
91
|
-
log.debug("OpenRouter
|
|
196
|
+
log.debug("OpenRouter image generation", {
|
|
197
|
+
model: params.model.id,
|
|
198
|
+
inputs: inputs.length
|
|
199
|
+
});
|
|
92
200
|
// SAFETY: a dictionary request against the OpenAI SDK's closed image
|
|
93
201
|
// params; OpenRouter is driven through the same client.
|
|
94
202
|
const response = (await this.getClient().images.generate(request));
|
|
@@ -108,11 +216,264 @@ export class OpenRouterProvider extends OpenAICompatProvider {
|
|
|
108
216
|
}
|
|
109
217
|
throw new Error("OpenRouter image generation returned no image data.");
|
|
110
218
|
}
|
|
219
|
+
/**
|
|
220
|
+
* Video models are listed under `/videos/models`, not `/models`. A model
|
|
221
|
+
* without durations (an editor) or with an upscale factor (an upscaler)
|
|
222
|
+
* cannot render from a prompt, so it is left out.
|
|
223
|
+
*/
|
|
224
|
+
async getAvailableVideoModels() {
|
|
225
|
+
const rows = await this.fetchCompatModelRows(`${OPENROUTER_BASE_URL}/videos/models`);
|
|
226
|
+
const models = [];
|
|
227
|
+
for (const row of rows) {
|
|
228
|
+
const durations = numberList(row.supported_durations);
|
|
229
|
+
if (durations.length === 0 || row.upscale_factor != null)
|
|
230
|
+
continue;
|
|
231
|
+
const supportedTasks = ["text_to_video"];
|
|
232
|
+
if (stringList(row.supported_frame_images).includes("first_frame")) {
|
|
233
|
+
supportedTasks.push("image_to_video");
|
|
234
|
+
}
|
|
235
|
+
const model = {
|
|
236
|
+
id: row.id,
|
|
237
|
+
name: typeof row.name === "string" ? row.name : row.id,
|
|
238
|
+
provider: "openrouter",
|
|
239
|
+
supportedTasks,
|
|
240
|
+
durations
|
|
241
|
+
};
|
|
242
|
+
const resolutions = stringList(row.supported_resolutions);
|
|
243
|
+
if (resolutions.length > 0)
|
|
244
|
+
model.resolutions = resolutions;
|
|
245
|
+
const aspectRatios = stringList(row.supported_aspect_ratios);
|
|
246
|
+
if (aspectRatios.length > 0)
|
|
247
|
+
model.aspectRatios = aspectRatios;
|
|
248
|
+
models.push(model);
|
|
249
|
+
}
|
|
250
|
+
return models;
|
|
251
|
+
}
|
|
252
|
+
async textToVideo(params) {
|
|
253
|
+
if (!params.prompt) {
|
|
254
|
+
throw new Error("The input prompt cannot be empty.");
|
|
255
|
+
}
|
|
256
|
+
return this.generateVideo(params, {});
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Animate a start frame. OpenRouter takes it as a data URI in
|
|
260
|
+
* `frame_images`, plus an optional `last_frame` for interpolation.
|
|
261
|
+
*/
|
|
262
|
+
async imageToVideo(image, params) {
|
|
263
|
+
if (image.length === 0) {
|
|
264
|
+
throw new Error("imageToVideo requires a start frame");
|
|
265
|
+
}
|
|
266
|
+
const frames = [
|
|
267
|
+
{
|
|
268
|
+
type: "image_url",
|
|
269
|
+
image_url: { url: bytesToImageDataUri(image) },
|
|
270
|
+
frame_type: "first_frame"
|
|
271
|
+
}
|
|
272
|
+
];
|
|
273
|
+
if (params.endImage && params.endImage.length > 0) {
|
|
274
|
+
frames.push({
|
|
275
|
+
type: "image_url",
|
|
276
|
+
image_url: { url: bytesToImageDataUri(params.endImage) },
|
|
277
|
+
frame_type: "last_frame"
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
return this.generateVideo(params, { frame_images: frames });
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Image models come from `/images/models`, with per-model aspect ratio and
|
|
284
|
+
* resolution enums. The built-in list is the fallback when the listing is
|
|
285
|
+
* unreachable, so the picker is never empty.
|
|
286
|
+
*/
|
|
111
287
|
async getAvailableImageModels() {
|
|
112
|
-
|
|
288
|
+
const rows = await this.fetchCompatModelRows(`${OPENROUTER_BASE_URL}/images/models`);
|
|
289
|
+
if (rows.length === 0)
|
|
290
|
+
return OPENROUTER_IMAGE_MODELS;
|
|
291
|
+
return rows.map((row) => {
|
|
292
|
+
const supportedTasks = ["text_to_image"];
|
|
293
|
+
if (stringList(architectureOf(row).input_modalities).includes("image")) {
|
|
294
|
+
supportedTasks.push("image_to_image");
|
|
295
|
+
}
|
|
296
|
+
const model = {
|
|
297
|
+
id: row.id,
|
|
298
|
+
name: typeof row.name === "string" ? row.name : row.id,
|
|
299
|
+
provider: "openrouter",
|
|
300
|
+
supportedTasks
|
|
301
|
+
};
|
|
302
|
+
const aspectRatios = parameterValues(row, "aspect_ratio");
|
|
303
|
+
if (aspectRatios.length > 0)
|
|
304
|
+
model.aspectRatios = aspectRatios;
|
|
305
|
+
const resolutions = parameterValues(row, "resolution");
|
|
306
|
+
if (resolutions.length > 0)
|
|
307
|
+
model.resolutions = resolutions;
|
|
308
|
+
return model;
|
|
309
|
+
});
|
|
113
310
|
}
|
|
114
311
|
async getAvailableLanguageModels() {
|
|
115
312
|
return this.listCompatModels();
|
|
116
313
|
}
|
|
314
|
+
/** Speech models are `/models` rows whose output modality is `speech`. */
|
|
315
|
+
async getAvailableTTSModels() {
|
|
316
|
+
const rows = await this.fetchCompatModelRows(`${OPENROUTER_BASE_URL}/models?output_modalities=speech`);
|
|
317
|
+
return rows.map((row) => {
|
|
318
|
+
const model = {
|
|
319
|
+
id: row.id,
|
|
320
|
+
name: typeof row.name === "string" ? row.name : row.id,
|
|
321
|
+
provider: "openrouter"
|
|
322
|
+
};
|
|
323
|
+
const voices = stringList(row.supported_voices);
|
|
324
|
+
if (voices.length > 0)
|
|
325
|
+
model.voices = voices;
|
|
326
|
+
return model;
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
/** Transcription models are `/models` rows with output modality `transcription`. */
|
|
330
|
+
async getAvailableASRModels() {
|
|
331
|
+
const rows = await this.fetchCompatModelRows(`${OPENROUTER_BASE_URL}/models?output_modalities=transcription`);
|
|
332
|
+
return rows.map((row) => ({
|
|
333
|
+
id: row.id,
|
|
334
|
+
name: typeof row.name === "string" ? row.name : row.id,
|
|
335
|
+
provider: "openrouter"
|
|
336
|
+
}));
|
|
337
|
+
}
|
|
338
|
+
async getAvailableEmbeddingModels() {
|
|
339
|
+
const rows = await this.fetchCompatModelRows(`${OPENROUTER_BASE_URL}/embeddings/models`);
|
|
340
|
+
return rows.map((row) => ({
|
|
341
|
+
id: row.id,
|
|
342
|
+
name: typeof row.name === "string" ? row.name : row.id,
|
|
343
|
+
provider: "openrouter"
|
|
344
|
+
}));
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* OpenRouter transcribes from a JSON body with base64 `input_audio`, not the
|
|
348
|
+
* multipart upload the inherited OpenAI path sends. `prompt` has no
|
|
349
|
+
* OpenRouter field and is ignored.
|
|
350
|
+
*/
|
|
351
|
+
async automaticSpeechRecognition(args) {
|
|
352
|
+
if (!args.audio || args.audio.length === 0) {
|
|
353
|
+
throw new Error("audio must not be empty");
|
|
354
|
+
}
|
|
355
|
+
const mime = sniffAudioMimeOrNull(args.audio);
|
|
356
|
+
const request = {
|
|
357
|
+
model: args.model,
|
|
358
|
+
input_audio: {
|
|
359
|
+
data: Buffer.from(args.audio).toString("base64"),
|
|
360
|
+
format: (mime && AUDIO_FORMAT_BY_MIME[mime]) ?? "mp3"
|
|
361
|
+
}
|
|
362
|
+
};
|
|
363
|
+
if (args.language)
|
|
364
|
+
request.language = args.language;
|
|
365
|
+
if (args.temperature != null)
|
|
366
|
+
request.temperature = args.temperature;
|
|
367
|
+
if (args.word_timestamps) {
|
|
368
|
+
request.response_format = "verbose_json";
|
|
369
|
+
request.timestamp_granularities = ["word"];
|
|
370
|
+
}
|
|
371
|
+
const res = await this.compatFetch(`${OPENROUTER_BASE_URL}/audio/transcriptions`, {
|
|
372
|
+
method: "POST",
|
|
373
|
+
headers: this.openRouterHeaders(),
|
|
374
|
+
body: JSON.stringify(request)
|
|
375
|
+
});
|
|
376
|
+
if (!res.ok) {
|
|
377
|
+
throw new Error(`OpenRouter transcription failed: ${res.status} ${(await res.text()).slice(0, 500)}`);
|
|
378
|
+
}
|
|
379
|
+
const body = (await res.json());
|
|
380
|
+
const usage = body.usage;
|
|
381
|
+
if (typeof usage?.seconds === "number") {
|
|
382
|
+
this.trackUsage(args.model, { durationSeconds: usage.seconds });
|
|
383
|
+
}
|
|
384
|
+
const text = typeof body.text === "string" ? body.text : "";
|
|
385
|
+
if (!args.word_timestamps)
|
|
386
|
+
return { text };
|
|
387
|
+
const chunks = [];
|
|
388
|
+
for (const word of Array.isArray(body.words) ? body.words : []) {
|
|
389
|
+
if (word &&
|
|
390
|
+
typeof word.word === "string" &&
|
|
391
|
+
typeof word.start === "number" &&
|
|
392
|
+
typeof word.end === "number") {
|
|
393
|
+
chunks.push({ timestamp: [word.start, word.end], text: word.word });
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
return chunks.length > 0 ? { text, chunks } : { text };
|
|
397
|
+
}
|
|
398
|
+
openRouterHeaders() {
|
|
399
|
+
return {
|
|
400
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
401
|
+
"Content-Type": "application/json",
|
|
402
|
+
...OPENROUTER_HEADERS
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Submit to `POST /videos`, poll the job, and download its first output.
|
|
407
|
+
* The status and content URLs are built from the job id rather than taken
|
|
408
|
+
* from the response, so the API key is only ever sent to OpenRouter.
|
|
409
|
+
*/
|
|
410
|
+
async generateVideo(params, extra) {
|
|
411
|
+
const request = {
|
|
412
|
+
model: params.model.id,
|
|
413
|
+
prompt: withNegativePrompt(params.prompt ?? "", params.negativePrompt),
|
|
414
|
+
...extra
|
|
415
|
+
};
|
|
416
|
+
if (params.durationSeconds) {
|
|
417
|
+
request.duration = Math.round(params.durationSeconds);
|
|
418
|
+
}
|
|
419
|
+
if (params.resolution)
|
|
420
|
+
request.resolution = params.resolution;
|
|
421
|
+
if (params.aspectRatio)
|
|
422
|
+
request.aspect_ratio = params.aspectRatio;
|
|
423
|
+
if (params.seed != null && params.seed >= 0)
|
|
424
|
+
request.seed = params.seed;
|
|
425
|
+
const timeoutSeconds = params.timeoutSeconds && params.timeoutSeconds > 0
|
|
426
|
+
? params.timeoutSeconds
|
|
427
|
+
: VIDEO_DEFAULT_TIMEOUT_SECONDS;
|
|
428
|
+
const timeout = AbortSignal.timeout(timeoutSeconds * 1000);
|
|
429
|
+
const signal = params.signal
|
|
430
|
+
? AbortSignal.any([params.signal, timeout])
|
|
431
|
+
: timeout;
|
|
432
|
+
// Stryker disable next-line StringLiteral,ObjectLiteral: diagnostic log, not asserted.
|
|
433
|
+
log.debug("OpenRouter video submit", { model: params.model.id });
|
|
434
|
+
const submit = await this.compatFetch(`${OPENROUTER_BASE_URL}/videos`, {
|
|
435
|
+
method: "POST",
|
|
436
|
+
headers: this.openRouterHeaders(),
|
|
437
|
+
body: JSON.stringify(request),
|
|
438
|
+
signal
|
|
439
|
+
});
|
|
440
|
+
if (!submit.ok) {
|
|
441
|
+
throw new Error(`OpenRouter video submit failed: ${submit.status} ${(await submit.text()).slice(0, 500)}`);
|
|
442
|
+
}
|
|
443
|
+
const submitted = (await submit.json());
|
|
444
|
+
const jobId = submitted.id;
|
|
445
|
+
if (typeof jobId !== "string" || jobId.length === 0) {
|
|
446
|
+
throw new Error(`OpenRouter video submit returned no job id: ${JSON.stringify(submitted).slice(0, 500)}`);
|
|
447
|
+
}
|
|
448
|
+
const jobUrl = `${OPENROUTER_BASE_URL}/videos/${encodeURIComponent(jobId)}`;
|
|
449
|
+
const done = await pollUntilTerminal(async () => {
|
|
450
|
+
// The job is already submitted and billed: a 429 or a gateway 5xx on
|
|
451
|
+
// the status GET must back off, not throw the job away.
|
|
452
|
+
const res = await fetchWithRetry(jobUrl, { headers: this.openRouterHeaders(), signal }, { fetchImpl: this.compatFetch });
|
|
453
|
+
if (!res.ok) {
|
|
454
|
+
throw new Error(`OpenRouter video status failed: ${res.status} ${(await res.text()).slice(0, 500)}`);
|
|
455
|
+
}
|
|
456
|
+
return (await res.json());
|
|
457
|
+
}, {
|
|
458
|
+
intervalMs: VIDEO_POLL_INTERVAL_MS,
|
|
459
|
+
maxAttempts: Math.max(1, Math.ceil((timeoutSeconds * 1000) / VIDEO_POLL_INTERVAL_MS)),
|
|
460
|
+
signal,
|
|
461
|
+
onFailure: (body) => new Error(`OpenRouter video job ${jobId} failed: ${errorText(body)}`),
|
|
462
|
+
onTimeout: () => new Error(`OpenRouter video job ${jobId} did not finish within ${timeoutSeconds}s`)
|
|
463
|
+
});
|
|
464
|
+
const cost = reportedCost(done);
|
|
465
|
+
if (cost !== undefined) {
|
|
466
|
+
// Stryker disable next-line StringLiteral,ObjectLiteral: diagnostic log, not asserted.
|
|
467
|
+
log.info("OpenRouter video cost", { model: params.model.id, cost });
|
|
468
|
+
}
|
|
469
|
+
const content = await this.compatFetch(`${jobUrl}/content?index=0`, {
|
|
470
|
+
headers: this.openRouterHeaders(),
|
|
471
|
+
signal
|
|
472
|
+
});
|
|
473
|
+
if (!content.ok) {
|
|
474
|
+
throw new Error(`OpenRouter video download failed: ${content.status} ${(await content.text()).slice(0, 500)}`);
|
|
475
|
+
}
|
|
476
|
+
return new Uint8Array(await content.arrayBuffer());
|
|
477
|
+
}
|
|
117
478
|
}
|
|
118
479
|
//# sourceMappingURL=openrouter-provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openrouter-provider.js","sourceRoot":"","sources":["../../src/providers/openrouter-provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EACL,oBAAoB,EAErB,MAAM,6BAA6B,CAAC;AASrC,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,oFAAoF;AACpF,MAAM,GAAG,GAAG,YAAY,CAAC,uCAAuC,CAAC,CAAC;AAElE,gDAAgD;AAChD,MAAM,uBAAuB,GAAiB;IAC5C;QACE,EAAE,EAAE,iCAAiC;QACrC,IAAI,EAAE,qBAAqB;QAC3B,QAAQ,EAAE,YAAY;QACtB,cAAc,EAAE,CAAC,eAAe,CAAC;KAClC;CACF,CAAC;AAEF,MAAM,OAAO,kBAAmB,SAAQ,oBAAoB;IAC1D,MAAM,CAAU,eAAe;QAC7B,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAChC,CAAC;IAED,YACE,OAAwC,EACxC,OAAO,GAAgC,EAAE;QAEzC,MAAM,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,KAAK,CACH;YACE,UAAU,EAAE,YAAY;YACxB,MAAM;YACN,OAAO,EAAE,8BAA8B;YACvC,sEAAsE;YACtE,kEAAkE;YAClE,0CAA0C;YAC1C,cAAc,EAAE;gBACd,0CAA0C;gBAC1C,cAAc,EAAE,8CAA8C;gBAC9D,0CAA0C;gBAC1C,SAAS,EAAE,UAAU;aACtB;SACF,EACD,OAAO,CACR,CAAC;IACJ,CAAC;IAEQ,eAAe;QACtB,OAAO,EAAE,kBAAkB,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IAC7C,CAAC;IAEQ,KAAK,CAAC,cAAc,CAAC,KAAa;QACzC,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACK,qCAAqC,CAC3C,QAAmB,EACnB,KAAa;QAEb,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAC1B,GAAG,CAAC,IAAI,KAAK,QAAQ;YACnB,CAAC,CAAC;gBACE,GAAG,GAAG;gBACN,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE,iBAAiB,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;aACrE;YACH,CAAC,CAAC,GAAG,CACR,CAAC;IACJ,CAAC;IAEQ,KAAK,CAAC,eAAe,CAAC,IAS9B;QACC,MAAM,iBAAiB,GAAG,IAAI,CAAC,qCAAqC,CAClE,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,KAAK,CACX,CAAC;QACF,OAAO,KAAK,CAAC,eAAe,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC;IACzE,CAAC;IAEQ,KAAK,CAAC,CAAC,gBAAgB,CAAC,IAWhC;QACC,MAAM,iBAAiB,GAAG,IAAI,CAAC,qCAAqC,CAClE,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,KAAK,CACX,CAAC;QACF,KAAK,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC1E,CAAC;IAEQ,KAAK,CAAC,WAAW,CAAC,MAAyB;QAClD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc;YAClC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,uBAAuB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE;YAC9E,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;QAElB,MAAM,OAAO,GAA4B;YACvC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE;YACtB,MAAM;SACP,CAAC;QAEF,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAChC,MAAM,CAAC,KAAK,IAAI,SAAS,EACzB,MAAM,CAAC,MAAM,IAAI,SAAS,CAC3B,CAAC;QACF,IAAI,IAAI;YAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QAC9B,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAErD,uFAAuF;QACvF,GAAG,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAEhE,qEAAqE;QACrE,wDAAwD;QACxD,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,QAAQ,CACtD,OAAuD,CACxD,CAAiC,CAAC;QAEnC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvD,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,uBAAuB,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;YACjE,CAAC;YACD,OAAO,IAAI,UAAU,CAAC,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAEQ,KAAK,CAAC,uBAAuB;QACpC,OAAO,uBAAuB,CAAC;IACjC,CAAC;IAEQ,KAAK,CAAC,0BAA0B;QACvC,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACjC,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"openrouter-provider.js","sourceRoot":"","sources":["../../src/providers/openrouter-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { OpenAICompatProvider, type OpenAICompatProviderOptions } from "./openai-compat-provider.js";
|
|
2
|
+
import type { LanguageModel } from "./types.js";
|
|
3
|
+
export declare class OpperProvider extends OpenAICompatProvider {
|
|
4
|
+
/** Tool support per model id, as reported by the last discovery. */
|
|
5
|
+
private toolSupport;
|
|
6
|
+
private toolSupportLoad;
|
|
7
|
+
static requiredSecrets(): string[];
|
|
8
|
+
constructor(secrets: {
|
|
9
|
+
OPPER_API_KEY?: string;
|
|
10
|
+
}, options?: OpenAICompatProviderOptions);
|
|
11
|
+
getContainerEnv(): {
|
|
12
|
+
OPPER_API_KEY: string;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Opper lists each model's `opper.capabilities` on both listings. Only a
|
|
16
|
+
* listed model whose capabilities lack `tools` disables native tools; a
|
|
17
|
+
* model the listings did not describe keeps tools on. Discovery runs once
|
|
18
|
+
* per instance when no listing has been seen yet.
|
|
19
|
+
*/
|
|
20
|
+
hasToolSupport(model: string): Promise<boolean>;
|
|
21
|
+
/**
|
|
22
|
+
* Pools (`/models?type=pool`, bare ids such as `claude-sonnet-4-6` that
|
|
23
|
+
* Opper routes across providers) come first, followed by the full catalog
|
|
24
|
+
* from `/models`, which adds `provider/model` ids that pin one route. Rows
|
|
25
|
+
* whose `opper.type` is not `"llm"` (embeddings) are skipped. Each listing
|
|
26
|
+
* fails on its own: a rejected fetch or a malformed body is logged and
|
|
27
|
+
* contributes nothing, so the other listing still reaches the picker.
|
|
28
|
+
*/
|
|
29
|
+
getAvailableLanguageModels(): Promise<LanguageModel[]>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=opper-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opper-provider.d.ts","sourceRoot":"","sources":["../../src/providers/opper-provider.ts"],"names":[],"mappings":"AACA,OAAO,EACL,oBAAoB,EAEpB,KAAK,2BAA2B,EACjC,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAqBhD,qBAAa,aAAc,SAAQ,oBAAoB;IACrD,oEAAoE;IACpE,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,eAAe,CAAiC;IAExD,OAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C;IAED,YACE,OAAO,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,EACnC,OAAO,GAAE,2BAAgC,EAe1C;IAEQ,eAAe;QACb,aAAa;MACvB;IAED;;;;;OAKG;IACY,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAM7D;IAED;;;;;;;OAOG;IACY,0BAA0B,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAiCpE;CACF"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { createLogger } from "@nodetool-ai/config";
|
|
2
|
+
import { OpenAICompatProvider } from "./openai-compat-provider.js";
|
|
3
|
+
// Stryker disable next-line StringLiteral: logger name is diagnostic, not asserted.
|
|
4
|
+
const log = createLogger("nodetool.runtime.providers.opper");
|
|
5
|
+
const OPPER_BASE_URL = "https://api.opper.ai/v3/compat";
|
|
6
|
+
/** Listings merged by discovery, pools first. */
|
|
7
|
+
const OPPER_MODEL_LISTINGS = [
|
|
8
|
+
`${OPPER_BASE_URL}/models?type=pool`,
|
|
9
|
+
`${OPPER_BASE_URL}/models`
|
|
10
|
+
];
|
|
11
|
+
/** The `opper` block Opper adds to every `/models` row, or `{}`. */
|
|
12
|
+
function opperMetaOf(row) {
|
|
13
|
+
const meta = row.opper;
|
|
14
|
+
return meta && typeof meta === "object"
|
|
15
|
+
? meta
|
|
16
|
+
: {};
|
|
17
|
+
}
|
|
18
|
+
export class OpperProvider extends OpenAICompatProvider {
|
|
19
|
+
/** Tool support per model id, as reported by the last discovery. */
|
|
20
|
+
toolSupport = new Map();
|
|
21
|
+
toolSupportLoad = null;
|
|
22
|
+
static requiredSecrets() {
|
|
23
|
+
return ["OPPER_API_KEY"];
|
|
24
|
+
}
|
|
25
|
+
constructor(secrets, options = {}) {
|
|
26
|
+
const apiKey = secrets.OPPER_API_KEY;
|
|
27
|
+
if (!apiKey) {
|
|
28
|
+
throw new Error("OPPER_API_KEY is required");
|
|
29
|
+
}
|
|
30
|
+
super({
|
|
31
|
+
providerId: "opper",
|
|
32
|
+
apiKey,
|
|
33
|
+
baseURL: OPPER_BASE_URL
|
|
34
|
+
}, options);
|
|
35
|
+
}
|
|
36
|
+
getContainerEnv() {
|
|
37
|
+
return { OPPER_API_KEY: this.apiKey };
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Opper lists each model's `opper.capabilities` on both listings. Only a
|
|
41
|
+
* listed model whose capabilities lack `tools` disables native tools; a
|
|
42
|
+
* model the listings did not describe keeps tools on. Discovery runs once
|
|
43
|
+
* per instance when no listing has been seen yet.
|
|
44
|
+
*/
|
|
45
|
+
async hasToolSupport(model) {
|
|
46
|
+
if (!this.toolSupport.has(model)) {
|
|
47
|
+
this.toolSupportLoad ??= this.getAvailableLanguageModels();
|
|
48
|
+
await this.toolSupportLoad;
|
|
49
|
+
}
|
|
50
|
+
return this.toolSupport.get(model) ?? true;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Pools (`/models?type=pool`, bare ids such as `claude-sonnet-4-6` that
|
|
54
|
+
* Opper routes across providers) come first, followed by the full catalog
|
|
55
|
+
* from `/models`, which adds `provider/model` ids that pin one route. Rows
|
|
56
|
+
* whose `opper.type` is not `"llm"` (embeddings) are skipped. Each listing
|
|
57
|
+
* fails on its own: a rejected fetch or a malformed body is logged and
|
|
58
|
+
* contributes nothing, so the other listing still reaches the picker.
|
|
59
|
+
*/
|
|
60
|
+
async getAvailableLanguageModels() {
|
|
61
|
+
const results = await Promise.allSettled(OPPER_MODEL_LISTINGS.map((url) => this.fetchCompatModelRows(url)));
|
|
62
|
+
const rows = [];
|
|
63
|
+
results.forEach((result, i) => {
|
|
64
|
+
if (result.status === "fulfilled") {
|
|
65
|
+
rows.push(...result.value);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
log.warn("Opper model listing failed", {
|
|
69
|
+
url: OPPER_MODEL_LISTINGS[i],
|
|
70
|
+
error: result.reason instanceof Error
|
|
71
|
+
? result.reason.message
|
|
72
|
+
: String(result.reason)
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
const seen = new Set();
|
|
77
|
+
const models = [];
|
|
78
|
+
for (const row of rows) {
|
|
79
|
+
const meta = opperMetaOf(row);
|
|
80
|
+
if (meta.type !== undefined && meta.type !== "llm")
|
|
81
|
+
continue;
|
|
82
|
+
if (seen.has(row.id))
|
|
83
|
+
continue;
|
|
84
|
+
seen.add(row.id);
|
|
85
|
+
this.toolSupport.set(row.id, !Array.isArray(meta.capabilities) || meta.capabilities.includes("tools"));
|
|
86
|
+
models.push({ id: row.id, name: row.id, provider: this.provider });
|
|
87
|
+
}
|
|
88
|
+
return models;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=opper-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opper-provider.js","sourceRoot":"","sources":["../../src/providers/opper-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-error.d.ts","sourceRoot":"","sources":["../../src/providers/provider-error.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"provider-error.d.ts","sourceRoot":"","sources":["../../src/providers/provider-error.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAaH;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,IAAI,EAAE,eAAe,GAAG,kBAAkB,CAAC;IAC3C,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAgBD;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,GACb,qBAAqB,GAAG,IAAI,CAG9B;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EACxC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,MAAM,CAQR;AAQD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAgBjE;AA6ED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAC1C,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C,MAAM,CA4BR"}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* so existing message matching (rate limit, context length) still works.
|
|
10
10
|
*/
|
|
11
11
|
import { getProviderSecretKey } from "./provider-registry.js";
|
|
12
|
-
import { isNumber, isObjectLike, isString } from "@nodetool-ai/protocol";
|
|
12
|
+
import { PROVIDER_IDS, isNumber, isObjectLike, isString } from "@nodetool-ai/protocol";
|
|
13
13
|
/** Marks an error already annotated, so nested wrappers don't stack hints. */
|
|
14
14
|
const ANNOTATED = Symbol.for("nodetool.provider.errorAnnotated");
|
|
15
15
|
/** Field carrying {@link ProviderFailureDetail} on an annotated error. */
|
|
@@ -99,6 +99,12 @@ function hintForStatus(status, provider, model) {
|
|
|
99
99
|
const target = model ? `${provider}/${model}` : provider;
|
|
100
100
|
switch (status) {
|
|
101
101
|
case 401:
|
|
102
|
+
if (provider === PROVIDER_IDS.CODEX) {
|
|
103
|
+
return `${target} rejected the ChatGPT sign-in (401). The sign-in expired: sign in to Codex again in Settings → Models & Providers.`;
|
|
104
|
+
}
|
|
105
|
+
if (provider === PROVIDER_IDS.CLAUDE_AGENT_SDK) {
|
|
106
|
+
return `${target} rejected the Claude sign-in (401). The sign-in expired: sign in to Claude again in Settings → Models & Providers.`;
|
|
107
|
+
}
|
|
102
108
|
return `${target} rejected the credentials (401). Add or update the API key for ${provider} in Settings → Models & Providers.`;
|
|
103
109
|
case 403:
|
|
104
110
|
return `${target} refused the request (403). The API key may be missing access to this model, restricted to certain referrers or IPs, or blocked in your region — check it in Settings → Models & Providers.`;
|