@probeo/anymodel 0.1.0 → 0.3.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.
Files changed (115) hide show
  1. package/README.md +117 -10
  2. package/dist/batch/index.d.ts +4 -0
  3. package/dist/batch/index.d.ts.map +1 -0
  4. package/dist/batch/index.js +3 -0
  5. package/dist/batch/index.js.map +1 -0
  6. package/dist/batch/manager.d.ts +72 -0
  7. package/dist/batch/manager.d.ts.map +1 -0
  8. package/dist/batch/manager.js +328 -0
  9. package/dist/batch/manager.js.map +1 -0
  10. package/dist/batch/store.d.ts +54 -0
  11. package/dist/batch/store.d.ts.map +1 -0
  12. package/dist/batch/store.js +109 -0
  13. package/dist/batch/store.js.map +1 -0
  14. package/dist/cli.cjs +112 -19
  15. package/dist/cli.cjs.map +1 -1
  16. package/dist/cli.d.ts +2 -0
  17. package/dist/cli.d.ts.map +1 -0
  18. package/dist/cli.js +28 -1993
  19. package/dist/cli.js.map +1 -1
  20. package/dist/client.d.ts +42 -0
  21. package/dist/client.d.ts.map +1 -0
  22. package/dist/client.js +181 -0
  23. package/dist/client.js.map +1 -0
  24. package/dist/config.d.ts +6 -0
  25. package/dist/config.d.ts.map +1 -0
  26. package/dist/config.js +120 -0
  27. package/dist/config.js.map +1 -0
  28. package/dist/index.cjs +112 -19
  29. package/dist/index.cjs.map +1 -1
  30. package/dist/index.d.cts +10 -0
  31. package/dist/index.d.ts +14 -538
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +15 -1972
  34. package/dist/index.js.map +1 -1
  35. package/dist/providers/adapter.d.ts +33 -0
  36. package/dist/providers/adapter.d.ts.map +1 -0
  37. package/dist/providers/adapter.js +2 -0
  38. package/dist/providers/adapter.js.map +1 -0
  39. package/dist/providers/anthropic-batch.d.ts +3 -0
  40. package/dist/providers/anthropic-batch.d.ts.map +1 -0
  41. package/dist/providers/anthropic-batch.js +228 -0
  42. package/dist/providers/anthropic-batch.js.map +1 -0
  43. package/dist/providers/anthropic.d.ts +3 -0
  44. package/dist/providers/anthropic.d.ts.map +1 -0
  45. package/dist/providers/anthropic.js +358 -0
  46. package/dist/providers/anthropic.js.map +1 -0
  47. package/dist/providers/custom.d.ts +8 -0
  48. package/dist/providers/custom.d.ts.map +1 -0
  49. package/dist/providers/custom.js +61 -0
  50. package/dist/providers/custom.js.map +1 -0
  51. package/dist/providers/google.d.ts +3 -0
  52. package/dist/providers/google.d.ts.map +1 -0
  53. package/dist/providers/google.js +331 -0
  54. package/dist/providers/google.js.map +1 -0
  55. package/dist/providers/index.d.ts +6 -0
  56. package/dist/providers/index.d.ts.map +1 -0
  57. package/dist/providers/index.js +5 -0
  58. package/dist/providers/index.js.map +1 -0
  59. package/dist/providers/openai-batch.d.ts +3 -0
  60. package/dist/providers/openai-batch.d.ts.map +1 -0
  61. package/dist/providers/openai-batch.js +208 -0
  62. package/dist/providers/openai-batch.js.map +1 -0
  63. package/dist/providers/openai.d.ts +3 -0
  64. package/dist/providers/openai.d.ts.map +1 -0
  65. package/dist/providers/openai.js +221 -0
  66. package/dist/providers/openai.js.map +1 -0
  67. package/dist/providers/registry.d.ts +10 -0
  68. package/dist/providers/registry.d.ts.map +1 -0
  69. package/dist/providers/registry.js +27 -0
  70. package/dist/providers/registry.js.map +1 -0
  71. package/dist/router.d.ts +29 -0
  72. package/dist/router.d.ts.map +1 -0
  73. package/dist/router.js +212 -0
  74. package/dist/router.js.map +1 -0
  75. package/dist/server.d.ts +10 -0
  76. package/dist/server.d.ts.map +1 -0
  77. package/dist/server.js +149 -0
  78. package/dist/server.js.map +1 -0
  79. package/dist/types.d.ts +283 -0
  80. package/dist/types.d.ts.map +1 -0
  81. package/dist/types.js +21 -0
  82. package/dist/types.js.map +1 -0
  83. package/dist/utils/fs-io.d.ts +40 -0
  84. package/dist/utils/fs-io.d.ts.map +1 -0
  85. package/dist/utils/fs-io.js +203 -0
  86. package/dist/utils/fs-io.js.map +1 -0
  87. package/dist/utils/generation-stats.d.ts +25 -0
  88. package/dist/utils/generation-stats.d.ts.map +1 -0
  89. package/dist/utils/generation-stats.js +46 -0
  90. package/dist/utils/generation-stats.js.map +1 -0
  91. package/dist/utils/id.d.ts +2 -0
  92. package/dist/utils/id.d.ts.map +1 -0
  93. package/dist/utils/id.js +6 -0
  94. package/dist/utils/id.js.map +1 -0
  95. package/dist/utils/model-parser.d.ts +6 -0
  96. package/dist/utils/model-parser.d.ts.map +1 -0
  97. package/dist/utils/model-parser.js +21 -0
  98. package/dist/utils/model-parser.js.map +1 -0
  99. package/dist/utils/rate-limiter.d.ts +36 -0
  100. package/dist/utils/rate-limiter.d.ts.map +1 -0
  101. package/dist/utils/rate-limiter.js +80 -0
  102. package/dist/utils/rate-limiter.js.map +1 -0
  103. package/dist/utils/retry.d.ts +7 -0
  104. package/dist/utils/retry.d.ts.map +1 -0
  105. package/dist/utils/retry.js +54 -0
  106. package/dist/utils/retry.js.map +1 -0
  107. package/dist/utils/transforms.d.ts +7 -0
  108. package/dist/utils/transforms.d.ts.map +1 -0
  109. package/dist/utils/transforms.js +66 -0
  110. package/dist/utils/transforms.js.map +1 -0
  111. package/dist/utils/validate.d.ts +3 -0
  112. package/dist/utils/validate.d.ts.map +1 -0
  113. package/dist/utils/validate.js +31 -0
  114. package/dist/utils/validate.js.map +1 -0
  115. package/package.json +9 -2
