@yourgpt/llm-sdk 2.1.4-alpha.1 → 2.1.4-alpha.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/adapters/index.d.mts +4 -2
- package/dist/adapters/index.d.ts +4 -2
- package/dist/base-5n-UuPfS.d.mts +768 -0
- package/dist/base-Di31iy_8.d.ts +768 -0
- package/dist/fallback/index.d.mts +96 -0
- package/dist/fallback/index.d.ts +96 -0
- package/dist/fallback/index.js +284 -0
- package/dist/fallback/index.mjs +280 -0
- package/dist/index.d.mts +62 -3
- package/dist/index.d.ts +62 -3
- package/dist/index.js +117 -2
- package/dist/index.mjs +116 -3
- package/dist/providers/anthropic/index.d.mts +3 -1
- package/dist/providers/anthropic/index.d.ts +3 -1
- package/dist/providers/azure/index.d.mts +3 -1
- package/dist/providers/azure/index.d.ts +3 -1
- package/dist/providers/google/index.d.mts +3 -1
- package/dist/providers/google/index.d.ts +3 -1
- package/dist/providers/ollama/index.d.mts +4 -2
- package/dist/providers/ollama/index.d.ts +4 -2
- package/dist/providers/openai/index.d.mts +3 -1
- package/dist/providers/openai/index.d.ts +3 -1
- package/dist/providers/openrouter/index.d.mts +3 -1
- package/dist/providers/openrouter/index.d.ts +3 -1
- package/dist/providers/xai/index.d.mts +3 -1
- package/dist/providers/xai/index.d.ts +3 -1
- package/dist/types-BQl1suAv.d.mts +212 -0
- package/dist/types-C0vLXzuw.d.ts +355 -0
- package/dist/types-CNL8ZRne.d.ts +212 -0
- package/dist/types-CR8mi9I0.d.mts +417 -0
- package/dist/types-CR8mi9I0.d.ts +417 -0
- package/dist/types-VDgiUvH2.d.mts +355 -0
- package/dist/yourgpt/index.d.mts +77 -0
- package/dist/yourgpt/index.d.ts +77 -0
- package/dist/yourgpt/index.js +167 -0
- package/dist/yourgpt/index.mjs +164 -0
- package/package.json +12 -1
- package/dist/adapters/index.js.map +0 -1
- package/dist/adapters/index.mjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/providers/anthropic/index.js.map +0 -1
- package/dist/providers/anthropic/index.mjs.map +0 -1
- package/dist/providers/azure/index.js.map +0 -1
- package/dist/providers/azure/index.mjs.map +0 -1
- package/dist/providers/google/index.js.map +0 -1
- package/dist/providers/google/index.mjs.map +0 -1
- package/dist/providers/ollama/index.js.map +0 -1
- package/dist/providers/ollama/index.mjs.map +0 -1
- package/dist/providers/openai/index.js.map +0 -1
- package/dist/providers/openai/index.mjs.map +0 -1
- package/dist/providers/openrouter/index.js.map +0 -1
- package/dist/providers/openrouter/index.mjs.map +0 -1
- package/dist/providers/xai/index.js.map +0 -1
- package/dist/providers/xai/index.mjs.map +0 -1
- package/dist/types-COAOEe_y.d.mts +0 -1460
- package/dist/types-COAOEe_y.d.ts +0 -1460
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
// src/fallback/errors.ts
|
|
2
|
+
var FallbackExhaustedError = class extends Error {
|
|
3
|
+
constructor(failures) {
|
|
4
|
+
const summary = failures.map((f) => `${f.provider}/${f.model}: ${f.error.message}`).join("; ");
|
|
5
|
+
super(
|
|
6
|
+
`All ${failures.length} model(s) in the fallback chain failed. ${summary}`
|
|
7
|
+
);
|
|
8
|
+
this.name = "FallbackExhaustedError";
|
|
9
|
+
this.failures = failures;
|
|
10
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
// src/fallback/routing-store.ts
|
|
15
|
+
var MemoryRoutingStore = class {
|
|
16
|
+
constructor() {
|
|
17
|
+
this._map = /* @__PURE__ */ new Map();
|
|
18
|
+
}
|
|
19
|
+
async get(key) {
|
|
20
|
+
return this._map.get(key);
|
|
21
|
+
}
|
|
22
|
+
async set(key, value) {
|
|
23
|
+
this._map.set(key, value);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
// src/fallback/chain.ts
|
|
28
|
+
var ROUND_ROBIN_KEY = "ygpt_fallback_rr_index";
|
|
29
|
+
function defaultIsRetryable(error) {
|
|
30
|
+
if (typeof error === "object" && error !== null) {
|
|
31
|
+
const ctorName = error.constructor?.name ?? "";
|
|
32
|
+
if (ctorName === "APIUserAbortError") return false;
|
|
33
|
+
if (ctorName === "APIConnectionError") return true;
|
|
34
|
+
if (ctorName === "APIConnectionTimeoutError") return true;
|
|
35
|
+
const status = error.status ?? error.statusCode;
|
|
36
|
+
if (typeof status === "number") {
|
|
37
|
+
if (status === 429) return true;
|
|
38
|
+
if (status >= 500) return true;
|
|
39
|
+
if (status >= 400) return false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (error instanceof Error) {
|
|
43
|
+
const msg = error.message;
|
|
44
|
+
if (/the operation was aborted/i.test(msg)) return false;
|
|
45
|
+
if (/the user aborted a request/i.test(msg)) return false;
|
|
46
|
+
if (/\b4[0-9]{2}\b/.test(msg) && !/\b429\b/.test(msg)) return false;
|
|
47
|
+
if (/\b429\b/.test(msg)) return true;
|
|
48
|
+
if (/rate[\s_-]?limit/i.test(msg)) return true;
|
|
49
|
+
if (/too many requests/i.test(msg)) return true;
|
|
50
|
+
if (/quota exceeded/i.test(msg)) return true;
|
|
51
|
+
if (/\b5[0-9]{2}\b/.test(msg)) return true;
|
|
52
|
+
if (/internal server error/i.test(msg)) return true;
|
|
53
|
+
if (/service unavailable/i.test(msg)) return true;
|
|
54
|
+
if (/bad gateway/i.test(msg)) return true;
|
|
55
|
+
if (/gateway timeout/i.test(msg)) return true;
|
|
56
|
+
if (/overloaded/i.test(msg)) return true;
|
|
57
|
+
if (/^connection error\.?$/i.test(msg)) return true;
|
|
58
|
+
if (/^request timed out\.?$/i.test(msg)) return true;
|
|
59
|
+
if (/timed?\s*out/i.test(msg)) return true;
|
|
60
|
+
if (/timeout/i.test(msg)) return true;
|
|
61
|
+
if (/fetch failed/i.test(msg)) return true;
|
|
62
|
+
if (/ECONNREFUSED/.test(msg)) return true;
|
|
63
|
+
if (/ECONNRESET/.test(msg)) return true;
|
|
64
|
+
if (/ETIMEDOUT/.test(msg)) return true;
|
|
65
|
+
if (/ENOTFOUND/.test(msg)) return true;
|
|
66
|
+
if (/ENETUNREACH/.test(msg)) return true;
|
|
67
|
+
if (/EHOSTUNREACH/.test(msg)) return true;
|
|
68
|
+
}
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
function calcDelay(base, attempt, backoff) {
|
|
72
|
+
if (backoff === "fixed") return base;
|
|
73
|
+
return base * Math.pow(2, attempt - 1);
|
|
74
|
+
}
|
|
75
|
+
function sleep(ms) {
|
|
76
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
77
|
+
}
|
|
78
|
+
var FallbackChain = class {
|
|
79
|
+
constructor(config) {
|
|
80
|
+
if (config.models.length === 0) {
|
|
81
|
+
throw new Error("FallbackChain requires at least one model.");
|
|
82
|
+
}
|
|
83
|
+
this._config = {
|
|
84
|
+
models: config.models,
|
|
85
|
+
strategy: config.strategy ?? "priority",
|
|
86
|
+
store: config.store ?? new MemoryRoutingStore(),
|
|
87
|
+
retries: config.retries ?? 0,
|
|
88
|
+
retryDelay: config.retryDelay ?? 500,
|
|
89
|
+
retryBackoff: config.retryBackoff ?? "exponential",
|
|
90
|
+
onFallback: config.onFallback,
|
|
91
|
+
onRetry: config.onRetry,
|
|
92
|
+
retryableErrors: config.retryableErrors
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
get provider() {
|
|
96
|
+
return "fallback-chain";
|
|
97
|
+
}
|
|
98
|
+
get model() {
|
|
99
|
+
return this._config.models.map((m) => `${m.provider}/${m.model}`).join(",");
|
|
100
|
+
}
|
|
101
|
+
async _startIndex() {
|
|
102
|
+
if (this._config.strategy !== "round-robin") return 0;
|
|
103
|
+
const stored = await this._config.store.get(ROUND_ROBIN_KEY);
|
|
104
|
+
return typeof stored === "number" ? stored % this._config.models.length : 0;
|
|
105
|
+
}
|
|
106
|
+
async _advanceIndex(successfulIndex) {
|
|
107
|
+
if (this._config.strategy !== "round-robin") return;
|
|
108
|
+
const next = (successfulIndex + 1) % this._config.models.length;
|
|
109
|
+
await this._config.store.set(ROUND_ROBIN_KEY, next);
|
|
110
|
+
}
|
|
111
|
+
_isRetryable(error) {
|
|
112
|
+
return this._config.retryableErrors ? this._config.retryableErrors(error) : defaultIsRetryable(error);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Try streaming from a single adapter, with per-model retries.
|
|
116
|
+
*
|
|
117
|
+
* Returns an async generator that either:
|
|
118
|
+
* - yields all chunks on success, then returns
|
|
119
|
+
* - throws the final error if all retries exhausted or error is non-retryable
|
|
120
|
+
*
|
|
121
|
+
* The `retriesAttempted` out-param is filled via the returned object so callers
|
|
122
|
+
* can record it in FallbackFailure.
|
|
123
|
+
*/
|
|
124
|
+
async *_streamWithRetries(adapter, request, out) {
|
|
125
|
+
const { retries, retryDelay, retryBackoff, onRetry } = this._config;
|
|
126
|
+
const maxAttempts = retries + 1;
|
|
127
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
128
|
+
let contentStarted = false;
|
|
129
|
+
let failureError = null;
|
|
130
|
+
try {
|
|
131
|
+
for await (const chunk of adapter.stream(request)) {
|
|
132
|
+
if (chunk.type === "error") {
|
|
133
|
+
if (!contentStarted) {
|
|
134
|
+
const msg = chunk.message ?? "Unknown error";
|
|
135
|
+
failureError = new Error(msg);
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
yield chunk;
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
if (chunk.type === "message:start") continue;
|
|
142
|
+
contentStarted = true;
|
|
143
|
+
yield chunk;
|
|
144
|
+
}
|
|
145
|
+
} catch (error) {
|
|
146
|
+
if (contentStarted) throw error;
|
|
147
|
+
if (!this._isRetryable(error)) throw error;
|
|
148
|
+
failureError = error instanceof Error ? error : new Error(String(error));
|
|
149
|
+
}
|
|
150
|
+
if (failureError === null) return;
|
|
151
|
+
if (!this._isRetryable(failureError)) throw failureError;
|
|
152
|
+
out.retriesAttempted = attempt - 1;
|
|
153
|
+
if (attempt < maxAttempts) {
|
|
154
|
+
const delayMs = calcDelay(retryDelay, attempt, retryBackoff);
|
|
155
|
+
const retryInfo = {
|
|
156
|
+
model: adapter.model,
|
|
157
|
+
provider: adapter.provider,
|
|
158
|
+
error: failureError,
|
|
159
|
+
retryAttempt: attempt,
|
|
160
|
+
maxRetries: retries,
|
|
161
|
+
delayMs
|
|
162
|
+
};
|
|
163
|
+
onRetry?.(retryInfo);
|
|
164
|
+
await sleep(delayMs);
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
out.retriesAttempted = retries;
|
|
168
|
+
throw failureError;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
async *stream(request) {
|
|
172
|
+
const { models, onFallback } = this._config;
|
|
173
|
+
const startIndex = await this._startIndex();
|
|
174
|
+
const failures = [];
|
|
175
|
+
for (let i = 0; i < models.length; i++) {
|
|
176
|
+
const index = (startIndex + i) % models.length;
|
|
177
|
+
const adapter = models[index];
|
|
178
|
+
const out = { retriesAttempted: 0 };
|
|
179
|
+
try {
|
|
180
|
+
yield* this._streamWithRetries(adapter, request, out);
|
|
181
|
+
await this._advanceIndex(index);
|
|
182
|
+
return;
|
|
183
|
+
} catch (error) {
|
|
184
|
+
if (!this._isRetryable(error)) throw error;
|
|
185
|
+
const failure = {
|
|
186
|
+
model: adapter.model,
|
|
187
|
+
provider: adapter.provider,
|
|
188
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
189
|
+
attempt: i + 1,
|
|
190
|
+
retriesAttempted: out.retriesAttempted
|
|
191
|
+
};
|
|
192
|
+
failures.push(failure);
|
|
193
|
+
const nextOffset = i + 1;
|
|
194
|
+
if (nextOffset < models.length && onFallback) {
|
|
195
|
+
const nextIndex = (startIndex + nextOffset) % models.length;
|
|
196
|
+
onFallback({
|
|
197
|
+
attemptedModel: adapter.model,
|
|
198
|
+
nextModel: models[nextIndex].model,
|
|
199
|
+
error: failure.error,
|
|
200
|
+
attempt: failure.attempt
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
throw new FallbackExhaustedError(failures);
|
|
206
|
+
}
|
|
207
|
+
async complete(request) {
|
|
208
|
+
const { models, onFallback, retries, retryDelay, retryBackoff, onRetry } = this._config;
|
|
209
|
+
const startIndex = await this._startIndex();
|
|
210
|
+
const failures = [];
|
|
211
|
+
for (let i = 0; i < models.length; i++) {
|
|
212
|
+
const index = (startIndex + i) % models.length;
|
|
213
|
+
const adapter = models[index];
|
|
214
|
+
if (!adapter.complete) {
|
|
215
|
+
failures.push({
|
|
216
|
+
model: adapter.model,
|
|
217
|
+
provider: adapter.provider,
|
|
218
|
+
error: new Error(
|
|
219
|
+
`Adapter ${adapter.provider}/${adapter.model} does not implement complete()`
|
|
220
|
+
),
|
|
221
|
+
attempt: i + 1,
|
|
222
|
+
retriesAttempted: 0
|
|
223
|
+
});
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
const maxAttempts = retries + 1;
|
|
227
|
+
let lastError = null;
|
|
228
|
+
let retriesAttempted = 0;
|
|
229
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
230
|
+
try {
|
|
231
|
+
const result = await adapter.complete(request);
|
|
232
|
+
await this._advanceIndex(index);
|
|
233
|
+
return result;
|
|
234
|
+
} catch (error) {
|
|
235
|
+
if (!this._isRetryable(error)) throw error;
|
|
236
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
237
|
+
retriesAttempted = attempt - 1;
|
|
238
|
+
if (attempt < maxAttempts) {
|
|
239
|
+
const delayMs = calcDelay(retryDelay, attempt, retryBackoff);
|
|
240
|
+
onRetry?.({
|
|
241
|
+
model: adapter.model,
|
|
242
|
+
provider: adapter.provider,
|
|
243
|
+
error: lastError,
|
|
244
|
+
retryAttempt: attempt,
|
|
245
|
+
maxRetries: retries,
|
|
246
|
+
delayMs
|
|
247
|
+
});
|
|
248
|
+
await sleep(delayMs);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
const failure = {
|
|
253
|
+
model: adapter.model,
|
|
254
|
+
provider: adapter.provider,
|
|
255
|
+
error: lastError,
|
|
256
|
+
attempt: i + 1,
|
|
257
|
+
retriesAttempted
|
|
258
|
+
};
|
|
259
|
+
failures.push(failure);
|
|
260
|
+
const nextOffset = i + 1;
|
|
261
|
+
if (nextOffset < models.length && onFallback) {
|
|
262
|
+
const nextIndex = (startIndex + nextOffset) % models.length;
|
|
263
|
+
onFallback({
|
|
264
|
+
attemptedModel: adapter.model,
|
|
265
|
+
nextModel: models[nextIndex].model,
|
|
266
|
+
error: failure.error,
|
|
267
|
+
attempt: failure.attempt
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
throw new FallbackExhaustedError(failures);
|
|
272
|
+
}
|
|
273
|
+
};
|
|
274
|
+
function createFallbackChain(config) {
|
|
275
|
+
return new FallbackChain(config);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
export { FallbackExhaustedError, MemoryRoutingStore, createFallbackChain };
|
|
279
|
+
//# sourceMappingURL=index.mjs.map
|
|
280
|
+
//# sourceMappingURL=index.mjs.map
|
package/dist/index.d.mts
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
import { G as GenerateTextParams, a as GenerateTextResult, S as StreamTextParams, b as StreamTextResult, T as ToolContext, c as Tool,
|
|
2
|
-
export {
|
|
1
|
+
import { G as GenerateTextParams, a as GenerateTextResult, S as StreamTextParams, b as StreamTextResult, T as ToolContext, c as Tool, d as StorageAdapter, e as StorageMessage } from './types-CR8mi9I0.mjs';
|
|
2
|
+
export { A as AssistantMessage, C as CoreMessage, w as DEFAULT_CAPABILITIES, D as DoGenerateParams, f as DoGenerateResult, E as ErrorChunk, F as FilePart, s as FinishChunk, u as FinishReason, m as GenerateStep, I as ImagePart, L as LanguageModel, M as ModelCapabilities, R as ResponseOptions, v as StorageFile, o as StreamChunk, n as StreamPart, g as SystemMessage, p as TextDeltaChunk, j as TextPart, t as TokenUsage, k as ToolCall, q as ToolCallChunk, h as ToolMessage, l as ToolResult, r as ToolResultChunk, i as UserContentPart, U as UserMessage } from './types-CR8mi9I0.mjs';
|
|
3
3
|
import { z } from 'zod';
|
|
4
|
+
import { A as ActionDefinition, T as ToolDefinition, a as ToolProfile, K as KnowledgeBaseConfig, W as WebSearchConfig, L as LLMAdapter, D as DoneEventMessage, S as StreamEvent, b as ToolCallInfo, c as TokenUsageRaw, P as ProviderToolRuntimeOptions, M as Message, d as ToolResponse } from './base-5n-UuPfS.mjs';
|
|
5
|
+
export { e as AdapterFactory, m as AnthropicProviderToolOptions, j as AnthropicToolSelectionHints, C as ChatCompletionRequest, n as Citation, f as LLMConfig, l as OpenAIProviderToolOptions, O as OpenAIToolSelectionHints, i as ToolExecution, g as ToolLocation, k as ToolNativeProviderHints, U as UnifiedToolCall, h as UnifiedToolResult } from './base-5n-UuPfS.mjs';
|
|
6
|
+
import { A as AIProvider } from './types-VDgiUvH2.mjs';
|
|
7
|
+
export { a as AnthropicProviderConfig, f as AnthropicTool, h as AnthropicToolResult, g as AnthropicToolUse, b as AzureProviderConfig, B as BaseProviderConfig, m as GeminiFunctionCall, l as GeminiFunctionDeclaration, n as GeminiFunctionResponse, G as GoogleProviderConfig, d as OllamaModelOptions, c as OllamaProviderConfig, O as OpenAIProviderConfig, i as OpenAITool, j as OpenAIToolCall, k as OpenAIToolResult, P as ProviderCapabilities, e as ProviderFormatter, X as XAIProviderConfig } from './types-VDgiUvH2.mjs';
|
|
4
8
|
import * as hono from 'hono';
|
|
5
9
|
import { Hono } from 'hono';
|
|
10
|
+
export { F as FallbackChainConfig, c as FallbackFailure, d as FallbackInfo, b as RetryBackoff, e as RetryInfo, R as RoutingStore, a as RoutingStrategy } from './types-BQl1suAv.mjs';
|
|
6
11
|
|
|
7
12
|
/**
|
|
8
13
|
* generateText - Generate text using a language model
|
|
@@ -257,6 +262,17 @@ interface RuntimeConfigWithAdapter {
|
|
|
257
262
|
* Set to true for defaults, or pass WebSearchConfig for customization.
|
|
258
263
|
*/
|
|
259
264
|
webSearch?: boolean | WebSearchConfig;
|
|
265
|
+
/**
|
|
266
|
+
* Storage adapter for automatic session creation and message persistence.
|
|
267
|
+
* When provided, runtime.chat() and runtime.stream() auto-save messages.
|
|
268
|
+
*
|
|
269
|
+
* @example
|
|
270
|
+
* ```ts
|
|
271
|
+
* import { createYourGPT } from '@yourgpt/llm-sdk/yourgpt'
|
|
272
|
+
* storage: createYourGPT({ apiKey, widgetUid })
|
|
273
|
+
* ```
|
|
274
|
+
*/
|
|
275
|
+
storage?: StorageAdapter;
|
|
260
276
|
}
|
|
261
277
|
/**
|
|
262
278
|
* Runtime configuration with AIProvider
|
|
@@ -303,6 +319,17 @@ interface RuntimeConfigWithProvider {
|
|
|
303
319
|
* Set to true for defaults, or pass WebSearchConfig for customization.
|
|
304
320
|
*/
|
|
305
321
|
webSearch?: boolean | WebSearchConfig;
|
|
322
|
+
/**
|
|
323
|
+
* Storage adapter for automatic session creation and message persistence.
|
|
324
|
+
* When provided, runtime.chat() and runtime.stream() auto-save messages.
|
|
325
|
+
*
|
|
326
|
+
* @example
|
|
327
|
+
* ```ts
|
|
328
|
+
* import { createYourGPT } from '@yourgpt/llm-sdk/yourgpt'
|
|
329
|
+
* storage: createYourGPT({ apiKey, widgetUid })
|
|
330
|
+
* ```
|
|
331
|
+
*/
|
|
332
|
+
storage?: StorageAdapter;
|
|
306
333
|
}
|
|
307
334
|
/**
|
|
308
335
|
* Runtime configuration - provide either a provider instance or a custom adapter
|
|
@@ -537,6 +564,8 @@ interface OnFinishResult {
|
|
|
537
564
|
completionTokens: number;
|
|
538
565
|
totalTokens: number;
|
|
539
566
|
};
|
|
567
|
+
/** Session ID — present when storage adapter created/resolved a session */
|
|
568
|
+
threadId?: string;
|
|
540
569
|
}
|
|
541
570
|
/**
|
|
542
571
|
* Options for StreamResult constructor
|
|
@@ -562,6 +591,8 @@ interface CollectedResult {
|
|
|
562
591
|
requiresAction: boolean;
|
|
563
592
|
/** Token usage for billing/tracking */
|
|
564
593
|
usage?: TokenUsageRaw;
|
|
594
|
+
/** Session ID — present when storage adapter created/resolved a session */
|
|
595
|
+
threadId?: string;
|
|
565
596
|
/** Raw events (for debugging) */
|
|
566
597
|
events: StreamEvent[];
|
|
567
598
|
}
|
|
@@ -870,6 +901,7 @@ type ToolSearchState = {
|
|
|
870
901
|
declare class Runtime {
|
|
871
902
|
private adapter;
|
|
872
903
|
private config;
|
|
904
|
+
private storage;
|
|
873
905
|
private actions;
|
|
874
906
|
private tools;
|
|
875
907
|
constructor(config: RuntimeConfig);
|
|
@@ -1034,6 +1066,7 @@ declare class Runtime {
|
|
|
1034
1066
|
*/
|
|
1035
1067
|
onFinish?: (result: {
|
|
1036
1068
|
messages: DoneEventMessage[];
|
|
1069
|
+
threadId?: string;
|
|
1037
1070
|
usage?: {
|
|
1038
1071
|
promptTokens: number;
|
|
1039
1072
|
completionTokens: number;
|
|
@@ -1464,6 +1497,32 @@ interface AgentLoopOptions {
|
|
|
1464
1497
|
*/
|
|
1465
1498
|
declare function runAgentLoop(options: AgentLoopOptions): AsyncGenerator<StreamEvent>;
|
|
1466
1499
|
|
|
1500
|
+
/**
|
|
1501
|
+
* Storage Helpers
|
|
1502
|
+
*
|
|
1503
|
+
* Extract input/output messages from request/response for storage adapters.
|
|
1504
|
+
* Used internally by Runtime when `storage` is configured.
|
|
1505
|
+
*/
|
|
1506
|
+
|
|
1507
|
+
/**
|
|
1508
|
+
* Extract new INPUT messages from a request's message array.
|
|
1509
|
+
*
|
|
1510
|
+
* The SDK sends the full conversation history on each request. This function
|
|
1511
|
+
* picks only the NEW messages the user just added:
|
|
1512
|
+
* - New user turn (last meaningful msg = "user"): returns [userMsg]
|
|
1513
|
+
* - Tool continuation (last meaningful msg = "tool"): returns tool results after last assistant
|
|
1514
|
+
* - Otherwise: returns []
|
|
1515
|
+
*
|
|
1516
|
+
* Skips empty assistant placeholders the SDK pushes before sending.
|
|
1517
|
+
*/
|
|
1518
|
+
declare function extractInputMessages(reqMessages: unknown[]): StorageMessage[];
|
|
1519
|
+
/**
|
|
1520
|
+
* Map LLM output messages (DoneEventMessage format) to StorageMessage format.
|
|
1521
|
+
*
|
|
1522
|
+
* Converts from snake_case API format to camelCase storage format.
|
|
1523
|
+
*/
|
|
1524
|
+
declare function mapOutputMessages(resultMessages: DoneEventMessage[]): StorageMessage[];
|
|
1525
|
+
|
|
1467
1526
|
/**
|
|
1468
1527
|
* Generate a message ID
|
|
1469
1528
|
*/
|
|
@@ -1477,4 +1536,4 @@ declare function generateThreadId(): string;
|
|
|
1477
1536
|
*/
|
|
1478
1537
|
declare function generateToolCallId(): string;
|
|
1479
1538
|
|
|
1480
|
-
export { AIProvider, ActionDefinition, type ActionRequest, type AgentLoopOptions, type ChatRequest, type CollectedResult, type CopilotChatResponse, DEFAULT_MAX_ITERATIONS, DoneEventMessage, GenerateResult, type GenerateResultData, GenerateTextParams, GenerateTextResult, LLMAdapter, Message, ProviderToolRuntimeOptions, type RequestContext, Runtime, type RuntimeConfig, StreamEvent, StreamResult, type StreamResultOptions, StreamTextParams, StreamTextResult, TokenUsageRaw, Tool, ToolCallInfo, ToolContext, ToolDefinition, ToolProfile, ToolResponse, type ToolSearchMatch, WebSearchConfig, buildProviderToolOptions, createEventStream, createExpressHandler, createExpressMiddleware, createHonoApp, createNextHandler, createNodeHandler, createRuntime, createSSEHeaders, createSSEResponse, createStreamResult, createTextStreamHeaders, createTextStreamResponse, formatSSEData, formatToolsForAnthropic, formatToolsForGoogle, formatToolsForOpenAI, generateMessageId, generateText, generateThreadId, generateToolCallId, pipeSSEToResponse, pipeTextToResponse, runAgentLoop, searchTools, selectTools, shouldExposeToolSearch, streamText, tool };
|
|
1539
|
+
export { AIProvider, ActionDefinition, type ActionRequest, type AgentLoopOptions, type ChatRequest, type CollectedResult, type CopilotChatResponse, DEFAULT_MAX_ITERATIONS, DoneEventMessage, GenerateResult, type GenerateResultData, GenerateTextParams, GenerateTextResult, LLMAdapter, Message, ProviderToolRuntimeOptions, type RequestContext, Runtime, type RuntimeConfig, StorageAdapter, StorageMessage, StreamEvent, StreamResult, type StreamResultOptions, StreamTextParams, StreamTextResult, TokenUsageRaw, Tool, ToolCallInfo, ToolContext, ToolDefinition, ToolProfile, ToolResponse, type ToolSearchMatch, WebSearchConfig, buildProviderToolOptions, createEventStream, createExpressHandler, createExpressMiddleware, createHonoApp, createNextHandler, createNodeHandler, createRuntime, createSSEHeaders, createSSEResponse, createStreamResult, createTextStreamHeaders, createTextStreamResponse, extractInputMessages, formatSSEData, formatToolsForAnthropic, formatToolsForGoogle, formatToolsForOpenAI, generateMessageId, generateText, generateThreadId, generateToolCallId, mapOutputMessages, pipeSSEToResponse, pipeTextToResponse, runAgentLoop, searchTools, selectTools, shouldExposeToolSearch, streamText, tool };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
import { G as GenerateTextParams, a as GenerateTextResult, S as StreamTextParams, b as StreamTextResult, T as ToolContext, c as Tool,
|
|
2
|
-
export {
|
|
1
|
+
import { G as GenerateTextParams, a as GenerateTextResult, S as StreamTextParams, b as StreamTextResult, T as ToolContext, c as Tool, d as StorageAdapter, e as StorageMessage } from './types-CR8mi9I0.js';
|
|
2
|
+
export { A as AssistantMessage, C as CoreMessage, w as DEFAULT_CAPABILITIES, D as DoGenerateParams, f as DoGenerateResult, E as ErrorChunk, F as FilePart, s as FinishChunk, u as FinishReason, m as GenerateStep, I as ImagePart, L as LanguageModel, M as ModelCapabilities, R as ResponseOptions, v as StorageFile, o as StreamChunk, n as StreamPart, g as SystemMessage, p as TextDeltaChunk, j as TextPart, t as TokenUsage, k as ToolCall, q as ToolCallChunk, h as ToolMessage, l as ToolResult, r as ToolResultChunk, i as UserContentPart, U as UserMessage } from './types-CR8mi9I0.js';
|
|
3
3
|
import { z } from 'zod';
|
|
4
|
+
import { A as ActionDefinition, T as ToolDefinition, a as ToolProfile, K as KnowledgeBaseConfig, W as WebSearchConfig, L as LLMAdapter, D as DoneEventMessage, S as StreamEvent, b as ToolCallInfo, c as TokenUsageRaw, P as ProviderToolRuntimeOptions, M as Message, d as ToolResponse } from './base-Di31iy_8.js';
|
|
5
|
+
export { e as AdapterFactory, m as AnthropicProviderToolOptions, j as AnthropicToolSelectionHints, C as ChatCompletionRequest, n as Citation, f as LLMConfig, l as OpenAIProviderToolOptions, O as OpenAIToolSelectionHints, i as ToolExecution, g as ToolLocation, k as ToolNativeProviderHints, U as UnifiedToolCall, h as UnifiedToolResult } from './base-Di31iy_8.js';
|
|
6
|
+
import { A as AIProvider } from './types-C0vLXzuw.js';
|
|
7
|
+
export { a as AnthropicProviderConfig, f as AnthropicTool, h as AnthropicToolResult, g as AnthropicToolUse, b as AzureProviderConfig, B as BaseProviderConfig, m as GeminiFunctionCall, l as GeminiFunctionDeclaration, n as GeminiFunctionResponse, G as GoogleProviderConfig, d as OllamaModelOptions, c as OllamaProviderConfig, O as OpenAIProviderConfig, i as OpenAITool, j as OpenAIToolCall, k as OpenAIToolResult, P as ProviderCapabilities, e as ProviderFormatter, X as XAIProviderConfig } from './types-C0vLXzuw.js';
|
|
4
8
|
import * as hono from 'hono';
|
|
5
9
|
import { Hono } from 'hono';
|
|
10
|
+
export { F as FallbackChainConfig, c as FallbackFailure, d as FallbackInfo, b as RetryBackoff, e as RetryInfo, R as RoutingStore, a as RoutingStrategy } from './types-CNL8ZRne.js';
|
|
6
11
|
|
|
7
12
|
/**
|
|
8
13
|
* generateText - Generate text using a language model
|
|
@@ -257,6 +262,17 @@ interface RuntimeConfigWithAdapter {
|
|
|
257
262
|
* Set to true for defaults, or pass WebSearchConfig for customization.
|
|
258
263
|
*/
|
|
259
264
|
webSearch?: boolean | WebSearchConfig;
|
|
265
|
+
/**
|
|
266
|
+
* Storage adapter for automatic session creation and message persistence.
|
|
267
|
+
* When provided, runtime.chat() and runtime.stream() auto-save messages.
|
|
268
|
+
*
|
|
269
|
+
* @example
|
|
270
|
+
* ```ts
|
|
271
|
+
* import { createYourGPT } from '@yourgpt/llm-sdk/yourgpt'
|
|
272
|
+
* storage: createYourGPT({ apiKey, widgetUid })
|
|
273
|
+
* ```
|
|
274
|
+
*/
|
|
275
|
+
storage?: StorageAdapter;
|
|
260
276
|
}
|
|
261
277
|
/**
|
|
262
278
|
* Runtime configuration with AIProvider
|
|
@@ -303,6 +319,17 @@ interface RuntimeConfigWithProvider {
|
|
|
303
319
|
* Set to true for defaults, or pass WebSearchConfig for customization.
|
|
304
320
|
*/
|
|
305
321
|
webSearch?: boolean | WebSearchConfig;
|
|
322
|
+
/**
|
|
323
|
+
* Storage adapter for automatic session creation and message persistence.
|
|
324
|
+
* When provided, runtime.chat() and runtime.stream() auto-save messages.
|
|
325
|
+
*
|
|
326
|
+
* @example
|
|
327
|
+
* ```ts
|
|
328
|
+
* import { createYourGPT } from '@yourgpt/llm-sdk/yourgpt'
|
|
329
|
+
* storage: createYourGPT({ apiKey, widgetUid })
|
|
330
|
+
* ```
|
|
331
|
+
*/
|
|
332
|
+
storage?: StorageAdapter;
|
|
306
333
|
}
|
|
307
334
|
/**
|
|
308
335
|
* Runtime configuration - provide either a provider instance or a custom adapter
|
|
@@ -537,6 +564,8 @@ interface OnFinishResult {
|
|
|
537
564
|
completionTokens: number;
|
|
538
565
|
totalTokens: number;
|
|
539
566
|
};
|
|
567
|
+
/** Session ID — present when storage adapter created/resolved a session */
|
|
568
|
+
threadId?: string;
|
|
540
569
|
}
|
|
541
570
|
/**
|
|
542
571
|
* Options for StreamResult constructor
|
|
@@ -562,6 +591,8 @@ interface CollectedResult {
|
|
|
562
591
|
requiresAction: boolean;
|
|
563
592
|
/** Token usage for billing/tracking */
|
|
564
593
|
usage?: TokenUsageRaw;
|
|
594
|
+
/** Session ID — present when storage adapter created/resolved a session */
|
|
595
|
+
threadId?: string;
|
|
565
596
|
/** Raw events (for debugging) */
|
|
566
597
|
events: StreamEvent[];
|
|
567
598
|
}
|
|
@@ -870,6 +901,7 @@ type ToolSearchState = {
|
|
|
870
901
|
declare class Runtime {
|
|
871
902
|
private adapter;
|
|
872
903
|
private config;
|
|
904
|
+
private storage;
|
|
873
905
|
private actions;
|
|
874
906
|
private tools;
|
|
875
907
|
constructor(config: RuntimeConfig);
|
|
@@ -1034,6 +1066,7 @@ declare class Runtime {
|
|
|
1034
1066
|
*/
|
|
1035
1067
|
onFinish?: (result: {
|
|
1036
1068
|
messages: DoneEventMessage[];
|
|
1069
|
+
threadId?: string;
|
|
1037
1070
|
usage?: {
|
|
1038
1071
|
promptTokens: number;
|
|
1039
1072
|
completionTokens: number;
|
|
@@ -1464,6 +1497,32 @@ interface AgentLoopOptions {
|
|
|
1464
1497
|
*/
|
|
1465
1498
|
declare function runAgentLoop(options: AgentLoopOptions): AsyncGenerator<StreamEvent>;
|
|
1466
1499
|
|
|
1500
|
+
/**
|
|
1501
|
+
* Storage Helpers
|
|
1502
|
+
*
|
|
1503
|
+
* Extract input/output messages from request/response for storage adapters.
|
|
1504
|
+
* Used internally by Runtime when `storage` is configured.
|
|
1505
|
+
*/
|
|
1506
|
+
|
|
1507
|
+
/**
|
|
1508
|
+
* Extract new INPUT messages from a request's message array.
|
|
1509
|
+
*
|
|
1510
|
+
* The SDK sends the full conversation history on each request. This function
|
|
1511
|
+
* picks only the NEW messages the user just added:
|
|
1512
|
+
* - New user turn (last meaningful msg = "user"): returns [userMsg]
|
|
1513
|
+
* - Tool continuation (last meaningful msg = "tool"): returns tool results after last assistant
|
|
1514
|
+
* - Otherwise: returns []
|
|
1515
|
+
*
|
|
1516
|
+
* Skips empty assistant placeholders the SDK pushes before sending.
|
|
1517
|
+
*/
|
|
1518
|
+
declare function extractInputMessages(reqMessages: unknown[]): StorageMessage[];
|
|
1519
|
+
/**
|
|
1520
|
+
* Map LLM output messages (DoneEventMessage format) to StorageMessage format.
|
|
1521
|
+
*
|
|
1522
|
+
* Converts from snake_case API format to camelCase storage format.
|
|
1523
|
+
*/
|
|
1524
|
+
declare function mapOutputMessages(resultMessages: DoneEventMessage[]): StorageMessage[];
|
|
1525
|
+
|
|
1467
1526
|
/**
|
|
1468
1527
|
* Generate a message ID
|
|
1469
1528
|
*/
|
|
@@ -1477,4 +1536,4 @@ declare function generateThreadId(): string;
|
|
|
1477
1536
|
*/
|
|
1478
1537
|
declare function generateToolCallId(): string;
|
|
1479
1538
|
|
|
1480
|
-
export { AIProvider, ActionDefinition, type ActionRequest, type AgentLoopOptions, type ChatRequest, type CollectedResult, type CopilotChatResponse, DEFAULT_MAX_ITERATIONS, DoneEventMessage, GenerateResult, type GenerateResultData, GenerateTextParams, GenerateTextResult, LLMAdapter, Message, ProviderToolRuntimeOptions, type RequestContext, Runtime, type RuntimeConfig, StreamEvent, StreamResult, type StreamResultOptions, StreamTextParams, StreamTextResult, TokenUsageRaw, Tool, ToolCallInfo, ToolContext, ToolDefinition, ToolProfile, ToolResponse, type ToolSearchMatch, WebSearchConfig, buildProviderToolOptions, createEventStream, createExpressHandler, createExpressMiddleware, createHonoApp, createNextHandler, createNodeHandler, createRuntime, createSSEHeaders, createSSEResponse, createStreamResult, createTextStreamHeaders, createTextStreamResponse, formatSSEData, formatToolsForAnthropic, formatToolsForGoogle, formatToolsForOpenAI, generateMessageId, generateText, generateThreadId, generateToolCallId, pipeSSEToResponse, pipeTextToResponse, runAgentLoop, searchTools, selectTools, shouldExposeToolSearch, streamText, tool };
|
|
1539
|
+
export { AIProvider, ActionDefinition, type ActionRequest, type AgentLoopOptions, type ChatRequest, type CollectedResult, type CopilotChatResponse, DEFAULT_MAX_ITERATIONS, DoneEventMessage, GenerateResult, type GenerateResultData, GenerateTextParams, GenerateTextResult, LLMAdapter, Message, ProviderToolRuntimeOptions, type RequestContext, Runtime, type RuntimeConfig, StorageAdapter, StorageMessage, StreamEvent, StreamResult, type StreamResultOptions, StreamTextParams, StreamTextResult, TokenUsageRaw, Tool, ToolCallInfo, ToolContext, ToolDefinition, ToolProfile, ToolResponse, type ToolSearchMatch, WebSearchConfig, buildProviderToolOptions, createEventStream, createExpressHandler, createExpressMiddleware, createHonoApp, createNextHandler, createNodeHandler, createRuntime, createSSEHeaders, createSSEResponse, createStreamResult, createTextStreamHeaders, createTextStreamResponse, extractInputMessages, formatSSEData, formatToolsForAnthropic, formatToolsForGoogle, formatToolsForOpenAI, generateMessageId, generateText, generateThreadId, generateToolCallId, mapOutputMessages, pipeSSEToResponse, pipeTextToResponse, runAgentLoop, searchTools, selectTools, shouldExposeToolSearch, streamText, tool };
|