@probeo/anymodel 0.2.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 (114) hide show
  1. package/README.md +92 -6
  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 +4 -28
  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 -2110
  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 +4 -28
  29. package/dist/index.cjs.map +1 -1
  30. package/dist/index.d.ts +14 -548
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +15 -2089
  33. package/dist/index.js.map +1 -1
  34. package/dist/providers/adapter.d.ts +33 -0
  35. package/dist/providers/adapter.d.ts.map +1 -0
  36. package/dist/providers/adapter.js +2 -0
  37. package/dist/providers/adapter.js.map +1 -0
  38. package/dist/providers/anthropic-batch.d.ts +3 -0
  39. package/dist/providers/anthropic-batch.d.ts.map +1 -0
  40. package/dist/providers/anthropic-batch.js +228 -0
  41. package/dist/providers/anthropic-batch.js.map +1 -0
  42. package/dist/providers/anthropic.d.ts +3 -0
  43. package/dist/providers/anthropic.d.ts.map +1 -0
  44. package/dist/providers/anthropic.js +358 -0
  45. package/dist/providers/anthropic.js.map +1 -0
  46. package/dist/providers/custom.d.ts +8 -0
  47. package/dist/providers/custom.d.ts.map +1 -0
  48. package/dist/providers/custom.js +61 -0
  49. package/dist/providers/custom.js.map +1 -0
  50. package/dist/providers/google.d.ts +3 -0
  51. package/dist/providers/google.d.ts.map +1 -0
  52. package/dist/providers/google.js +331 -0
  53. package/dist/providers/google.js.map +1 -0
  54. package/dist/providers/index.d.ts +6 -0
  55. package/dist/providers/index.d.ts.map +1 -0
  56. package/dist/providers/index.js +5 -0
  57. package/dist/providers/index.js.map +1 -0
  58. package/dist/providers/openai-batch.d.ts +3 -0
  59. package/dist/providers/openai-batch.d.ts.map +1 -0
  60. package/dist/providers/openai-batch.js +208 -0
  61. package/dist/providers/openai-batch.js.map +1 -0
  62. package/dist/providers/openai.d.ts +3 -0
  63. package/dist/providers/openai.d.ts.map +1 -0
  64. package/dist/providers/openai.js +221 -0
  65. package/dist/providers/openai.js.map +1 -0
  66. package/dist/providers/registry.d.ts +10 -0
  67. package/dist/providers/registry.d.ts.map +1 -0
  68. package/dist/providers/registry.js +27 -0
  69. package/dist/providers/registry.js.map +1 -0
  70. package/dist/router.d.ts +29 -0
  71. package/dist/router.d.ts.map +1 -0
  72. package/dist/router.js +212 -0
  73. package/dist/router.js.map +1 -0
  74. package/dist/server.d.ts +10 -0
  75. package/dist/server.d.ts.map +1 -0
  76. package/dist/server.js +149 -0
  77. package/dist/server.js.map +1 -0
  78. package/dist/types.d.ts +283 -0
  79. package/dist/types.d.ts.map +1 -0
  80. package/dist/types.js +21 -0
  81. package/dist/types.js.map +1 -0
  82. package/dist/utils/fs-io.d.ts +40 -0
  83. package/dist/utils/fs-io.d.ts.map +1 -0
  84. package/dist/utils/fs-io.js +203 -0
  85. package/dist/utils/fs-io.js.map +1 -0
  86. package/dist/utils/generation-stats.d.ts +25 -0
  87. package/dist/utils/generation-stats.d.ts.map +1 -0
  88. package/dist/utils/generation-stats.js +46 -0
  89. package/dist/utils/generation-stats.js.map +1 -0
  90. package/dist/utils/id.d.ts +2 -0
  91. package/dist/utils/id.d.ts.map +1 -0
  92. package/dist/utils/id.js +6 -0
  93. package/dist/utils/id.js.map +1 -0
  94. package/dist/utils/model-parser.d.ts +6 -0
  95. package/dist/utils/model-parser.d.ts.map +1 -0
  96. package/dist/utils/model-parser.js +21 -0
  97. package/dist/utils/model-parser.js.map +1 -0
  98. package/dist/utils/rate-limiter.d.ts +36 -0
  99. package/dist/utils/rate-limiter.d.ts.map +1 -0
  100. package/dist/utils/rate-limiter.js +80 -0
  101. package/dist/utils/rate-limiter.js.map +1 -0
  102. package/dist/utils/retry.d.ts +7 -0
  103. package/dist/utils/retry.d.ts.map +1 -0
  104. package/dist/utils/retry.js +54 -0
  105. package/dist/utils/retry.js.map +1 -0
  106. package/dist/utils/transforms.d.ts +7 -0
  107. package/dist/utils/transforms.d.ts.map +1 -0
  108. package/dist/utils/transforms.js +66 -0
  109. package/dist/utils/transforms.js.map +1 -0
  110. package/dist/utils/validate.d.ts +3 -0
  111. package/dist/utils/validate.d.ts.map +1 -0
  112. package/dist/utils/validate.js +31 -0
  113. package/dist/utils/validate.js.map +1 -0
  114. package/package.json +4 -1