@@ -0,0 +1,221 @@
1
+ import { AnyModelError } from '../types.js';
2
+ const OPENAI_API_BASE = 'https://api.openai.com/v1';
3
+ const SUPPORTED_PARAMS = new Set([
4
+ 'temperature', 'max_tokens', 'top_p', 'frequency_penalty', 'presence_penalty',
5
+ 'seed', 'stop', 'stream', 'logprobs', 'top_logprobs', 'response_format',
6
+ 'tools', 'tool_choice', 'user', 'logit_bias',
7
+ ]);
8
+ export function createOpenAIAdapter(apiKey, baseURL) {
9
+ const base = baseURL || OPENAI_API_BASE;
10
+ async function makeRequest(path, body, method = 'POST') {
11
+ const res = await fetch(`${base}${path}`, {
12
+ method,
13
+ headers: {
14
+ 'Content-Type': 'application/json',
15
+ 'Authorization': `Bearer ${apiKey}`,
16
+ },
17
+ body: body ? JSON.stringify(body) : undefined,
18
+ });
19
+ if (!res.ok) {
20
+ let errorBody;
21
+ try {
22
+ errorBody = await res.json();
23
+ }
24
+ catch {
25
+ errorBody = { message: res.statusText };
26
+ }
27
+ const msg = errorBody?.error?.message || errorBody?.message || res.statusText;
28
+ throw new AnyModelError(mapErrorCode(res.status), msg, {
29
+ provider_name: 'openai',
30
+ raw: errorBody,
31
+ });
32
+ }
33
+ return res;
34
+ }
35
+ function mapErrorCode(status) {
36
+ if (status === 401 || status === 403)
37
+ return 401;
38
+ if (status === 429)
39
+ return 429;
40
+ if (status === 400 || status === 422)
41
+ return 400;
42
+ if (status >= 500)
43
+ return 502;
44
+ return status;
45
+ }
46
+ function rePrefixId(id) {
47
+ if (id && id.startsWith('chatcmpl-')) {
48
+ return `gen-${id.substring(9)}`;
49
+ }
50
+ return id.startsWith('gen-') ? id : `gen-${id}`;
51
+ }
52
+ function buildRequestBody(request) {
53
+ const body = {
54
+ model: request.model,
55
+ messages: request.messages,
56
+ };
57
+ // Copy over optional params
58
+ if (request.temperature !== undefined)
59
+ body.temperature = request.temperature;
60
+ if (request.max_tokens !== undefined)
61
+ body.max_tokens = request.max_tokens;
62
+ if (request.top_p !== undefined)
63
+ body.top_p = request.top_p;
64
+ if (request.frequency_penalty !== undefined)
65
+ body.frequency_penalty = request.frequency_penalty;
66
+ if (request.presence_penalty !== undefined)
67
+ body.presence_penalty = request.presence_penalty;
68
+ if (request.seed !== undefined)
69
+ body.seed = request.seed;
70
+ if (request.stop !== undefined)
71
+ body.stop = request.stop;
72
+ if (request.stream !== undefined)
73
+ body.stream = request.stream;
74
+ if (request.logprobs !== undefined)
75
+ body.logprobs = request.logprobs;
76
+ if (request.top_logprobs !== undefined)
77
+ body.top_logprobs = request.top_logprobs;
78
+ if (request.response_format !== undefined)
79
+ body.response_format = request.response_format;
80
+ if (request.tools !== undefined)
81
+ body.tools = request.tools;
82
+ if (request.tool_choice !== undefined)
83
+ body.tool_choice = request.tool_choice;
84
+ if (request.user !== undefined)
85
+ body.user = request.user;
86
+ return body;
87
+ }
88
+ const adapter = {
89
+ name: 'openai',
90
+ translateRequest(request) {
91
+ return buildRequestBody(request);
92
+ },
93
+ translateResponse(response) {
94
+ const r = response;
95
+ return {
96
+ id: rePrefixId(r.id),
97
+ object: 'chat.completion',
98
+ created: r.created,
99
+ model: `openai/${r.model}`,
100
+ choices: r.choices,
101
+ usage: r.usage,
102
+ };
103
+ },
104
+ async *translateStream(stream) {
105
+ const reader = stream.getReader();
106
+ const decoder = new TextDecoder();
107
+ let buffer = '';
108
+ try {
109
+ while (true) {
110
+ const { done, value } = await reader.read();
111
+ if (done)
112
+ break;
113
+ buffer += decoder.decode(value, { stream: true });
114
+ const lines = buffer.split('\n');
115
+ buffer = lines.pop() || '';
116
+ for (const line of lines) {
117
+ const trimmed = line.trim();
118
+ if (!trimmed || trimmed.startsWith(':'))
119
+ continue;
120
+ if (trimmed === 'data: [DONE]')
121
+ return;
122
+ if (trimmed.startsWith('data: ')) {
123
+ const json = JSON.parse(trimmed.substring(6));
124
+ json.id = rePrefixId(json.id);
125
+ json.model = `openai/${json.model}`;
126
+ yield json;
127
+ }
128
+ }
129
+ }
130
+ }
131
+ finally {
132
+ reader.releaseLock();
133
+ }
134
+ },
135
+ translateError(error) {
136
+ if (error instanceof AnyModelError) {
137
+ return { code: error.code, message: error.message, metadata: error.metadata };
138
+ }
139
+ const err = error;
140
+ const status = err?.status || err?.code || 500;
141
+ return {
142
+ code: mapErrorCode(status),
143
+ message: err?.message || 'Unknown OpenAI error',
144
+ metadata: { provider_name: 'openai', raw: error },
145
+ };
146
+ },
147
+ async listModels() {
148
+ const res = await makeRequest('/models', undefined, 'GET');
149
+ const data = await res.json();
150
+ return (data.data || [])
151
+ .filter((m) => {
152
+ const id = m.id;
153
+ // Exclude non-chat models
154
+ if (id.includes('embedding'))
155
+ return false;
156
+ if (id.includes('whisper'))
157
+ return false;
158
+ if (id.includes('tts'))
159
+ return false;
160
+ if (id.includes('dall-e'))
161
+ return false;
162
+ if (id.includes('davinci'))
163
+ return false;
164
+ if (id.includes('babbage'))
165
+ return false;
166
+ if (id.includes('moderation'))
167
+ return false;
168
+ if (id.includes('realtime'))
169
+ return false;
170
+ if (id.startsWith('ft:'))
171
+ return false;
172
+ // Include known chat model prefixes
173
+ return id.startsWith('gpt-') || id.startsWith('o1') || id.startsWith('o3') || id.startsWith('o4') || id.startsWith('chatgpt-');
174
+ })
175
+ .map((m) => ({
176
+ id: `openai/${m.id}`,
177
+ name: m.id,
178
+ created: m.created,
179
+ description: '',
180
+ context_length: 128000,
181
+ pricing: { prompt: '0', completion: '0' },
182
+ architecture: {
183
+ modality: 'text+image->text',
184
+ input_modalities: ['text', 'image'],
185
+ output_modalities: ['text'],
186
+ tokenizer: 'o200k_base',
187
+ },
188
+ top_provider: {
189
+ context_length: 128000,
190
+ max_completion_tokens: 16384,
191
+ is_moderated: true,
192
+ },
193
+ supported_parameters: Array.from(SUPPORTED_PARAMS),
194
+ }));
195
+ },
196
+ supportsParameter(param) {
197
+ return SUPPORTED_PARAMS.has(param);
198
+ },
199
+ supportsBatch() {
200
+ return true;
201
+ },
202
+ async sendRequest(request) {
203
+ const body = buildRequestBody(request);
204
+ const res = await makeRequest('/chat/completions', body);
205
+ const json = await res.json();
206
+ return adapter.translateResponse(json);
207
+ },
208
+ async sendStreamingRequest(request) {
209
+ const body = buildRequestBody({ ...request, stream: true });
210
+ const res = await makeRequest('/chat/completions', body);
211
+ if (!res.body) {
212
+ throw new AnyModelError(502, 'No response body for streaming request', {
213
+ provider_name: 'openai',
214
+ });
215
+ }
216
+ return adapter.translateStream(res.body);
217
+ },
218
+ };
219
+ return adapter;
220
+ }
221
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { ProviderAdapter } from './adapter.js';
2
+ export declare class ProviderRegistry {
3
+ private adapters;
4
+ register(slug: string, adapter: ProviderAdapter): void;
5
+ get(slug: string): ProviderAdapter;
6
+ has(slug: string): boolean;
7
+ list(): string[];
8
+ all(): ProviderAdapter[];
9
+ }
10
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAGpD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAsC;IAEtD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI;IAOtD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IAQlC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,IAAI,IAAI,MAAM,EAAE;IAIhB,GAAG,IAAI,eAAe,EAAE;CAGzB"}
@@ -0,0 +1,27 @@
1
+ import { AnyModelError } from '../types.js';
2
+ export class ProviderRegistry {
3
+ adapters = new Map();
4
+ register(slug, adapter) {
5
+ if (this.adapters.has(slug)) {
6
+ throw new AnyModelError(500, `Provider '${slug}' is already registered`);
7
+ }
8
+ this.adapters.set(slug, adapter);
9
+ }
10
+ get(slug) {
11
+ const adapter = this.adapters.get(slug);
12
+ if (!adapter) {
13
+ throw new AnyModelError(400, `Provider '${slug}' not configured`);
14
+ }
15
+ return adapter;
16
+ }
17
+ has(slug) {
18
+ return this.adapters.has(slug);
19
+ }
20
+ list() {
21
+ return Array.from(this.adapters.keys());
22
+ }
23
+ all() {
24
+ return Array.from(this.adapters.values());
25
+ }
26
+ }
27
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,gBAAgB;IACnB,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;IAEtD,QAAQ,CAAC,IAAY,EAAE,OAAwB;QAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,aAAa,IAAI,yBAAyB,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,GAAG,CAAC,IAAY;QACd,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,aAAa,IAAI,kBAAkB,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,GAAG;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;CACF"}
@@ -0,0 +1,29 @@
1
+ import type { ChatCompletionRequest, ChatCompletion, ChatCompletionChunk, AnyModelConfig } from './types.js';
2
+ import type { ProviderRegistry } from './providers/registry.js';
3
+ import { RateLimitTracker } from './utils/rate-limiter.js';
4
+ export declare class Router {
5
+ private registry;
6
+ private aliases?;
7
+ private config?;
8
+ private rateLimiter;
9
+ constructor(registry: ProviderRegistry, aliases?: Record<string, string> | undefined, config?: AnyModelConfig | undefined);
10
+ /**
11
+ * Strip parameters that the target provider doesn't support.
12
+ */
13
+ private stripUnsupported;
14
+ /**
15
+ * Apply transforms (e.g., middle-out) to the request messages.
16
+ */
17
+ private applyTransforms;
18
+ /**
19
+ * Order models based on provider preferences.
20
+ */
21
+ private applyProviderPreferences;
22
+ private getRetryOptions;
23
+ complete(request: ChatCompletionRequest): Promise<ChatCompletion>;
24
+ stream(request: ChatCompletionRequest): Promise<AsyncIterable<ChatCompletionChunk>>;
25
+ private completeWithFallback;
26
+ private streamWithFallback;
27
+ getRateLimiter(): RateLimitTracker;
28
+ }
29
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,cAAc,EAEf,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAW3D,qBAAa,MAAM;IAIf,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO,CAAC;IAChB,OAAO,CAAC,MAAM,CAAC;IALjB,OAAO,CAAC,WAAW,CAA0B;gBAGnC,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,YAAA,EAChC,MAAM,CAAC,EAAE,cAAc,YAAA;IAGjC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAevB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA8DhC,OAAO,CAAC,eAAe;IAMjB,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC;IAqBjE,MAAM,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;YAmB3E,oBAAoB;YAmDpB,kBAAkB;IA8ChC,cAAc,IAAI,gBAAgB;CAGnC"}
package/dist/router.js ADDED
@@ -0,0 +1,212 @@
1
+ import { AnyModelError } from './types.js';
2
+ import { parseModelString } from './utils/model-parser.js';
3
+ import { validateRequest } from './utils/validate.js';
4
+ import { withRetry } from './utils/retry.js';
5
+ import { RateLimitTracker } from './utils/rate-limiter.js';
6
+ import { applyTransform } from './utils/transforms.js';
7
+ // Parameters that can be stripped if unsupported by a provider
8
+ const STRIPPABLE_PARAMS = [
9
+ 'temperature', 'max_tokens', 'top_p', 'top_k',
10
+ 'frequency_penalty', 'presence_penalty', 'repetition_penalty',
11
+ 'seed', 'stop', 'logprobs', 'top_logprobs', 'response_format',
12
+ 'tools', 'tool_choice', 'user',
13
+ ];
14
+ export class Router {
15
+ registry;
16
+ aliases;
17
+ config;
18
+ rateLimiter = new RateLimitTracker();
19
+ constructor(registry, aliases, config) {
20
+ this.registry = registry;
21
+ this.aliases = aliases;
22
+ this.config = config;
23
+ }
24
+ /**
25
+ * Strip parameters that the target provider doesn't support.
26
+ */
27
+ stripUnsupported(request, adapter) {
28
+ const cleaned = { ...request };
29
+ for (const param of STRIPPABLE_PARAMS) {
30
+ if (cleaned[param] !== undefined && !adapter.supportsParameter(param)) {
31
+ delete cleaned[param];
32
+ }
33
+ }
34
+ return cleaned;
35
+ }
36
+ /**
37
+ * Apply transforms (e.g., middle-out) to the request messages.
38
+ */
39
+ applyTransforms(request) {
40
+ const transforms = request.transforms || this.config?.defaults?.transforms;
41
+ if (!transforms || transforms.length === 0)
42
+ return request;
43
+ let messages = [...request.messages];
44
+ // Default context length for transform budget
45
+ const contextLength = 128000;
46
+ for (const transform of transforms) {
47
+ messages = applyTransform(transform, messages, contextLength);
48
+ }
49
+ return { ...request, messages };
50
+ }
51
+ /**
52
+ * Order models based on provider preferences.
53
+ */
54
+ applyProviderPreferences(models, prefs) {
55
+ if (!prefs)
56
+ return models;
57
+ let filtered = [...models];
58
+ // Apply 'only' filter — restrict to these providers
59
+ if (prefs.only && prefs.only.length > 0) {
60
+ const onlySet = new Set(prefs.only);
61
+ filtered = filtered.filter(m => {
62
+ const { provider } = parseModelString(m, this.aliases);
63
+ return onlySet.has(provider);
64
+ });
65
+ }
66
+ // Apply 'ignore' filter — exclude these providers
67
+ if (prefs.ignore && prefs.ignore.length > 0) {
68
+ const ignoreSet = new Set(prefs.ignore);
69
+ filtered = filtered.filter(m => {
70
+ const { provider } = parseModelString(m, this.aliases);
71
+ return !ignoreSet.has(provider);
72
+ });
73
+ }
74
+ // Apply 'order' — reorder to prefer specified providers first
75
+ if (prefs.order && prefs.order.length > 0) {
76
+ const orderMap = new Map(prefs.order.map((p, i) => [p, i]));
77
+ filtered.sort((a, b) => {
78
+ const aProvider = parseModelString(a, this.aliases).provider;
79
+ const bProvider = parseModelString(b, this.aliases).provider;
80
+ const aOrder = orderMap.get(aProvider) ?? Infinity;
81
+ const bOrder = orderMap.get(bProvider) ?? Infinity;
82
+ return aOrder - bOrder;
83
+ });
84
+ }
85
+ // Apply 'require_parameters' — skip providers that don't support all used params
86
+ if (prefs.require_parameters) {
87
+ filtered = filtered.filter(m => {
88
+ try {
89
+ const { provider } = parseModelString(m, this.aliases);
90
+ const adapter = this.registry.get(provider);
91
+ // No way to know which params will be used without looking at the request,
92
+ // so this is handled at dispatch time by stripUnsupported
93
+ return adapter !== undefined;
94
+ }
95
+ catch {
96
+ return false;
97
+ }
98
+ });
99
+ }
100
+ // Skip rate-limited providers
101
+ filtered = filtered.filter(m => {
102
+ const { provider } = parseModelString(m, this.aliases);
103
+ return !this.rateLimiter.isRateLimited(provider);
104
+ });
105
+ return filtered;
106
+ }
107
+ getRetryOptions() {
108
+ return {
109
+ maxRetries: this.config?.defaults?.retries ?? 2,
110
+ };
111
+ }
112
+ async complete(request) {
113
+ validateRequest(request);
114
+ // Apply transforms
115
+ const transformed = this.applyTransforms(request);
116
+ // Fallback routing
117
+ if (transformed.models && transformed.models.length > 0 && transformed.route === 'fallback') {
118
+ return this.completeWithFallback(transformed);
119
+ }
120
+ const { provider, model } = parseModelString(transformed.model, this.aliases);
121
+ const adapter = this.registry.get(provider);
122
+ const resolvedRequest = this.stripUnsupported({ ...transformed, model }, adapter);
123
+ return withRetry(() => adapter.sendRequest(resolvedRequest), this.getRetryOptions());
124
+ }
125
+ async stream(request) {
126
+ validateRequest(request);
127
+ const transformed = this.applyTransforms(request);
128
+ if (transformed.models && transformed.models.length > 0 && transformed.route === 'fallback') {
129
+ return this.streamWithFallback(transformed);
130
+ }
131
+ const { provider, model } = parseModelString(transformed.model, this.aliases);
132
+ const adapter = this.registry.get(provider);
133
+ const resolvedRequest = this.stripUnsupported({ ...transformed, model, stream: true }, adapter);
134
+ return withRetry(() => adapter.sendStreamingRequest(resolvedRequest), this.getRetryOptions());
135
+ }
136
+ async completeWithFallback(request) {
137
+ let models = request.models;
138
+ const errors = [];
139
+ // Apply provider preferences to order/filter models
140
+ models = this.applyProviderPreferences(models, request.provider);
141
+ for (const modelStr of models) {
142
+ try {
143
+ const { provider, model } = parseModelString(modelStr, this.aliases);
144
+ const adapter = this.registry.get(provider);
145
+ const resolvedRequest = this.stripUnsupported({ ...request, model, models: undefined, route: undefined }, adapter);
146
+ const response = await withRetry(() => adapter.sendRequest(resolvedRequest), this.getRetryOptions());
147
+ response.model = modelStr;
148
+ return response;
149
+ }
150
+ catch (err) {
151
+ const error = err instanceof AnyModelError
152
+ ? err
153
+ : new AnyModelError(500, String(err));
154
+ // Track rate limits
155
+ if (error.code === 429) {
156
+ const { provider } = parseModelString(modelStr, this.aliases);
157
+ this.rateLimiter.recordRateLimit(provider);
158
+ }
159
+ errors.push({ model: modelStr, error });
160
+ }
161
+ }
162
+ const lastError = errors[errors.length - 1];
163
+ throw new AnyModelError(lastError.error.code, lastError.error.message, {
164
+ ...lastError.error.metadata,
165
+ raw: {
166
+ attempts: errors.map(e => ({
167
+ model: e.model,
168
+ code: e.error.code,
169
+ message: e.error.message,
170
+ })),
171
+ },
172
+ });
173
+ }
174
+ async streamWithFallback(request) {
175
+ let models = request.models;
176
+ const errors = [];
177
+ models = this.applyProviderPreferences(models, request.provider);
178
+ for (const modelStr of models) {
179
+ try {
180
+ const { provider, model } = parseModelString(modelStr, this.aliases);
181
+ const adapter = this.registry.get(provider);
182
+ const resolvedRequest = this.stripUnsupported({ ...request, model, models: undefined, route: undefined, stream: true }, adapter);
183
+ return await withRetry(() => adapter.sendStreamingRequest(resolvedRequest), this.getRetryOptions());
184
+ }
185
+ catch (err) {
186
+ const error = err instanceof AnyModelError
187
+ ? err
188
+ : new AnyModelError(500, String(err));
189
+ if (error.code === 429) {
190
+ const { provider } = parseModelString(modelStr, this.aliases);
191
+ this.rateLimiter.recordRateLimit(provider);
192
+ }
193
+ errors.push({ model: modelStr, error });
194
+ }
195
+ }
196
+ const lastError = errors[errors.length - 1];
197
+ throw new AnyModelError(lastError.error.code, lastError.error.message, {
198
+ ...lastError.error.metadata,
199
+ raw: {
200
+ attempts: errors.map(e => ({
201
+ model: e.model,
202
+ code: e.error.code,
203
+ message: e.error.message,
204
+ })),
205
+ },
206
+ });
207
+ }
208
+ getRateLimiter() {
209
+ return this.rateLimiter;
210
+ }
211
+ }
212
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,+DAA+D;AAC/D,MAAM,iBAAiB,GAAG;IACxB,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO;IAC7C,mBAAmB,EAAE,kBAAkB,EAAE,oBAAoB;IAC7D,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB;IAC7D,OAAO,EAAE,aAAa,EAAE,MAAM;CACtB,CAAC;AAEX,MAAM,OAAO,MAAM;IAIP;IACA;IACA;IALF,WAAW,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAE7C,YACU,QAA0B,EAC1B,OAAgC,EAChC,MAAuB;QAFvB,aAAQ,GAAR,QAAQ,CAAkB;QAC1B,YAAO,GAAP,OAAO,CAAyB;QAChC,WAAM,GAAN,MAAM,CAAiB;IAC9B,CAAC;IAEJ;;OAEG;IACK,gBAAgB,CAAC,OAA8B,EAAE,OAAwB;QAC/E,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,CAAC;YACtC,IAAK,OAAe,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/E,OAAQ,OAAe,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,OAA8B;QACpD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC;QAC3E,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC;QAE3D,IAAI,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrC,8CAA8C;QAC9C,MAAM,aAAa,GAAG,MAAM,CAAC;QAE7B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,QAAQ,GAAG,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QAChE,CAAC;QAED,OAAO,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACK,wBAAwB,CAC9B,MAAgB,EAChB,KAA2B;QAE3B,IAAI,CAAC,KAAK;YAAE,OAAO,MAAM,CAAC;QAE1B,IAAI,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QAE3B,oDAAoD;QACpD,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gBAC7B,MAAM,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvD,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;QACL,CAAC;QAED,kDAAkD;QAClD,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACxC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gBAC7B,MAAM,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvD,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,8DAA8D;QAC9D,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACrB,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;gBAC7D,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;gBAC7D,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC;gBACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC;gBACnD,OAAO,MAAM,GAAG,MAAM,CAAC;YACzB,CAAC,CAAC,CAAC;QACL,CAAC;QAED,iFAAiF;QACjF,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC;YAC7B,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gBAC7B,IAAI,CAAC;oBACH,MAAM,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;oBACvD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBAC5C,2EAA2E;oBAC3E,0DAA0D;oBAC1D,OAAO,OAAO,KAAK,SAAS,CAAC;gBAC/B,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,8BAA8B;QAC9B,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YAC7B,MAAM,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACvD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,eAAe;QACrB,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,IAAI,CAAC;SAChD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAA8B;QAC3C,eAAe,CAAC,OAAO,CAAC,CAAC;QAEzB,mBAAmB;QACnB,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAElD,mBAAmB;QACnB,IAAI,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YAC5F,OAAO,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,gBAAgB,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,GAAG,WAAW,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;QAElF,OAAO,SAAS,CACd,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,EAC1C,IAAI,CAAC,eAAe,EAAE,CACvB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAA8B;QACzC,eAAe,CAAC,OAAO,CAAC,CAAC;QAEzB,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAElD,IAAI,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YAC5F,OAAO,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,gBAAgB,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,GAAG,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;QAEhG,OAAO,SAAS,CACd,GAAG,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,eAAe,CAAC,EACnD,IAAI,CAAC,eAAe,EAAE,CACvB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,OAA8B;QAC/D,IAAI,MAAM,GAAG,OAAO,CAAC,MAAO,CAAC;QAC7B,MAAM,MAAM,GAAmD,EAAE,CAAC;QAElE,oDAAoD;QACpD,MAAM,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEjE,KAAK,MAAM,QAAQ,IAAI,MAAM,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBACrE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC5C,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAC3C,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAC1D,OAAO,CACR,CAAC;gBAEF,MAAM,QAAQ,GAAG,MAAM,SAAS,CAC9B,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,EAC1C,IAAI,CAAC,eAAe,EAAE,CACvB,CAAC;gBAEF,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC;gBAC1B,OAAO,QAAQ,CAAC;YAClB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,KAAK,GAAG,GAAG,YAAY,aAAa;oBACxC,CAAC,CAAC,GAAG;oBACL,CAAC,CAAC,IAAI,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAExC,oBAAoB;gBACpB,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;oBACvB,MAAM,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC9D,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;gBAC7C,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5C,MAAM,IAAI,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE;YACrE,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ;YAC3B,GAAG,EAAE;gBACH,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACzB,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI;oBAClB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO;iBACzB,CAAC,CAAC;aACJ;SACF,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,OAA8B;QAC7D,IAAI,MAAM,GAAG,OAAO,CAAC,MAAO,CAAC;QAC7B,MAAM,MAAM,GAAmD,EAAE,CAAC;QAElE,MAAM,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEjE,KAAK,MAAM,QAAQ,IAAI,MAAM,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBACrE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC5C,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAC3C,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,EACxE,OAAO,CACR,CAAC;gBAEF,OAAO,MAAM,SAAS,CACpB,GAAG,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,eAAe,CAAC,EACnD,IAAI,CAAC,eAAe,EAAE,CACvB,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,KAAK,GAAG,GAAG,YAAY,aAAa;oBACxC,CAAC,CAAC,GAAG;oBACL,CAAC,CAAC,IAAI,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAExC,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;oBACvB,MAAM,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC9D,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;gBAC7C,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5C,MAAM,IAAI,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE;YACrE,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ;YAC3B,GAAG,EAAE;gBACH,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACzB,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI;oBAClB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO;iBACzB,CAAC,CAAC;aACJ;SACF,CAAC,CAAC;IACL,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import { createServer } from 'node:http';
2
+ import type { AnyModelConfig } from './types.js';
3
+ export interface ServerOptions {
4
+ port?: number;
5
+ host?: string;
6
+ config?: AnyModelConfig;
7
+ }
8
+ export declare function createAnyModelServer(options?: ServerOptions): ReturnType<typeof createServer>;
9
+ export declare function startServer(options?: ServerOptions): void;
10
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA6C,MAAM,WAAW,CAAC;AAEpF,OAAO,KAAK,EAAE,cAAc,EAA8C,MAAM,YAAY,CAAC;AAE7F,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAmCD,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,aAAkB,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAiHjG;AAED,wBAAgB,WAAW,CAAC,OAAO,GAAE,aAAkB,GAAG,IAAI,CAqB7D"}