@probeo/anymodel 0.3.0 → 0.4.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 +5 -8
  2. package/dist/cli.cjs +1016 -110
  3. package/dist/cli.cjs.map +1 -1
  4. package/dist/cli.d.ts +0 -2
  5. package/dist/cli.js +2972 -30
  6. package/dist/cli.js.map +1 -1
  7. package/dist/index.cjs +1037 -112
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.cts +106 -22
  10. package/dist/index.d.ts +632 -14
  11. package/dist/index.js +2969 -15
  12. package/dist/index.js.map +1 -1
  13. package/package.json +1 -1
  14. package/dist/batch/index.d.ts +0 -4
  15. package/dist/batch/index.d.ts.map +0 -1
  16. package/dist/batch/index.js +0 -3
  17. package/dist/batch/index.js.map +0 -1
  18. package/dist/batch/manager.d.ts +0 -72
  19. package/dist/batch/manager.d.ts.map +0 -1
  20. package/dist/batch/manager.js +0 -328
  21. package/dist/batch/manager.js.map +0 -1
  22. package/dist/batch/store.d.ts +0 -54
  23. package/dist/batch/store.d.ts.map +0 -1
  24. package/dist/batch/store.js +0 -109
  25. package/dist/batch/store.js.map +0 -1
  26. package/dist/cli.d.ts.map +0 -1
  27. package/dist/client.d.ts +0 -42
  28. package/dist/client.d.ts.map +0 -1
  29. package/dist/client.js +0 -181
  30. package/dist/client.js.map +0 -1
  31. package/dist/config.d.ts +0 -6
  32. package/dist/config.d.ts.map +0 -1
  33. package/dist/config.js +0 -120
  34. package/dist/config.js.map +0 -1
  35. package/dist/index.d.ts.map +0 -1
  36. package/dist/providers/adapter.d.ts +0 -33
  37. package/dist/providers/adapter.d.ts.map +0 -1
  38. package/dist/providers/adapter.js +0 -2
  39. package/dist/providers/adapter.js.map +0 -1
  40. package/dist/providers/anthropic-batch.d.ts +0 -3
  41. package/dist/providers/anthropic-batch.d.ts.map +0 -1
  42. package/dist/providers/anthropic-batch.js +0 -228
  43. package/dist/providers/anthropic-batch.js.map +0 -1
  44. package/dist/providers/anthropic.d.ts +0 -3
  45. package/dist/providers/anthropic.d.ts.map +0 -1
  46. package/dist/providers/anthropic.js +0 -358
  47. package/dist/providers/anthropic.js.map +0 -1
  48. package/dist/providers/custom.d.ts +0 -8
  49. package/dist/providers/custom.d.ts.map +0 -1
  50. package/dist/providers/custom.js +0 -61
  51. package/dist/providers/custom.js.map +0 -1
  52. package/dist/providers/google.d.ts +0 -3
  53. package/dist/providers/google.d.ts.map +0 -1
  54. package/dist/providers/google.js +0 -331
  55. package/dist/providers/google.js.map +0 -1
  56. package/dist/providers/index.d.ts +0 -6
  57. package/dist/providers/index.d.ts.map +0 -1
  58. package/dist/providers/index.js +0 -5
  59. package/dist/providers/index.js.map +0 -1
  60. package/dist/providers/openai-batch.d.ts +0 -3
  61. package/dist/providers/openai-batch.d.ts.map +0 -1
  62. package/dist/providers/openai-batch.js +0 -208
  63. package/dist/providers/openai-batch.js.map +0 -1
  64. package/dist/providers/openai.d.ts +0 -3
  65. package/dist/providers/openai.d.ts.map +0 -1
  66. package/dist/providers/openai.js +0 -221
  67. package/dist/providers/openai.js.map +0 -1
  68. package/dist/providers/registry.d.ts +0 -10
  69. package/dist/providers/registry.d.ts.map +0 -1
  70. package/dist/providers/registry.js +0 -27
  71. package/dist/providers/registry.js.map +0 -1
  72. package/dist/router.d.ts +0 -29
  73. package/dist/router.d.ts.map +0 -1
  74. package/dist/router.js +0 -212
  75. package/dist/router.js.map +0 -1
  76. package/dist/server.d.ts +0 -10
  77. package/dist/server.d.ts.map +0 -1
  78. package/dist/server.js +0 -149
  79. package/dist/server.js.map +0 -1
  80. package/dist/types.d.ts +0 -283
  81. package/dist/types.d.ts.map +0 -1
  82. package/dist/types.js +0 -21
  83. package/dist/types.js.map +0 -1
  84. package/dist/utils/fs-io.d.ts +0 -40
  85. package/dist/utils/fs-io.d.ts.map +0 -1
  86. package/dist/utils/fs-io.js +0 -203
  87. package/dist/utils/fs-io.js.map +0 -1
  88. package/dist/utils/generation-stats.d.ts +0 -25
  89. package/dist/utils/generation-stats.d.ts.map +0 -1
  90. package/dist/utils/generation-stats.js +0 -46
  91. package/dist/utils/generation-stats.js.map +0 -1
  92. package/dist/utils/id.d.ts +0 -2
  93. package/dist/utils/id.d.ts.map +0 -1
  94. package/dist/utils/id.js +0 -6
  95. package/dist/utils/id.js.map +0 -1
  96. package/dist/utils/model-parser.d.ts +0 -6
  97. package/dist/utils/model-parser.d.ts.map +0 -1
  98. package/dist/utils/model-parser.js +0 -21
  99. package/dist/utils/model-parser.js.map +0 -1
  100. package/dist/utils/rate-limiter.d.ts +0 -36
  101. package/dist/utils/rate-limiter.d.ts.map +0 -1
  102. package/dist/utils/rate-limiter.js +0 -80
  103. package/dist/utils/rate-limiter.js.map +0 -1
  104. package/dist/utils/retry.d.ts +0 -7
  105. package/dist/utils/retry.d.ts.map +0 -1
  106. package/dist/utils/retry.js +0 -54
  107. package/dist/utils/retry.js.map +0 -1
  108. package/dist/utils/transforms.d.ts +0 -7
  109. package/dist/utils/transforms.d.ts.map +0 -1
  110. package/dist/utils/transforms.js +0 -66
  111. package/dist/utils/transforms.js.map +0 -1
  112. package/dist/utils/validate.d.ts +0 -3
  113. package/dist/utils/validate.d.ts.map +0 -1
  114. package/dist/utils/validate.js +0 -31
  115. package/dist/utils/validate.js.map +0 -1
