@just-every/ensemble 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +245 -0
- package/dist/cost_tracker.d.ts +2 -0
- package/dist/cost_tracker.d.ts.map +1 -0
- package/dist/cost_tracker.js +2 -0
- package/dist/cost_tracker.js.map +1 -0
- package/dist/errors.d.ts +55 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +134 -0
- package/dist/errors.js.map +1 -0
- package/dist/external_models.d.ts +10 -0
- package/dist/external_models.d.ts.map +1 -0
- package/dist/external_models.js +36 -0
- package/dist/external_models.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/model_data.d.ts +63 -0
- package/dist/model_data.d.ts.map +1 -0
- package/dist/model_data.js +1070 -0
- package/dist/model_data.js.map +1 -0
- package/dist/model_providers/base_provider.d.ts +37 -0
- package/dist/model_providers/base_provider.d.ts.map +1 -0
- package/dist/model_providers/base_provider.js +146 -0
- package/dist/model_providers/base_provider.js.map +1 -0
- package/dist/model_providers/claude.d.ts +11 -0
- package/dist/model_providers/claude.d.ts.map +1 -0
- package/dist/model_providers/claude.js +788 -0
- package/dist/model_providers/claude.js.map +1 -0
- package/dist/model_providers/deepseek.d.ts +8 -0
- package/dist/model_providers/deepseek.d.ts.map +1 -0
- package/dist/model_providers/deepseek.js +136 -0
- package/dist/model_providers/deepseek.js.map +1 -0
- package/dist/model_providers/gemini.d.ts +11 -0
- package/dist/model_providers/gemini.d.ts.map +1 -0
- package/dist/model_providers/gemini.js +711 -0
- package/dist/model_providers/gemini.js.map +1 -0
- package/dist/model_providers/grok.d.ts +8 -0
- package/dist/model_providers/grok.d.ts.map +1 -0
- package/dist/model_providers/grok.js +22 -0
- package/dist/model_providers/grok.js.map +1 -0
- package/dist/model_providers/model_provider.d.ts +11 -0
- package/dist/model_providers/model_provider.d.ts.map +1 -0
- package/dist/model_providers/model_provider.js +170 -0
- package/dist/model_providers/model_provider.js.map +1 -0
- package/dist/model_providers/openai.d.ts +13 -0
- package/dist/model_providers/openai.d.ts.map +1 -0
- package/dist/model_providers/openai.js +822 -0
- package/dist/model_providers/openai.js.map +1 -0
- package/dist/model_providers/openai_chat.d.ts +14 -0
- package/dist/model_providers/openai_chat.d.ts.map +1 -0
- package/dist/model_providers/openai_chat.js +719 -0
- package/dist/model_providers/openai_chat.js.map +1 -0
- package/dist/model_providers/openrouter.d.ts +6 -0
- package/dist/model_providers/openrouter.d.ts.map +1 -0
- package/dist/model_providers/openrouter.js +18 -0
- package/dist/model_providers/openrouter.js.map +1 -0
- package/dist/model_providers/refactored_openai.d.ts +22 -0
- package/dist/model_providers/refactored_openai.d.ts.map +1 -0
- package/dist/model_providers/refactored_openai.js +310 -0
- package/dist/model_providers/refactored_openai.js.map +1 -0
- package/dist/model_providers/test_provider.d.ts +27 -0
- package/dist/model_providers/test_provider.d.ts.map +1 -0
- package/dist/model_providers/test_provider.js +185 -0
- package/dist/model_providers/test_provider.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types/api_types.d.ts +249 -0
- package/dist/types/api_types.d.ts.map +1 -0
- package/dist/types/api_types.js +2 -0
- package/dist/types/api_types.js.map +1 -0
- package/dist/types/extended_types.d.ts +43 -0
- package/dist/types/extended_types.d.ts.map +1 -0
- package/dist/types/extended_types.js +2 -0
- package/dist/types/extended_types.js.map +1 -0
- package/dist/types.d.ts +301 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/async_queue.d.ts +14 -0
- package/dist/utils/async_queue.d.ts.map +1 -0
- package/dist/utils/async_queue.js +68 -0
- package/dist/utils/async_queue.js.map +1 -0
- package/dist/utils/cache.d.ts +60 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +205 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/communication.d.ts +3 -0
- package/dist/utils/communication.d.ts.map +1 -0
- package/dist/utils/communication.js +8 -0
- package/dist/utils/communication.js.map +1 -0
- package/dist/utils/cost_tracker.d.ts +26 -0
- package/dist/utils/cost_tracker.d.ts.map +1 -0
- package/dist/utils/cost_tracker.js +177 -0
- package/dist/utils/cost_tracker.js.map +1 -0
- package/dist/utils/delta_buffer.d.ts +14 -0
- package/dist/utils/delta_buffer.d.ts.map +1 -0
- package/dist/utils/delta_buffer.js +60 -0
- package/dist/utils/delta_buffer.js.map +1 -0
- package/dist/utils/image_to_text.d.ts +3 -0
- package/dist/utils/image_to_text.d.ts.map +1 -0
- package/dist/utils/image_to_text.js +81 -0
- package/dist/utils/image_to_text.js.map +1 -0
- package/dist/utils/image_utils.d.ts +18 -0
- package/dist/utils/image_utils.d.ts.map +1 -0
- package/dist/utils/image_utils.js +132 -0
- package/dist/utils/image_utils.js.map +1 -0
- package/dist/utils/llm_logger.d.ts +8 -0
- package/dist/utils/llm_logger.d.ts.map +1 -0
- package/dist/utils/llm_logger.js +24 -0
- package/dist/utils/llm_logger.js.map +1 -0
- package/dist/utils/quota_tracker.d.ts +22 -0
- package/dist/utils/quota_tracker.d.ts.map +1 -0
- package/dist/utils/quota_tracker.js +338 -0
- package/dist/utils/quota_tracker.js.map +1 -0
- package/dist/utils/stream_converter.d.ts +19 -0
- package/dist/utils/stream_converter.d.ts.map +1 -0
- package/dist/utils/stream_converter.js +172 -0
- package/dist/utils/stream_converter.js.map +1 -0
- package/dist/validation.d.ts +1789 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +289 -0
- package/dist/validation.js.map +1 -0
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +34 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +86 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Buffer } from 'buffer';
|
|
2
|
+
export declare const MAX_IMAGE_HEIGHT = 2000;
|
|
3
|
+
export declare const DEFAULT_QUALITY = 80;
|
|
4
|
+
export declare const OPENAI_MAX_WIDTH = 1024;
|
|
5
|
+
export declare const OPENAI_MAX_HEIGHT = 768;
|
|
6
|
+
export declare const CLAUDE_MAX_WIDTH = 1024;
|
|
7
|
+
export declare const CLAUDE_MAX_HEIGHT = 1120;
|
|
8
|
+
export declare const GEMINI_MAX_WIDTH = 1024;
|
|
9
|
+
export declare const GEMINI_MAX_HEIGHT = 1536;
|
|
10
|
+
import { ExtractBase64ImageResult } from '../types.js';
|
|
11
|
+
export type { ExtractBase64ImageResult };
|
|
12
|
+
export declare function extractBase64Image(content: string): ExtractBase64ImageResult;
|
|
13
|
+
export declare function createImageFromBase64(base64Data: string): Promise<Buffer>;
|
|
14
|
+
export declare function createBase64FromImage(imageBuffer: Buffer): string;
|
|
15
|
+
export declare function resizeAndSplitForOpenAI(imageData: string): Promise<string[]>;
|
|
16
|
+
export declare function resizeAndTruncateForClaude(imageData: string): Promise<string>;
|
|
17
|
+
export declare function resizeAndTruncateForGemini(imageData: string): Promise<string>;
|
|
18
|
+
//# sourceMappingURL=image_utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image_utils.d.ts","sourceRoot":"","sources":["../../utils/image_utils.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKhC,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAGvD,YAAY,EAAE,wBAAwB,EAAE,CAAC;AASzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,wBAAwB,CA6C5E;AAQD,wBAAsB,qBAAqB,CACvC,UAAU,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CAMjB;AAQD,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAMjE;AAUD,wBAAsB,uBAAuB,CACzC,SAAS,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,EAAE,CAAC,CAsDnB;AAwCD,wBAAsB,0BAA0B,CAC5C,SAAS,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAKD,wBAAsB,0BAA0B,CAC5C,SAAS,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAiBjB"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { Buffer } from 'buffer';
|
|
2
|
+
import sharp from 'sharp';
|
|
3
|
+
import { randomUUID } from 'node:crypto';
|
|
4
|
+
export const MAX_IMAGE_HEIGHT = 2000;
|
|
5
|
+
export const DEFAULT_QUALITY = 80;
|
|
6
|
+
export const OPENAI_MAX_WIDTH = 1024;
|
|
7
|
+
export const OPENAI_MAX_HEIGHT = 768;
|
|
8
|
+
export const CLAUDE_MAX_WIDTH = 1024;
|
|
9
|
+
export const CLAUDE_MAX_HEIGHT = 1120;
|
|
10
|
+
export const GEMINI_MAX_WIDTH = 1024;
|
|
11
|
+
export const GEMINI_MAX_HEIGHT = 1536;
|
|
12
|
+
export function extractBase64Image(content) {
|
|
13
|
+
const result = {
|
|
14
|
+
found: false,
|
|
15
|
+
originalContent: content,
|
|
16
|
+
replaceContent: content,
|
|
17
|
+
image_id: null,
|
|
18
|
+
images: {},
|
|
19
|
+
};
|
|
20
|
+
if (typeof content !== 'string')
|
|
21
|
+
return result;
|
|
22
|
+
if (!content.includes('data:image/'))
|
|
23
|
+
return result;
|
|
24
|
+
const imgRegex = /data:image\/[a-zA-Z0-9.+-]+;base64,[A-Za-z0-9+/=\s]+/g;
|
|
25
|
+
const images = {};
|
|
26
|
+
const replaceContent = content.replace(imgRegex, match => {
|
|
27
|
+
const id = randomUUID();
|
|
28
|
+
images[id] = match.replace(/\s+/g, '');
|
|
29
|
+
return `[image #${id}]`;
|
|
30
|
+
});
|
|
31
|
+
if (Object.keys(images).length === 0) {
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
const firstImageId = Object.keys(images)[0];
|
|
35
|
+
return {
|
|
36
|
+
found: true,
|
|
37
|
+
originalContent: content,
|
|
38
|
+
replaceContent: replaceContent,
|
|
39
|
+
image_id: firstImageId,
|
|
40
|
+
images: images,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export async function createImageFromBase64(base64Data) {
|
|
44
|
+
const base64Image = base64Data.replace(/^data:image\/\w+;base64,/, '');
|
|
45
|
+
return Buffer.from(base64Image, 'base64');
|
|
46
|
+
}
|
|
47
|
+
export function createBase64FromImage(imageBuffer) {
|
|
48
|
+
const base64Image = imageBuffer.toString('base64');
|
|
49
|
+
return `data:image/png;base64,${base64Image}`;
|
|
50
|
+
}
|
|
51
|
+
export async function resizeAndSplitForOpenAI(imageData) {
|
|
52
|
+
const MAX_WIDTH = 1024;
|
|
53
|
+
const MAX_HEIGHT = 768;
|
|
54
|
+
const base64Image = imageData.replace(/^data:image\/\w+;base64,/, '');
|
|
55
|
+
const imageFormat = imageData.match(/data:image\/(\w+);/)?.[1] || 'png';
|
|
56
|
+
const imageBuffer = Buffer.from(base64Image, 'base64');
|
|
57
|
+
const { width: origW = 0, height: origH = 0 } = await sharp(imageBuffer).metadata();
|
|
58
|
+
if (origW <= MAX_WIDTH && origH <= MAX_HEIGHT) {
|
|
59
|
+
return [imageData];
|
|
60
|
+
}
|
|
61
|
+
const newWidth = Math.min(origW, MAX_WIDTH);
|
|
62
|
+
const resizedBuffer = await sharp(imageBuffer)
|
|
63
|
+
.resize({ width: newWidth })
|
|
64
|
+
.flatten({ background: '#fff' })
|
|
65
|
+
.toFormat(imageFormat)
|
|
66
|
+
.toBuffer();
|
|
67
|
+
const { height: resizedH = 0 } = await sharp(resizedBuffer).metadata();
|
|
68
|
+
const result = [];
|
|
69
|
+
if (resizedH > MAX_HEIGHT) {
|
|
70
|
+
const segments = Math.ceil(resizedH / MAX_HEIGHT);
|
|
71
|
+
for (let i = 0; i < segments; i++) {
|
|
72
|
+
const top = i * MAX_HEIGHT;
|
|
73
|
+
const height = Math.min(MAX_HEIGHT, resizedH - top);
|
|
74
|
+
if (height <= 0)
|
|
75
|
+
continue;
|
|
76
|
+
const segmentBuf = await sharp(resizedBuffer)
|
|
77
|
+
.extract({ left: 0, top, width: newWidth, height })
|
|
78
|
+
.toFormat(imageFormat)
|
|
79
|
+
.toBuffer();
|
|
80
|
+
const segmentDataUrl = `data:image/${imageFormat};base64,${segmentBuf.toString('base64')}`;
|
|
81
|
+
result.push(segmentDataUrl);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
const singleUrl = `data:image/${imageFormat};base64,${resizedBuffer.toString('base64')}`;
|
|
86
|
+
result.push(singleUrl);
|
|
87
|
+
}
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
function stripDataUrl(dataUrl) {
|
|
91
|
+
const match = dataUrl.match(/^data:image\/([^;]+);base64,(.+)$/);
|
|
92
|
+
if (!match)
|
|
93
|
+
throw new Error('Invalid data-URL');
|
|
94
|
+
return { format: match[1], base64: match[2] };
|
|
95
|
+
}
|
|
96
|
+
async function processAndTruncate(imageBuffer, format, maxW, maxH) {
|
|
97
|
+
const resized = await sharp(imageBuffer)
|
|
98
|
+
.rotate()
|
|
99
|
+
.resize({ width: maxW, withoutEnlargement: true })
|
|
100
|
+
.flatten({ background: '#fff' })
|
|
101
|
+
.toFormat(format)
|
|
102
|
+
.toBuffer();
|
|
103
|
+
const { width, height } = await sharp(resized).metadata();
|
|
104
|
+
if (height > maxH) {
|
|
105
|
+
return await sharp(resized)
|
|
106
|
+
.extract({ left: 0, top: 0, width: width, height: maxH })
|
|
107
|
+
.toFormat(format)
|
|
108
|
+
.toBuffer();
|
|
109
|
+
}
|
|
110
|
+
return resized;
|
|
111
|
+
}
|
|
112
|
+
export async function resizeAndTruncateForClaude(imageData) {
|
|
113
|
+
const { format, base64 } = stripDataUrl(imageData);
|
|
114
|
+
const buf = Buffer.from(base64, 'base64');
|
|
115
|
+
const meta = await sharp(buf).metadata();
|
|
116
|
+
if (meta.width <= CLAUDE_MAX_WIDTH && meta.height <= CLAUDE_MAX_HEIGHT) {
|
|
117
|
+
return imageData;
|
|
118
|
+
}
|
|
119
|
+
const outBuf = await processAndTruncate(buf, format, CLAUDE_MAX_WIDTH, CLAUDE_MAX_HEIGHT);
|
|
120
|
+
return `data:image/${format};base64,${outBuf.toString('base64')}`;
|
|
121
|
+
}
|
|
122
|
+
export async function resizeAndTruncateForGemini(imageData) {
|
|
123
|
+
const { format, base64 } = stripDataUrl(imageData);
|
|
124
|
+
const buf = Buffer.from(base64, 'base64');
|
|
125
|
+
const meta = await sharp(buf).metadata();
|
|
126
|
+
if (meta.width <= GEMINI_MAX_WIDTH && meta.height <= GEMINI_MAX_HEIGHT) {
|
|
127
|
+
return imageData;
|
|
128
|
+
}
|
|
129
|
+
const outBuf = await processAndTruncate(buf, format, GEMINI_MAX_WIDTH, GEMINI_MAX_HEIGHT);
|
|
130
|
+
return `data:image/${format};base64,${outBuf.toString('base64')}`;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=image_utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image_utils.js","sourceRoot":"","sources":["../../utils/image_utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { EnsembleLogger } from '../types.js';
|
|
2
|
+
export type { EnsembleLogger };
|
|
3
|
+
export declare function setEnsembleLogger(logger: EnsembleLogger | null): void;
|
|
4
|
+
export declare function getEnsembleLogger(): EnsembleLogger | null;
|
|
5
|
+
export declare function log_llm_request(agentId: string, providerName: string, model: string, requestData: unknown, timestamp?: Date): string;
|
|
6
|
+
export declare function log_llm_response(requestId: string | undefined, responseData: unknown, timestamp?: Date): void;
|
|
7
|
+
export declare function log_llm_error(requestId: string | undefined, errorData: unknown, timestamp?: Date): void;
|
|
8
|
+
//# sourceMappingURL=llm_logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm_logger.d.ts","sourceRoot":"","sources":["../../utils/llm_logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,YAAY,EAAE,cAAc,EAAE,CAAC;AAI/B,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAErE;AAED,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,IAAI,CAEzD;AAED,wBAAgB,eAAe,CAC3B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,OAAO,EACpB,SAAS,CAAC,EAAE,IAAI,GACjB,MAAM,CAKR;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAI7G;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAIvG"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
let globalLogger = null;
|
|
2
|
+
export function setEnsembleLogger(logger) {
|
|
3
|
+
globalLogger = logger;
|
|
4
|
+
}
|
|
5
|
+
export function getEnsembleLogger() {
|
|
6
|
+
return globalLogger;
|
|
7
|
+
}
|
|
8
|
+
export function log_llm_request(agentId, providerName, model, requestData, timestamp) {
|
|
9
|
+
if (globalLogger) {
|
|
10
|
+
return globalLogger.log_llm_request(agentId, providerName, model, requestData, timestamp);
|
|
11
|
+
}
|
|
12
|
+
return '';
|
|
13
|
+
}
|
|
14
|
+
export function log_llm_response(requestId, responseData, timestamp) {
|
|
15
|
+
if (globalLogger) {
|
|
16
|
+
globalLogger.log_llm_response(requestId, responseData, timestamp);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export function log_llm_error(requestId, errorData, timestamp) {
|
|
20
|
+
if (globalLogger) {
|
|
21
|
+
globalLogger.log_llm_error(requestId, errorData, timestamp);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=llm_logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm_logger.js","sourceRoot":"","sources":["../../utils/llm_logger.ts"],"names":[],"mappings":"AAKA,IAAI,YAAY,GAA0B,IAAI,CAAC;AAE/C,MAAM,UAAU,iBAAiB,CAAC,MAA6B;IAC3D,YAAY,GAAG,MAAM,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC7B,OAAO,YAAY,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,eAAe,CAC3B,OAAe,EACf,YAAoB,EACpB,KAAa,EACb,WAAoB,EACpB,SAAgB;IAEhB,IAAI,YAAY,EAAE,CAAC;QACf,OAAO,YAAY,CAAC,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAC9F,CAAC;IACD,OAAO,EAAE,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,SAA6B,EAAE,YAAqB,EAAE,SAAgB;IACnG,IAAI,YAAY,EAAE,CAAC;QACf,YAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IACtE,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAA6B,EAAE,SAAkB,EAAE,SAAgB;IAC7F,IAAI,YAAY,EAAE,CAAC;QACf,YAAY,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ModelProviderID, ModelSpecificQuota, ProviderQuota } from '../types.js';
|
|
2
|
+
export type { ModelSpecificQuota, ProviderQuota };
|
|
3
|
+
export type QuotaUpdateCallback = (quotaSummary: Record<string, any>) => void;
|
|
4
|
+
export declare class QuotaTracker {
|
|
5
|
+
private quotas;
|
|
6
|
+
private updateCallback?;
|
|
7
|
+
private openAIFreeQuota;
|
|
8
|
+
constructor(updateCallback?: QuotaUpdateCallback);
|
|
9
|
+
setUpdateCallback(callback: QuotaUpdateCallback | undefined): void;
|
|
10
|
+
private initializeProviderQuotas;
|
|
11
|
+
getProviderQuota(provider: ModelProviderID): ProviderQuota;
|
|
12
|
+
getModelQuota(provider: ModelProviderID, model: string): ModelSpecificQuota | null;
|
|
13
|
+
trackUsage(provider: ModelProviderID, model: string, inputTokens: number, outputTokens: number): boolean;
|
|
14
|
+
hasQuota(provider: ModelProviderID, model: string): boolean;
|
|
15
|
+
hasOpenAIFreeQuota(model: string): boolean;
|
|
16
|
+
trackCreditUsage(provider: ModelProviderID, creditAmount: number): void;
|
|
17
|
+
getCreditBalance(provider: ModelProviderID): number;
|
|
18
|
+
getSummary(): Record<string, any>;
|
|
19
|
+
sendQuotaUpdate(): void;
|
|
20
|
+
}
|
|
21
|
+
export declare const quotaTracker: QuotaTracker;
|
|
22
|
+
//# sourceMappingURL=quota_tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quota_tracker.d.ts","sourceRoot":"","sources":["../../utils/quota_tracker.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjF,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,CAAC;AA4BlD,MAAM,MAAM,mBAAmB,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;AAK9E,qBAAa,YAAY;IAErB,OAAO,CAAC,MAAM,CAAqC;IAGnD,OAAO,CAAC,cAAc,CAAC,CAAsB;IAG7C,OAAO,CAAC,eAAe,CAoBrB;gBAEU,cAAc,CAAC,EAAE,mBAAmB;IAQhD,iBAAiB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,SAAS,GAAG,IAAI;IAOlE,OAAO,CAAC,wBAAwB;IA4FhC,gBAAgB,CAAC,QAAQ,EAAE,eAAe,GAAG,aAAa;IAa1D,aAAa,CACT,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,MAAM,GACd,kBAAkB,GAAG,IAAI;IAgB5B,UAAU,CACN,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACrB,OAAO;IA0MV,QAAQ,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAyB3D,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAsB1C,gBAAgB,CAAC,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAiBvE,gBAAgB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM;IAOnD,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAwEjC,eAAe,IAAI,IAAI;CAU1B;AAGD,eAAO,MAAM,YAAY,cAAqB,CAAC"}
|
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
export class QuotaTracker {
|
|
2
|
+
quotas = {};
|
|
3
|
+
updateCallback;
|
|
4
|
+
openAIFreeQuota = {
|
|
5
|
+
gpt4Family: {
|
|
6
|
+
limit: 1000000,
|
|
7
|
+
used: 0,
|
|
8
|
+
},
|
|
9
|
+
gptMiniFamily: {
|
|
10
|
+
limit: 10000000,
|
|
11
|
+
used: 0,
|
|
12
|
+
},
|
|
13
|
+
gpt4Models: ['gpt-4.5-preview', 'gpt-4.1', 'gpt-4o', 'o1', 'o3'],
|
|
14
|
+
gptMiniModels: [
|
|
15
|
+
'gpt-4.1-mini',
|
|
16
|
+
'gpt-4.1-nano',
|
|
17
|
+
'gpt-4o-mini',
|
|
18
|
+
'o1-mini',
|
|
19
|
+
'o3-mini',
|
|
20
|
+
'o4-mini',
|
|
21
|
+
],
|
|
22
|
+
};
|
|
23
|
+
constructor(updateCallback) {
|
|
24
|
+
this.updateCallback = updateCallback;
|
|
25
|
+
this.initializeProviderQuotas();
|
|
26
|
+
}
|
|
27
|
+
setUpdateCallback(callback) {
|
|
28
|
+
this.updateCallback = callback;
|
|
29
|
+
}
|
|
30
|
+
initializeProviderQuotas() {
|
|
31
|
+
this.quotas['google'] = {
|
|
32
|
+
provider: 'google',
|
|
33
|
+
creditBalance: 0,
|
|
34
|
+
creditLimit: 0,
|
|
35
|
+
lastResetDate: new Date(),
|
|
36
|
+
models: {
|
|
37
|
+
'gemini-2.5-pro-exp-03-25': {
|
|
38
|
+
model: 'gemini-2.5-pro-exp-03-25',
|
|
39
|
+
dailyTokenLimit: 1000000,
|
|
40
|
+
dailyTokensUsed: 0,
|
|
41
|
+
dailyRequestLimit: 25,
|
|
42
|
+
dailyRequestsUsed: 0,
|
|
43
|
+
rateLimit: {
|
|
44
|
+
requestsPerMinute: 5,
|
|
45
|
+
tokensPerMinute: 250000,
|
|
46
|
+
},
|
|
47
|
+
lastResetDate: new Date(),
|
|
48
|
+
},
|
|
49
|
+
'gemini-2.5-flash-preview-04-17': {
|
|
50
|
+
model: 'gemini-2.5-flash-preview-04-17',
|
|
51
|
+
dailyTokenLimit: 0,
|
|
52
|
+
dailyTokensUsed: 0,
|
|
53
|
+
dailyRequestLimit: 500,
|
|
54
|
+
dailyRequestsUsed: 0,
|
|
55
|
+
rateLimit: {
|
|
56
|
+
requestsPerMinute: 10,
|
|
57
|
+
tokensPerMinute: 250000,
|
|
58
|
+
},
|
|
59
|
+
lastResetDate: new Date(),
|
|
60
|
+
},
|
|
61
|
+
'gemini-2.0-flash': {
|
|
62
|
+
model: 'gemini-2.0-flash',
|
|
63
|
+
dailyTokenLimit: 0,
|
|
64
|
+
dailyTokensUsed: 0,
|
|
65
|
+
dailyRequestLimit: 1500,
|
|
66
|
+
dailyRequestsUsed: 0,
|
|
67
|
+
rateLimit: {
|
|
68
|
+
requestsPerMinute: 15,
|
|
69
|
+
tokensPerMinute: 1000000,
|
|
70
|
+
},
|
|
71
|
+
lastResetDate: new Date(),
|
|
72
|
+
},
|
|
73
|
+
'gemini-2.0-flash-lite': {
|
|
74
|
+
model: 'gemini-2.0-flash-lite',
|
|
75
|
+
dailyTokenLimit: 0,
|
|
76
|
+
dailyTokensUsed: 0,
|
|
77
|
+
dailyRequestLimit: 1500,
|
|
78
|
+
dailyRequestsUsed: 0,
|
|
79
|
+
rateLimit: {
|
|
80
|
+
requestsPerMinute: 30,
|
|
81
|
+
tokensPerMinute: 1000000,
|
|
82
|
+
},
|
|
83
|
+
lastResetDate: new Date(),
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
this.quotas['openai'] = {
|
|
88
|
+
provider: 'openai',
|
|
89
|
+
creditBalance: 0,
|
|
90
|
+
creditLimit: 0,
|
|
91
|
+
lastResetDate: new Date(),
|
|
92
|
+
info: {
|
|
93
|
+
freeQuota: this.openAIFreeQuota,
|
|
94
|
+
},
|
|
95
|
+
models: {},
|
|
96
|
+
};
|
|
97
|
+
this.quotas['xai'] = {
|
|
98
|
+
provider: 'xai',
|
|
99
|
+
creditBalance: 150,
|
|
100
|
+
creditLimit: 150,
|
|
101
|
+
lastResetDate: new Date(),
|
|
102
|
+
models: {},
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
getProviderQuota(provider) {
|
|
106
|
+
return (this.quotas[provider] || {
|
|
107
|
+
provider,
|
|
108
|
+
models: {},
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
getModelQuota(provider, model) {
|
|
112
|
+
const providerQuota = this.getProviderQuota(provider);
|
|
113
|
+
if (providerQuota.models[model]) {
|
|
114
|
+
return providerQuota.models[model];
|
|
115
|
+
}
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
trackUsage(provider, model, inputTokens, outputTokens) {
|
|
119
|
+
if (!this.quotas[provider]) {
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
const providerQuota = this.quotas[provider];
|
|
123
|
+
let significantChange = false;
|
|
124
|
+
const totalTokens = inputTokens + outputTokens;
|
|
125
|
+
const today = new Date();
|
|
126
|
+
if (providerQuota.lastResetDate &&
|
|
127
|
+
(today.getUTCDate() !== providerQuota.lastResetDate.getUTCDate() ||
|
|
128
|
+
today.getUTCMonth() !==
|
|
129
|
+
providerQuota.lastResetDate.getUTCMonth() ||
|
|
130
|
+
today.getUTCFullYear() !==
|
|
131
|
+
providerQuota.lastResetDate.getUTCFullYear())) {
|
|
132
|
+
for (const modelKey in providerQuota.models) {
|
|
133
|
+
const modelQuota = providerQuota.models[modelKey];
|
|
134
|
+
modelQuota.dailyTokensUsed = 0;
|
|
135
|
+
modelQuota.dailyRequestsUsed = 0;
|
|
136
|
+
modelQuota.lastResetDate = today;
|
|
137
|
+
}
|
|
138
|
+
if (provider === 'openai' && providerQuota.info?.freeQuota) {
|
|
139
|
+
const freeQuota = providerQuota.info
|
|
140
|
+
.freeQuota;
|
|
141
|
+
freeQuota.gpt4Family.used = 0;
|
|
142
|
+
freeQuota.gptMiniFamily.used = 0;
|
|
143
|
+
}
|
|
144
|
+
providerQuota.lastResetDate = today;
|
|
145
|
+
significantChange = true;
|
|
146
|
+
}
|
|
147
|
+
if (provider === 'openai' && providerQuota.info?.freeQuota) {
|
|
148
|
+
const freeQuota = providerQuota.info.freeQuota;
|
|
149
|
+
if (freeQuota.gpt4Models.includes(model)) {
|
|
150
|
+
const prevUsed = freeQuota.gpt4Family.used;
|
|
151
|
+
freeQuota.gpt4Family.used += totalTokens;
|
|
152
|
+
console.log(`[QuotaTracker] OpenAI GPT-4 family usage: ${freeQuota.gpt4Family.used}/${freeQuota.gpt4Family.limit}`);
|
|
153
|
+
const prevPercent = Math.floor((prevUsed / freeQuota.gpt4Family.limit) * 10);
|
|
154
|
+
const currPercent = Math.floor((freeQuota.gpt4Family.used / freeQuota.gpt4Family.limit) *
|
|
155
|
+
10);
|
|
156
|
+
if (prevPercent !== currPercent) {
|
|
157
|
+
significantChange = true;
|
|
158
|
+
}
|
|
159
|
+
if (freeQuota.gpt4Family.used >= freeQuota.gpt4Family.limit) {
|
|
160
|
+
console.log(`[QuotaTracker] OpenAI GPT-4 family daily limit reached: ${freeQuota.gpt4Family.used} > ${freeQuota.gpt4Family.limit}`);
|
|
161
|
+
significantChange = true;
|
|
162
|
+
this.sendQuotaUpdate();
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
if (freeQuota.gptMiniModels.includes(model)) {
|
|
167
|
+
const prevUsed = freeQuota.gptMiniFamily.used;
|
|
168
|
+
freeQuota.gptMiniFamily.used += totalTokens;
|
|
169
|
+
console.log(`[QuotaTracker] OpenAI GPT-Mini family usage: ${freeQuota.gptMiniFamily.used}/${freeQuota.gptMiniFamily.limit}`);
|
|
170
|
+
const prevPercent = Math.floor((prevUsed / freeQuota.gptMiniFamily.limit) * 10);
|
|
171
|
+
const currPercent = Math.floor((freeQuota.gptMiniFamily.used /
|
|
172
|
+
freeQuota.gptMiniFamily.limit) *
|
|
173
|
+
10);
|
|
174
|
+
if (prevPercent !== currPercent) {
|
|
175
|
+
significantChange = true;
|
|
176
|
+
}
|
|
177
|
+
if (freeQuota.gptMiniFamily.used >=
|
|
178
|
+
freeQuota.gptMiniFamily.limit) {
|
|
179
|
+
console.log(`[QuotaTracker] OpenAI GPT-Mini family daily limit reached: ${freeQuota.gptMiniFamily.used} > ${freeQuota.gptMiniFamily.limit}`);
|
|
180
|
+
significantChange = true;
|
|
181
|
+
this.sendQuotaUpdate();
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
const modelQuota = this.getModelQuota(provider, model);
|
|
187
|
+
if (!modelQuota && provider !== 'openai') {
|
|
188
|
+
return true;
|
|
189
|
+
}
|
|
190
|
+
if (modelQuota) {
|
|
191
|
+
const previousDailyTokensUsed = modelQuota.dailyTokensUsed;
|
|
192
|
+
modelQuota.dailyTokensUsed += totalTokens;
|
|
193
|
+
const previousDailyRequestsUsed = modelQuota.dailyRequestsUsed;
|
|
194
|
+
modelQuota.dailyRequestsUsed += 1;
|
|
195
|
+
if (modelQuota.dailyTokenLimit > 0) {
|
|
196
|
+
const previousPercent = Math.floor((previousDailyTokensUsed / modelQuota.dailyTokenLimit) * 10);
|
|
197
|
+
const currentPercent = Math.floor((modelQuota.dailyTokensUsed / modelQuota.dailyTokenLimit) *
|
|
198
|
+
10);
|
|
199
|
+
if (previousPercent !== currentPercent) {
|
|
200
|
+
significantChange = true;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
if (modelQuota.dailyRequestLimit > 0) {
|
|
204
|
+
const previousPercent = Math.floor((previousDailyRequestsUsed / modelQuota.dailyRequestLimit) *
|
|
205
|
+
10);
|
|
206
|
+
const currentPercent = Math.floor((modelQuota.dailyRequestsUsed /
|
|
207
|
+
modelQuota.dailyRequestLimit) *
|
|
208
|
+
10);
|
|
209
|
+
if (previousPercent !== currentPercent) {
|
|
210
|
+
significantChange = true;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
if (modelQuota.dailyTokenLimit > 0 &&
|
|
214
|
+
modelQuota.dailyTokensUsed >= modelQuota.dailyTokenLimit) {
|
|
215
|
+
console.log(`[QuotaTracker] ${provider} model ${model} daily token limit reached: ${modelQuota.dailyTokensUsed} > ${modelQuota.dailyTokenLimit}`);
|
|
216
|
+
significantChange = true;
|
|
217
|
+
this.sendQuotaUpdate();
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
220
|
+
if (modelQuota.dailyRequestLimit > 0 &&
|
|
221
|
+
modelQuota.dailyRequestsUsed >= modelQuota.dailyRequestLimit) {
|
|
222
|
+
console.log(`[QuotaTracker] ${provider} model ${model} daily request limit reached: ${modelQuota.dailyRequestsUsed} > ${modelQuota.dailyRequestLimit}`);
|
|
223
|
+
significantChange = true;
|
|
224
|
+
this.sendQuotaUpdate();
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
if (significantChange) {
|
|
229
|
+
this.sendQuotaUpdate();
|
|
230
|
+
}
|
|
231
|
+
return true;
|
|
232
|
+
}
|
|
233
|
+
hasQuota(provider, model) {
|
|
234
|
+
if (provider === 'openai') {
|
|
235
|
+
return this.hasOpenAIFreeQuota(model);
|
|
236
|
+
}
|
|
237
|
+
const modelQuota = this.getModelQuota(provider, model);
|
|
238
|
+
if (modelQuota) {
|
|
239
|
+
return ((modelQuota.dailyTokenLimit === 0 ||
|
|
240
|
+
modelQuota.dailyTokensUsed < modelQuota.dailyTokenLimit) &&
|
|
241
|
+
(modelQuota.dailyRequestLimit === 0 ||
|
|
242
|
+
modelQuota.dailyRequestsUsed < modelQuota.dailyRequestLimit));
|
|
243
|
+
}
|
|
244
|
+
return true;
|
|
245
|
+
}
|
|
246
|
+
hasOpenAIFreeQuota(model) {
|
|
247
|
+
const providerQuota = this.getProviderQuota('openai');
|
|
248
|
+
if (!providerQuota || !providerQuota.info?.freeQuota)
|
|
249
|
+
return true;
|
|
250
|
+
const freeQuota = providerQuota.info.freeQuota;
|
|
251
|
+
if (freeQuota.gpt4Models.includes(model)) {
|
|
252
|
+
return freeQuota.gpt4Family.used < freeQuota.gpt4Family.limit;
|
|
253
|
+
}
|
|
254
|
+
if (freeQuota.gptMiniModels.includes(model)) {
|
|
255
|
+
return freeQuota.gptMiniFamily.used < freeQuota.gptMiniFamily.limit;
|
|
256
|
+
}
|
|
257
|
+
return true;
|
|
258
|
+
}
|
|
259
|
+
trackCreditUsage(provider, creditAmount) {
|
|
260
|
+
const providerQuota = this.getProviderQuota(provider);
|
|
261
|
+
if (!providerQuota || providerQuota.creditBalance === undefined) {
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
if (providerQuota.creditBalance !== undefined) {
|
|
265
|
+
providerQuota.creditBalance = Math.max(0, providerQuota.creditBalance - creditAmount);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
getCreditBalance(provider) {
|
|
269
|
+
return this.getProviderQuota(provider)?.creditBalance || 0;
|
|
270
|
+
}
|
|
271
|
+
getSummary() {
|
|
272
|
+
const summary = {};
|
|
273
|
+
for (const [provider, providerQuota] of Object.entries(this.quotas)) {
|
|
274
|
+
summary[provider] = {
|
|
275
|
+
creditBalance: providerQuota.creditBalance,
|
|
276
|
+
creditLimit: providerQuota.creditLimit,
|
|
277
|
+
models: {},
|
|
278
|
+
};
|
|
279
|
+
for (const [modelName, modelQuota] of Object.entries(providerQuota.models)) {
|
|
280
|
+
summary[provider].models[modelName] = {
|
|
281
|
+
tokens: {
|
|
282
|
+
used: modelQuota.dailyTokensUsed,
|
|
283
|
+
limit: modelQuota.dailyTokenLimit,
|
|
284
|
+
percent: modelQuota.dailyTokenLimit > 0
|
|
285
|
+
? (modelQuota.dailyTokensUsed /
|
|
286
|
+
modelQuota.dailyTokenLimit) *
|
|
287
|
+
100
|
|
288
|
+
: 0,
|
|
289
|
+
},
|
|
290
|
+
requests: {
|
|
291
|
+
used: modelQuota.dailyRequestsUsed,
|
|
292
|
+
limit: modelQuota.dailyRequestLimit,
|
|
293
|
+
percent: modelQuota.dailyRequestLimit > 0
|
|
294
|
+
? (modelQuota.dailyRequestsUsed /
|
|
295
|
+
modelQuota.dailyRequestLimit) *
|
|
296
|
+
100
|
|
297
|
+
: 0,
|
|
298
|
+
},
|
|
299
|
+
lastReset: modelQuota.lastResetDate,
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
if (provider === 'openai' && providerQuota.info?.freeQuota) {
|
|
303
|
+
const freeQuota = providerQuota.info
|
|
304
|
+
.freeQuota;
|
|
305
|
+
summary[provider].freeTier = {
|
|
306
|
+
gpt4Family: {
|
|
307
|
+
used: freeQuota.gpt4Family.used,
|
|
308
|
+
limit: freeQuota.gpt4Family.limit,
|
|
309
|
+
percent: (freeQuota.gpt4Family.used /
|
|
310
|
+
freeQuota.gpt4Family.limit) *
|
|
311
|
+
100,
|
|
312
|
+
},
|
|
313
|
+
gptMiniFamily: {
|
|
314
|
+
used: freeQuota.gptMiniFamily.used,
|
|
315
|
+
limit: freeQuota.gptMiniFamily.limit,
|
|
316
|
+
percent: (freeQuota.gptMiniFamily.used /
|
|
317
|
+
freeQuota.gptMiniFamily.limit) *
|
|
318
|
+
100,
|
|
319
|
+
},
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
return summary;
|
|
324
|
+
}
|
|
325
|
+
sendQuotaUpdate() {
|
|
326
|
+
try {
|
|
327
|
+
if (this.updateCallback) {
|
|
328
|
+
const quotas = this.getSummary();
|
|
329
|
+
this.updateCallback(quotas);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
catch (error) {
|
|
333
|
+
console.error('Error sending quota update:', error);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
export const quotaTracker = new QuotaTracker();
|
|
338
|
+
//# sourceMappingURL=quota_tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quota_tracker.js","sourceRoot":"","sources":["../../utils/quota_tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { EnsembleStreamEvent, ResponseInput, ResponseThinkingMessage, ResponseOutputMessage, ToolCall } from '../types.js';
|
|
2
|
+
export interface ConversionOptions {
|
|
3
|
+
onThinking?: (message: ResponseThinkingMessage) => void | Promise<void>;
|
|
4
|
+
onResponse?: (message: ResponseOutputMessage) => void | Promise<void>;
|
|
5
|
+
processToolCall?: (toolCalls: ToolCall[]) => Promise<Record<string, any>>;
|
|
6
|
+
model?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ConversionResult {
|
|
9
|
+
messages: ResponseInput;
|
|
10
|
+
fullResponse: string;
|
|
11
|
+
toolCalls: ToolCall[];
|
|
12
|
+
}
|
|
13
|
+
export declare function convertStreamToMessages(stream: AsyncGenerator<EnsembleStreamEvent>, initialMessages?: ResponseInput, options?: ConversionOptions): Promise<ConversionResult>;
|
|
14
|
+
export declare function chainRequests(requests: Array<{
|
|
15
|
+
model: string;
|
|
16
|
+
systemPrompt?: string;
|
|
17
|
+
options?: ConversionOptions;
|
|
18
|
+
}>, initialMessages?: ResponseInput): Promise<ConversionResult>;
|
|
19
|
+
//# sourceMappingURL=stream_converter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream_converter.d.ts","sourceRoot":"","sources":["../../utils/stream_converter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,mBAAmB,EACnB,aAAa,EACb,uBAAuB,EACvB,qBAAqB,EAGrB,QAAQ,EACX,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,iBAAiB;IAE9B,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGxE,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGtE,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAG1E,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,EAAE,aAAa,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,QAAQ,EAAE,CAAC;CACzB;AAOD,wBAAsB,uBAAuB,CACzC,MAAM,EAAE,cAAc,CAAC,mBAAmB,CAAC,EAC3C,eAAe,GAAE,aAAkB,EACnC,OAAO,GAAE,iBAAsB,GAChC,OAAO,CAAC,gBAAgB,CAAC,CA0L3B;AAMD,wBAAsB,aAAa,CAC/B,QAAQ,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC/B,CAAC,EACF,eAAe,GAAE,aAAkB,GACpC,OAAO,CAAC,gBAAgB,CAAC,CAqC3B"}
|