@zhivex-ai/openrouter 0.1.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.
@@ -0,0 +1,36 @@
1
+ import { type CallableProviderAdapter, type ProviderAdapter } from "@zhivex-ai/core";
2
+ export interface OpenRouterProviderOptions {
3
+ apiKey?: string;
4
+ baseURL?: string;
5
+ appName?: string;
6
+ appURL?: string;
7
+ fetch?: typeof globalThis.fetch;
8
+ }
9
+ export interface OpenRouterLanguageModelOptions {
10
+ provider?: Record<string, unknown>;
11
+ plugins?: Array<Record<string, unknown>>;
12
+ models?: Array<{
13
+ model: string;
14
+ }>;
15
+ route?: "fallback";
16
+ transforms?: string[];
17
+ top_p?: number;
18
+ frequency_penalty?: number;
19
+ presence_penalty?: number;
20
+ stop?: string | string[];
21
+ seed?: number;
22
+ user?: string;
23
+ reasoning?: Record<string, unknown>;
24
+ parallel_tool_calls?: boolean;
25
+ tool_choice?: "none" | "auto" | "required" | {
26
+ type: "function";
27
+ function: {
28
+ name: string;
29
+ };
30
+ };
31
+ [key: string]: unknown;
32
+ }
33
+ export declare const createOpenRouter: (options?: OpenRouterProviderOptions) => CallableProviderAdapter & ProviderAdapter & {
34
+ rawFetch: typeof globalThis.fetch;
35
+ };
36
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAQL,KAAK,uBAAuB,EAM5B,KAAK,eAAe,EAErB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,yBAAyB;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,OAAO,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACzC,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IAC9F,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAyRD,eAAO,MAAM,gBAAgB,GAC3B,UAAS,yBAA8B,KACtC,uBAAuB,GAAG,eAAe,GAAG;IAAE,QAAQ,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;CAcjF,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,263 @@
1
+ import { toJSONSchema } from "zod";
2
+ import { ConfigurationError, ProviderHTTPError, createProviderAdapter, normalizeFinishReason, streamSSE, withRetry, withTimeoutSignal } from "@zhivex-ai/core";
3
+ const capabilities = {
4
+ streaming: true,
5
+ tools: true,
6
+ structuredOutput: true,
7
+ jsonMode: true,
8
+ toolChoice: true,
9
+ parallelToolCalls: true,
10
+ vision: true,
11
+ files: false,
12
+ audioInput: false,
13
+ audioOutput: false,
14
+ embeddings: false,
15
+ reasoning: true,
16
+ webSearch: false
17
+ };
18
+ const jsonHeaders = (apiKey, appName, appURL) => ({
19
+ "content-type": "application/json",
20
+ authorization: `Bearer ${apiKey}`,
21
+ ...(appURL ? { "http-referer": appURL } : {}),
22
+ ...(appName ? { "x-title": appName } : {})
23
+ });
24
+ const parseJson = async (response) => {
25
+ if (!response.ok) {
26
+ const body = await response.text();
27
+ throw new ProviderHTTPError(`OpenRouter request failed with status ${response.status}.`, response.status, {
28
+ responseBody: body
29
+ });
30
+ }
31
+ return response.json();
32
+ };
33
+ const mapContentParts = (message) => {
34
+ const textParts = message.parts.filter((part) => part.type === "text");
35
+ const imageParts = message.parts.filter((part) => part.type === "image");
36
+ if (!imageParts.length) {
37
+ return textParts.map((part) => part.text).join("");
38
+ }
39
+ return [
40
+ ...textParts.map((part) => ({
41
+ type: "text",
42
+ text: part.text
43
+ })),
44
+ ...imageParts.map((part) => ({
45
+ type: "image_url",
46
+ image_url: {
47
+ url: part.image
48
+ }
49
+ }))
50
+ ];
51
+ };
52
+ const mapMessages = (messages) => messages.map((message) => {
53
+ if (message.role === "tool") {
54
+ const toolResult = message.parts.find((part) => part.type === "tool-result");
55
+ return {
56
+ role: "tool",
57
+ tool_call_id: toolResult?.type === "tool-result" ? toolResult.toolResult.toolCallId : undefined,
58
+ content: toolResult?.type === "tool-result"
59
+ ? JSON.stringify(toolResult.toolResult.isError ? toolResult.toolResult.error : toolResult.toolResult.output)
60
+ : ""
61
+ };
62
+ }
63
+ const toolCalls = message.parts
64
+ .filter((part) => part.type === "tool-call")
65
+ .map((part) => ({
66
+ id: part.toolCall.id,
67
+ type: "function",
68
+ function: {
69
+ name: part.toolCall.name,
70
+ arguments: JSON.stringify(part.toolCall.input)
71
+ }
72
+ }));
73
+ const payload = {
74
+ role: message.role,
75
+ content: mapContentParts(message)
76
+ };
77
+ if (toolCalls.length) {
78
+ payload.tool_calls = toolCalls;
79
+ }
80
+ return payload;
81
+ });
82
+ const mapTools = (input) => input
83
+ ? Object.values(input).map((tool) => ({
84
+ type: "function",
85
+ function: {
86
+ name: tool.name,
87
+ description: tool.description,
88
+ parameters: toJSONSchema(tool.schema)
89
+ }
90
+ }))
91
+ : undefined;
92
+ const mapStructuredOutput = (input) => {
93
+ if (!input.structuredOutput || input.structuredOutput.mode !== "native") {
94
+ return undefined;
95
+ }
96
+ return {
97
+ type: "json_schema",
98
+ json_schema: {
99
+ name: input.structuredOutput.name ?? "response",
100
+ strict: true,
101
+ schema: toJSONSchema(input.structuredOutput.schema)
102
+ }
103
+ };
104
+ };
105
+ const parseAssistantMessage = (message) => ({
106
+ role: "assistant",
107
+ parts: [
108
+ ...(typeof message.content === "string" && message.content
109
+ ? [{ type: "text", text: message.content }]
110
+ : []),
111
+ ...((message.tool_calls ?? []).map((call) => ({
112
+ type: "tool-call",
113
+ toolCall: {
114
+ id: call.id,
115
+ name: call.function.name,
116
+ input: JSON.parse(call.function.arguments ?? "{}")
117
+ }
118
+ })) ?? [])
119
+ ]
120
+ });
121
+ class OpenRouterLanguageModel {
122
+ modelId;
123
+ apiKey;
124
+ baseURL;
125
+ appName;
126
+ appURL;
127
+ fetcher;
128
+ provider = "openrouter";
129
+ capabilities = capabilities;
130
+ constructor(modelId, apiKey, baseURL, appName, appURL, fetcher) {
131
+ this.modelId = modelId;
132
+ this.apiKey = apiKey;
133
+ this.baseURL = baseURL;
134
+ this.appName = appName;
135
+ this.appURL = appURL;
136
+ this.fetcher = fetcher;
137
+ }
138
+ async generate(input) {
139
+ const { signal, cleanup } = withTimeoutSignal(input);
140
+ try {
141
+ const response = await withRetry(() => this.fetcher(`${this.baseURL}/chat/completions`, {
142
+ method: "POST",
143
+ headers: jsonHeaders(this.apiKey, this.appName, this.appURL),
144
+ signal,
145
+ body: JSON.stringify({
146
+ model: this.modelId,
147
+ messages: mapMessages(input.messages),
148
+ tools: mapTools(input.tools),
149
+ response_format: mapStructuredOutput(input),
150
+ temperature: input.temperature,
151
+ max_tokens: input.maxTokens,
152
+ stream: false,
153
+ ...input.providerOptions
154
+ })
155
+ }), input);
156
+ const json = await parseJson(response);
157
+ const choice = json.choices?.[0];
158
+ const message = choice?.message ?? {};
159
+ const assistantMessage = parseAssistantMessage(message);
160
+ return {
161
+ messages: [assistantMessage],
162
+ text: assistantMessage.parts
163
+ .filter((part) => part.type === "text")
164
+ .map((part) => part.text)
165
+ .join(""),
166
+ finishReason: normalizeFinishReason(choice?.finish_reason),
167
+ providerFinishReason: choice?.finish_reason,
168
+ usage: {
169
+ inputTokens: json.usage?.prompt_tokens,
170
+ outputTokens: json.usage?.completion_tokens,
171
+ totalTokens: json.usage?.total_tokens
172
+ },
173
+ rawResponse: json
174
+ };
175
+ }
176
+ finally {
177
+ cleanup();
178
+ }
179
+ }
180
+ async stream(input) {
181
+ const { signal, cleanup } = withTimeoutSignal(input);
182
+ const response = await withRetry(() => this.fetcher(`${this.baseURL}/chat/completions`, {
183
+ method: "POST",
184
+ headers: jsonHeaders(this.apiKey, this.appName, this.appURL),
185
+ signal,
186
+ body: JSON.stringify({
187
+ model: this.modelId,
188
+ messages: mapMessages(input.messages),
189
+ tools: mapTools(input.tools),
190
+ response_format: mapStructuredOutput(input),
191
+ temperature: input.temperature,
192
+ max_tokens: input.maxTokens,
193
+ stream: true,
194
+ stream_options: { include_usage: true },
195
+ ...input.providerOptions
196
+ })
197
+ }), input);
198
+ return (async function* () {
199
+ try {
200
+ const toolBuffers = new Map();
201
+ for await (const event of streamSSE(response)) {
202
+ if (event.data === "[DONE]") {
203
+ return;
204
+ }
205
+ const json = JSON.parse(event.data);
206
+ const choice = json.choices?.[0];
207
+ const delta = choice?.delta;
208
+ if (delta?.content) {
209
+ yield { type: "text-delta", textDelta: delta.content };
210
+ }
211
+ for (const toolCall of delta?.tool_calls ?? []) {
212
+ const id = toolCall.id ?? `${toolCall.index}`;
213
+ const existing = toolBuffers.get(id) ?? { name: "", args: "" };
214
+ existing.name ||= toolCall.function?.name ?? "";
215
+ existing.args += toolCall.function?.arguments ?? "";
216
+ toolBuffers.set(id, existing);
217
+ if (choice?.finish_reason === "tool_calls") {
218
+ yield {
219
+ type: "tool-call",
220
+ toolCall: {
221
+ id,
222
+ name: existing.name,
223
+ input: JSON.parse(existing.args || "{}")
224
+ }
225
+ };
226
+ }
227
+ }
228
+ if (choice?.finish_reason) {
229
+ yield {
230
+ type: "finish",
231
+ finishReason: normalizeFinishReason(choice.finish_reason),
232
+ providerFinishReason: choice.finish_reason,
233
+ usage: json.usage
234
+ ? {
235
+ inputTokens: json.usage.prompt_tokens,
236
+ outputTokens: json.usage.completion_tokens,
237
+ totalTokens: json.usage.total_tokens
238
+ }
239
+ : undefined
240
+ };
241
+ }
242
+ }
243
+ }
244
+ finally {
245
+ cleanup();
246
+ }
247
+ })();
248
+ }
249
+ }
250
+ export const createOpenRouter = (options = {}) => {
251
+ const apiKey = options.apiKey ?? process.env.OPENROUTER_API_KEY;
252
+ if (!apiKey) {
253
+ throw new ConfigurationError("Missing OpenRouter API key.");
254
+ }
255
+ const baseURL = options.baseURL ?? "https://openrouter.ai/api/v1";
256
+ const fetcher = options.fetch ?? globalThis.fetch;
257
+ return createProviderAdapter({
258
+ name: "openrouter",
259
+ languageModel: (modelId) => new OpenRouterLanguageModel(modelId, apiKey, baseURL, options.appName, options.appURL, fetcher),
260
+ rawFetch: fetcher
261
+ });
262
+ };
263
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@zhivex-ai/openrouter",
3
+ "version": "0.1.0",
4
+ "license": "MIT",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": ["dist"],
15
+ "sideEffects": false,
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/Zhivex/zhivex-ai-sdk.git",
19
+ "directory": "packages/openrouter"
20
+ },
21
+ "homepage": "https://github.com/Zhivex/zhivex-ai-sdk#readme",
22
+ "bugs": {
23
+ "url": "https://github.com/Zhivex/zhivex-ai-sdk/issues"
24
+ },
25
+ "keywords": ["ai", "sdk", "openrouter", "llm", "typescript"],
26
+ "publishConfig": {
27
+ "access": "public"
28
+ },
29
+ "dependencies": {
30
+ "@zhivex-ai/core": "^0.1.0",
31
+ "zod": "^4.3.6"
32
+ }
33
+ }