@@ -1,203 +0,0 @@
1
- /**
2
- * Concurrency-limited filesystem helpers for high-volume file operations.
3
- *
4
- * Based on probeo-core/common/fs-io. Provides queued reads/writes,
5
- * atomic durable writes, directory caching, and path memoization.
6
- */
7
- import { mkdir, open, readFile as fsReadFile, rename, writeFile as fsWriteFile, readdir as fsReaddir, stat as fsStat } from 'node:fs/promises';
8
- import { createWriteStream } from 'node:fs';
9
- import path from 'node:path';
10
- import PQueue from 'p-queue';
11
- // Concurrency-limited queues to prevent resource exhaustion.
12
- const writeQueue = new PQueue({ concurrency: 10 });
13
- const readQueue = new PQueue({ concurrency: 20 });
14
- // In-memory cache of directories we've already ensured exist.
15
- const ensuredDirs = new Set();
16
- // Memoization caches for path operations.
17
- const joinPathCache = new Map();
18
- const dirnameCache = new Map();
19
- const resolvePathCache = new Map();
20
- // ─── Directory Operations ───────────────────────────────────────────────────
21
- export async function ensureDir(dir) {
22
- if (!dir)
23
- return;
24
- if (ensuredDirs.has(dir))
25
- return;
26
- await mkdir(dir, { recursive: true });
27
- ensuredDirs.add(dir);
28
- }
29
- // ─── Queued Read Operations ─────────────────────────────────────────────────
30
- export async function readFileQueued(filePath, encoding = 'utf8') {
31
- return readQueue.add(async () => {
32
- return fsReadFile(filePath, encoding);
33
- });
34
- }
35
- export async function readJsonQueued(filePath) {
36
- const raw = (await readFileQueued(filePath, 'utf8'));
37
- return JSON.parse(raw);
38
- }
39
- export async function readDirQueued(dirPath) {
40
- return readQueue.add(async () => {
41
- return fsReaddir(dirPath, { withFileTypes: true });
42
- });
43
- }
44
- export async function statQueued(filePath) {
45
- return readQueue.add(async () => {
46
- return fsStat(filePath);
47
- });
48
- }
49
- export async function pathExistsQueued(p) {
50
- return readQueue.add(async () => {
51
- try {
52
- await fsStat(p);
53
- return true;
54
- }
55
- catch {
56
- return false;
57
- }
58
- });
59
- }
60
- export async function fileExistsQueued(filePath) {
61
- return readQueue.add(async () => {
62
- try {
63
- const s = await fsStat(filePath);
64
- return s.isFile();
65
- }
66
- catch {
67
- return false;
68
- }
69
- });
70
- }
71
- // ─── Queued Write Operations ────────────────────────────────────────────────
72
- export async function writeFileQueued(filePath, data) {
73
- await writeQueue.add(async () => {
74
- const dir = dirnameOf(filePath);
75
- await ensureDir(dir);
76
- await fsWriteFile(filePath, data);
77
- });
78
- }
79
- export async function appendFileQueued(filePath, data) {
80
- await writeQueue.add(async () => {
81
- const dir = dirnameOf(filePath);
82
- await ensureDir(dir);
83
- await fsWriteFile(filePath, data, { flag: 'a' });
84
- });
85
- }
86
- /**
87
- * Atomically write a file with fsync to ensure data hits disk.
88
- * Uses temp file + rename + directory fsync.
89
- */
90
- export async function writeFileFlushedQueued(filePath, data) {
91
- await writeQueue.add(async () => {
92
- const dir = dirnameOf(filePath);
93
- await ensureDir(dir);
94
- const tmpPath = joinPath(dir, `.${path.basename(filePath)}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`);
95
- const fh = await open(tmpPath, 'w');
96
- try {
97
- await fh.writeFile(data);
98
- await fh.sync();
99
- }
100
- finally {
101
- await fh.close();
102
- }
103
- await rename(tmpPath, filePath);
104
- try {
105
- const dh = await open(dir, 'r');
106
- try {
107
- await dh.sync();
108
- }
109
- finally {
110
- await dh.close();
111
- }
112
- }
113
- catch {
114
- // ignore directory fsync errors
115
- }
116
- });
117
- }
118
- /**
119
- * Streamed write with durability: temp file → stream → fsync → atomic rename.
120
- */
121
- export async function writeStreamFlushedQueued(filePath, producer) {
122
- await writeQueue.add(async () => {
123
- const dir = dirnameOf(filePath);
124
- await ensureDir(dir);
125
- const tmpPath = joinPath(dir, `.${path.basename(filePath)}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`);
126
- const ws = createWriteStream(tmpPath);
127
- await new Promise((resolve, reject) => {
128
- let settled = false;
129
- const onError = (err) => { if (settled)
130
- return; settled = true; reject(err); };
131
- const onFinish = () => { if (settled)
132
- return; settled = true; resolve(); };
133
- ws.once('error', onError);
134
- ws.once('finish', onFinish);
135
- Promise.resolve()
136
- .then(async () => {
137
- await producer(ws);
138
- if (!ws.destroyed && !ws.writableEnded) {
139
- ws.end();
140
- }
141
- })
142
- .catch(onError);
143
- });
144
- const fh = await open(tmpPath, 'r+');
145
- try {
146
- await fh.sync();
147
- }
148
- finally {
149
- await fh.close();
150
- }
151
- await rename(tmpPath, filePath);
152
- try {
153
- const dh = await open(dir, 'r');
154
- try {
155
- await dh.sync();
156
- }
157
- finally {
158
- await dh.close();
159
- }
160
- }
161
- catch {
162
- // ignore directory fsync errors
163
- }
164
- });
165
- }
166
- // ─── Path Utilities (Memoized) ──────────────────────────────────────────────
167
- export function joinPath(...segments) {
168
- const key = segments.join('\u0000');
169
- const cached = joinPathCache.get(key);
170
- if (cached !== undefined)
171
- return cached;
172
- const out = path.join(...segments);
173
- joinPathCache.set(key, out);
174
- return out;
175
- }
176
- export function dirnameOf(p) {
177
- const cached = dirnameCache.get(p);
178
- if (cached !== undefined)
179
- return cached;
180
- const out = path.dirname(p);
181
- dirnameCache.set(p, out);
182
- return out;
183
- }
184
- export function resolvePath(...segments) {
185
- const key = segments.join('\u0000');
186
- const cached = resolvePathCache.get(key);
187
- if (cached !== undefined)
188
- return cached;
189
- const out = path.resolve(...segments);
190
- resolvePathCache.set(key, out);
191
- return out;
192
- }
193
- // ─── Queue Status ───────────────────────────────────────────────────────────
194
- export function getFsQueueStatus() {
195
- return {
196
- read: { size: readQueue.size, pending: readQueue.pending },
197
- write: { size: writeQueue.size, pending: writeQueue.pending },
198
- };
199
- }
200
- export async function waitForFsQueuesIdle() {
201
- await Promise.all([writeQueue.onIdle(), readQueue.onIdle()]);
202
- }
203
- //# sourceMappingURL=fs-io.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fs-io.js","sourceRoot":"","sources":["../../src/utils/fs-io.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- import type { GenerationStats, FinishReason } from '../types.js';
2
- export interface GenerationRecord {
3
- id: string;
4
- model: string;
5
- providerName: string;
6
- promptTokens: number;
7
- completionTokens: number;
8
- startTime: number;
9
- endTime: number;
10
- finishReason: FinishReason;
11
- streamed: boolean;
12
- }
13
- /**
14
- * In-memory generation stats store.
15
- * Tracks recent completions for the generation stats endpoint.
16
- */
17
- export declare class GenerationStatsStore {
18
- private records;
19
- private maxRecords;
20
- constructor(maxRecords?: number);
21
- record(entry: GenerationRecord): void;
22
- get(id: string): GenerationStats | undefined;
23
- list(limit?: number): GenerationStats[];
24
- }
25
- //# sourceMappingURL=generation-stats.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generation-stats.d.ts","sourceRoot":"","sources":["../../src/utils/generation-stats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,SAAO;IAI7B,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IASrC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAoB5C,IAAI,CAAC,KAAK,SAAK,GAAG,eAAe,EAAE;CAOpC"}
@@ -1,46 +0,0 @@
1
- /**
2
- * In-memory generation stats store.
3
- * Tracks recent completions for the generation stats endpoint.
4
- */
5
- export class GenerationStatsStore {
6
- records = new Map();
7
- maxRecords;
8
- constructor(maxRecords = 1000) {
9
- this.maxRecords = maxRecords;
10
- }
11
- record(entry) {
12
- // Evict oldest if at capacity
13
- if (this.records.size >= this.maxRecords) {
14
- const oldest = this.records.keys().next().value;
15
- if (oldest)
16
- this.records.delete(oldest);
17
- }
18
- this.records.set(entry.id, entry);
19
- }
20
- get(id) {
21
- const rec = this.records.get(id);
22
- if (!rec)
23
- return undefined;
24
- const latency = rec.endTime - rec.startTime;
25
- return {
26
- id: rec.id,
27
- model: rec.model,
28
- provider_name: rec.providerName,
29
- total_cost: 0, // Cost calculation requires pricing data
30
- tokens_prompt: rec.promptTokens,
31
- tokens_completion: rec.completionTokens,
32
- latency,
33
- generation_time: latency,
34
- created_at: new Date(rec.startTime).toISOString(),
35
- finish_reason: rec.finishReason,
36
- streamed: rec.streamed,
37
- };
38
- }
39
- list(limit = 50) {
40
- const entries = Array.from(this.records.values())
41
- .slice(-limit)
42
- .reverse();
43
- return entries.map(rec => this.get(rec.id));
44
- }
45
- }
46
- //# sourceMappingURL=generation-stats.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generation-stats.js","sourceRoot":"","sources":["../../src/utils/generation-stats.ts"],"names":[],"mappings":"AAcA;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IACvB,OAAO,GAAG,IAAI,GAAG,EAA4B,CAAC;IAC9C,UAAU,CAAS;IAE3B,YAAY,UAAU,GAAG,IAAI;QAC3B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,MAAM,CAAC,KAAuB;QAC5B,8BAA8B;QAC9B,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAChD,IAAI,MAAM;gBAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAE3B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC;QAC5C,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,aAAa,EAAE,GAAG,CAAC,YAAY;YAC/B,UAAU,EAAE,CAAC,EAAE,yCAAyC;YACxD,aAAa,EAAE,GAAG,CAAC,YAAY;YAC/B,iBAAiB,EAAE,GAAG,CAAC,gBAAgB;YACvC,OAAO;YACP,eAAe,EAAE,OAAO;YACxB,UAAU,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;YACjD,aAAa,EAAE,GAAG,CAAC,YAAY;YAC/B,QAAQ,EAAE,GAAG,CAAC,QAAQ;SACvB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAK,GAAG,EAAE;QACb,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;aAC9C,KAAK,CAAC,CAAC,KAAK,CAAC;aACb,OAAO,EAAE,CAAC;QAEb,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,CAAC;IAC/C,CAAC;CACF"}
@@ -1,2 +0,0 @@
1
- export declare function generateId(prefix?: string): string;
2
- //# sourceMappingURL=id.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CAAC,MAAM,GAAE,MAAc,GAAG,MAAM,CAGzD"}
package/dist/utils/id.js DELETED
@@ -1,6 +0,0 @@
1
- import { randomBytes } from 'node:crypto';
2
- export function generateId(prefix = 'gen') {
3
- const random = randomBytes(12).toString('base64url');
4
- return `${prefix}-${random}`;
5
- }
6
- //# sourceMappingURL=id.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"id.js","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,UAAU,UAAU,CAAC,SAAiB,KAAK;IAC/C,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACrD,OAAO,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;AAC/B,CAAC"}
@@ -1,6 +0,0 @@
1
- export interface ParsedModel {
2
- provider: string;
3
- model: string;
4
- }
5
- export declare function parseModelString(model: string, aliases?: Record<string, string>): ParsedModel;
6
- //# sourceMappingURL=model-parser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-parser.d.ts","sourceRoot":"","sources":["../../src/utils/model-parser.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,WAAW,CAyB7F"}
@@ -1,21 +0,0 @@
1
- import { AnyModelError } from '../types.js';
2
- export function parseModelString(model, aliases) {
3
- // Check aliases first
4
- if (aliases && model in aliases) {
5
- model = aliases[model];
6
- }
7
- const slashIndex = model.indexOf('/');
8
- if (slashIndex === -1) {
9
- throw new AnyModelError(400, `Model must be in provider/model format or be a valid alias. Got: '${model}'`);
10
- }
11
- const provider = model.substring(0, slashIndex);
12
- const modelId = model.substring(slashIndex + 1);
13
- if (!provider) {
14
- throw new AnyModelError(400, `Invalid model string: missing provider in '${model}'`);
15
- }
16
- if (!modelId) {
17
- throw new AnyModelError(400, `Invalid model string: missing model ID in '${model}'`);
18
- }
19
- return { provider, model: modelId };
20
- }
21
- //# sourceMappingURL=model-parser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-parser.js","sourceRoot":"","sources":["../../src/utils/model-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAO5C,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,OAAgC;IAC9E,sBAAsB;IACtB,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;QAChC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,aAAa,CACrB,GAAG,EACH,qEAAqE,KAAK,GAAG,CAC9E,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IAEhD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,8CAA8C,KAAK,GAAG,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,8CAA8C,KAAK,GAAG,CAAC,CAAC;IACvF,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACtC,CAAC"}
@@ -1,36 +0,0 @@
1
- /**
2
- * Per-provider rate limit tracker.
3
- * Tracks rate limit state from provider response headers and 429 errors.
4
- */
5
- export interface RateLimitState {
6
- provider: string;
7
- remaining: number | null;
8
- resetAt: number | null;
9
- retryAfter: number | null;
10
- lastUpdated: number;
11
- }
12
- export declare class RateLimitTracker {
13
- private state;
14
- /**
15
- * Update rate limit state from response headers.
16
- */
17
- updateFromHeaders(provider: string, headers: Record<string, string>): void;
18
- /**
19
- * Record a 429 for a provider.
20
- */
21
- recordRateLimit(provider: string, retryAfterMs?: number): void;
22
- /**
23
- * Check if a provider is currently rate-limited.
24
- */
25
- isRateLimited(provider: string): boolean;
26
- /**
27
- * Get ms until rate limit resets for a provider.
28
- */
29
- getWaitTime(provider: string): number;
30
- /**
31
- * Get state for a provider.
32
- */
33
- getState(provider: string): RateLimitState | undefined;
34
- private getOrCreate;
35
- }
36
- //# sourceMappingURL=rate-limiter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/utils/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAqC;IAElD;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAuB1E;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAU9D;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAYxC;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAQrC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAItD,OAAO,CAAC,WAAW;CAcpB"}
@@ -1,80 +0,0 @@
1
- export class RateLimitTracker {
2
- state = new Map();
3
- /**
4
- * Update rate limit state from response headers.
5
- */
6
- updateFromHeaders(provider, headers) {
7
- const state = this.getOrCreate(provider);
8
- const remaining = headers['x-ratelimit-remaining'] || headers['x-ratelimit-remaining-requests'];
9
- if (remaining !== undefined) {
10
- state.remaining = parseInt(remaining, 10);
11
- }
12
- const reset = headers['x-ratelimit-reset'] || headers['x-ratelimit-reset-requests'];
13
- if (reset !== undefined) {
14
- // Could be epoch seconds or ISO date
15
- const parsed = Number(reset);
16
- state.resetAt = parsed > 1e12 ? parsed : parsed * 1000;
17
- }
18
- const retryAfter = headers['retry-after'];
19
- if (retryAfter !== undefined) {
20
- state.retryAfter = Number(retryAfter) * 1000;
21
- }
22
- state.lastUpdated = Date.now();
23
- }
24
- /**
25
- * Record a 429 for a provider.
26
- */
27
- recordRateLimit(provider, retryAfterMs) {
28
- const state = this.getOrCreate(provider);
29
- state.remaining = 0;
30
- if (retryAfterMs) {
31
- state.retryAfter = retryAfterMs;
32
- state.resetAt = Date.now() + retryAfterMs;
33
- }
34
- state.lastUpdated = Date.now();
35
- }
36
- /**
37
- * Check if a provider is currently rate-limited.
38
- */
39
- isRateLimited(provider) {
40
- const state = this.state.get(provider);
41
- if (!state)
42
- return false;
43
- // Check remaining count
44
- if (state.remaining === 0 && state.resetAt) {
45
- return Date.now() < state.resetAt;
46
- }
47
- return false;
48
- }
49
- /**
50
- * Get ms until rate limit resets for a provider.
51
- */
52
- getWaitTime(provider) {
53
- const state = this.state.get(provider);
54
- if (!state?.resetAt)
55
- return 0;
56
- const wait = state.resetAt - Date.now();
57
- return Math.max(0, wait);
58
- }
59
- /**
60
- * Get state for a provider.
61
- */
62
- getState(provider) {
63
- return this.state.get(provider);
64
- }
65
- getOrCreate(provider) {
66
- let state = this.state.get(provider);
67
- if (!state) {
68
- state = {
69
- provider,
70
- remaining: null,
71
- resetAt: null,
72
- retryAfter: null,
73
- lastUpdated: Date.now(),
74
- };
75
- this.state.set(provider, state);
76
- }
77
- return state;
78
- }
79
- }
80
- //# sourceMappingURL=rate-limiter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/utils/rate-limiter.ts"],"names":[],"mappings":"AAYA,MAAM,OAAO,gBAAgB;IACnB,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAElD;;OAEG;IACH,iBAAiB,CAAC,QAAgB,EAAE,OAA+B;QACjE,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,uBAAuB,CAAC,IAAI,OAAO,CAAC,gCAAgC,CAAC,CAAC;QAChG,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,mBAAmB,CAAC,IAAI,OAAO,CAAC,4BAA4B,CAAC,CAAC;QACpF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,qCAAqC;YACrC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7B,KAAK,CAAC,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;QACzD,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;QAC1C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;QAC/C,CAAC;QAED,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,QAAgB,EAAE,YAAqB;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACzC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;QACpB,IAAI,YAAY,EAAE,CAAC;YACjB,KAAK,CAAC,UAAU,GAAG,YAAY,CAAC;YAChC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC;QAC5C,CAAC;QACD,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,QAAgB;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAEzB,wBAAwB;QACxB,IAAI,KAAK,CAAC,SAAS,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;QACpC,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,QAAgB;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,EAAE,OAAO;YAAE,OAAO,CAAC,CAAC;QAE9B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,QAAgB;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAEO,WAAW,CAAC,QAAgB;QAClC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG;gBACN,QAAQ;gBACR,SAAS,EAAE,IAAI;gBACf,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,IAAI;gBAChB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;aACxB,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -1,7 +0,0 @@
1
- export interface RetryOptions {
2
- maxRetries: number;
3
- baseDelay: number;
4
- maxDelay: number;
5
- }
6
- export declare function withRetry<T>(fn: () => Promise<T>, options?: Partial<RetryOptions>): Promise<T>;
7
- //# sourceMappingURL=retry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAuCD,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,GAAE,OAAO,CAAC,YAAY,CAAM,GAClC,OAAO,CAAC,CAAC,CAAC,CAoBZ"}
@@ -1,54 +0,0 @@
1
- import { AnyModelError } from '../types.js';
2
- const DEFAULT_RETRY = {
3
- maxRetries: 2,
4
- baseDelay: 500,
5
- maxDelay: 10000,
6
- };
7
- // Retryable status codes
8
- const RETRYABLE_CODES = new Set([429, 502, 503, 529]);
9
- function isRetryable(error) {
10
- if (error instanceof AnyModelError) {
11
- return RETRYABLE_CODES.has(error.code);
12
- }
13
- return false;
14
- }
15
- function getRetryAfter(error) {
16
- if (error instanceof AnyModelError && error.metadata.raw) {
17
- const raw = error.metadata.raw;
18
- // Check for retry-after header value stored in metadata
19
- if (raw?.retry_after)
20
- return Number(raw.retry_after) * 1000;
21
- if (raw?.headers?.['retry-after'])
22
- return Number(raw.headers['retry-after']) * 1000;
23
- }
24
- return null;
25
- }
26
- function computeDelay(attempt, options, error) {
27
- const retryAfter = getRetryAfter(error);
28
- if (retryAfter && retryAfter > 0) {
29
- return Math.min(retryAfter, options.maxDelay);
30
- }
31
- // Exponential backoff with jitter
32
- const exponential = options.baseDelay * Math.pow(2, attempt);
33
- const jitter = exponential * 0.2 * Math.random();
34
- return Math.min(exponential + jitter, options.maxDelay);
35
- }
36
- export async function withRetry(fn, options = {}) {
37
- const opts = { ...DEFAULT_RETRY, ...options };
38
- let lastError;
39
- for (let attempt = 0; attempt <= opts.maxRetries; attempt++) {
40
- try {
41
- return await fn();
42
- }
43
- catch (error) {
44
- lastError = error;
45
- if (attempt >= opts.maxRetries || !isRetryable(error)) {
46
- throw error;
47
- }
48
- const delay = computeDelay(attempt, opts, error);
49
- await new Promise(resolve => setTimeout(resolve, delay));
50
- }
51
- }
52
- throw lastError;
53
- }
54
- //# sourceMappingURL=retry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAQ5C,MAAM,aAAa,GAAiB;IAClC,UAAU,EAAE,CAAC;IACb,SAAS,EAAE,GAAG;IACd,QAAQ,EAAE,KAAK;CAChB,CAAC;AAEF,yBAAyB;AACzB,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAEtD,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,KAAK,YAAY,aAAa,EAAE,CAAC;QACnC,OAAO,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,KAAK,YAAY,aAAa,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QACzD,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAU,CAAC;QACtC,wDAAwD;QACxD,IAAI,GAAG,EAAE,WAAW;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;QAC5D,IAAI,GAAG,EAAE,OAAO,EAAE,CAAC,aAAa,CAAC;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG,IAAI,CAAC;IACtF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,OAAe,EAAE,OAAqB,EAAE,KAAc;IAC1E,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,UAAU,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IACD,kCAAkC;IAClC,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,WAAW,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IACjD,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,EAAoB,EACpB,UAAiC,EAAE;IAEnC,MAAM,IAAI,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IAC9C,IAAI,SAAkB,CAAC;IAEvB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QAC5D,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,CAAC;YAElB,IAAI,OAAO,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtD,MAAM,KAAK,CAAC;YACd,CAAC;YAED,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YACjD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAC;AAClB,CAAC"}
@@ -1,7 +0,0 @@
1
- import type { Message } from '../types.js';
2
- export declare function middleOut(messages: Message[], maxTokens: number): Message[];
3
- /**
4
- * Apply a named transform to the request messages.
5
- */
6
- export declare function applyTransform(name: string, messages: Message[], contextLength: number): Message[];
7
- //# sourceMappingURL=transforms.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transforms.d.ts","sourceRoot":"","sources":["../../src/utils/transforms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAW3C,wBAAgB,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE,CAoD3E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,EAAE,EACnB,aAAa,EAAE,MAAM,GACpB,OAAO,EAAE,CAKX"}
@@ -1,66 +0,0 @@
1
- /**
2
- * Middle-out transform: when messages exceed a token budget,
3
- * remove messages from the middle of the conversation, preserving
4
- * the system prompt (first) and most recent messages (last).
5
- *
6
- * This is a character-based approximation (4 chars ≈ 1 token).
7
- */
8
- const CHARS_PER_TOKEN = 4;
9
- export function middleOut(messages, maxTokens) {
10
- if (messages.length <= 2)
11
- return messages;
12
- const maxChars = maxTokens * CHARS_PER_TOKEN;
13
- // Calculate total content length
14
- function messageLength(msg) {
15
- const content = typeof msg.content === 'string'
16
- ? msg.content
17
- : JSON.stringify(msg.content);
18
- return content.length + 20; // overhead for role, etc.
19
- }
20
- const totalChars = messages.reduce((sum, m) => sum + messageLength(m), 0);
21
- if (totalChars <= maxChars)
22
- return messages;
23
- // Separate system messages from conversation
24
- const systemMessages = messages.filter(m => m.role === 'system');
25
- const conversationMessages = messages.filter(m => m.role !== 'system');
26
- if (conversationMessages.length <= 2)
27
- return messages;
28
- const systemChars = systemMessages.reduce((sum, m) => sum + messageLength(m), 0);
29
- const budgetForConversation = maxChars - systemChars;
30
- if (budgetForConversation <= 0)
31
- return [...systemMessages, conversationMessages[conversationMessages.length - 1]];
32
- // Keep messages from both ends, removing from the middle
33
- const kept = [];
34
- let usedChars = 0;
35
- // Always keep the last few messages (recency is most important)
36
- const tail = [];
37
- let tailChars = 0;
38
- for (let i = conversationMessages.length - 1; i >= 0; i--) {
39
- const len = messageLength(conversationMessages[i]);
40
- if (tailChars + len > budgetForConversation * 0.7)
41
- break;
42
- tail.unshift(conversationMessages[i]);
43
- tailChars += len;
44
- }
45
- // Fill from the head with remaining budget
46
- const headBudget = budgetForConversation - tailChars;
47
- const headEnd = conversationMessages.length - tail.length;
48
- for (let i = 0; i < headEnd; i++) {
49
- const len = messageLength(conversationMessages[i]);
50
- if (usedChars + len > headBudget)
51
- break;
52
- kept.push(conversationMessages[i]);
53
- usedChars += len;
54
- }
55
- return [...systemMessages, ...kept, ...tail];
56
- }
57
- /**
58
- * Apply a named transform to the request messages.
59
- */
60
- export function applyTransform(name, messages, contextLength) {
61
- if (name === 'middle-out') {
62
- return middleOut(messages, contextLength);
63
- }
64
- return messages;
65
- }
66
- //# sourceMappingURL=transforms.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transforms.js","sourceRoot":"","sources":["../../src/utils/transforms.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { ChatCompletionRequest } from '../types.js';
2
- export declare function validateRequest(request: ChatCompletionRequest): void;
3
- //# sourceMappingURL=validate.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/utils/validate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD,wBAAgB,eAAe,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAmCpE"}