@jaypie/llm 1.2.11 → 1.2.12
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/cjs/index.cjs +81 -29
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/operate/adapters/AnthropicAdapter.d.ts +2 -2
- package/dist/cjs/operate/adapters/GeminiAdapter.d.ts +2 -2
- package/dist/cjs/operate/adapters/OpenAiAdapter.d.ts +2 -2
- package/dist/esm/index.js +81 -29
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/operate/adapters/AnthropicAdapter.d.ts +2 -2
- package/dist/esm/operate/adapters/GeminiAdapter.d.ts +2 -2
- package/dist/esm/operate/adapters/OpenAiAdapter.d.ts +2 -2
- package/package.json +1 -1
|
@@ -17,8 +17,8 @@ export declare class AnthropicAdapter extends BaseProviderAdapter {
|
|
|
17
17
|
buildRequest(request: OperateRequest): Anthropic.MessageCreateParams;
|
|
18
18
|
formatTools(toolkit: Toolkit, outputSchema?: JsonObject): ProviderToolDefinition[];
|
|
19
19
|
formatOutputSchema(schema: JsonObject | NaturalSchema | z.ZodType): JsonObject;
|
|
20
|
-
executeRequest(client: unknown, request: unknown): Promise<Anthropic.Message>;
|
|
21
|
-
executeStreamRequest(client: unknown, request: unknown): AsyncIterable<LlmStreamChunk>;
|
|
20
|
+
executeRequest(client: unknown, request: unknown, signal?: AbortSignal): Promise<Anthropic.Message>;
|
|
21
|
+
executeStreamRequest(client: unknown, request: unknown, signal?: AbortSignal): AsyncIterable<LlmStreamChunk>;
|
|
22
22
|
parseResponse(response: unknown, _options?: LlmOperateOptions): ParsedResponse;
|
|
23
23
|
extractToolCalls(response: unknown): StandardToolCall[];
|
|
24
24
|
extractUsage(response: unknown, model: string): LlmUsageItem;
|
|
@@ -17,8 +17,8 @@ export declare class GeminiAdapter extends BaseProviderAdapter {
|
|
|
17
17
|
buildRequest(request: OperateRequest): GeminiRequest;
|
|
18
18
|
formatTools(toolkit: Toolkit, outputSchema?: JsonObject): ProviderToolDefinition[];
|
|
19
19
|
formatOutputSchema(schema: JsonObject | NaturalSchema | z.ZodType): JsonObject;
|
|
20
|
-
executeRequest(client: unknown, request: unknown): Promise<GeminiRawResponse>;
|
|
21
|
-
executeStreamRequest(client: unknown, request: unknown): AsyncIterable<LlmStreamChunk>;
|
|
20
|
+
executeRequest(client: unknown, request: unknown, signal?: AbortSignal): Promise<GeminiRawResponse>;
|
|
21
|
+
executeStreamRequest(client: unknown, request: unknown, signal?: AbortSignal): AsyncIterable<LlmStreamChunk>;
|
|
22
22
|
parseResponse(response: unknown, options?: LlmOperateOptions): ParsedResponse;
|
|
23
23
|
extractToolCalls(response: unknown): StandardToolCall[];
|
|
24
24
|
extractUsage(response: unknown, model: string): LlmUsageItem;
|
|
@@ -16,8 +16,8 @@ export declare class OpenAiAdapter extends BaseProviderAdapter {
|
|
|
16
16
|
buildRequest(request: OperateRequest): unknown;
|
|
17
17
|
formatTools(toolkit: Toolkit, _outputSchema?: JsonObject): ProviderToolDefinition[];
|
|
18
18
|
formatOutputSchema(schema: JsonObject | NaturalSchema | z.ZodType): JsonObject;
|
|
19
|
-
executeRequest(client: unknown, request: unknown): Promise<unknown>;
|
|
20
|
-
executeStreamRequest(client: unknown, request: unknown): AsyncIterable<LlmStreamChunk>;
|
|
19
|
+
executeRequest(client: unknown, request: unknown, signal?: AbortSignal): Promise<unknown>;
|
|
20
|
+
executeStreamRequest(client: unknown, request: unknown, signal?: AbortSignal): AsyncIterable<LlmStreamChunk>;
|
|
21
21
|
parseResponse(response: unknown, options?: LlmOperateOptions): ParsedResponse;
|
|
22
22
|
extractToolCalls(response: unknown): StandardToolCall[];
|
|
23
23
|
extractUsage(response: unknown, model: string): LlmUsageItem;
|
package/dist/esm/index.js
CHANGED
|
@@ -1126,17 +1126,24 @@ class AnthropicAdapter extends BaseProviderAdapter {
|
|
|
1126
1126
|
//
|
|
1127
1127
|
// API Execution
|
|
1128
1128
|
//
|
|
1129
|
-
async executeRequest(client, request) {
|
|
1129
|
+
async executeRequest(client, request, signal) {
|
|
1130
1130
|
const anthropic = client;
|
|
1131
|
-
|
|
1131
|
+
try {
|
|
1132
|
+
return (await anthropic.messages.create(request, signal ? { signal } : undefined));
|
|
1133
|
+
}
|
|
1134
|
+
catch (error) {
|
|
1135
|
+
if (signal?.aborted)
|
|
1136
|
+
return undefined;
|
|
1137
|
+
throw error;
|
|
1138
|
+
}
|
|
1132
1139
|
}
|
|
1133
|
-
async *executeStreamRequest(client, request) {
|
|
1140
|
+
async *executeStreamRequest(client, request, signal) {
|
|
1134
1141
|
const anthropic = client;
|
|
1135
1142
|
const streamRequest = {
|
|
1136
1143
|
...request,
|
|
1137
1144
|
stream: true,
|
|
1138
1145
|
};
|
|
1139
|
-
const stream = await anthropic.messages.create(streamRequest);
|
|
1146
|
+
const stream = await anthropic.messages.create(streamRequest, signal ? { signal } : undefined);
|
|
1140
1147
|
// Track current tool call being built
|
|
1141
1148
|
let currentToolCall = null;
|
|
1142
1149
|
// Track usage for final chunk
|
|
@@ -1566,19 +1573,26 @@ class GeminiAdapter extends BaseProviderAdapter {
|
|
|
1566
1573
|
//
|
|
1567
1574
|
// API Execution
|
|
1568
1575
|
//
|
|
1569
|
-
async executeRequest(client, request) {
|
|
1576
|
+
async executeRequest(client, request, signal) {
|
|
1570
1577
|
const genAI = client;
|
|
1571
1578
|
const geminiRequest = request;
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1579
|
+
try {
|
|
1580
|
+
// Cast config to any to bypass strict type checking between our internal types
|
|
1581
|
+
// and the SDK's types. The SDK will validate at runtime.
|
|
1582
|
+
const response = await genAI.models.generateContent({
|
|
1583
|
+
model: geminiRequest.model,
|
|
1584
|
+
contents: geminiRequest.contents,
|
|
1585
|
+
config: geminiRequest.config,
|
|
1586
|
+
});
|
|
1587
|
+
return response;
|
|
1588
|
+
}
|
|
1589
|
+
catch (error) {
|
|
1590
|
+
if (signal?.aborted)
|
|
1591
|
+
return undefined;
|
|
1592
|
+
throw error;
|
|
1593
|
+
}
|
|
1580
1594
|
}
|
|
1581
|
-
async *executeStreamRequest(client, request) {
|
|
1595
|
+
async *executeStreamRequest(client, request, signal) {
|
|
1582
1596
|
const genAI = client;
|
|
1583
1597
|
const geminiRequest = request;
|
|
1584
1598
|
// Use generateContentStream for streaming
|
|
@@ -2228,19 +2242,26 @@ class OpenAiAdapter extends BaseProviderAdapter {
|
|
|
2228
2242
|
//
|
|
2229
2243
|
// API Execution
|
|
2230
2244
|
//
|
|
2231
|
-
async executeRequest(client, request) {
|
|
2245
|
+
async executeRequest(client, request, signal) {
|
|
2232
2246
|
const openai = client;
|
|
2233
|
-
|
|
2234
|
-
|
|
2247
|
+
try {
|
|
2248
|
+
// @ts-expect-error OpenAI SDK types don't match our request format exactly
|
|
2249
|
+
return await openai.responses.create(request, signal ? { signal } : undefined);
|
|
2250
|
+
}
|
|
2251
|
+
catch (error) {
|
|
2252
|
+
if (signal?.aborted)
|
|
2253
|
+
return undefined;
|
|
2254
|
+
throw error;
|
|
2255
|
+
}
|
|
2235
2256
|
}
|
|
2236
|
-
async *executeStreamRequest(client, request) {
|
|
2257
|
+
async *executeStreamRequest(client, request, signal) {
|
|
2237
2258
|
const openai = client;
|
|
2238
2259
|
const baseRequest = request;
|
|
2239
2260
|
const streamRequest = {
|
|
2240
2261
|
...baseRequest,
|
|
2241
2262
|
stream: true,
|
|
2242
2263
|
};
|
|
2243
|
-
const stream = await openai.responses.create(streamRequest);
|
|
2264
|
+
const stream = await openai.responses.create(streamRequest, signal ? { signal } : undefined);
|
|
2244
2265
|
// Track current function call being built
|
|
2245
2266
|
let currentFunctionCall = null;
|
|
2246
2267
|
// Track usage for final chunk
|
|
@@ -2674,14 +2695,21 @@ class OpenRouterAdapter extends BaseProviderAdapter {
|
|
|
2674
2695
|
async executeRequest(client, request, signal) {
|
|
2675
2696
|
const openRouter = client;
|
|
2676
2697
|
const openRouterRequest = request;
|
|
2677
|
-
|
|
2678
|
-
|
|
2679
|
-
|
|
2680
|
-
|
|
2681
|
-
|
|
2682
|
-
|
|
2683
|
-
|
|
2684
|
-
|
|
2698
|
+
try {
|
|
2699
|
+
const response = await openRouter.chat.send({
|
|
2700
|
+
model: openRouterRequest.model,
|
|
2701
|
+
messages: openRouterRequest.messages,
|
|
2702
|
+
tools: openRouterRequest.tools,
|
|
2703
|
+
toolChoice: openRouterRequest.tool_choice,
|
|
2704
|
+
user: openRouterRequest.user,
|
|
2705
|
+
}, signal ? { signal } : undefined);
|
|
2706
|
+
return response;
|
|
2707
|
+
}
|
|
2708
|
+
catch (error) {
|
|
2709
|
+
if (signal?.aborted)
|
|
2710
|
+
return undefined;
|
|
2711
|
+
throw error;
|
|
2712
|
+
}
|
|
2685
2713
|
}
|
|
2686
2714
|
async *executeStreamRequest(client, request, signal) {
|
|
2687
2715
|
const openRouter = client;
|
|
@@ -3968,7 +3996,19 @@ class RetryExecutor {
|
|
|
3968
3996
|
providerRequest: options.context.providerRequest,
|
|
3969
3997
|
error,
|
|
3970
3998
|
});
|
|
3971
|
-
|
|
3999
|
+
// Guard against stale socket errors that fire during sleep
|
|
4000
|
+
const staleHandler = (reason) => {
|
|
4001
|
+
if (isTransientNetworkError(reason)) {
|
|
4002
|
+
log$1.trace("Suppressed stale socket error during retry sleep");
|
|
4003
|
+
}
|
|
4004
|
+
};
|
|
4005
|
+
process.on("unhandledRejection", staleHandler);
|
|
4006
|
+
try {
|
|
4007
|
+
await sleep(delay);
|
|
4008
|
+
}
|
|
4009
|
+
finally {
|
|
4010
|
+
process.removeListener("unhandledRejection", staleHandler);
|
|
4011
|
+
}
|
|
3972
4012
|
attempt++;
|
|
3973
4013
|
}
|
|
3974
4014
|
}
|
|
@@ -4612,7 +4652,19 @@ class StreamLoop {
|
|
|
4612
4652
|
const delay = this.retryPolicy.getDelayForAttempt(attempt);
|
|
4613
4653
|
log$1.warn(`Stream request failed. Retrying in ${delay}ms...`);
|
|
4614
4654
|
log$1.var({ error });
|
|
4615
|
-
|
|
4655
|
+
// Guard against stale socket errors that fire during sleep
|
|
4656
|
+
const staleHandler = (reason) => {
|
|
4657
|
+
if (isTransientNetworkError(reason)) {
|
|
4658
|
+
log$1.trace("Suppressed stale socket error during retry sleep");
|
|
4659
|
+
}
|
|
4660
|
+
};
|
|
4661
|
+
process.on("unhandledRejection", staleHandler);
|
|
4662
|
+
try {
|
|
4663
|
+
await sleep(delay);
|
|
4664
|
+
}
|
|
4665
|
+
finally {
|
|
4666
|
+
process.removeListener("unhandledRejection", staleHandler);
|
|
4667
|
+
}
|
|
4616
4668
|
attempt++;
|
|
4617
4669
|
}
|
|
4618
4670
|
}
|