@delofarag/ai-utils 1.8.2 → 1.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.
|
@@ -20,7 +20,9 @@ export declare const OPENROUTER_DATA_SAFE_KWARGS: {
|
|
|
20
20
|
* `sort=intelligence-high-to-low`); es gewinnt das intelligenteste :free-Model.
|
|
21
21
|
* Kein Test-Request — tote Kandidaten fängt das Self-Healing der Instanz ab.
|
|
22
22
|
*/
|
|
23
|
-
export declare function fetchBestFreeModel(baseURL?: string
|
|
23
|
+
export declare function fetchBestFreeModel(baseURL?: string,
|
|
24
|
+
/** Zusätzlich zu überspringende Model-ids (z.B. temporär, für transiente Heals). */
|
|
25
|
+
extraExcluded?: Set<string>): Promise<string>;
|
|
24
26
|
/**
|
|
25
27
|
* OpenRouter-Limits für :free-Models (Stand 2026-07, docs/api/reference/limits):
|
|
26
28
|
* 20 Requests/Minute; 50 Requests/Tag (unter 10 lifetime gekauften Credits)
|
|
@@ -77,9 +79,18 @@ export declare class FreeOpenRouterLLM extends ChatOpenAI {
|
|
|
77
79
|
baseURL: string;
|
|
78
80
|
modelKwargs?: Record<string, unknown>;
|
|
79
81
|
});
|
|
82
|
+
/** Permanent: Model ist weg/nicht mehr gratis → dauerhaft ausschließen und nächstbestes holen. */
|
|
80
83
|
private heal;
|
|
84
|
+
/**
|
|
85
|
+
* Transient: Provider gerade überlastet → NUR für diesen Call auf ein anderes
|
|
86
|
+
* Free-Model (anderer Provider) wechseln, ohne das gute Model dauerhaft
|
|
87
|
+
* auszuschließen. Das beste Model wird nach dem Call wiederhergestellt.
|
|
88
|
+
*/
|
|
89
|
+
private healTransient;
|
|
81
90
|
_generate(messages: BaseMessage[], options: this["ParsedCallOptions"], runManager?: CallbackManagerForLLMRun): Promise<ChatResult>;
|
|
82
91
|
_streamResponseChunks(messages: BaseMessage[], options: this["ParsedCallOptions"], runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatGenerationChunk>;
|
|
92
|
+
/** Nach transientem Temp-Wechsel das ursprüngliche (beste) Model wiederherstellen — außer es wurde dauerhaft ausgeschlossen. */
|
|
93
|
+
private restoreModel;
|
|
83
94
|
}
|
|
84
95
|
/** Async-Pfad von `getLLM({ provider: "openrouter", free: true })`. */
|
|
85
96
|
export declare function getFreeOpenRouterLLM(config: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"free-llm.d.ts","sourceRoot":"","sources":["../../../src/helpers/llm/free-llm.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,KAAK,UAAU,EACf,KAAK,wBAAwB,EAC9B,MAAM,eAAe,CAAA;AAEtB,eAAO,MAAM,mBAAmB,iCAAiC,CAAA;AACjE,eAAO,MAAM,sBAAsB,oCAAoC,CAAA;AAEvE;;;;GAIG;AACH,eAAO,MAAM,2BAA2B;;;;;;CAM9B,CAAA;AAuBV;;;;;;GAMG;AACH,wBAAsB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"free-llm.d.ts","sourceRoot":"","sources":["../../../src/helpers/llm/free-llm.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,KAAK,UAAU,EACf,KAAK,wBAAwB,EAC9B,MAAM,eAAe,CAAA;AAEtB,eAAO,MAAM,mBAAmB,iCAAiC,CAAA;AACjE,eAAO,MAAM,sBAAsB,oCAAoC,CAAA;AAEvE;;;;GAIG;AACH,eAAO,MAAM,2BAA2B;;;;;;CAM9B,CAAA;AAuBV;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,GAAE,MAA4B;AACrC,oFAAoF;AACpF,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC1B,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,yGAAyG;IACzG,QAAQ,CAAC,IAAI,yBAAwB;IACrC,kHAAkH;IAClH,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAA;IAC5C,4FAA4F;IAC5F,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IACnC,iDAAiD;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;gBAEV,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAE;CAStH;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CA6BrF;AA4ED;;;;;;;GAOG;AACH,qBAAa,iBAAkB,SAAQ,UAAU;IAC/C,QAAQ,EAAE,YAAY,CAAe;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;gBAExB,MAAM,EAAE;QAClB,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,MAAM,CAAA;QACf,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACtC;IAUD,kGAAkG;YACpF,IAAI;IAKlB;;;;OAIG;YACW,aAAa;IAKrB,SAAS,CACb,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,EAClC,UAAU,CAAC,EAAE,wBAAwB,GACpC,OAAO,CAAC,UAAU,CAAC;IA6Bf,qBAAqB,CAC1B,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,EAClC,UAAU,CAAC,EAAE,wBAAwB,GACpC,cAAc,CAAC,mBAAmB,CAAC;IAqCtC,gIAAgI;IAChI,OAAO,CAAC,YAAY;CAKrB;AAED,uEAAuE;AACvE,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAU7B"}
|
|
@@ -38,10 +38,14 @@ async function fetchFreeRanking(baseURL, sort) {
|
|
|
38
38
|
* `sort=intelligence-high-to-low`); es gewinnt das intelligenteste :free-Model.
|
|
39
39
|
* Kein Test-Request — tote Kandidaten fängt das Self-Healing der Instanz ab.
|
|
40
40
|
*/
|
|
41
|
-
export async function fetchBestFreeModel(baseURL = OPENROUTER_BASE_URL
|
|
41
|
+
export async function fetchBestFreeModel(baseURL = OPENROUTER_BASE_URL,
|
|
42
|
+
/** Zusätzlich zu überspringende Model-ids (z.B. temporär, für transiente Heals). */
|
|
43
|
+
extraExcluded) {
|
|
42
44
|
const byIntelligence = await fetchFreeRanking(baseURL, "intelligence-high-to-low");
|
|
43
45
|
// Sind alle Kandidaten ausgeschlossen, lieber den besten erneut versuchen als hart failen.
|
|
44
|
-
const pick = byIntelligence.find((id) => !excludedFreeModels.has(id)) ??
|
|
46
|
+
const pick = byIntelligence.find((id) => !excludedFreeModels.has(id) && !extraExcluded?.has(id)) ??
|
|
47
|
+
byIntelligence.find((id) => !excludedFreeModels.has(id)) ??
|
|
48
|
+
byIntelligence[0];
|
|
45
49
|
if (!pick) {
|
|
46
50
|
throw new Error("No :free model with tool support available on OpenRouter right now");
|
|
47
51
|
}
|
|
@@ -123,7 +127,58 @@ function isModelGoneError(error) {
|
|
|
123
127
|
return true;
|
|
124
128
|
return /not a valid model id|no endpoints found/i.test(message);
|
|
125
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* Erkennt TRANSIENTE Upstream-/Kapazitätsfehler eines konkreten :free-Providers
|
|
132
|
+
* (z.B. Nvidia "ResourceExhausted: Worker local total request limit reached (32/32)",
|
|
133
|
+
* OpenRouter "temporarily rate-limited upstream", 502/503/504 vom Provider,
|
|
134
|
+
* Netzwerk-Timeouts). Kurzlebig — ein Retry auf einem anderen Free-Model (=anderer
|
|
135
|
+
* Provider) klappt i.d.R. sofort. Bewusst NICHT: echte Account-429 (free-per-day/min),
|
|
136
|
+
* Auth- oder Model-weg-Fehler.
|
|
137
|
+
*/
|
|
138
|
+
function isTransientUpstreamError(error) {
|
|
139
|
+
const err = error;
|
|
140
|
+
const status = typeof err?.status === "number" ? err.status : typeof err?.code === "number" ? err.code : undefined;
|
|
141
|
+
if (status === 500 || status === 502 || status === 503 || status === 504 || status === 529)
|
|
142
|
+
return true;
|
|
143
|
+
// Fehlertext kann je nach LangChain/OpenRouter/SDK unterschiedlich verschachtelt sein
|
|
144
|
+
// (message, error.message, error.metadata.raw, cause.message …) — alles einsammeln.
|
|
145
|
+
const e = err;
|
|
146
|
+
const haystack = [
|
|
147
|
+
e?.message,
|
|
148
|
+
e?.error?.message,
|
|
149
|
+
e?.error?.metadata?.raw,
|
|
150
|
+
e?.metadata?.raw,
|
|
151
|
+
e?.cause?.message,
|
|
152
|
+
(() => {
|
|
153
|
+
try {
|
|
154
|
+
return JSON.stringify(error);
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
return "";
|
|
158
|
+
}
|
|
159
|
+
})(),
|
|
160
|
+
]
|
|
161
|
+
.filter((s) => typeof s === "string")
|
|
162
|
+
.join(" ");
|
|
163
|
+
return /ResourceExhausted|Worker local total request limit|resource[_ ]?exhausted|no instances? available|temporarily (rate.?limited|unavailable)|overloaded|at capacity|Upstream error|ECONNRESET|ETIMEDOUT|ECONNREFUSED|network error|fetch failed|socket hang ?up/i.test(haystack);
|
|
164
|
+
}
|
|
165
|
+
/** Hat ein Stream-Chunk sichtbaren Textinhalt? (leere Rollen-/Start-Chunks → false) */
|
|
166
|
+
function chunkHasText(chunk) {
|
|
167
|
+
const text = chunk?.text;
|
|
168
|
+
if (typeof text === "string" && text.trim().length > 0)
|
|
169
|
+
return true;
|
|
170
|
+
const content = chunk?.message?.content;
|
|
171
|
+
if (typeof content === "string" && content.trim().length > 0)
|
|
172
|
+
return true;
|
|
173
|
+
if (Array.isArray(content)) {
|
|
174
|
+
return content.some((p) => typeof p?.text === "string" && p.text.trim().length > 0);
|
|
175
|
+
}
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
126
179
|
const MAX_HEALS_PER_CALL = 3;
|
|
180
|
+
const MAX_TRANSIENT_HEALS_PER_CALL = 3;
|
|
181
|
+
const TRANSIENT_RETRY_BASE_MS = 400;
|
|
127
182
|
/**
|
|
128
183
|
* ChatOpenAI gegen OpenRouter, festgenagelt auf das beste :free-Model.
|
|
129
184
|
*
|
|
@@ -144,50 +199,98 @@ export class FreeOpenRouterLLM extends ChatOpenAI {
|
|
|
144
199
|
});
|
|
145
200
|
this.freeBaseURL = fields.baseURL;
|
|
146
201
|
}
|
|
202
|
+
/** Permanent: Model ist weg/nicht mehr gratis → dauerhaft ausschließen und nächstbestes holen. */
|
|
147
203
|
async heal() {
|
|
148
204
|
excludedFreeModels.add(this.model);
|
|
149
205
|
this.model = await fetchBestFreeModel(this.freeBaseURL);
|
|
150
206
|
}
|
|
207
|
+
/**
|
|
208
|
+
* Transient: Provider gerade überlastet → NUR für diesen Call auf ein anderes
|
|
209
|
+
* Free-Model (anderer Provider) wechseln, ohne das gute Model dauerhaft
|
|
210
|
+
* auszuschließen. Das beste Model wird nach dem Call wiederhergestellt.
|
|
211
|
+
*/
|
|
212
|
+
async healTransient(localExcluded) {
|
|
213
|
+
localExcluded.add(this.model);
|
|
214
|
+
this.model = await fetchBestFreeModel(this.freeBaseURL, localExcluded);
|
|
215
|
+
}
|
|
151
216
|
async _generate(messages, options, runManager) {
|
|
152
217
|
let heals = 0;
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
218
|
+
let transientHeals = 0;
|
|
219
|
+
const originalModel = this.model;
|
|
220
|
+
const localExcluded = new Set();
|
|
221
|
+
try {
|
|
222
|
+
while (true) {
|
|
223
|
+
try {
|
|
224
|
+
return await super._generate(messages, options, runManager);
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
// Transient zuerst: kann als 429 ODER 5xx kommen — kurz warten, Provider wechseln, erneut.
|
|
228
|
+
if (isTransientUpstreamError(error) && transientHeals < MAX_TRANSIENT_HEALS_PER_CALL) {
|
|
229
|
+
transientHeals++;
|
|
230
|
+
await delay(TRANSIENT_RETRY_BASE_MS * transientHeals);
|
|
231
|
+
await this.healTransient(localExcluded);
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
const limitError = toFreeLimitError(error, this.model);
|
|
235
|
+
if (limitError)
|
|
236
|
+
throw limitError;
|
|
237
|
+
if (!isModelGoneError(error) || heals >= MAX_HEALS_PER_CALL)
|
|
238
|
+
throw error;
|
|
239
|
+
heals++;
|
|
240
|
+
await this.heal();
|
|
241
|
+
}
|
|
165
242
|
}
|
|
166
243
|
}
|
|
244
|
+
finally {
|
|
245
|
+
this.restoreModel(originalModel);
|
|
246
|
+
}
|
|
167
247
|
}
|
|
168
248
|
async *_streamResponseChunks(messages, options, runManager) {
|
|
169
249
|
let heals = 0;
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
250
|
+
let transientHeals = 0;
|
|
251
|
+
const originalModel = this.model;
|
|
252
|
+
const localExcluded = new Set();
|
|
253
|
+
try {
|
|
254
|
+
while (true) {
|
|
255
|
+
// Nur heilen, solange noch kein SICHTBARER Text beim Aufrufer ist. Provider
|
|
256
|
+
// schicken oft leere Rollen-/Start-Chunks, bevor der Upstream-Fehler kommt —
|
|
257
|
+
// die dürfen das Heilen NICHT blockieren (sonst rutscht der Fehler durch).
|
|
258
|
+
// Ein Neustart nach nur leeren Chunks dupliziert keinen sichtbaren Output.
|
|
259
|
+
let emittedText = false;
|
|
260
|
+
try {
|
|
261
|
+
for await (const chunk of super._streamResponseChunks(messages, options, runManager)) {
|
|
262
|
+
if (!emittedText && chunkHasText(chunk))
|
|
263
|
+
emittedText = true;
|
|
264
|
+
yield chunk;
|
|
265
|
+
}
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
if (!emittedText && isTransientUpstreamError(error) && transientHeals < MAX_TRANSIENT_HEALS_PER_CALL) {
|
|
270
|
+
transientHeals++;
|
|
271
|
+
await delay(TRANSIENT_RETRY_BASE_MS * transientHeals);
|
|
272
|
+
await this.healTransient(localExcluded);
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
const limitError = toFreeLimitError(error, this.model);
|
|
276
|
+
if (limitError)
|
|
277
|
+
throw limitError;
|
|
278
|
+
if (emittedText || !isModelGoneError(error) || heals >= MAX_HEALS_PER_CALL)
|
|
279
|
+
throw error;
|
|
280
|
+
heals++;
|
|
281
|
+
await this.heal();
|
|
178
282
|
}
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
catch (error) {
|
|
182
|
-
const limitError = toFreeLimitError(error, this.model);
|
|
183
|
-
if (limitError)
|
|
184
|
-
throw limitError;
|
|
185
|
-
if (yielded || !isModelGoneError(error) || heals >= MAX_HEALS_PER_CALL)
|
|
186
|
-
throw error;
|
|
187
|
-
heals++;
|
|
188
|
-
await this.heal();
|
|
189
283
|
}
|
|
190
284
|
}
|
|
285
|
+
finally {
|
|
286
|
+
this.restoreModel(originalModel);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
/** Nach transientem Temp-Wechsel das ursprüngliche (beste) Model wiederherstellen — außer es wurde dauerhaft ausgeschlossen. */
|
|
290
|
+
restoreModel(originalModel) {
|
|
291
|
+
if (this.model !== originalModel && !excludedFreeModels.has(originalModel)) {
|
|
292
|
+
this.model = originalModel;
|
|
293
|
+
}
|
|
191
294
|
}
|
|
192
295
|
}
|
|
193
296
|
/** Async-Pfad von `getLLM({ provider: "openrouter", free: true })`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"free-llm.js","sourceRoot":"","sources":["../../../src/helpers/llm/free-llm.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,GAKX,MAAM,eAAe,CAAA;AAEtB,MAAM,CAAC,MAAM,mBAAmB,GAAG,8BAA8B,CAAA;AACjE,MAAM,CAAC,MAAM,sBAAsB,GAAG,iCAAiC,CAAA;AAEvE;;;;GAIG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,QAAQ,EAAE;QACR,eAAe,EAAE,MAAM;QACvB,GAAG,EAAE,IAAI;QACT,eAAe,EAAE,KAAK;KACvB;CACO,CAAA;AAEV;;;GAGG;AACH,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAA;AAE5C,2EAA2E;AAC3E,KAAK,UAAU,gBAAgB,CAAC,OAAe,EAAE,IAAY;IAC3D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,uDAAuD,IAAI,EAAE,CAAC,CAAA;IAChG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAA;IACtF,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAsC,CAAA;IACpE,yEAAyE;IACzE,yCAAyC;IACzC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;SACrB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;SAC9B,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAA;AACzC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,
|
|
1
|
+
{"version":3,"file":"free-llm.js","sourceRoot":"","sources":["../../../src/helpers/llm/free-llm.ts"],"names":[],"mappings":"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"}
|