@nodetool-ai/runtime 0.7.0-rc.11
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/bridge-protocol.d.ts +39 -0
- package/dist/bridge-protocol.d.ts.map +1 -0
- package/dist/bridge-protocol.js +39 -0
- package/dist/bridge-protocol.js.map +1 -0
- package/dist/comfy-executor.d.ts +41 -0
- package/dist/comfy-executor.d.ts.map +1 -0
- package/dist/comfy-executor.js +305 -0
- package/dist/comfy-executor.js.map +1 -0
- package/dist/context-packer.d.ts +22 -0
- package/dist/context-packer.d.ts.map +1 -0
- package/dist/context-packer.js +66 -0
- package/dist/context-packer.js.map +1 -0
- package/dist/context.d.ts +405 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +1455 -0
- package/dist/context.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/node-executor.d.ts +53 -0
- package/dist/node-executor.d.ts.map +1 -0
- package/dist/node-executor.js +9 -0
- package/dist/node-executor.js.map +1 -0
- package/dist/providers/aki-manifest.json +34 -0
- package/dist/providers/aki-provider.d.ts +65 -0
- package/dist/providers/aki-provider.d.ts.map +1 -0
- package/dist/providers/aki-provider.js +517 -0
- package/dist/providers/aki-provider.js.map +1 -0
- package/dist/providers/anthropic-provider.d.ts +55 -0
- package/dist/providers/anthropic-provider.d.ts.map +1 -0
- package/dist/providers/anthropic-provider.js +563 -0
- package/dist/providers/anthropic-provider.js.map +1 -0
- package/dist/providers/base-provider.d.ts +194 -0
- package/dist/providers/base-provider.d.ts.map +1 -0
- package/dist/providers/base-provider.js +515 -0
- package/dist/providers/base-provider.js.map +1 -0
- package/dist/providers/cerebras-provider.d.ts +20 -0
- package/dist/providers/cerebras-provider.d.ts.map +1 -0
- package/dist/providers/cerebras-provider.js +52 -0
- package/dist/providers/cerebras-provider.js.map +1 -0
- package/dist/providers/claude-agent-provider.d.ts +107 -0
- package/dist/providers/claude-agent-provider.d.ts.map +1 -0
- package/dist/providers/claude-agent-provider.js +586 -0
- package/dist/providers/claude-agent-provider.js.map +1 -0
- package/dist/providers/cohere-provider.d.ts +36 -0
- package/dist/providers/cohere-provider.d.ts.map +1 -0
- package/dist/providers/cohere-provider.js +116 -0
- package/dist/providers/cohere-provider.js.map +1 -0
- package/dist/providers/cost-calculator.d.ts +109 -0
- package/dist/providers/cost-calculator.d.ts.map +1 -0
- package/dist/providers/cost-calculator.js +475 -0
- package/dist/providers/cost-calculator.js.map +1 -0
- package/dist/providers/deepseek-provider.d.ts +25 -0
- package/dist/providers/deepseek-provider.d.ts.map +1 -0
- package/dist/providers/deepseek-provider.js +58 -0
- package/dist/providers/deepseek-provider.js.map +1 -0
- package/dist/providers/fake-provider.d.ts +52 -0
- package/dist/providers/fake-provider.d.ts.map +1 -0
- package/dist/providers/fake-provider.js +107 -0
- package/dist/providers/fake-provider.js.map +1 -0
- package/dist/providers/fal-provider.d.ts +32 -0
- package/dist/providers/fal-provider.d.ts.map +1 -0
- package/dist/providers/fal-provider.js +445 -0
- package/dist/providers/fal-provider.js.map +1 -0
- package/dist/providers/gemini-provider.d.ts +109 -0
- package/dist/providers/gemini-provider.d.ts.map +1 -0
- package/dist/providers/gemini-provider.js +943 -0
- package/dist/providers/gemini-provider.js.map +1 -0
- package/dist/providers/groq-provider.d.ts +20 -0
- package/dist/providers/groq-provider.d.ts.map +1 -0
- package/dist/providers/groq-provider.js +52 -0
- package/dist/providers/groq-provider.js.map +1 -0
- package/dist/providers/huggingface-provider.d.ts +59 -0
- package/dist/providers/huggingface-provider.d.ts.map +1 -0
- package/dist/providers/huggingface-provider.js +305 -0
- package/dist/providers/huggingface-provider.js.map +1 -0
- package/dist/providers/index.d.ts +69 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +137 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/jina-provider.d.ts +37 -0
- package/dist/providers/jina-provider.d.ts.map +1 -0
- package/dist/providers/jina-provider.js +118 -0
- package/dist/providers/jina-provider.js.map +1 -0
- package/dist/providers/kie-provider.d.ts +19 -0
- package/dist/providers/kie-provider.d.ts.map +1 -0
- package/dist/providers/kie-provider.js +118 -0
- package/dist/providers/kie-provider.js.map +1 -0
- package/dist/providers/llama-provider.d.ts +49 -0
- package/dist/providers/llama-provider.d.ts.map +1 -0
- package/dist/providers/llama-provider.js +381 -0
- package/dist/providers/llama-provider.js.map +1 -0
- package/dist/providers/lmstudio-provider.d.ts +22 -0
- package/dist/providers/lmstudio-provider.d.ts.map +1 -0
- package/dist/providers/lmstudio-provider.js +63 -0
- package/dist/providers/lmstudio-provider.js.map +1 -0
- package/dist/providers/manifest-models.d.ts +12 -0
- package/dist/providers/manifest-models.d.ts.map +1 -0
- package/dist/providers/manifest-models.js +96 -0
- package/dist/providers/manifest-models.js.map +1 -0
- package/dist/providers/meshy-provider.d.ts +53 -0
- package/dist/providers/meshy-provider.d.ts.map +1 -0
- package/dist/providers/meshy-provider.js +230 -0
- package/dist/providers/meshy-provider.js.map +1 -0
- package/dist/providers/minimax-provider.d.ts +66 -0
- package/dist/providers/minimax-provider.d.ts.map +1 -0
- package/dist/providers/minimax-provider.js +531 -0
- package/dist/providers/minimax-provider.js.map +1 -0
- package/dist/providers/mistral-provider.d.ts +26 -0
- package/dist/providers/mistral-provider.d.ts.map +1 -0
- package/dist/providers/mistral-provider.js +74 -0
- package/dist/providers/mistral-provider.js.map +1 -0
- package/dist/providers/moonshot-provider.d.ts +24 -0
- package/dist/providers/moonshot-provider.d.ts.map +1 -0
- package/dist/providers/moonshot-provider.js +43 -0
- package/dist/providers/moonshot-provider.js.map +1 -0
- package/dist/providers/ollama-provider.d.ts +71 -0
- package/dist/providers/ollama-provider.d.ts.map +1 -0
- package/dist/providers/ollama-provider.js +480 -0
- package/dist/providers/ollama-provider.js.map +1 -0
- package/dist/providers/openai-provider.d.ts +103 -0
- package/dist/providers/openai-provider.d.ts.map +1 -0
- package/dist/providers/openai-provider.js +917 -0
- package/dist/providers/openai-provider.js.map +1 -0
- package/dist/providers/openrouter-provider.d.ts +49 -0
- package/dist/providers/openrouter-provider.d.ts.map +1 -0
- package/dist/providers/openrouter-provider.js +147 -0
- package/dist/providers/openrouter-provider.js.map +1 -0
- package/dist/providers/provider-registry.d.ts +24 -0
- package/dist/providers/provider-registry.d.ts.map +1 -0
- package/dist/providers/provider-registry.js +124 -0
- package/dist/providers/provider-registry.js.map +1 -0
- package/dist/providers/python-provider.d.ts +75 -0
- package/dist/providers/python-provider.d.ts.map +1 -0
- package/dist/providers/python-provider.js +157 -0
- package/dist/providers/python-provider.js.map +1 -0
- package/dist/providers/replicate-provider.d.ts +73 -0
- package/dist/providers/replicate-provider.d.ts.map +1 -0
- package/dist/providers/replicate-provider.js +484 -0
- package/dist/providers/replicate-provider.js.map +1 -0
- package/dist/providers/rodin-provider.d.ts +41 -0
- package/dist/providers/rodin-provider.d.ts.map +1 -0
- package/dist/providers/rodin-provider.js +236 -0
- package/dist/providers/rodin-provider.js.map +1 -0
- package/dist/providers/scripted-provider.d.ts +141 -0
- package/dist/providers/scripted-provider.d.ts.map +1 -0
- package/dist/providers/scripted-provider.js +246 -0
- package/dist/providers/scripted-provider.js.map +1 -0
- package/dist/providers/together-provider.d.ts +20 -0
- package/dist/providers/together-provider.d.ts.map +1 -0
- package/dist/providers/together-provider.js +56 -0
- package/dist/providers/together-provider.js.map +1 -0
- package/dist/providers/types.d.ts +202 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/providers/vllm-provider.d.ts +22 -0
- package/dist/providers/vllm-provider.d.ts.map +1 -0
- package/dist/providers/vllm-provider.js +66 -0
- package/dist/providers/vllm-provider.js.map +1 -0
- package/dist/providers/voyage-provider.d.ts +37 -0
- package/dist/providers/voyage-provider.d.ts.map +1 -0
- package/dist/providers/voyage-provider.js +124 -0
- package/dist/providers/voyage-provider.js.map +1 -0
- package/dist/providers/xai-provider.d.ts +24 -0
- package/dist/providers/xai-provider.d.ts.map +1 -0
- package/dist/providers/xai-provider.js +57 -0
- package/dist/providers/xai-provider.js.map +1 -0
- package/dist/python-bridge-types.d.ts +70 -0
- package/dist/python-bridge-types.d.ts.map +1 -0
- package/dist/python-bridge-types.js +2 -0
- package/dist/python-bridge-types.js.map +1 -0
- package/dist/python-node-executor.d.ts +20 -0
- package/dist/python-node-executor.d.ts.map +1 -0
- package/dist/python-node-executor.js +219 -0
- package/dist/python-node-executor.js.map +1 -0
- package/dist/python-stdio-bridge.d.ts +67 -0
- package/dist/python-stdio-bridge.d.ts.map +1 -0
- package/dist/python-stdio-bridge.js +704 -0
- package/dist/python-stdio-bridge.js.map +1 -0
- package/dist/recommended-models.d.ts +17 -0
- package/dist/recommended-models.d.ts.map +1 -0
- package/dist/recommended-models.js +139 -0
- package/dist/recommended-models.js.map +1 -0
- package/dist/telemetry.d.ts +61 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +128 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/trace-exporters.d.ts +72 -0
- package/dist/trace-exporters.d.ts.map +1 -0
- package/dist/trace-exporters.js +216 -0
- package/dist/trace-exporters.js.map +1 -0
- package/dist/tracing-helpers.d.ts +99 -0
- package/dist/tracing-helpers.d.ts.map +1 -0
- package/dist/tracing-helpers.js +217 -0
- package/dist/tracing-helpers.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,515 @@
|
|
|
1
|
+
import { CostCalculator } from "./cost-calculator.js";
|
|
2
|
+
import { getTracer } from "../telemetry.js";
|
|
3
|
+
import { withUsageCapture, setLastUsage, consumeLastUsage, peekLastUsage, createUsageSlot } from "../tracing-helpers.js";
|
|
4
|
+
import { SpanStatusCode } from "@opentelemetry/api";
|
|
5
|
+
import { createLogger, getAssetFilePath } from "@nodetool-ai/config";
|
|
6
|
+
const log = createLogger("nodetool.runtime.provider");
|
|
7
|
+
/**
|
|
8
|
+
* Derive a provider's capability set by checking which optional `getAvailable*`
|
|
9
|
+
* methods it overrides on its prototype. Every provider can always generate
|
|
10
|
+
* messages; image/video/TTS/ASR/embedding are advertised only when the concrete
|
|
11
|
+
* class overrides the matching base method.
|
|
12
|
+
*
|
|
13
|
+
* Shared by `packages/websocket/src/models-api.ts` (REST leftover) and the
|
|
14
|
+
* `models` tRPC router so both report identical capabilities for the same
|
|
15
|
+
* provider instance.
|
|
16
|
+
*/
|
|
17
|
+
export function providerCapabilities(instance) {
|
|
18
|
+
const capabilities = [
|
|
19
|
+
"generate_message",
|
|
20
|
+
"generate_messages"
|
|
21
|
+
];
|
|
22
|
+
if (instance.getAvailableImageModels !==
|
|
23
|
+
BaseProvider.prototype.getAvailableImageModels) {
|
|
24
|
+
capabilities.push("text_to_image", "image_to_image");
|
|
25
|
+
}
|
|
26
|
+
if (instance.getAvailableVideoModels !==
|
|
27
|
+
BaseProvider.prototype.getAvailableVideoModels) {
|
|
28
|
+
capabilities.push("text_to_video", "image_to_video");
|
|
29
|
+
}
|
|
30
|
+
if (instance.getAvailableTTSModels !==
|
|
31
|
+
BaseProvider.prototype.getAvailableTTSModels) {
|
|
32
|
+
capabilities.push("text_to_speech");
|
|
33
|
+
}
|
|
34
|
+
if (instance.getAvailableASRModels !==
|
|
35
|
+
BaseProvider.prototype.getAvailableASRModels) {
|
|
36
|
+
capabilities.push("automatic_speech_recognition");
|
|
37
|
+
}
|
|
38
|
+
if (instance.getAvailableEmbeddingModels !==
|
|
39
|
+
BaseProvider.prototype.getAvailableEmbeddingModels) {
|
|
40
|
+
capabilities.push("generate_embedding");
|
|
41
|
+
}
|
|
42
|
+
if (instance.getAvailable3DModels !==
|
|
43
|
+
BaseProvider.prototype.getAvailable3DModels) {
|
|
44
|
+
// Providers that expose 3D models are assumed to support both task types;
|
|
45
|
+
// individual `textTo3D` / `imageTo3D` calls will throw if not implemented.
|
|
46
|
+
capabilities.push("text_to_3d", "image_to_3d");
|
|
47
|
+
}
|
|
48
|
+
return capabilities;
|
|
49
|
+
}
|
|
50
|
+
export class BaseProvider {
|
|
51
|
+
provider;
|
|
52
|
+
_cost = 0;
|
|
53
|
+
_emitMessage = null;
|
|
54
|
+
setMessageEmitter(fn) {
|
|
55
|
+
this._emitMessage = fn;
|
|
56
|
+
}
|
|
57
|
+
emitMessage(msg) {
|
|
58
|
+
if (this._emitMessage)
|
|
59
|
+
this._emitMessage(msg);
|
|
60
|
+
}
|
|
61
|
+
constructor(provider) {
|
|
62
|
+
this.provider = provider;
|
|
63
|
+
}
|
|
64
|
+
static requiredSecrets() {
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
getContainerEnv() {
|
|
68
|
+
return {};
|
|
69
|
+
}
|
|
70
|
+
async hasToolSupport(_model) {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
trackUsage(model, usage) {
|
|
74
|
+
const cost = CostCalculator.calculate(model, usage, this.provider);
|
|
75
|
+
this._cost += cost;
|
|
76
|
+
setLastUsage({
|
|
77
|
+
inputTokens: usage.inputTokens ?? 0,
|
|
78
|
+
outputTokens: usage.outputTokens ?? 0,
|
|
79
|
+
cachedInputTokens: usage.cachedTokens,
|
|
80
|
+
cost
|
|
81
|
+
});
|
|
82
|
+
log.debug("Cost tracked", { model, cost, total: this._cost });
|
|
83
|
+
return cost;
|
|
84
|
+
}
|
|
85
|
+
/** Alias for getTotalCost() — mirrors Python's BaseProvider.cost property. */
|
|
86
|
+
get cost() {
|
|
87
|
+
return this._cost;
|
|
88
|
+
}
|
|
89
|
+
getTotalCost() {
|
|
90
|
+
return this._cost;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Log a provider call for cost tracking.
|
|
94
|
+
* Base implementation logs to debug; subclasses or callers may persist to a Prediction model.
|
|
95
|
+
*/
|
|
96
|
+
async logProviderCall(args) {
|
|
97
|
+
log.debug("Provider call", {
|
|
98
|
+
userId: args.userId,
|
|
99
|
+
provider: args.provider,
|
|
100
|
+
model: args.model,
|
|
101
|
+
cost: args.cost,
|
|
102
|
+
workflowId: args.workflowId ?? null
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
resetCost() {
|
|
106
|
+
this._cost = 0;
|
|
107
|
+
}
|
|
108
|
+
async getAvailableLanguageModels() {
|
|
109
|
+
return [];
|
|
110
|
+
}
|
|
111
|
+
async getAvailableImageModels() {
|
|
112
|
+
return [];
|
|
113
|
+
}
|
|
114
|
+
async getAvailableVideoModels() {
|
|
115
|
+
return [];
|
|
116
|
+
}
|
|
117
|
+
async getAvailableTTSModels() {
|
|
118
|
+
return [];
|
|
119
|
+
}
|
|
120
|
+
async getAvailableASRModels() {
|
|
121
|
+
return [];
|
|
122
|
+
}
|
|
123
|
+
async getAvailableEmbeddingModels() {
|
|
124
|
+
return [];
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* 3D **generation** models exposed by this provider (e.g. Meshy's `meshy-4`,
|
|
128
|
+
* Rodin's `rodin-regular`). Override on providers that can synthesize 3D
|
|
129
|
+
* assets from text and/or images.
|
|
130
|
+
*/
|
|
131
|
+
async getAvailable3DModels() {
|
|
132
|
+
return [];
|
|
133
|
+
}
|
|
134
|
+
/** Traced wrapper around generateMessage. Use this instead of calling generateMessage directly. */
|
|
135
|
+
async generateMessageTraced(args) {
|
|
136
|
+
const startTime = Date.now();
|
|
137
|
+
const tracer = getTracer();
|
|
138
|
+
const doCall = async () => {
|
|
139
|
+
if (!tracer)
|
|
140
|
+
return this.generateMessage(args);
|
|
141
|
+
return tracer.startActiveSpan(`llm.chat ${this.provider}/${args.model}`, async (span) => {
|
|
142
|
+
this.applyLlmRequestAttributes(span, args, false);
|
|
143
|
+
try {
|
|
144
|
+
const result = await this.generateMessage(args);
|
|
145
|
+
const content = typeof result.content === "string"
|
|
146
|
+
? result.content
|
|
147
|
+
: JSON.stringify(result.content);
|
|
148
|
+
span.setAttributes({
|
|
149
|
+
"llm.response.role": result.role,
|
|
150
|
+
"llm.response.content": content.slice(0, 2000),
|
|
151
|
+
"llm.response.tool_calls_count": result.toolCalls?.length ?? 0
|
|
152
|
+
});
|
|
153
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
154
|
+
return result;
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
157
|
+
span.setStatus({
|
|
158
|
+
code: SpanStatusCode.ERROR,
|
|
159
|
+
message: String(err)
|
|
160
|
+
});
|
|
161
|
+
span.recordException(err);
|
|
162
|
+
throw err;
|
|
163
|
+
}
|
|
164
|
+
finally {
|
|
165
|
+
applyUsageAttributes(span, peekLastUsage());
|
|
166
|
+
span.end();
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
};
|
|
170
|
+
let result;
|
|
171
|
+
let error;
|
|
172
|
+
let usage = null;
|
|
173
|
+
try {
|
|
174
|
+
// withUsageCapture creates a per-call AsyncLocalStorage slot so
|
|
175
|
+
// trackUsage() in the provider hands its numbers back to us.
|
|
176
|
+
result = await withUsageCapture(async () => {
|
|
177
|
+
const r = await doCall();
|
|
178
|
+
usage = consumeLastUsage();
|
|
179
|
+
return r;
|
|
180
|
+
});
|
|
181
|
+
return result;
|
|
182
|
+
}
|
|
183
|
+
catch (err) {
|
|
184
|
+
error = String(err);
|
|
185
|
+
throw err;
|
|
186
|
+
}
|
|
187
|
+
finally {
|
|
188
|
+
this.emitMessage({
|
|
189
|
+
type: "llm_call",
|
|
190
|
+
node_id: "",
|
|
191
|
+
provider: this.provider,
|
|
192
|
+
model: args.model,
|
|
193
|
+
messages: args.messages.map((m) => ({
|
|
194
|
+
role: m.role,
|
|
195
|
+
content: m.content
|
|
196
|
+
})),
|
|
197
|
+
response: result?.content ?? null,
|
|
198
|
+
tool_calls: result?.toolCalls?.map((tc) => ({
|
|
199
|
+
id: tc.id,
|
|
200
|
+
name: tc.name,
|
|
201
|
+
args: tc.args
|
|
202
|
+
})) ?? null,
|
|
203
|
+
tokens_input: usage ? usage.inputTokens : null,
|
|
204
|
+
tokens_output: usage ? usage.outputTokens : null,
|
|
205
|
+
cost: usage ? (usage.cost ?? null) : null,
|
|
206
|
+
duration_ms: Date.now() - startTime,
|
|
207
|
+
error: error ?? null,
|
|
208
|
+
timestamp: new Date(startTime).toISOString()
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
applyLlmRequestAttributes(span, args, streaming) {
|
|
213
|
+
span.setAttributes({
|
|
214
|
+
"llm.provider": this.provider,
|
|
215
|
+
"llm.model": args.model,
|
|
216
|
+
"gen_ai.system": this.provider,
|
|
217
|
+
"gen_ai.request.model": args.model,
|
|
218
|
+
"gen_ai.operation.name": streaming ? "chat.stream" : "chat",
|
|
219
|
+
"llm.request.message_count": args.messages.length,
|
|
220
|
+
"llm.request.tools_count": args.tools?.length ?? 0,
|
|
221
|
+
"llm.request.stream": streaming,
|
|
222
|
+
// Only emit max_tokens / temperature when the caller actually set them —
|
|
223
|
+
// a literal 0 is a valid value and shouldn't be confused with "unset".
|
|
224
|
+
...(args.maxTokens !== undefined && {
|
|
225
|
+
"llm.request.max_tokens": args.maxTokens
|
|
226
|
+
}),
|
|
227
|
+
...(args.temperature !== undefined && {
|
|
228
|
+
"llm.request.temperature": args.temperature
|
|
229
|
+
})
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
/** Traced wrapper around generateMessages. Use this instead of calling generateMessages directly. */
|
|
233
|
+
async *generateMessagesTraced(args) {
|
|
234
|
+
const startTime = Date.now();
|
|
235
|
+
log.info("LLM call", {
|
|
236
|
+
provider: this.provider,
|
|
237
|
+
model: args.model,
|
|
238
|
+
toolCount: args.tools
|
|
239
|
+
? args.tools.length
|
|
240
|
+
: 0,
|
|
241
|
+
hasOnToolCall: !!args.onToolCall
|
|
242
|
+
});
|
|
243
|
+
let fullResponse = "";
|
|
244
|
+
const collectedToolCalls = [];
|
|
245
|
+
let error;
|
|
246
|
+
// Per-call usage slot survives across the generator's yields by wrapping
|
|
247
|
+
// each `next()` call in `runInSlot`.
|
|
248
|
+
const { runInSlot, getUsage } = createUsageSlot();
|
|
249
|
+
const tracer = getTracer();
|
|
250
|
+
const source = tracer
|
|
251
|
+
? this._tracedStream(args, tracer)
|
|
252
|
+
: this.generateMessages(args);
|
|
253
|
+
let exhausted = false;
|
|
254
|
+
try {
|
|
255
|
+
while (true) {
|
|
256
|
+
const result = await runInSlot(() => source.next());
|
|
257
|
+
if (result.done) {
|
|
258
|
+
exhausted = true;
|
|
259
|
+
break;
|
|
260
|
+
}
|
|
261
|
+
const item = result.value;
|
|
262
|
+
if ("type" in item && item.type === "chunk") {
|
|
263
|
+
const chunk = item;
|
|
264
|
+
if (chunk.content)
|
|
265
|
+
fullResponse += chunk.content;
|
|
266
|
+
}
|
|
267
|
+
if ("id" in item && "name" in item && "args" in item) {
|
|
268
|
+
const tc = item;
|
|
269
|
+
collectedToolCalls.push({
|
|
270
|
+
id: tc.id,
|
|
271
|
+
name: tc.name,
|
|
272
|
+
args: tc.args
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
yield item;
|
|
276
|
+
}
|
|
277
|
+
log.debug("LLM call complete", {
|
|
278
|
+
provider: this.provider,
|
|
279
|
+
model: args.model
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
catch (err) {
|
|
283
|
+
error = String(err);
|
|
284
|
+
throw err;
|
|
285
|
+
}
|
|
286
|
+
finally {
|
|
287
|
+
// If the consumer cancelled early (broke out of for-await, threw, or
|
|
288
|
+
// called return()), give the underlying generator a chance to close
|
|
289
|
+
// so _tracedStream's finally runs and the LLM stream span ends.
|
|
290
|
+
if (!exhausted) {
|
|
291
|
+
await runInSlot(() => source.return?.(undefined) ?? Promise.resolve({ done: true, value: undefined })).catch(() => { });
|
|
292
|
+
}
|
|
293
|
+
const usage = getUsage();
|
|
294
|
+
this.emitMessage({
|
|
295
|
+
type: "llm_call",
|
|
296
|
+
node_id: "",
|
|
297
|
+
provider: this.provider,
|
|
298
|
+
model: args.model,
|
|
299
|
+
messages: args.messages.map((m) => ({
|
|
300
|
+
role: m.role,
|
|
301
|
+
content: m.content
|
|
302
|
+
})),
|
|
303
|
+
response: fullResponse || null,
|
|
304
|
+
tool_calls: collectedToolCalls.length > 0 ? collectedToolCalls : null,
|
|
305
|
+
tokens_input: usage?.inputTokens ?? null,
|
|
306
|
+
tokens_output: usage?.outputTokens ?? null,
|
|
307
|
+
cost: usage?.cost ?? null,
|
|
308
|
+
duration_ms: Date.now() - startTime,
|
|
309
|
+
error: error ?? null,
|
|
310
|
+
timestamp: new Date(startTime).toISOString()
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
/** Internal: wrap generateMessages with OTel span */
|
|
315
|
+
async *_tracedStream(args, tracer) {
|
|
316
|
+
const span = tracer.startSpan(`llm.stream ${this.provider}/${args.model}`);
|
|
317
|
+
this.applyLlmRequestAttributes(span, args, true);
|
|
318
|
+
let chunkCount = 0;
|
|
319
|
+
try {
|
|
320
|
+
for await (const item of this.generateMessages(args)) {
|
|
321
|
+
chunkCount++;
|
|
322
|
+
yield item;
|
|
323
|
+
}
|
|
324
|
+
span.setAttributes({ "llm.response.chunk_count": chunkCount });
|
|
325
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
326
|
+
}
|
|
327
|
+
catch (err) {
|
|
328
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: String(err) });
|
|
329
|
+
span.recordException(err);
|
|
330
|
+
throw err;
|
|
331
|
+
}
|
|
332
|
+
finally {
|
|
333
|
+
applyUsageAttributes(span, peekLastUsage());
|
|
334
|
+
span.end();
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
async textToImage(_params) {
|
|
338
|
+
throw new Error(`${this.provider} does not support textToImage`);
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Generate multiple images from a text prompt.
|
|
342
|
+
*
|
|
343
|
+
* Default implementation calls textToImage() sequentially as a fallback.
|
|
344
|
+
* Providers that support native batch generation (e.g. FAL with num_images)
|
|
345
|
+
* should override this for efficiency.
|
|
346
|
+
*/
|
|
347
|
+
async textToImages(params, numImages) {
|
|
348
|
+
const results = [];
|
|
349
|
+
for (let i = 0; i < numImages; i++) {
|
|
350
|
+
results.push(await this.textToImage(params));
|
|
351
|
+
}
|
|
352
|
+
return results;
|
|
353
|
+
}
|
|
354
|
+
async imageToImage(_image, _params) {
|
|
355
|
+
throw new Error(`${this.provider} does not support imageToImage`);
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Generate multiple image-to-image results in one logical call.
|
|
359
|
+
*
|
|
360
|
+
* Default implementation calls imageToImage() sequentially as a fallback.
|
|
361
|
+
* Providers that support native batch generation should override this.
|
|
362
|
+
*/
|
|
363
|
+
async imageToImages(image, params, numImages) {
|
|
364
|
+
const results = [];
|
|
365
|
+
for (let i = 0; i < numImages; i++) {
|
|
366
|
+
results.push(await this.imageToImage(image, params));
|
|
367
|
+
}
|
|
368
|
+
return results;
|
|
369
|
+
}
|
|
370
|
+
async *textToSpeech(_args) {
|
|
371
|
+
yield* [];
|
|
372
|
+
throw new Error(`${this.provider} does not support textToSpeech`);
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Override this for providers that return fully-encoded audio (FLAC, WAV,
|
|
376
|
+
* MP3) instead of raw PCM samples. Returns null by default, meaning the
|
|
377
|
+
* caller should fall back to the streaming PCM `textToSpeech()` path.
|
|
378
|
+
*
|
|
379
|
+
* Providers that honor `audioFormat` should return audio in that container
|
|
380
|
+
* when possible and fall back to their default when the format is not
|
|
381
|
+
* supported. The returned `mimeType` reflects the actual bytes produced.
|
|
382
|
+
*/
|
|
383
|
+
async textToSpeechEncoded(_args) {
|
|
384
|
+
return null;
|
|
385
|
+
}
|
|
386
|
+
async automaticSpeechRecognition(_args) {
|
|
387
|
+
throw new Error(`${this.provider} does not support automaticSpeechRecognition`);
|
|
388
|
+
}
|
|
389
|
+
async textToVideo(_params) {
|
|
390
|
+
throw new Error(`${this.provider} does not support textToVideo`);
|
|
391
|
+
}
|
|
392
|
+
async imageToVideo(_image, _params) {
|
|
393
|
+
throw new Error(`${this.provider} does not support imageToVideo`);
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Generate a 3D asset from a text prompt. Returns the encoded asset bytes
|
|
397
|
+
* (typically GLB). Providers that support 3D generation should override.
|
|
398
|
+
*/
|
|
399
|
+
async textTo3D(_params) {
|
|
400
|
+
throw new Error(`${this.provider} does not support textTo3D`);
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Generate a 3D asset from a single reference image. Returns the encoded
|
|
404
|
+
* asset bytes (typically GLB). Providers that support 3D generation should
|
|
405
|
+
* override.
|
|
406
|
+
*/
|
|
407
|
+
async imageTo3D(_image, _params) {
|
|
408
|
+
throw new Error(`${this.provider} does not support imageTo3D`);
|
|
409
|
+
}
|
|
410
|
+
async generateEmbedding(_args) {
|
|
411
|
+
throw new Error(`${this.provider} does not support generateEmbedding`);
|
|
412
|
+
}
|
|
413
|
+
isContextLengthError(error) {
|
|
414
|
+
const msg = String(error).toLowerCase();
|
|
415
|
+
return msg.includes("context length") || msg.includes("maximum context");
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Check if an error is a rate limit error (HTTP 429).
|
|
419
|
+
* Subclasses may override for provider-specific detection.
|
|
420
|
+
*/
|
|
421
|
+
isRateLimitError(error) {
|
|
422
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
423
|
+
return /429|rate.?limit|too many requests/i.test(msg);
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Check if an error is an authentication error (HTTP 401/403).
|
|
427
|
+
* Subclasses may override for provider-specific detection.
|
|
428
|
+
*/
|
|
429
|
+
isAuthError(error) {
|
|
430
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
431
|
+
return /401|403|unauthorized|forbidden|invalid.*api.*key|authentication/i.test(msg);
|
|
432
|
+
}
|
|
433
|
+
parseToolCallArgs(raw) {
|
|
434
|
+
if (typeof raw !== "string") {
|
|
435
|
+
return {};
|
|
436
|
+
}
|
|
437
|
+
try {
|
|
438
|
+
const parsed = JSON.parse(raw);
|
|
439
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
440
|
+
return parsed;
|
|
441
|
+
}
|
|
442
|
+
return {};
|
|
443
|
+
}
|
|
444
|
+
catch {
|
|
445
|
+
return {};
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
buildToolCall(id, name, args) {
|
|
449
|
+
return {
|
|
450
|
+
id,
|
|
451
|
+
name,
|
|
452
|
+
args: this.parseToolCallArgs(args)
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Resolve a URI to a `data:` URI that providers can consume directly.
|
|
457
|
+
*
|
|
458
|
+
* - `file://...` → read from disk, return `data:<mime>;base64,…`
|
|
459
|
+
* - `/api/storage/<k>` → read from getDefaultAssetsPath()/<k> (legacy fallback)
|
|
460
|
+
* - Everything else → returned unchanged (http/https/data: pass through)
|
|
461
|
+
*/
|
|
462
|
+
async resolveUri(uri) {
|
|
463
|
+
const { readFile } = await import("node:fs/promises");
|
|
464
|
+
if (uri.startsWith("file://")) {
|
|
465
|
+
try {
|
|
466
|
+
const { fileURLToPath } = await import("node:url");
|
|
467
|
+
const filePath = fileURLToPath(uri);
|
|
468
|
+
const bytes = await readFile(filePath);
|
|
469
|
+
const ext = filePath.split(".").pop()?.toLowerCase() ?? "";
|
|
470
|
+
const mime = EXT_TO_MIME[ext] ?? "application/octet-stream";
|
|
471
|
+
return `data:${mime};base64,${bytes.toString("base64")}`;
|
|
472
|
+
}
|
|
473
|
+
catch {
|
|
474
|
+
return uri;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
// Legacy: old messages stored with browser-facing /api/storage/ path
|
|
478
|
+
if (uri.startsWith("/api/storage/")) {
|
|
479
|
+
const key = uri.slice("/api/storage/".length);
|
|
480
|
+
try {
|
|
481
|
+
const bytes = await readFile(getAssetFilePath(key));
|
|
482
|
+
const ext = key.split(".").pop()?.toLowerCase() ?? "";
|
|
483
|
+
const mime = EXT_TO_MIME[ext] ?? "application/octet-stream";
|
|
484
|
+
return `data:${mime};base64,${bytes.toString("base64")}`;
|
|
485
|
+
}
|
|
486
|
+
catch {
|
|
487
|
+
// Remote deployment: file not local, fall back to absolute HTTP
|
|
488
|
+
return `http://127.0.0.1:${process.env.PORT ?? 7777}${uri}`;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
return uri;
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
/** Attach gen_ai usage attributes to a span (no-op if usage is null). */
|
|
495
|
+
function applyUsageAttributes(span, usage) {
|
|
496
|
+
if (!usage)
|
|
497
|
+
return;
|
|
498
|
+
span.setAttributes({
|
|
499
|
+
"gen_ai.usage.input_tokens": usage.inputTokens,
|
|
500
|
+
"gen_ai.usage.output_tokens": usage.outputTokens,
|
|
501
|
+
"gen_ai.usage.total_tokens": usage.inputTokens + usage.outputTokens,
|
|
502
|
+
...(usage.cachedInputTokens !== undefined && {
|
|
503
|
+
"gen_ai.usage.cached_input_tokens": usage.cachedInputTokens
|
|
504
|
+
}),
|
|
505
|
+
...(usage.cost !== undefined && { "gen_ai.usage.cost_credits": usage.cost })
|
|
506
|
+
});
|
|
507
|
+
}
|
|
508
|
+
const EXT_TO_MIME = {
|
|
509
|
+
jpg: "image/jpeg", jpeg: "image/jpeg", png: "image/png",
|
|
510
|
+
gif: "image/gif", webp: "image/webp", svg: "image/svg+xml",
|
|
511
|
+
mp4: "video/mp4", webm: "video/webm",
|
|
512
|
+
mp3: "audio/mpeg", wav: "audio/wav", ogg: "audio/ogg",
|
|
513
|
+
pdf: "application/pdf"
|
|
514
|
+
};
|
|
515
|
+
//# sourceMappingURL=base-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-provider.js","sourceRoot":"","sources":["../../src/providers/base-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import OpenAI from "openai";
|
|
2
|
+
import { OpenAIProvider } from "./openai-provider.js";
|
|
3
|
+
import type { LanguageModel } from "./types.js";
|
|
4
|
+
interface CerebrasProviderOptions {
|
|
5
|
+
client?: OpenAI;
|
|
6
|
+
clientFactory?: (apiKey: string) => OpenAI;
|
|
7
|
+
fetchFn?: typeof fetch;
|
|
8
|
+
}
|
|
9
|
+
export declare class CerebrasProvider extends OpenAIProvider {
|
|
10
|
+
static requiredSecrets(): string[];
|
|
11
|
+
private _cerebrasFetch;
|
|
12
|
+
constructor(secrets: {
|
|
13
|
+
CEREBRAS_API_KEY?: string;
|
|
14
|
+
}, options?: CerebrasProviderOptions);
|
|
15
|
+
getContainerEnv(): Record<string, string>;
|
|
16
|
+
hasToolSupport(_model: string): Promise<boolean>;
|
|
17
|
+
getAvailableLanguageModels(): Promise<LanguageModel[]>;
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=cerebras-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cerebras-provider.d.ts","sourceRoot":"","sources":["../../src/providers/cerebras-provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,UAAU,uBAAuB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAED,qBAAa,gBAAiB,SAAQ,cAAc;WAClC,eAAe,IAAI,MAAM,EAAE;IAI3C,OAAO,CAAC,cAAc,CAAe;gBAGnC,OAAO,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,EACtC,OAAO,GAAE,uBAA4B;IA4B9B,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAInC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhD,0BAA0B,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;CA6BtE"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import OpenAI from "openai";
|
|
2
|
+
import { OpenAIProvider } from "./openai-provider.js";
|
|
3
|
+
export class CerebrasProvider extends OpenAIProvider {
|
|
4
|
+
static requiredSecrets() {
|
|
5
|
+
return ["CEREBRAS_API_KEY"];
|
|
6
|
+
}
|
|
7
|
+
_cerebrasFetch;
|
|
8
|
+
constructor(secrets, options = {}) {
|
|
9
|
+
const apiKey = secrets.CEREBRAS_API_KEY;
|
|
10
|
+
if (!apiKey) {
|
|
11
|
+
throw new Error("CEREBRAS_API_KEY is required");
|
|
12
|
+
}
|
|
13
|
+
const fetchFn = options.fetchFn ?? globalThis.fetch.bind(globalThis);
|
|
14
|
+
super({ OPENAI_API_KEY: apiKey }, {
|
|
15
|
+
client: options.client,
|
|
16
|
+
clientFactory: options.clientFactory ??
|
|
17
|
+
((key) => new OpenAI({
|
|
18
|
+
apiKey: key,
|
|
19
|
+
baseURL: "https://api.cerebras.ai/v1"
|
|
20
|
+
})),
|
|
21
|
+
fetchFn
|
|
22
|
+
});
|
|
23
|
+
this.provider = "cerebras";
|
|
24
|
+
this._cerebrasFetch = fetchFn;
|
|
25
|
+
}
|
|
26
|
+
getContainerEnv() {
|
|
27
|
+
return { CEREBRAS_API_KEY: this.apiKey };
|
|
28
|
+
}
|
|
29
|
+
async hasToolSupport(_model) {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
async getAvailableLanguageModels() {
|
|
33
|
+
const response = await this._cerebrasFetch("https://api.cerebras.ai/v1/models", {
|
|
34
|
+
headers: {
|
|
35
|
+
Authorization: `Bearer ${this.apiKey}`
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
if (!response.ok) {
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
const payload = (await response.json());
|
|
42
|
+
const rows = payload.data ?? [];
|
|
43
|
+
return rows
|
|
44
|
+
.filter((row) => typeof row.id === "string" && row.id.length > 0)
|
|
45
|
+
.map((row) => ({
|
|
46
|
+
id: row.id,
|
|
47
|
+
name: row.name ?? row.id,
|
|
48
|
+
provider: "cerebras"
|
|
49
|
+
}));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=cerebras-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cerebras-provider.js","sourceRoot":"","sources":["../../src/providers/cerebras-provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAStD,MAAM,OAAO,gBAAiB,SAAQ,cAAc;IAClD,MAAM,CAAU,eAAe;QAC7B,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC9B,CAAC;IAEO,cAAc,CAAe;IAErC,YACE,OAAsC,EACtC,UAAmC,EAAE;QAErC,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACxC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAErE,KAAK,CACH,EAAE,cAAc,EAAE,MAAM,EAAE,EAC1B;YACE,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,aAAa,EACX,OAAO,CAAC,aAAa;gBACrB,CAAC,CAAC,GAAG,EAAE,EAAE,CACP,IAAI,MAAM,CAAC;oBACT,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,4BAA4B;iBACtC,CAAC,CAAC;YACP,OAAO;SACR,CACF,CAAC;QAED,IAA6B,CAAC,QAAQ,GAAG,UAAU,CAAC;QACrD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;IAChC,CAAC;IAEQ,eAAe;QACtB,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IAC3C,CAAC;IAEQ,KAAK,CAAC,cAAc,CAAC,MAAc;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAEQ,KAAK,CAAC,0BAA0B;QACvC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CACxC,mCAAmC,EACnC;YACE,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aACvC;SACF,CACF,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAErC,CAAC;QACF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;QAChC,OAAO,IAAI;aACR,MAAM,CACL,CAAC,GAAG,EAAwC,EAAE,CAC5C,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAClD;aACA,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACb,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE;YACxB,QAAQ,EAAE,UAAU;SACrB,CAAC,CAAC,CAAC;IACR,CAAC;CACF"}
|