@@ -0,0 +1,283 @@
1
+ export type Role = 'system' | 'user' | 'assistant' | 'tool';
2
+ export interface Message {
3
+ role: Role;
4
+ content: string | ContentPart[];
5
+ name?: string;
6
+ tool_calls?: ToolCall[];
7
+ tool_call_id?: string;
8
+ }
9
+ export interface ContentPart {
10
+ type: 'text' | 'image_url';
11
+ text?: string;
12
+ image_url?: {
13
+ url: string;
14
+ detail?: 'auto' | 'low' | 'high';
15
+ };
16
+ }
17
+ export interface Tool {
18
+ type: 'function';
19
+ function: {
20
+ name: string;
21
+ description?: string;
22
+ parameters?: Record<string, unknown>;
23
+ };
24
+ }
25
+ export type ToolChoice = 'none' | 'auto' | 'required' | {
26
+ type: 'function';
27
+ function: {
28
+ name: string;
29
+ };
30
+ };
31
+ export interface ToolCall {
32
+ id: string;
33
+ type: 'function';
34
+ function: {
35
+ name: string;
36
+ arguments: string;
37
+ };
38
+ }
39
+ export type ResponseFormat = {
40
+ type: 'text';
41
+ } | {
42
+ type: 'json_object';
43
+ } | {
44
+ type: 'json_schema';
45
+ json_schema: {
46
+ name: string;
47
+ schema: Record<string, unknown>;
48
+ strict?: boolean;
49
+ };
50
+ };
51
+ export interface ProviderPreferences {
52
+ order?: string[];
53
+ only?: string[];
54
+ ignore?: string[];
55
+ allow_fallbacks?: boolean;
56
+ require_parameters?: boolean;
57
+ sort?: 'price' | 'throughput' | 'latency';
58
+ }
59
+ export interface ChatCompletionRequest {
60
+ model: string;
61
+ messages: Message[];
62
+ max_tokens?: number;
63
+ temperature?: number;
64
+ top_p?: number;
65
+ top_k?: number;
66
+ frequency_penalty?: number;
67
+ presence_penalty?: number;
68
+ repetition_penalty?: number;
69
+ seed?: number;
70
+ stop?: string | string[];
71
+ stream?: boolean;
72
+ logprobs?: boolean;
73
+ top_logprobs?: number;
74
+ response_format?: ResponseFormat;
75
+ tools?: Tool[];
76
+ tool_choice?: ToolChoice;
77
+ user?: string;
78
+ models?: string[];
79
+ route?: 'fallback';
80
+ transforms?: string[];
81
+ provider?: ProviderPreferences;
82
+ }
83
+ export type FinishReason = 'stop' | 'length' | 'tool_calls' | 'content_filter' | 'error';
84
+ export interface Usage {
85
+ prompt_tokens: number;
86
+ completion_tokens: number;
87
+ total_tokens: number;
88
+ }
89
+ export interface ChatCompletionChoice {
90
+ index: number;
91
+ message: Message;
92
+ finish_reason: FinishReason;
93
+ logprobs?: unknown;
94
+ }
95
+ export interface ChatCompletion {
96
+ id: string;
97
+ object: 'chat.completion';
98
+ created: number;
99
+ model: string;
100
+ choices: ChatCompletionChoice[];
101
+ usage: Usage;
102
+ }
103
+ export interface ChunkDelta {
104
+ role?: Role;
105
+ content?: string;
106
+ tool_calls?: Partial<ToolCall>[];
107
+ }
108
+ export interface ChunkChoice {
109
+ index: number;
110
+ delta: ChunkDelta;
111
+ finish_reason: FinishReason | null;
112
+ logprobs?: unknown;
113
+ }
114
+ export interface ChatCompletionChunk {
115
+ id: string;
116
+ object: 'chat.completion.chunk';
117
+ created: number;
118
+ model: string;
119
+ choices: ChunkChoice[];
120
+ usage?: Usage;
121
+ }
122
+ export interface ModelPricing {
123
+ prompt: string;
124
+ completion: string;
125
+ }
126
+ export interface ModelArchitecture {
127
+ modality: string;
128
+ input_modalities: string[];
129
+ output_modalities: string[];
130
+ tokenizer: string;
131
+ }
132
+ export interface ModelTopProvider {
133
+ context_length: number;
134
+ max_completion_tokens: number;
135
+ is_moderated: boolean;
136
+ }
137
+ export interface ModelInfo {
138
+ id: string;
139
+ name: string;
140
+ created: number;
141
+ description: string;
142
+ context_length: number;
143
+ pricing: ModelPricing;
144
+ architecture: ModelArchitecture;
145
+ top_provider: ModelTopProvider;
146
+ supported_parameters: string[];
147
+ }
148
+ export interface GenerationStats {
149
+ id: string;
150
+ model: string;
151
+ provider_name: string;
152
+ total_cost: number;
153
+ tokens_prompt: number;
154
+ tokens_completion: number;
155
+ latency: number;
156
+ generation_time: number;
157
+ created_at: string;
158
+ finish_reason: FinishReason;
159
+ streamed: boolean;
160
+ }
161
+ export interface AnyModelErrorMetadata {
162
+ provider_name?: string;
163
+ raw?: unknown;
164
+ }
165
+ export declare class AnyModelError extends Error {
166
+ readonly code: number;
167
+ readonly metadata: AnyModelErrorMetadata;
168
+ constructor(code: number, message: string, metadata?: AnyModelErrorMetadata);
169
+ toJSON(): {
170
+ error: {
171
+ code: number;
172
+ message: string;
173
+ metadata: AnyModelErrorMetadata;
174
+ };
175
+ };
176
+ }
177
+ export type BatchStatus = 'pending' | 'processing' | 'completed' | 'failed' | 'cancelled';
178
+ export type BatchMode = 'native' | 'concurrent';
179
+ export interface BatchRequestItem {
180
+ custom_id: string;
181
+ messages: Message[];
182
+ max_tokens?: number;
183
+ temperature?: number;
184
+ top_p?: number;
185
+ top_k?: number;
186
+ stop?: string | string[];
187
+ response_format?: ResponseFormat;
188
+ tools?: Tool[];
189
+ tool_choice?: ToolChoice;
190
+ }
191
+ export interface BatchCreateRequest {
192
+ model: string;
193
+ requests: BatchRequestItem[];
194
+ options?: {
195
+ temperature?: number;
196
+ max_tokens?: number;
197
+ top_p?: number;
198
+ top_k?: number;
199
+ stop?: string | string[];
200
+ response_format?: ResponseFormat;
201
+ tools?: Tool[];
202
+ tool_choice?: ToolChoice;
203
+ };
204
+ webhook?: string;
205
+ }
206
+ export interface BatchObject {
207
+ id: string;
208
+ object: 'batch';
209
+ status: BatchStatus;
210
+ model: string;
211
+ provider_name: string;
212
+ batch_mode: BatchMode;
213
+ total: number;
214
+ completed: number;
215
+ failed: number;
216
+ created_at: string;
217
+ completed_at: string | null;
218
+ expires_at: string | null;
219
+ }
220
+ export interface BatchResultItem {
221
+ custom_id: string;
222
+ status: 'success' | 'error';
223
+ response: ChatCompletion | null;
224
+ error: {
225
+ code: number;
226
+ message: string;
227
+ } | null;
228
+ }
229
+ export interface BatchUsageSummary {
230
+ total_prompt_tokens: number;
231
+ total_completion_tokens: number;
232
+ estimated_cost: number;
233
+ }
234
+ export interface BatchResults {
235
+ id: string;
236
+ status: BatchStatus;
237
+ results: BatchResultItem[];
238
+ usage_summary: BatchUsageSummary;
239
+ }
240
+ export interface ProviderConfig {
241
+ apiKey?: string;
242
+ defaultModel?: string;
243
+ }
244
+ export interface CustomProviderConfig {
245
+ baseURL: string;
246
+ apiKey?: string;
247
+ models?: string[];
248
+ }
249
+ export interface AnyModelConfig {
250
+ anthropic?: ProviderConfig;
251
+ openai?: ProviderConfig;
252
+ google?: ProviderConfig;
253
+ mistral?: ProviderConfig;
254
+ groq?: ProviderConfig;
255
+ deepseek?: ProviderConfig;
256
+ xai?: ProviderConfig;
257
+ together?: ProviderConfig;
258
+ fireworks?: ProviderConfig;
259
+ perplexity?: ProviderConfig;
260
+ ollama?: ProviderConfig & {
261
+ baseURL?: string;
262
+ };
263
+ custom?: Record<string, CustomProviderConfig>;
264
+ aliases?: Record<string, string>;
265
+ defaults?: {
266
+ temperature?: number;
267
+ max_tokens?: number;
268
+ retries?: number;
269
+ timeout?: number;
270
+ transforms?: string[];
271
+ };
272
+ routing?: {
273
+ fallback_order?: string[];
274
+ allow_fallbacks?: boolean;
275
+ };
276
+ batch?: {
277
+ dir?: string;
278
+ pollInterval?: number;
279
+ concurrencyFallback?: number;
280
+ retentionDays?: number;
281
+ };
282
+ }
283
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,IAAI,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;AAE5D,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAA;KAAE,CAAC;CAC/D;AAID,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtC,CAAC;CACH;AAED,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,MAAM,GACN,UAAU,GACV;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAErD,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAID,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE,CAAC;AAI9G,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,IAAI,CAAC,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAAC;CAC3C;AAED,MAAM,WAAW,qBAAqB;IAEpC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,EAAE,CAAC;IAGpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;CAChC;AAID,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,YAAY,GAAG,gBAAgB,GAAG,OAAO,CAAC;AAEzF,MAAM,WAAW,KAAK;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,KAAK,EAAE,KAAK,CAAC;CACd;AAID,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,CAAC;IAClB,aAAa,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,uBAAuB,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAID,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,YAAY,CAAC;IACtB,YAAY,EAAE,iBAAiB,CAAC;IAChC,YAAY,EAAE,gBAAgB,CAAC;IAC/B,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC;AAID,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,YAAY,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAID,MAAM,WAAW,qBAAqB;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;gBAE7B,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,qBAA0B;IAO/E,MAAM;;;;;;;CASP;AAID,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAC1F,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,YAAY,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf,WAAW,CAAC,EAAE,UAAU,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QACzB,eAAe,CAAC,EAAE,cAAc,CAAC;QACjC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;QACf,WAAW,CAAC,EAAE,UAAU,CAAC;KAC1B,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,SAAS,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,iBAAiB;IAChC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,uBAAuB,EAAE,MAAM,CAAC;IAChC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,aAAa,EAAE,iBAAiB,CAAC;CAClC;AAID,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,MAAM,CAAC,EAAE,cAAc,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE;QACT,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B,CAAC;IACF,KAAK,CAAC,EAAE;QACN,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;CACH"}
package/dist/types.js ADDED
@@ -0,0 +1,21 @@
1
+ // ─── Messages ────────────────────────────────────────────────────────────────
2
+ export class AnyModelError extends Error {
3
+ code;
4
+ metadata;
5
+ constructor(code, message, metadata = {}) {
6
+ super(message);
7
+ this.name = 'AnyModelError';
8
+ this.code = code;
9
+ this.metadata = metadata;
10
+ }
11
+ toJSON() {
12
+ return {
13
+ error: {
14
+ code: this.code,
15
+ message: this.message,
16
+ metadata: this.metadata,
17
+ },
18
+ };
19
+ }
20
+ }
21
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAqMhF,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,IAAI,CAAS;IACb,QAAQ,CAAwB;IAEzC,YAAY,IAAY,EAAE,OAAe,EAAE,WAAkC,EAAE;QAC7E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,MAAM;QACJ,OAAO;YACL,KAAK,EAAE;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,40 @@
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 type { Dirent, Stats } from 'node:fs';
8
+ export declare function ensureDir(dir: string): Promise<void>;
9
+ export declare function readFileQueued(filePath: string, encoding?: BufferEncoding | null): Promise<string | Buffer>;
10
+ export declare function readJsonQueued<T = unknown>(filePath: string): Promise<T>;
11
+ export declare function readDirQueued(dirPath: string): Promise<Dirent[]>;
12
+ export declare function statQueued(filePath: string): Promise<Stats>;
13
+ export declare function pathExistsQueued(p: string): Promise<boolean>;
14
+ export declare function fileExistsQueued(filePath: string): Promise<boolean>;
15
+ export declare function writeFileQueued(filePath: string, data: string | Buffer): Promise<void>;
16
+ export declare function appendFileQueued(filePath: string, data: string | Buffer): Promise<void>;
17
+ /**
18
+ * Atomically write a file with fsync to ensure data hits disk.
19
+ * Uses temp file + rename + directory fsync.
20
+ */
21
+ export declare function writeFileFlushedQueued(filePath: string, data: string | Buffer): Promise<void>;
22
+ /**
23
+ * Streamed write with durability: temp file → stream → fsync → atomic rename.
24
+ */
25
+ export declare function writeStreamFlushedQueued(filePath: string, producer: (stream: NodeJS.WritableStream) => Promise<void> | void): Promise<void>;
26
+ export declare function joinPath(...segments: string[]): string;
27
+ export declare function dirnameOf(p: string): string;
28
+ export declare function resolvePath(...segments: string[]): string;
29
+ export declare function getFsQueueStatus(): {
30
+ read: {
31
+ size: number;
32
+ pending: number;
33
+ };
34
+ write: {
35
+ size: number;
36
+ pending: number;
37
+ };
38
+ };
39
+ export declare function waitForFsQueuesIdle(): Promise<void>;
40
+ //# sourceMappingURL=fs-io.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-io.d.ts","sourceRoot":"","sources":["../../src/utils/fs-io.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAmB7C,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK1D;AAID,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,cAAc,GAAG,IAAa,GACvC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,CAI1B;AAED,wBAAsB,cAAc,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAG9E;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAItE;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAIjE;AAED,wBAAsB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASlE;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASzE;AAID,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM5F;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7F;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BnG;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAChE,OAAO,CAAC,IAAI,CAAC,CAyCf;AAID,wBAAgB,QAAQ,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAOtD;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAM3C;AAED,wBAAgB,WAAW,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAOzD;AAID,wBAAgB,gBAAgB;;;;;;;;;EAK/B;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEzD"}
@@ -0,0 +1,203 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-io.js","sourceRoot":"","sources":["../../src/utils/fs-io.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,46 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,2 @@
1
+ export declare function generateId(prefix?: string): string;
2
+ //# sourceMappingURL=id.d.ts.map
@@ -0,0 +1 @@
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"}