@aeye/openrouter 0.4.0 → 0.5.0
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/README.md +152 -65
- package/aeye-openrouter.md +175 -161
- package/dist/__integration__/openrouter.integration.test.js +122 -6
- package/dist/__integration__/openrouter.integration.test.js.map +1 -1
- package/dist/__tests__/batch.test.d.ts +5 -0
- package/dist/__tests__/batch.test.d.ts.map +1 -0
- package/dist/__tests__/batch.test.js +41 -0
- package/dist/__tests__/batch.test.js.map +1 -0
- package/dist/__tests__/features.test.d.ts +5 -0
- package/dist/__tests__/features.test.d.ts.map +1 -0
- package/dist/__tests__/features.test.js +206 -0
- package/dist/__tests__/features.test.js.map +1 -0
- package/dist/__tests__/openrouter.test.js +185 -0
- package/dist/__tests__/openrouter.test.js.map +1 -1
- package/dist/__tests__/rerank-decide.test.d.ts +5 -0
- package/dist/__tests__/rerank-decide.test.d.ts.map +1 -0
- package/dist/__tests__/rerank-decide.test.js +75 -0
- package/dist/__tests__/rerank-decide.test.js.map +1 -0
- package/dist/__tests__/schema-rejection.test.d.ts +6 -0
- package/dist/__tests__/schema-rejection.test.d.ts.map +1 -0
- package/dist/__tests__/schema-rejection.test.js +39 -0
- package/dist/__tests__/schema-rejection.test.js.map +1 -0
- package/dist/openrouter.d.ts +118 -41
- package/dist/openrouter.d.ts.map +1 -1
- package/dist/openrouter.js +407 -210
- package/dist/openrouter.js.map +1 -1
- package/dist/source.d.ts +9 -4
- package/dist/source.d.ts.map +1 -1
- package/dist/source.js +45 -28
- package/dist/source.js.map +1 -1
- package/dist/types.d.ts +244 -81
- package/dist/types.d.ts.map +1 -1
- package/package.json +71 -71
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenRouter reports an upstream schema rejection as "Provider returned
|
|
3
|
+
* error", with the upstream's message in `metadata.raw`.
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { AI } from '@aeye/ai';
|
|
7
|
+
import { SchemaRejectedError } from '@aeye/core';
|
|
8
|
+
import { OpenRouterProvider } from '../openrouter';
|
|
9
|
+
const mockCreate = jest.fn();
|
|
10
|
+
jest.mock('openai', () => jest.fn().mockImplementation(() => ({ chat: { completions: { create: mockCreate } } })));
|
|
11
|
+
const ctx = { ai: AI.with().providers({}).create({}), metadata: {} };
|
|
12
|
+
/** An error shaped like the SDK's APIError for an upstream failure. */
|
|
13
|
+
function upstreamError(raw) {
|
|
14
|
+
return Object.assign(new Error('400 Provider returned error'), {
|
|
15
|
+
status: 400,
|
|
16
|
+
error: { message: 'Provider returned error', code: 400, metadata: { raw, provider_name: 'Google' } },
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
async function rejection(error) {
|
|
20
|
+
mockCreate.mockRejectedValue(error);
|
|
21
|
+
const request = {
|
|
22
|
+
messages: [{ role: 'user', content: 'Answer' }],
|
|
23
|
+
responseFormat: { type: z.object({ value: z.number() }), strict: 1 },
|
|
24
|
+
};
|
|
25
|
+
return new OpenRouterProvider({ apiKey: 'test' }).createExecutor()(request, ctx, { model: 'google/gemini-2.5-flash' })
|
|
26
|
+
.then(() => undefined, (e) => e);
|
|
27
|
+
}
|
|
28
|
+
describe('OpenRouter schema rejections', () => {
|
|
29
|
+
it('reads the upstream message', async () => {
|
|
30
|
+
const error = await rejection(upstreamError('{"error":{"message":"Invalid JSON payload received. Unknown name \\"additionalProperties\\" at \'generation_config.response_schema\'"}}'));
|
|
31
|
+
expect(error).toBeInstanceOf(SchemaRejectedError);
|
|
32
|
+
expect(error).toMatchObject({ target: { kind: 'output' } });
|
|
33
|
+
});
|
|
34
|
+
it('leaves other upstream errors alone', async () => {
|
|
35
|
+
const original = upstreamError('{"error":{"message":"Model is overloaded"}}');
|
|
36
|
+
expect(await rejection(original)).toBe(original);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=schema-rejection.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-rejection.test.js","sourceRoot":"","sources":["../../src/__tests__/schema-rejection.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,EAAE,EAAqB,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAgB,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAEnH,MAAM,GAAG,GAAiB,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAEnF,uEAAuE;AACvE,SAAS,aAAa,CAAC,GAAW;IAChC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,EAAE;QAC7D,MAAM,EAAE,GAAG;QACX,KAAK,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE;KACrG,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,KAAY;IACnC,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,OAAO,GAAY;QACvB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QAC/C,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;KACrE,CAAC;IACF,OAAO,IAAI,kBAAkB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC;SACnH,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,yIAAyI,CAAC,CAAC,CAAC;QACxL,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,QAAQ,GAAG,aAAa,CAAC,6CAA6C,CAAC,CAAC;QAC9E,MAAM,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/openrouter.d.ts
CHANGED
|
@@ -14,15 +14,16 @@
|
|
|
14
14
|
* `defaultParams.providers.requireParameters` explicitly (`false` disables, `true`
|
|
15
15
|
* forces regardless of strictness). See {@link OpenRouterConfig.defaultParams}.
|
|
16
16
|
*/
|
|
17
|
-
import type { Message, ModelInfo, Provider } from '@aeye/ai';
|
|
18
|
-
import { type Chunk, type Request, type Response } from '@aeye/core';
|
|
19
|
-
import { OpenAIConfig, OpenAIProvider } from '@aeye/openai';
|
|
17
|
+
import type { BatchJob, Message, ModelInfo, Provider } from '@aeye/ai';
|
|
18
|
+
import { type Chunk, type DescriptorFamily, type Request, type Response, type SchemaRejectedError } from '@aeye/core';
|
|
19
|
+
import { type BatchSubmission, OpenAIConfig, OpenAIProvider, type OperationRun } from '@aeye/openai';
|
|
20
20
|
import OpenAI from 'openai';
|
|
21
|
-
import { OpenRouterChatChunk, OpenRouterChatRequest, OpenRouterChatResponse, OpenRouterModel, OpenRouterRequestMessage } from './types';
|
|
21
|
+
import type { OpenRouterChatChunk, OpenRouterChatRequest, OpenRouterChatResponse, OpenRouterContentPart, OpenRouterMetrics, OpenRouterModel, OpenRouterPlugin, OpenRouterProviderPreferences, OpenRouterRequestMessage } from './types';
|
|
22
22
|
/**
|
|
23
|
-
* OpenRouter provider configuration
|
|
23
|
+
* OpenRouter provider configuration. Requests always go through chat
|
|
24
|
+
* completions, where OpenRouter serves routing, plugins, and server tools.
|
|
24
25
|
*/
|
|
25
|
-
export interface OpenRouterConfig extends OpenAIConfig {
|
|
26
|
+
export interface OpenRouterConfig extends Omit<OpenAIConfig, 'api'> {
|
|
26
27
|
defaultParams?: {
|
|
27
28
|
siteUrl?: string;
|
|
28
29
|
appName?: string;
|
|
@@ -42,84 +43,160 @@ export interface OpenRouterConfig extends OpenAIConfig {
|
|
|
42
43
|
* Non-strict requests are unaffected unless this is explicitly set.
|
|
43
44
|
*/
|
|
44
45
|
requireParameters?: boolean;
|
|
45
|
-
dataCollection?: '
|
|
46
|
+
dataCollection?: OpenRouterProviderPreferences['data_collection'];
|
|
46
47
|
zdr?: boolean;
|
|
48
|
+
enforceDistillableText?: boolean;
|
|
47
49
|
only?: string[];
|
|
48
50
|
ignore?: string[];
|
|
49
|
-
quantizations?:
|
|
50
|
-
sort?: '
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
image?: number;
|
|
55
|
-
};
|
|
51
|
+
quantizations?: OpenRouterProviderPreferences['quantizations'];
|
|
52
|
+
sort?: OpenRouterProviderPreferences['sort'];
|
|
53
|
+
preferredMinThroughput?: number;
|
|
54
|
+
preferredMaxLatency?: number;
|
|
55
|
+
maxPrice?: OpenRouterProviderPreferences['max_price'];
|
|
56
56
|
};
|
|
57
|
+
fallbackModels?: string[];
|
|
58
|
+
plugins?: OpenRouterPlugin[];
|
|
59
|
+
/**
|
|
60
|
+
* @deprecated OpenRouter replaced transforms with plugins; `middle-out`
|
|
61
|
+
* is sent as the `context-compression` plugin.
|
|
62
|
+
*/
|
|
57
63
|
transforms?: string[];
|
|
58
64
|
};
|
|
59
65
|
}
|
|
60
66
|
/**
|
|
61
67
|
* Convert OpenRouter model to ModelInfo with full details
|
|
62
68
|
*/
|
|
63
|
-
export declare function convertOpenRouterModel(model: OpenRouterModel, zdrModelIds: Set<string>, metrics?:
|
|
64
|
-
latency?: number;
|
|
65
|
-
throughput?: number;
|
|
66
|
-
uptime?: number;
|
|
67
|
-
} | null): ModelInfo;
|
|
69
|
+
export declare function convertOpenRouterModel(model: OpenRouterModel, zdrModelIds: Set<string>, metrics?: OpenRouterMetrics | null): ModelInfo;
|
|
68
70
|
/**
|
|
69
71
|
* OpenRouter provider implementation extending base OpenAI-compatible provider
|
|
70
72
|
*/
|
|
71
73
|
export declare class OpenRouterProvider extends OpenAIProvider<OpenRouterConfig> implements Provider<OpenRouterConfig> {
|
|
72
74
|
readonly name = "openrouter";
|
|
75
|
+
protected readonly defaults: {
|
|
76
|
+
chat?: import("@aeye/core").ModelInput;
|
|
77
|
+
imageGenerate?: import("@aeye/core").ModelInput;
|
|
78
|
+
imageEdit?: import("@aeye/core").ModelInput;
|
|
79
|
+
imageAnalyze?: import("@aeye/core").ModelInput;
|
|
80
|
+
transcription?: import("@aeye/core").ModelInput;
|
|
81
|
+
speech?: import("@aeye/core").ModelInput;
|
|
82
|
+
embedding?: import("@aeye/core").ModelInput;
|
|
83
|
+
decision?: import("@aeye/core").ModelInput;
|
|
84
|
+
rerank?: import("@aeye/core").ModelInput;
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* OpenRouter is a router, not a model host: it speaks an OpenAI-shaped API
|
|
88
|
+
* but forwards each request to the upstream provider that actually serves
|
|
89
|
+
* the model, translating the tool/response schemas on the way. So the wire
|
|
90
|
+
* dialect that matters is the UPSTREAM model's, which
|
|
91
|
+
* `resolveStrictFormat` already derives from the `[family]/...` id prefix
|
|
92
|
+
* (`google/gemini-3-flash-preview` → `'google'`).
|
|
93
|
+
*
|
|
94
|
+
* The inherited default is `['openai']` — correct for api.openai.com, wrong
|
|
95
|
+
* here, and it silently forced EVERY tool schema through LENIENT no matter
|
|
96
|
+
* which family the model belonged to. LENIENT encodes `z.any()` as a
|
|
97
|
+
* self-referencing `$defs/Any`, which Gemini's function-calling grammar
|
|
98
|
+
* compiler rejects with `400 INVALID_ARGUMENT` as soon as a tool call is
|
|
99
|
+
* forced. `applySchemaDeliveryFallback` never hid this because it resolves
|
|
100
|
+
* the family itself and only covers `response_format`, not tools — which is
|
|
101
|
+
* why structured output looked family-aware while tools were not.
|
|
102
|
+
*/
|
|
103
|
+
protected supportedStrictFamilies: ReadonlySet<DescriptorFamily>;
|
|
104
|
+
private readonly reasoningOf;
|
|
73
105
|
protected createClient(config: OpenRouterConfig): OpenAI;
|
|
74
106
|
protected convertModel(model: OpenAI.Model): ModelInfo;
|
|
75
107
|
/**
|
|
76
|
-
*
|
|
108
|
+
* OpenRouter serves hosted tools and reasoning options through chat
|
|
109
|
+
* completions, so the Responses API is never needed.
|
|
77
110
|
*/
|
|
78
|
-
protected
|
|
111
|
+
protected usesResponses(): boolean;
|
|
79
112
|
/**
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
* @param response
|
|
113
|
+
* OpenRouter doesn't honor `allowed_tools` (models still call the others,
|
|
114
|
+
* and some upstreams reject it), so only the allowed tools are sent.
|
|
83
115
|
*/
|
|
116
|
+
protected buildChatParams(request: Request, run: OperationRun<OpenRouterConfig>, streaming: boolean): Promise<OpenAI.Chat.Completions.ChatCompletionCreateParamsNonStreaming>;
|
|
117
|
+
/**
|
|
118
|
+
* OpenRouter reports an upstream's rejection as "Provider returned error",
|
|
119
|
+
* with the upstream's own message in `metadata.raw`.
|
|
120
|
+
*/
|
|
121
|
+
protected rejectedSchema(request: Request, error: Error): SchemaRejectedError | undefined;
|
|
122
|
+
/**
|
|
123
|
+
* OpenRouter strips `strict` from tools bound for Anthropic unless the
|
|
124
|
+
* request carries Anthropic's structured-outputs beta flag, so a strict tool
|
|
125
|
+
* would silently go unenforced (openrouter.ai/docs/guides/routing/provider-selection,
|
|
126
|
+
* read 2026-11-04). Other upstreams ignore the header.
|
|
127
|
+
*/
|
|
128
|
+
protected chatHeaders(params: OpenAI.Chat.ChatCompletionCreateParams): Record<string, string> | undefined;
|
|
129
|
+
/**
|
|
130
|
+
* Augment chat request with OpenRouter-specific parameters
|
|
131
|
+
*/
|
|
132
|
+
protected augmentChatRequest(params: OpenRouterChatRequest, request: Request, config: OpenRouterConfig): void;
|
|
84
133
|
protected augmentChatResponse(expected: OpenRouterChatResponse, response: Response, config: OpenRouterConfig): void;
|
|
85
134
|
protected augmentChatChunk(expected: OpenRouterChatChunk, chunk: Chunk, config: OpenRouterConfig): void;
|
|
86
|
-
|
|
135
|
+
/**
|
|
136
|
+
* OpenRouter marks cache breakpoints Anthropic-style and translates them
|
|
137
|
+
* for each upstream provider.
|
|
138
|
+
*/
|
|
139
|
+
protected augmentChatContent(chatContent: OpenRouterContentPart): void;
|
|
140
|
+
protected augmentChatMessage(chatMessage: OpenAI.Chat.ChatCompletionMessageParam, message: Message): void;
|
|
141
|
+
/**
|
|
142
|
+
* Assistant messages carry their reasoning back on the same message, which
|
|
143
|
+
* OpenRouter relays with the turn's text and tool calls, once even when a
|
|
144
|
+
* message was split into parts.
|
|
145
|
+
*/
|
|
87
146
|
protected convertMessages(request: Request, config: OpenRouterConfig): Promise<OpenRouterRequestMessage[]>;
|
|
88
147
|
/**
|
|
89
|
-
*
|
|
148
|
+
* Produce images through chat: image models on OpenRouter answer with
|
|
149
|
+
* images when asked for the image modality. Runs through the chat hooks.
|
|
90
150
|
*/
|
|
91
|
-
|
|
151
|
+
private chatImages;
|
|
152
|
+
generateImage: Provider['generateImage'];
|
|
153
|
+
editImage: Provider['editImage'];
|
|
92
154
|
/**
|
|
93
|
-
*
|
|
155
|
+
* Image streaming is not offered; image requests fall back to the
|
|
156
|
+
* non-streaming methods.
|
|
94
157
|
*/
|
|
95
158
|
generateImageStream: undefined;
|
|
159
|
+
editImageStream: undefined;
|
|
96
160
|
/**
|
|
97
|
-
*
|
|
161
|
+
* Transcription streaming is not offered; transcription falls back to
|
|
162
|
+
* the non-streaming method.
|
|
98
163
|
*/
|
|
99
|
-
|
|
164
|
+
transcribeStream: undefined;
|
|
100
165
|
/**
|
|
101
|
-
*
|
|
166
|
+
* Order documents by relevance to a query.
|
|
167
|
+
*
|
|
168
|
+
* @param request Rerank request parameters
|
|
169
|
+
* @param ctx Context object
|
|
170
|
+
* @param config Optional configuration override
|
|
171
|
+
* @returns Documents by relevance, most relevant first
|
|
102
172
|
*/
|
|
103
|
-
|
|
173
|
+
rerank: Provider['rerank'];
|
|
104
174
|
/**
|
|
105
|
-
*
|
|
175
|
+
* Typed answers about an input, from System One models such as Jev and
|
|
176
|
+
* Kev or other decision models. A conversation goes in as chat messages.
|
|
177
|
+
* Decisions are an alpha endpoint, outside the versioned API.
|
|
178
|
+
*
|
|
179
|
+
* @param request Decision request parameters
|
|
180
|
+
* @param ctx Context object
|
|
181
|
+
* @param config Optional configuration override
|
|
182
|
+
* @returns Answers by question name
|
|
106
183
|
*/
|
|
107
|
-
|
|
184
|
+
decide: Provider['decide'];
|
|
108
185
|
/**
|
|
109
|
-
*
|
|
186
|
+
* Start a batch: OpenRouter takes the requests inline.
|
|
110
187
|
*/
|
|
111
|
-
|
|
188
|
+
protected createBatch(batch: BatchSubmission, run: OperationRun<OpenRouterConfig>): Promise<BatchJob>;
|
|
112
189
|
/**
|
|
113
|
-
* OpenRouter
|
|
190
|
+
* Read a batch: OpenRouter returns the results inline once it completes.
|
|
114
191
|
*/
|
|
115
|
-
|
|
192
|
+
protected retrieveBatch(job: BatchJob, run: OperationRun<OpenRouterConfig>): Promise<BatchJob>;
|
|
116
193
|
/**
|
|
117
|
-
*
|
|
194
|
+
* A batch as @aeye reports it.
|
|
118
195
|
*/
|
|
119
|
-
|
|
196
|
+
private toBatchJob;
|
|
120
197
|
/**
|
|
121
198
|
* Override listModels to use OpenRouter's model API with ZDR support
|
|
122
199
|
*/
|
|
123
|
-
listModels(config
|
|
200
|
+
listModels(config?: OpenRouterConfig): Promise<ModelInfo[]>;
|
|
124
201
|
}
|
|
125
202
|
//# sourceMappingURL=openrouter.d.ts.map
|
package/dist/openrouter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../src/openrouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../src/openrouter.ts"],"names":[],"mappings":"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"}
|