@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
|
@@ -112,17 +112,40 @@ export class OpenAICompatProvider extends OpenAIProvider {
|
|
|
112
112
|
}
|
|
113
113
|
return this._compatClient;
|
|
114
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* `max_completion_tokens` sent when the caller sets no `maxTokens`.
|
|
117
|
+
* Undefined omits the field and leaves the cap to the server.
|
|
118
|
+
*/
|
|
119
|
+
get defaultMaxTokens() {
|
|
120
|
+
return 16384;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Flatten a system message whose content is an array of parts to its text.
|
|
124
|
+
* The inherited conversion keeps only string content and sent an empty
|
|
125
|
+
* system prompt for the array form.
|
|
126
|
+
*/
|
|
127
|
+
async convertMessage(message) {
|
|
128
|
+
if (message.role === "system" && Array.isArray(message.content)) {
|
|
129
|
+
const text = message.content
|
|
130
|
+
.filter((part) => part.type === "text")
|
|
131
|
+
.map((part) => part.text)
|
|
132
|
+
.join("\n");
|
|
133
|
+
return super.convertMessage({ ...message, content: text });
|
|
134
|
+
}
|
|
135
|
+
return super.convertMessage(message);
|
|
136
|
+
}
|
|
115
137
|
/** Shared request assembly for both streaming and non-streaming chat. */
|
|
116
138
|
async buildChatRequest(args, stream) {
|
|
117
|
-
const { model, tools = [], toolChoice, maxTokens =
|
|
139
|
+
const { model, tools = [], toolChoice, maxTokens = this.defaultMaxTokens, temperature, topP, presencePenalty, frequencyPenalty, audio } = args;
|
|
118
140
|
const messages = this.convertSystemToUserForOModels(args.messages, model);
|
|
119
141
|
const openaiMessages = await Promise.all(messages.map((m) => this.convertMessage(m)));
|
|
120
142
|
const request = {
|
|
121
143
|
model,
|
|
122
144
|
messages: openaiMessages,
|
|
123
|
-
max_completion_tokens: maxTokens,
|
|
124
145
|
stream
|
|
125
146
|
};
|
|
147
|
+
if (maxTokens != null)
|
|
148
|
+
request.max_completion_tokens = maxTokens;
|
|
126
149
|
if (stream)
|
|
127
150
|
request.stream_options = { include_usage: true };
|
|
128
151
|
if (temperature != null)
|
|
@@ -165,6 +188,12 @@ export class OpenAICompatProvider extends OpenAIProvider {
|
|
|
165
188
|
return error;
|
|
166
189
|
}
|
|
167
190
|
async *generateMessages(args) {
|
|
191
|
+
// A subclass whose endpoint also serves the Responses API routes its
|
|
192
|
+
// models there; the inherited path handles them.
|
|
193
|
+
if (this.usesResponsesApi(args.model)) {
|
|
194
|
+
yield* super.generateMessages(args);
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
168
197
|
const { model } = args;
|
|
169
198
|
const request = await this.buildChatRequest(args, true);
|
|
170
199
|
log.debug("OpenAI-compatible chat request", {
|
|
@@ -189,6 +218,19 @@ export class OpenAICompatProvider extends OpenAIProvider {
|
|
|
189
218
|
if (!choice)
|
|
190
219
|
continue;
|
|
191
220
|
const delta = choice.delta;
|
|
221
|
+
// llama-server, vLLM and LM Studio move `<think>` text out of
|
|
222
|
+
// `content` into a separate field. Surface it like Ollama's
|
|
223
|
+
// `thinking`, or the UI shows nothing for the whole reasoning phase.
|
|
224
|
+
const reasoning = delta?.reasoning_content ?? delta?.reasoning;
|
|
225
|
+
if (isNonEmptyString(reasoning)) {
|
|
226
|
+
const thinkingChunk = {
|
|
227
|
+
type: "chunk",
|
|
228
|
+
content: reasoning,
|
|
229
|
+
done: false,
|
|
230
|
+
thinking: true
|
|
231
|
+
};
|
|
232
|
+
yield thinkingChunk;
|
|
233
|
+
}
|
|
192
234
|
if (delta?.audio?.data) {
|
|
193
235
|
const audioChunk = {
|
|
194
236
|
type: "chunk",
|
|
@@ -244,6 +286,9 @@ export class OpenAICompatProvider extends OpenAIProvider {
|
|
|
244
286
|
}
|
|
245
287
|
}
|
|
246
288
|
async generateMessage(args) {
|
|
289
|
+
if (this.usesResponsesApi(args.model)) {
|
|
290
|
+
return super.generateMessage(args);
|
|
291
|
+
}
|
|
247
292
|
const { model } = args;
|
|
248
293
|
const request = await this.buildChatRequest(args, false);
|
|
249
294
|
log.debug("OpenAI-compatible chat request", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-compat-provider.js","sourceRoot":"","sources":["../../src/providers/openai-compat-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,QAAQ,EAET,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EAErB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"openai-compat-provider.js","sourceRoot":"","sources":["../../src/providers/openai-compat-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import OpenAI from "openai";
|
|
2
|
-
import { BaseProvider } from "./base-provider.js";
|
|
2
|
+
import { BaseProvider, type ProviderCapability } from "./base-provider.js";
|
|
3
3
|
import type { RunBudget, TurnBudget } from "../turn-budget.js";
|
|
4
|
+
import { type ResponsesInputOptions } from "./responses-api.js";
|
|
4
5
|
import type { ASRModel, EmbeddingModel, EncodedAudioResult, ImageModel, ImageToImageParams, InpaintingParams, ImageToVideoParams, LanguageModel, Message, MessageContent, ProviderId, ProviderStreamItem, ProviderTool, StreamingAudioChunk, TextToImageParams, TextToVideoParams, ToolCall, TTSModel, VideoModel } from "./types.js";
|
|
5
6
|
interface OpenAIProviderOptions {
|
|
6
7
|
client?: OpenAI;
|
|
@@ -59,6 +60,12 @@ export declare class OpenAIProvider extends BaseProvider {
|
|
|
59
60
|
* reports none.
|
|
60
61
|
*/
|
|
61
62
|
protected servesOpenAICatalog(): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* OpenAI's own media and embedding operations. A subclass serves them only
|
|
65
|
+
* through {@link servesOpenAICatalog}; one with its own catalog declares its
|
|
66
|
+
* own list.
|
|
67
|
+
*/
|
|
68
|
+
protected declaredCapabilities(): readonly ProviderCapability[];
|
|
62
69
|
getAvailableLanguageModels(): Promise<LanguageModel[]>;
|
|
63
70
|
getAvailableTTSModels(): Promise<TTSModel[]>;
|
|
64
71
|
getAvailableASRModels(): Promise<ASRModel[]>;
|
|
@@ -89,7 +96,19 @@ export declare class OpenAIProvider extends BaseProvider {
|
|
|
89
96
|
protected convertSystemToUserForOModels(messages: Message[], model: string): Message[];
|
|
90
97
|
generateMessages(args: Parameters<BaseProvider["generateMessages"]>[0]): AsyncGenerator<ProviderStreamItem>;
|
|
91
98
|
generateMessage(args: Parameters<BaseProvider["generateMessage"]>[0]): Promise<Message>;
|
|
92
|
-
/**
|
|
99
|
+
/**
|
|
100
|
+
* Media parts beyond text and images that this endpoint's Responses input
|
|
101
|
+
* accepts. OpenAI's accepts neither video nor audio.
|
|
102
|
+
*/
|
|
103
|
+
protected responsesInputOptions(): ResponsesInputOptions;
|
|
104
|
+
/**
|
|
105
|
+
* Whether this endpoint's Responses API hosts `tool_search`: a function
|
|
106
|
+
* marked `deferLoading` is sent with `defer_loading: true`, so its schema
|
|
107
|
+
* stays out of the prompt until the server's search loads it. Off for
|
|
108
|
+
* OpenAI, which sends every schema up front.
|
|
109
|
+
*/
|
|
110
|
+
protected get supportsNativeToolSearch(): boolean;
|
|
111
|
+
/** Responses uses native equivalents by default, caller dispatch when restricted. */
|
|
93
112
|
private formatResponsesTools;
|
|
94
113
|
private generateMessageResponses;
|
|
95
114
|
private generateMessagesResponses;
|
|
@@ -97,9 +116,11 @@ export declare class OpenAIProvider extends BaseProvider {
|
|
|
97
116
|
executeTool?: (toolCall: ToolCall) => Promise<string | MessageContent[]>;
|
|
98
117
|
maxIterations?: number;
|
|
99
118
|
sequentialTools?: boolean;
|
|
119
|
+
providedToolsOnly?: boolean;
|
|
100
120
|
turnBudget?: TurnBudget | RunBudget;
|
|
101
121
|
resolveMedia?: (messages: Message[]) => Promise<Message[]>;
|
|
102
122
|
}): AsyncGenerator<ProviderStreamItem>;
|
|
123
|
+
private generateResponsesLoop;
|
|
103
124
|
private buildResponsesRequest;
|
|
104
125
|
private streamResponsesRequest;
|
|
105
126
|
private createResponsesTurnState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-provider.d.ts","sourceRoot":"","sources":["../../src/providers/openai-provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"openai-provider.d.ts","sourceRoot":"","sources":["../../src/providers/openai-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { context, trace } from "@opentelemetry/api";
|
|
2
|
+
import { tracedProviderLoop, tracedToolCall, beginProviderRound, providerRoundContext, tracedProviderLlm } from "./loop-tracing.js";
|
|
1
3
|
import OpenAI, { toFile } from "openai";
|
|
2
4
|
import { createLogger, importHidden } from "@nodetool-ai/config";
|
|
3
5
|
import { BaseProvider, budgetStopItem, resolveTurnBudget, splitToolResultImages } from "./base-provider.js";
|
|
@@ -109,6 +111,9 @@ const RESPONSE_WEB_SEARCH_TOOL = {
|
|
|
109
111
|
const RESPONSE_IMAGE_GENERATION_TOOL = {
|
|
110
112
|
type: "image_generation"
|
|
111
113
|
};
|
|
114
|
+
const RESPONSE_TOOL_SEARCH_TOOL = {
|
|
115
|
+
type: "tool_search"
|
|
116
|
+
};
|
|
112
117
|
const RESPONSE_HOSTED_TOOL_CHOICES = {
|
|
113
118
|
[WEB_SEARCH_TOOL_NAME]: "web_search",
|
|
114
119
|
[IMAGE_GENERATION_TOOL_NAME]: "image_generation"
|
|
@@ -270,6 +275,25 @@ export class OpenAIProvider extends BaseProvider {
|
|
|
270
275
|
servesOpenAICatalog() {
|
|
271
276
|
return this.provider === PROVIDER_IDS.OPENAI;
|
|
272
277
|
}
|
|
278
|
+
/**
|
|
279
|
+
* OpenAI's own media and embedding operations. A subclass serves them only
|
|
280
|
+
* through {@link servesOpenAICatalog}; one with its own catalog declares its
|
|
281
|
+
* own list.
|
|
282
|
+
*/
|
|
283
|
+
declaredCapabilities() {
|
|
284
|
+
if (!this.servesOpenAICatalog())
|
|
285
|
+
return [];
|
|
286
|
+
return [
|
|
287
|
+
"text_to_image",
|
|
288
|
+
"image_to_image",
|
|
289
|
+
"inpainting",
|
|
290
|
+
"text_to_video",
|
|
291
|
+
"image_to_video",
|
|
292
|
+
"text_to_speech",
|
|
293
|
+
"automatic_speech_recognition",
|
|
294
|
+
"generate_embedding"
|
|
295
|
+
];
|
|
296
|
+
}
|
|
273
297
|
async getAvailableLanguageModels() {
|
|
274
298
|
// The `openai` provider only serves the supported (gpt-5+) models; retire
|
|
275
299
|
// everything older. Subclasses (their own provider id) keep their full list.
|
|
@@ -976,27 +1000,58 @@ export class OpenAIProvider extends BaseProvider {
|
|
|
976
1000
|
// ---------------------------------------------------------------------------
|
|
977
1001
|
// Responses API path (used for OpenAI models matched by isOpenAIResponsesModel)
|
|
978
1002
|
// ---------------------------------------------------------------------------
|
|
979
|
-
/**
|
|
980
|
-
|
|
1003
|
+
/**
|
|
1004
|
+
* Media parts beyond text and images that this endpoint's Responses input
|
|
1005
|
+
* accepts. OpenAI's accepts neither video nor audio.
|
|
1006
|
+
*/
|
|
1007
|
+
responsesInputOptions() {
|
|
1008
|
+
return {};
|
|
1009
|
+
}
|
|
1010
|
+
/**
|
|
1011
|
+
* Whether this endpoint's Responses API hosts `tool_search`: a function
|
|
1012
|
+
* marked `deferLoading` is sent with `defer_loading: true`, so its schema
|
|
1013
|
+
* stays out of the prompt until the server's search loads it. Off for
|
|
1014
|
+
* OpenAI, which sends every schema up front.
|
|
1015
|
+
*/
|
|
1016
|
+
get supportsNativeToolSearch() {
|
|
1017
|
+
return false;
|
|
1018
|
+
}
|
|
1019
|
+
/** Responses uses native equivalents by default, caller dispatch when restricted. */
|
|
1020
|
+
formatResponsesTools(tools, providedToolsOnly = false) {
|
|
981
1021
|
const formatted = [];
|
|
1022
|
+
const deferLoading = !providedToolsOnly && this.supportsNativeToolSearch;
|
|
1023
|
+
let deferred = false;
|
|
982
1024
|
for (const tool of tools) {
|
|
983
|
-
if (
|
|
1025
|
+
if (!providedToolsOnly &&
|
|
1026
|
+
this.supportsNativeWebSearch &&
|
|
1027
|
+
tool.name === WEB_SEARCH_TOOL_NAME) {
|
|
984
1028
|
formatted.push(RESPONSE_WEB_SEARCH_TOOL);
|
|
985
1029
|
continue;
|
|
986
1030
|
}
|
|
987
|
-
if (
|
|
1031
|
+
if (!providedToolsOnly &&
|
|
1032
|
+
this.supportsNativeImageGeneration &&
|
|
1033
|
+
tool.name === IMAGE_GENERATION_TOOL_NAME) {
|
|
988
1034
|
formatted.push(RESPONSE_IMAGE_GENERATION_TOOL);
|
|
989
1035
|
continue;
|
|
990
1036
|
}
|
|
991
1037
|
const [functionTool] = responseTools([tool]);
|
|
992
|
-
if (functionTool)
|
|
993
|
-
|
|
1038
|
+
if (!functionTool)
|
|
1039
|
+
continue;
|
|
1040
|
+
if (deferLoading && tool.deferLoading) {
|
|
1041
|
+
functionTool.defer_loading = true;
|
|
1042
|
+
deferred = true;
|
|
1043
|
+
}
|
|
1044
|
+
formatted.push(functionTool);
|
|
994
1045
|
}
|
|
1046
|
+
// The server rejects a deferred function without a `tool_search` tool to
|
|
1047
|
+
// load it, and a `tool_search` tool with nothing deferred.
|
|
1048
|
+
if (deferred)
|
|
1049
|
+
formatted.push(RESPONSE_TOOL_SEARCH_TOOL);
|
|
995
1050
|
return formatted;
|
|
996
1051
|
}
|
|
997
1052
|
async generateMessageResponses(args) {
|
|
998
1053
|
const request = await this.buildResponsesRequest(args, {
|
|
999
|
-
input: await messagesToResponsesInput(args.messages, (uri) => this.resolveUri(uri)),
|
|
1054
|
+
input: await messagesToResponsesInput(args.messages, (uri) => this.resolveUri(uri), this.responsesInputOptions()),
|
|
1000
1055
|
stream: false,
|
|
1001
1056
|
store: false
|
|
1002
1057
|
});
|
|
@@ -1024,7 +1079,7 @@ export class OpenAIProvider extends BaseProvider {
|
|
|
1024
1079
|
};
|
|
1025
1080
|
}
|
|
1026
1081
|
async *generateMessagesResponses(args) {
|
|
1027
|
-
const input = await messagesToResponsesInput(args.messages, (uri) => this.resolveUri(uri));
|
|
1082
|
+
const input = await messagesToResponsesInput(args.messages, (uri) => this.resolveUri(uri), this.responsesInputOptions());
|
|
1028
1083
|
const request = await this.buildResponsesRequest(args, {
|
|
1029
1084
|
input,
|
|
1030
1085
|
stream: true,
|
|
@@ -1061,11 +1116,13 @@ export class OpenAIProvider extends BaseProvider {
|
|
|
1061
1116
|
}
|
|
1062
1117
|
async *generateLoop(args) {
|
|
1063
1118
|
if (!this.usesResponsesApi(args.model)) {
|
|
1064
|
-
yield* super.generateLoop(args);
|
|
1065
|
-
return;
|
|
1119
|
+
return yield* super.generateLoop(args);
|
|
1066
1120
|
}
|
|
1121
|
+
return yield* tracedProviderLoop(this.provider, args.model, () => this.generateResponsesLoop(args));
|
|
1122
|
+
}
|
|
1123
|
+
async *generateResponsesLoop(args) {
|
|
1067
1124
|
const maxIterations = args.maxIterations ?? 25;
|
|
1068
|
-
const { executeTool, maxIterations: _omitMaxIterations, sequentialTools, turnBudget: budgetArg, resolveMedia, ...turnArgs } = args;
|
|
1125
|
+
const { executeTool, maxIterations: _omitMaxIterations, sequentialTools, providedToolsOnly, turnBudget: budgetArg, resolveMedia, ...turnArgs } = args;
|
|
1069
1126
|
const { runBudget, turnBudget } = resolveTurnBudget(budgetArg);
|
|
1070
1127
|
const systemHash = hashSystemPrompt(responsesSystemPrompt(args.messages));
|
|
1071
1128
|
const prior = args.providerSession ?? null;
|
|
@@ -1082,6 +1139,7 @@ export class OpenAIProvider extends BaseProvider {
|
|
|
1082
1139
|
args: turnArgs,
|
|
1083
1140
|
resolveMedia,
|
|
1084
1141
|
executeTool,
|
|
1142
|
+
providedToolsOnly,
|
|
1085
1143
|
sequentialTools: sequentialTools === true,
|
|
1086
1144
|
maxIterations,
|
|
1087
1145
|
firstMessages,
|
|
@@ -1109,6 +1167,7 @@ export class OpenAIProvider extends BaseProvider {
|
|
|
1109
1167
|
args: turnArgs,
|
|
1110
1168
|
resolveMedia,
|
|
1111
1169
|
executeTool,
|
|
1170
|
+
providedToolsOnly,
|
|
1112
1171
|
sequentialTools: sequentialTools === true,
|
|
1113
1172
|
maxIterations,
|
|
1114
1173
|
firstMessages: freshMessages,
|
|
@@ -1135,10 +1194,10 @@ export class OpenAIProvider extends BaseProvider {
|
|
|
1135
1194
|
request.temperature = args.temperature;
|
|
1136
1195
|
if (args.topP != null)
|
|
1137
1196
|
request.top_p = args.topP;
|
|
1138
|
-
const tools = this.formatResponsesTools(args.tools ?? []);
|
|
1197
|
+
const tools = this.formatResponsesTools(args.tools ?? [], config.providedToolsOnly);
|
|
1139
1198
|
if (tools.length > 0) {
|
|
1140
1199
|
request.tools = tools;
|
|
1141
|
-
const hostedToolChoice = args.toolChoice
|
|
1200
|
+
const hostedToolChoice = !config.providedToolsOnly && args.toolChoice
|
|
1142
1201
|
? RESPONSE_HOSTED_TOOL_CHOICES[args.toolChoice]
|
|
1143
1202
|
: undefined;
|
|
1144
1203
|
request.tool_choice = hostedToolChoice
|
|
@@ -1159,7 +1218,22 @@ export class OpenAIProvider extends BaseProvider {
|
|
|
1159
1218
|
yield* streamResponsesEvents(stream, {
|
|
1160
1219
|
model: args.model,
|
|
1161
1220
|
buildToolCall: this.buildToolCall.bind(this),
|
|
1162
|
-
onUsage: (model, usage) =>
|
|
1221
|
+
onUsage: (model, usage) => {
|
|
1222
|
+
const cost = this.trackUsage(model, usage);
|
|
1223
|
+
const span = trace.getActiveSpan();
|
|
1224
|
+
span?.setAttributes({
|
|
1225
|
+
"gen_ai.usage.input_tokens": usage.inputTokens ?? 0,
|
|
1226
|
+
"gen_ai.usage.output_tokens": usage.outputTokens ?? 0,
|
|
1227
|
+
"gen_ai.usage.total_tokens": (usage.inputTokens ?? 0) + (usage.outputTokens ?? 0),
|
|
1228
|
+
});
|
|
1229
|
+
if (usage.cachedTokens !== undefined) {
|
|
1230
|
+
span?.setAttribute("gen_ai.usage.cached_input_tokens", usage.cachedTokens);
|
|
1231
|
+
}
|
|
1232
|
+
if (this.unpricedReason === null) {
|
|
1233
|
+
span?.setAttribute("gen_ai.usage.cost_usd", cost);
|
|
1234
|
+
}
|
|
1235
|
+
return cost;
|
|
1236
|
+
},
|
|
1163
1237
|
onResponseId
|
|
1164
1238
|
});
|
|
1165
1239
|
}
|
|
@@ -1175,7 +1249,7 @@ export class OpenAIProvider extends BaseProvider {
|
|
|
1175
1249
|
async *runResponsesLoop(config) {
|
|
1176
1250
|
const toolMap = new Map((config.args.tools ?? []).map((tool) => [tool.name, tool]));
|
|
1177
1251
|
let previousResponseId = config.firstPreviousResponseId;
|
|
1178
|
-
const toInput = async (messages) => messagesToResponsesInput(config.resolveMedia ? await config.resolveMedia(messages) : messages, (uri) => this.resolveUri(uri));
|
|
1252
|
+
const toInput = async (messages) => messagesToResponsesInput(config.resolveMedia ? await config.resolveMedia(messages) : messages, (uri) => this.resolveUri(uri), this.responsesInputOptions());
|
|
1179
1253
|
let input = await toInput(config.firstMessages);
|
|
1180
1254
|
let state = config.firstTurnState;
|
|
1181
1255
|
// Responses carries prior turns server-side behind `previousResponseId`,
|
|
@@ -1201,6 +1275,7 @@ export class OpenAIProvider extends BaseProvider {
|
|
|
1201
1275
|
return;
|
|
1202
1276
|
}
|
|
1203
1277
|
}
|
|
1278
|
+
beginProviderRound(this.provider, config.args.model);
|
|
1204
1279
|
const costBeforeTurn = config.turnBudget ? this.getTotalCost() : 0;
|
|
1205
1280
|
// The reservation covers exactly one turn, so it has to be reconciled
|
|
1206
1281
|
// even when that turn throws. Left outstanding, a single provider error
|
|
@@ -1211,9 +1286,11 @@ export class OpenAIProvider extends BaseProvider {
|
|
|
1211
1286
|
input,
|
|
1212
1287
|
stream: true,
|
|
1213
1288
|
store: true,
|
|
1214
|
-
previousResponseId
|
|
1289
|
+
previousResponseId,
|
|
1290
|
+
providedToolsOnly: config.providedToolsOnly
|
|
1215
1291
|
});
|
|
1216
|
-
|
|
1292
|
+
const llm = context.with(providerRoundContext(), () => tracedProviderLlm(this.provider, config.args.model, transcript, () => this.collectResponsesTurn(config.args, request, config.systemHash, state)));
|
|
1293
|
+
yield* llm;
|
|
1217
1294
|
}
|
|
1218
1295
|
finally {
|
|
1219
1296
|
if (config.turnBudget && reservation) {
|
|
@@ -1246,10 +1323,14 @@ export class OpenAIProvider extends BaseProvider {
|
|
|
1246
1323
|
// results and leave a dangling tool_use (rejected by the API next turn).
|
|
1247
1324
|
try {
|
|
1248
1325
|
const tool = toolMap.get(tc.name);
|
|
1249
|
-
if (tool?.execute)
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1326
|
+
if (tool?.execute) {
|
|
1327
|
+
const execute = tool.execute;
|
|
1328
|
+
return await tracedToolCall(tc, () => execute(tc.args ?? {}, tc.id));
|
|
1329
|
+
}
|
|
1330
|
+
if (config.executeTool) {
|
|
1331
|
+
const execute = config.executeTool;
|
|
1332
|
+
return await tracedToolCall(tc, () => execute(tc));
|
|
1333
|
+
}
|
|
1253
1334
|
return `Tool "${tc.name}" is not available`;
|
|
1254
1335
|
}
|
|
1255
1336
|
catch (err) {
|