@retab/node 0.0.0-reserved → 0.0.43

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 (270) hide show
  1. package/README.md +293 -2
  2. package/dist/api/client.d.ts +15 -0
  3. package/dist/api/client.d.ts.map +1 -0
  4. package/dist/api/client.js +16 -0
  5. package/dist/api/consensus/client.d.ts +7 -0
  6. package/dist/api/consensus/client.d.ts.map +1 -0
  7. package/dist/api/consensus/client.js +14 -0
  8. package/dist/api/deployments/client.d.ts +20 -0
  9. package/dist/api/deployments/client.d.ts.map +1 -0
  10. package/dist/api/deployments/client.js +23 -0
  11. package/dist/api/documents/client.d.ts +10 -0
  12. package/dist/api/documents/client.d.ts.map +1 -0
  13. package/dist/api/documents/client.js +35 -0
  14. package/dist/api/models/client.d.ts +17 -0
  15. package/dist/api/models/client.d.ts.map +1 -0
  16. package/dist/api/models/client.js +15 -0
  17. package/dist/api/schemas/client.d.ts +12 -0
  18. package/dist/api/schemas/client.d.ts.map +1 -0
  19. package/dist/api/schemas/client.js +14 -0
  20. package/dist/client.d.ts +50 -0
  21. package/dist/client.d.ts.map +1 -0
  22. package/dist/client.js +135 -0
  23. package/dist/errors.d.ts +34 -0
  24. package/dist/errors.d.ts.map +1 -0
  25. package/dist/errors.js +53 -0
  26. package/dist/generated_types.d.ts +64373 -0
  27. package/dist/generated_types.d.ts.map +1 -0
  28. package/dist/generated_types.js +2267 -0
  29. package/dist/index.d.ts +8 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +9 -0
  32. package/dist/mime.d.ts +5 -0
  33. package/dist/mime.d.ts.map +1 -0
  34. package/dist/mime.js +66 -0
  35. package/dist/resource.d.ts +12 -0
  36. package/dist/resource.d.ts.map +1 -0
  37. package/dist/resource.js +19 -0
  38. package/dist/resources/consensus/completions.d.ts +66 -0
  39. package/dist/resources/consensus/completions.d.ts.map +1 -0
  40. package/dist/resources/consensus/completions.js +84 -0
  41. package/dist/resources/consensus/index.d.ts +72 -0
  42. package/dist/resources/consensus/index.d.ts.map +1 -0
  43. package/dist/resources/consensus/index.js +76 -0
  44. package/dist/resources/consensus/responses.d.ts +69 -0
  45. package/dist/resources/consensus/responses.d.ts.map +1 -0
  46. package/dist/resources/consensus/responses.js +99 -0
  47. package/dist/resources/documents/extractions.d.ts +74 -0
  48. package/dist/resources/documents/extractions.d.ts.map +1 -0
  49. package/dist/resources/documents/extractions.js +196 -0
  50. package/dist/resources/documents/index.d.ts +21 -0
  51. package/dist/resources/documents/index.d.ts.map +1 -0
  52. package/dist/resources/documents/index.js +55 -0
  53. package/dist/resources/evaluations/documents.d.ts +40 -0
  54. package/dist/resources/evaluations/documents.d.ts.map +1 -0
  55. package/dist/resources/evaluations/documents.js +123 -0
  56. package/dist/resources/evaluations/index.d.ts +14 -0
  57. package/dist/resources/evaluations/index.d.ts.map +1 -0
  58. package/dist/resources/evaluations/index.js +17 -0
  59. package/dist/resources/evaluations/iterations.d.ts +50 -0
  60. package/dist/resources/evaluations/iterations.d.ts.map +1 -0
  61. package/dist/resources/evaluations/iterations.js +156 -0
  62. package/dist/resources/files.d.ts +82 -0
  63. package/dist/resources/files.d.ts.map +1 -0
  64. package/dist/resources/files.js +150 -0
  65. package/dist/resources/finetuning.d.ts +105 -0
  66. package/dist/resources/finetuning.d.ts.map +1 -0
  67. package/dist/resources/finetuning.js +181 -0
  68. package/dist/resources/index.d.ts +11 -0
  69. package/dist/resources/index.d.ts.map +1 -0
  70. package/dist/resources/index.js +10 -0
  71. package/dist/resources/models.d.ts +57 -0
  72. package/dist/resources/models.d.ts.map +1 -0
  73. package/dist/resources/models.js +72 -0
  74. package/dist/resources/processors/automations/endpoints.d.ts +90 -0
  75. package/dist/resources/processors/automations/endpoints.d.ts.map +1 -0
  76. package/dist/resources/processors/automations/endpoints.js +145 -0
  77. package/dist/resources/processors/automations/index.d.ts +7 -0
  78. package/dist/resources/processors/automations/index.d.ts.map +1 -0
  79. package/dist/resources/processors/automations/index.js +6 -0
  80. package/dist/resources/processors/automations/links.d.ts +90 -0
  81. package/dist/resources/processors/automations/links.d.ts.map +1 -0
  82. package/dist/resources/processors/automations/links.js +149 -0
  83. package/dist/resources/processors/automations/logs.d.ts +35 -0
  84. package/dist/resources/processors/automations/logs.d.ts.map +1 -0
  85. package/dist/resources/processors/automations/logs.js +60 -0
  86. package/dist/resources/processors/automations/mailboxes.d.ts +102 -0
  87. package/dist/resources/processors/automations/mailboxes.d.ts.map +1 -0
  88. package/dist/resources/processors/automations/mailboxes.js +157 -0
  89. package/dist/resources/processors/automations/outlook.d.ts +114 -0
  90. package/dist/resources/processors/automations/outlook.d.ts.map +1 -0
  91. package/dist/resources/processors/automations/outlook.js +170 -0
  92. package/dist/resources/processors/automations/tests.d.ts +58 -0
  93. package/dist/resources/processors/automations/tests.d.ts.map +1 -0
  94. package/dist/resources/processors/automations/tests.js +90 -0
  95. package/dist/resources/processors/index.d.ts +303 -0
  96. package/dist/resources/processors/index.d.ts.map +1 -0
  97. package/dist/resources/processors/index.js +261 -0
  98. package/dist/resources/schemas.d.ts +63 -0
  99. package/dist/resources/schemas.d.ts.map +1 -0
  100. package/dist/resources/schemas.js +183 -0
  101. package/dist/resources/secrets/external_api_keys.d.ts +61 -0
  102. package/dist/resources/secrets/external_api_keys.d.ts.map +1 -0
  103. package/dist/resources/secrets/external_api_keys.js +120 -0
  104. package/dist/resources/secrets/index.d.ts +14 -0
  105. package/dist/resources/secrets/index.d.ts.map +1 -0
  106. package/dist/resources/secrets/index.js +17 -0
  107. package/dist/resources/secrets/webhooks.d.ts +73 -0
  108. package/dist/resources/secrets/webhooks.d.ts.map +1 -0
  109. package/dist/resources/secrets/webhooks.js +145 -0
  110. package/dist/resources/usage.d.ts +223 -0
  111. package/dist/resources/usage.d.ts.map +1 -0
  112. package/dist/resources/usage.js +310 -0
  113. package/dist/types/ai_models.d.ts +389 -0
  114. package/dist/types/ai_models.d.ts.map +1 -0
  115. package/dist/types/ai_models.js +145 -0
  116. package/dist/types/automations/cron.d.ts +28 -0
  117. package/dist/types/automations/cron.d.ts.map +1 -0
  118. package/dist/types/automations/cron.js +1 -0
  119. package/dist/types/automations/endpoints.d.ts +13 -0
  120. package/dist/types/automations/endpoints.d.ts.map +1 -0
  121. package/dist/types/automations/endpoints.js +1 -0
  122. package/dist/types/automations/index.d.ts +7 -0
  123. package/dist/types/automations/index.d.ts.map +1 -0
  124. package/dist/types/automations/index.js +6 -0
  125. package/dist/types/automations/links.d.ts +15 -0
  126. package/dist/types/automations/links.d.ts.map +1 -0
  127. package/dist/types/automations/links.js +1 -0
  128. package/dist/types/automations/mailboxes.d.ts +18 -0
  129. package/dist/types/automations/mailboxes.d.ts.map +1 -0
  130. package/dist/types/automations/mailboxes.js +1 -0
  131. package/dist/types/automations/outlook.d.ts +37 -0
  132. package/dist/types/automations/outlook.d.ts.map +1 -0
  133. package/dist/types/automations/outlook.js +1 -0
  134. package/dist/types/automations/webhooks.d.ts +13 -0
  135. package/dist/types/automations/webhooks.d.ts.map +1 -0
  136. package/dist/types/automations/webhooks.js +1 -0
  137. package/dist/types/browser_canvas.d.ts +4 -0
  138. package/dist/types/browser_canvas.d.ts.map +1 -0
  139. package/dist/types/browser_canvas.js +2 -0
  140. package/dist/types/chat.d.ts +99 -0
  141. package/dist/types/chat.d.ts.map +1 -0
  142. package/dist/types/chat.js +20 -0
  143. package/dist/types/consensus.d.ts +10 -0
  144. package/dist/types/consensus.d.ts.map +1 -0
  145. package/dist/types/consensus.js +1 -0
  146. package/dist/types/db/annotations.d.ts +108 -0
  147. package/dist/types/db/annotations.d.ts.map +1 -0
  148. package/dist/types/db/annotations.js +6 -0
  149. package/dist/types/db/files.d.ts +133 -0
  150. package/dist/types/db/files.d.ts.map +1 -0
  151. package/dist/types/db/files.js +5 -0
  152. package/dist/types/documents/extractions.d.ts +1849 -0
  153. package/dist/types/documents/extractions.d.ts.map +1 -0
  154. package/dist/types/documents/extractions.js +211 -0
  155. package/dist/types/documents/processing.d.ts +249 -0
  156. package/dist/types/documents/processing.d.ts.map +1 -0
  157. package/dist/types/documents/processing.js +6 -0
  158. package/dist/types/evaluations/iterations.d.ts +41 -0
  159. package/dist/types/evaluations/iterations.d.ts.map +1 -0
  160. package/dist/types/evaluations/iterations.js +1 -0
  161. package/dist/types/jobs/base.d.ts +162 -0
  162. package/dist/types/jobs/base.d.ts.map +1 -0
  163. package/dist/types/jobs/base.js +6 -0
  164. package/dist/types/jobs/specialized.d.ts +200 -0
  165. package/dist/types/jobs/specialized.d.ts.map +1 -0
  166. package/dist/types/jobs/specialized.js +37 -0
  167. package/dist/types/logs.d.ts +92 -0
  168. package/dist/types/logs.d.ts.map +1 -0
  169. package/dist/types/logs.js +1 -0
  170. package/dist/types/mime.d.ts +426 -0
  171. package/dist/types/mime.d.ts.map +1 -0
  172. package/dist/types/mime.js +48 -0
  173. package/dist/types/modalities.d.ts +31 -0
  174. package/dist/types/modalities.d.ts.map +1 -0
  175. package/dist/types/modalities.js +109 -0
  176. package/dist/types/pagination.d.ts +5 -0
  177. package/dist/types/pagination.d.ts.map +1 -0
  178. package/dist/types/pagination.js +1 -0
  179. package/dist/types/schemas/enhancement.d.ts +250 -0
  180. package/dist/types/schemas/enhancement.d.ts.map +1 -0
  181. package/dist/types/schemas/enhancement.js +6 -0
  182. package/dist/types/schemas/generate.d.ts +160 -0
  183. package/dist/types/schemas/generate.d.ts.map +1 -0
  184. package/dist/types/schemas/generate.js +19 -0
  185. package/dist/types/schemas/object.d.ts +116 -0
  186. package/dist/types/schemas/object.d.ts.map +1 -0
  187. package/dist/types/schemas/object.js +861 -0
  188. package/dist/types/secrets/external_api_keys.d.ts +27 -0
  189. package/dist/types/secrets/external_api_keys.d.ts.map +1 -0
  190. package/dist/types/secrets/external_api_keys.js +11 -0
  191. package/dist/types/secrets/index.d.ts +2 -0
  192. package/dist/types/secrets/index.d.ts.map +1 -0
  193. package/dist/types/secrets/index.js +1 -0
  194. package/dist/types/standards.d.ts +37 -0
  195. package/dist/types/standards.d.ts.map +1 -0
  196. package/dist/types/standards.js +1 -0
  197. package/dist/types.d.ts +276 -0
  198. package/dist/types.d.ts.map +1 -0
  199. package/dist/types.js +85 -0
  200. package/dist/utils/ai_models.d.ts +10 -0
  201. package/dist/utils/ai_models.d.ts.map +1 -0
  202. package/dist/utils/ai_models.js +183 -0
  203. package/dist/utils/batch_processing.d.ts +227 -0
  204. package/dist/utils/batch_processing.d.ts.map +1 -0
  205. package/dist/utils/batch_processing.js +268 -0
  206. package/dist/utils/benchmarking.d.ts +115 -0
  207. package/dist/utils/benchmarking.d.ts.map +1 -0
  208. package/dist/utils/benchmarking.js +355 -0
  209. package/dist/utils/chat.d.ts +70 -0
  210. package/dist/utils/chat.d.ts.map +1 -0
  211. package/dist/utils/chat.js +79 -0
  212. package/dist/utils/cost_calculation.d.ts +26 -0
  213. package/dist/utils/cost_calculation.d.ts.map +1 -0
  214. package/dist/utils/cost_calculation.js +99 -0
  215. package/dist/utils/datasets.d.ts +135 -0
  216. package/dist/utils/datasets.d.ts.map +1 -0
  217. package/dist/utils/datasets.js +359 -0
  218. package/dist/utils/display.d.ts +108 -0
  219. package/dist/utils/display.d.ts.map +1 -0
  220. package/dist/utils/display.js +244 -0
  221. package/dist/utils/hash.d.ts +18 -0
  222. package/dist/utils/hash.d.ts.map +1 -0
  223. package/dist/utils/hash.js +31 -0
  224. package/dist/utils/hashing.d.ts +18 -0
  225. package/dist/utils/hashing.d.ts.map +1 -0
  226. package/dist/utils/hashing.js +28 -0
  227. package/dist/utils/index.d.ts +8 -0
  228. package/dist/utils/index.d.ts.map +1 -0
  229. package/dist/utils/index.js +10 -0
  230. package/dist/utils/json_schema.d.ts +18 -0
  231. package/dist/utils/json_schema.d.ts.map +1 -0
  232. package/dist/utils/json_schema.js +334 -0
  233. package/dist/utils/json_schema_utils.d.ts +42 -0
  234. package/dist/utils/json_schema_utils.d.ts.map +1 -0
  235. package/dist/utils/json_schema_utils.js +212 -0
  236. package/dist/utils/jsonl.d.ts +60 -0
  237. package/dist/utils/jsonl.d.ts.map +1 -0
  238. package/dist/utils/jsonl.js +259 -0
  239. package/dist/utils/mime.d.ts +6 -0
  240. package/dist/utils/mime.d.ts.map +1 -0
  241. package/dist/utils/mime.js +129 -0
  242. package/dist/utils/model_cards.d.ts +219 -0
  243. package/dist/utils/model_cards.d.ts.map +1 -0
  244. package/dist/utils/model_cards.js +462 -0
  245. package/dist/utils/prompt_optimization.d.ts +96 -0
  246. package/dist/utils/prompt_optimization.d.ts.map +1 -0
  247. package/dist/utils/prompt_optimization.js +275 -0
  248. package/dist/utils/responses.d.ts +35 -0
  249. package/dist/utils/responses.d.ts.map +1 -0
  250. package/dist/utils/responses.js +37 -0
  251. package/dist/utils/stream.d.ts +13 -0
  252. package/dist/utils/stream.d.ts.map +1 -0
  253. package/dist/utils/stream.js +64 -0
  254. package/dist/utils/stream_context_managers.d.ts +147 -0
  255. package/dist/utils/stream_context_managers.d.ts.map +1 -0
  256. package/dist/utils/stream_context_managers.js +380 -0
  257. package/dist/utils/usage.d.ts +57 -0
  258. package/dist/utils/usage.d.ts.map +1 -0
  259. package/dist/utils/usage.js +97 -0
  260. package/dist/utils/webhook_secrets.d.ts +59 -0
  261. package/dist/utils/webhook_secrets.d.ts.map +1 -0
  262. package/dist/utils/webhook_secrets.js +107 -0
  263. package/dist/utils/zod_to_json_schema.d.ts +11 -0
  264. package/dist/utils/zod_to_json_schema.d.ts.map +1 -0
  265. package/dist/utils/zod_to_json_schema.js +123 -0
  266. package/dist/utils.d.ts +19 -0
  267. package/dist/utils.d.ts.map +1 -0
  268. package/dist/utils.js +1 -0
  269. package/package.json +62 -6
  270. package/index.js +0 -7
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Rich display and visualization utilities for datasets and metrics
3
+ * Equivalent to Python's display.py
4
+ */
5
+ export interface DatasetMetrics {
6
+ totalExamples: number;
7
+ inputTokens: {
8
+ total: number;
9
+ min: number;
10
+ max: number;
11
+ mean: number;
12
+ median: number;
13
+ p95: number;
14
+ p99: number;
15
+ };
16
+ outputTokens: {
17
+ total: number;
18
+ min: number;
19
+ max: number;
20
+ mean: number;
21
+ median: number;
22
+ p95: number;
23
+ p99: number;
24
+ };
25
+ totalTokens: {
26
+ total: number;
27
+ min: number;
28
+ max: number;
29
+ mean: number;
30
+ median: number;
31
+ };
32
+ estimatedCost: {
33
+ input: number;
34
+ output: number;
35
+ total: number;
36
+ };
37
+ messageStats: {
38
+ systemMessages: number;
39
+ userMessages: number;
40
+ assistantMessages: number;
41
+ avgMessagesPerExample: number;
42
+ };
43
+ contentAnalysis: {
44
+ avgSystemLength: number;
45
+ avgUserLength: number;
46
+ avgAssistantLength: number;
47
+ hasImages: boolean;
48
+ imageCount: number;
49
+ };
50
+ }
51
+ export interface TokenCountResult {
52
+ textTokens: number;
53
+ imageTokens: number;
54
+ totalTokens: number;
55
+ }
56
+ /**
57
+ * Count tokens in text using a simple approximation
58
+ * In production, you'd want to use tiktoken equivalent for JavaScript
59
+ */
60
+ export declare function countTokens(text: string, _model?: string): number;
61
+ /**
62
+ * Count tokens in content (text + images)
63
+ */
64
+ export declare function countContentTokens(content: string, _model?: string): TokenCountResult;
65
+ /**
66
+ * Calculate statistical metrics for an array of numbers
67
+ */
68
+ export declare function calculateStats(values: number[]): {
69
+ min: number;
70
+ max: number;
71
+ mean: number;
72
+ median: number;
73
+ p95: number;
74
+ p99: number;
75
+ total: number;
76
+ };
77
+ /**
78
+ * Process dataset and compute comprehensive metrics
79
+ */
80
+ export declare function processDatasetAndComputeMetrics(datasetPath: string, inputTokenPrice?: number, outputTokenPrice?: number, model?: string): Promise<DatasetMetrics>;
81
+ /**
82
+ * Display metrics in a formatted table
83
+ */
84
+ export declare function displayMetrics(metrics: DatasetMetrics): void;
85
+ /**
86
+ * Format large numbers with appropriate units
87
+ */
88
+ export declare function formatNumber(num: number): string;
89
+ /**
90
+ * Create a simple ASCII progress bar
91
+ */
92
+ export declare function createProgressBar(current: number, total: number, width?: number): string;
93
+ /**
94
+ * Display progress with a progress bar
95
+ */
96
+ export declare function displayProgress(current: number, total: number, message?: string): void;
97
+ declare const _default: {
98
+ processDatasetAndComputeMetrics: typeof processDatasetAndComputeMetrics;
99
+ displayMetrics: typeof displayMetrics;
100
+ countTokens: typeof countTokens;
101
+ countContentTokens: typeof countContentTokens;
102
+ calculateStats: typeof calculateStats;
103
+ formatNumber: typeof formatNumber;
104
+ createProgressBar: typeof createProgressBar;
105
+ displayProgress: typeof displayProgress;
106
+ };
107
+ export default _default;
108
+ //# sourceMappingURL=display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/utils/display.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,244 @@
1
+ import fs from 'fs';
2
+ import { readJSONL } from './jsonl.js';
3
+ /**
4
+ * Count tokens in text using a simple approximation
5
+ * In production, you'd want to use tiktoken equivalent for JavaScript
6
+ */
7
+ export function countTokens(text, _model = 'gpt-4o-mini') {
8
+ // Simple approximation: ~4 characters per token for English text
9
+ // This is a rough estimate; for production use tiktoken-js or similar
10
+ const avgCharsPerToken = 4;
11
+ return Math.ceil(text.length / avgCharsPerToken);
12
+ }
13
+ /**
14
+ * Count tokens in content (text + images)
15
+ */
16
+ export function countContentTokens(content, _model = 'gpt-4o-mini') {
17
+ let textTokens = 0;
18
+ let imageTokens = 0;
19
+ // Check for image references (simplified detection)
20
+ const imagePatterns = [
21
+ /data:image\/[^;]+;base64,/g,
22
+ /!\[.*?\]\(.*?\)/g, // Markdown images
23
+ /<img[^>]*>/g, // HTML images
24
+ ];
25
+ let textContent = content;
26
+ // Count and remove image references
27
+ for (const pattern of imagePatterns) {
28
+ const matches = content.match(pattern);
29
+ if (matches) {
30
+ // OpenAI vision pricing: roughly 85 tokens per image for low detail
31
+ imageTokens += matches.length * 85;
32
+ textContent = textContent.replace(pattern, '[IMAGE]');
33
+ }
34
+ }
35
+ // Count text tokens
36
+ textTokens = countTokens(textContent, _model);
37
+ return {
38
+ textTokens,
39
+ imageTokens,
40
+ totalTokens: textTokens + imageTokens,
41
+ };
42
+ }
43
+ /**
44
+ * Calculate statistical metrics for an array of numbers
45
+ */
46
+ export function calculateStats(values) {
47
+ if (values.length === 0) {
48
+ return { min: 0, max: 0, mean: 0, median: 0, p95: 0, p99: 0, total: 0 };
49
+ }
50
+ const sorted = [...values].sort((a, b) => a - b);
51
+ const total = values.reduce((sum, val) => sum + val, 0);
52
+ const mean = total / values.length;
53
+ const getPercentile = (p) => {
54
+ const index = Math.ceil((p / 100) * sorted.length) - 1;
55
+ return sorted[Math.max(0, index)];
56
+ };
57
+ return {
58
+ min: sorted[0],
59
+ max: sorted[sorted.length - 1],
60
+ mean: Math.round(mean * 100) / 100,
61
+ median: sorted[Math.floor(sorted.length / 2)],
62
+ p95: getPercentile(95),
63
+ p99: getPercentile(99),
64
+ total,
65
+ };
66
+ }
67
+ /**
68
+ * Process dataset and compute comprehensive metrics
69
+ */
70
+ export async function processDatasetAndComputeMetrics(datasetPath, inputTokenPrice = 0.00015, outputTokenPrice = 0.0006, model = 'gpt-4o-mini') {
71
+ if (!fs.existsSync(datasetPath)) {
72
+ throw new Error(`Dataset file not found: ${datasetPath}`);
73
+ }
74
+ const dataset = await readJSONL(datasetPath);
75
+ const inputTokenCounts = [];
76
+ const outputTokenCounts = [];
77
+ const totalTokenCounts = [];
78
+ let systemMessages = 0;
79
+ let userMessages = 0;
80
+ let assistantMessages = 0;
81
+ let totalMessages = 0;
82
+ let systemLengths = [];
83
+ let userLengths = [];
84
+ let assistantLengths = [];
85
+ let imageCount = 0;
86
+ let hasImages = false;
87
+ for (const example of dataset) {
88
+ if (!example.messages || !Array.isArray(example.messages)) {
89
+ continue;
90
+ }
91
+ let exampleInputTokens = 0;
92
+ let exampleOutputTokens = 0;
93
+ for (const message of example.messages) {
94
+ totalMessages++;
95
+ const content = message.content || '';
96
+ const tokenCount = countContentTokens(content, model);
97
+ // Track content lengths
98
+ const contentLength = content.length;
99
+ switch (message.role) {
100
+ case 'system':
101
+ systemMessages++;
102
+ exampleInputTokens += tokenCount.totalTokens;
103
+ systemLengths.push(contentLength);
104
+ break;
105
+ case 'user':
106
+ userMessages++;
107
+ exampleInputTokens += tokenCount.totalTokens;
108
+ userLengths.push(contentLength);
109
+ break;
110
+ case 'assistant':
111
+ assistantMessages++;
112
+ exampleOutputTokens += tokenCount.totalTokens;
113
+ assistantLengths.push(contentLength);
114
+ break;
115
+ }
116
+ // Check for images
117
+ if (tokenCount.imageTokens > 0) {
118
+ hasImages = true;
119
+ imageCount += tokenCount.imageTokens / 85; // Rough estimate
120
+ }
121
+ }
122
+ inputTokenCounts.push(exampleInputTokens);
123
+ outputTokenCounts.push(exampleOutputTokens);
124
+ totalTokenCounts.push(exampleInputTokens + exampleOutputTokens);
125
+ }
126
+ const inputStats = calculateStats(inputTokenCounts);
127
+ const outputStats = calculateStats(outputTokenCounts);
128
+ const totalStats = calculateStats(totalTokenCounts);
129
+ return {
130
+ totalExamples: dataset.length,
131
+ inputTokens: inputStats,
132
+ outputTokens: outputStats,
133
+ totalTokens: totalStats,
134
+ estimatedCost: {
135
+ input: (inputStats.total * inputTokenPrice) / 1000,
136
+ output: (outputStats.total * outputTokenPrice) / 1000,
137
+ total: ((inputStats.total * inputTokenPrice) + (outputStats.total * outputTokenPrice)) / 1000,
138
+ },
139
+ messageStats: {
140
+ systemMessages,
141
+ userMessages,
142
+ assistantMessages,
143
+ avgMessagesPerExample: Math.round((totalMessages / dataset.length) * 100) / 100,
144
+ },
145
+ contentAnalysis: {
146
+ avgSystemLength: systemLengths.length > 0 ? Math.round((systemLengths.reduce((a, b) => a + b, 0) / systemLengths.length) * 100) / 100 : 0,
147
+ avgUserLength: userLengths.length > 0 ? Math.round((userLengths.reduce((a, b) => a + b, 0) / userLengths.length) * 100) / 100 : 0,
148
+ avgAssistantLength: assistantLengths.length > 0 ? Math.round((assistantLengths.reduce((a, b) => a + b, 0) / assistantLengths.length) * 100) / 100 : 0,
149
+ hasImages,
150
+ imageCount: Math.round(imageCount),
151
+ },
152
+ };
153
+ }
154
+ /**
155
+ * Display metrics in a formatted table
156
+ */
157
+ export function displayMetrics(metrics) {
158
+ console.log('\n📊 Dataset Analysis Report');
159
+ console.log('═'.repeat(50));
160
+ // Basic Stats
161
+ console.log(`\n📈 Basic Statistics:`);
162
+ console.log(` Total Examples: ${metrics.totalExamples.toLocaleString()}`);
163
+ console.log(` Avg Messages/Example: ${metrics.messageStats.avgMessagesPerExample}`);
164
+ // Message Distribution
165
+ console.log(`\n💬 Message Distribution:`);
166
+ console.log(` System Messages: ${metrics.messageStats.systemMessages.toLocaleString()}`);
167
+ console.log(` User Messages: ${metrics.messageStats.userMessages.toLocaleString()}`);
168
+ console.log(` Assistant Messages: ${metrics.messageStats.assistantMessages.toLocaleString()}`);
169
+ // Token Statistics
170
+ console.log(`\n🔢 Token Statistics:`);
171
+ console.log(` Input Tokens:`);
172
+ console.log(` Total: ${metrics.inputTokens.total.toLocaleString()}`);
173
+ console.log(` Mean: ${metrics.inputTokens.mean.toLocaleString()}`);
174
+ console.log(` Median: ${metrics.inputTokens.median.toLocaleString()}`);
175
+ console.log(` Min: ${metrics.inputTokens.min.toLocaleString()}`);
176
+ console.log(` Max: ${metrics.inputTokens.max.toLocaleString()}`);
177
+ console.log(` 95th percentile: ${metrics.inputTokens.p95.toLocaleString()}`);
178
+ console.log(` 99th percentile: ${metrics.inputTokens.p99.toLocaleString()}`);
179
+ console.log(`\n Output Tokens:`);
180
+ console.log(` Total: ${metrics.outputTokens.total.toLocaleString()}`);
181
+ console.log(` Mean: ${metrics.outputTokens.mean.toLocaleString()}`);
182
+ console.log(` Median: ${metrics.outputTokens.median.toLocaleString()}`);
183
+ console.log(` Min: ${metrics.outputTokens.min.toLocaleString()}`);
184
+ console.log(` Max: ${metrics.outputTokens.max.toLocaleString()}`);
185
+ console.log(` 95th percentile: ${metrics.outputTokens.p95.toLocaleString()}`);
186
+ console.log(` 99th percentile: ${metrics.outputTokens.p99.toLocaleString()}`);
187
+ // Cost Estimation
188
+ console.log(`\n💰 Cost Estimation:`);
189
+ console.log(` Input Cost: $${metrics.estimatedCost.input.toFixed(4)}`);
190
+ console.log(` Output Cost: $${metrics.estimatedCost.output.toFixed(4)}`);
191
+ console.log(` Total Cost: $${metrics.estimatedCost.total.toFixed(4)}`);
192
+ // Content Analysis
193
+ console.log(`\n📝 Content Analysis:`);
194
+ console.log(` Avg System Message Length: ${metrics.contentAnalysis.avgSystemLength.toLocaleString()} chars`);
195
+ console.log(` Avg User Message Length: ${metrics.contentAnalysis.avgUserLength.toLocaleString()} chars`);
196
+ console.log(` Avg Assistant Message Length: ${metrics.contentAnalysis.avgAssistantLength.toLocaleString()} chars`);
197
+ if (metrics.contentAnalysis.hasImages) {
198
+ console.log(` Images Detected: ${metrics.contentAnalysis.imageCount.toLocaleString()}`);
199
+ }
200
+ console.log('\n' + '═'.repeat(50));
201
+ }
202
+ /**
203
+ * Format large numbers with appropriate units
204
+ */
205
+ export function formatNumber(num) {
206
+ if (num >= 1000000) {
207
+ return `${(num / 1000000).toFixed(1)}M`;
208
+ }
209
+ else if (num >= 1000) {
210
+ return `${(num / 1000).toFixed(1)}K`;
211
+ }
212
+ return num.toLocaleString();
213
+ }
214
+ /**
215
+ * Create a simple ASCII progress bar
216
+ */
217
+ export function createProgressBar(current, total, width = 40) {
218
+ const percentage = Math.min(current / total, 1);
219
+ const filled = Math.floor(percentage * width);
220
+ const empty = width - filled;
221
+ return `[${'█'.repeat(filled)}${' '.repeat(empty)}] ${(percentage * 100).toFixed(1)}% (${current}/${total})`;
222
+ }
223
+ /**
224
+ * Display progress with a progress bar
225
+ */
226
+ export function displayProgress(current, total, message) {
227
+ const progressBar = createProgressBar(current, total);
228
+ const output = message ? `${message} ${progressBar}` : progressBar;
229
+ // Clear line and write progress (works in most terminals)
230
+ process.stdout.write(`\r${output}`);
231
+ if (current >= total) {
232
+ process.stdout.write('\n');
233
+ }
234
+ }
235
+ export default {
236
+ processDatasetAndComputeMetrics,
237
+ displayMetrics,
238
+ countTokens,
239
+ countContentTokens,
240
+ calculateStats,
241
+ formatNumber,
242
+ createProgressBar,
243
+ displayProgress,
244
+ };
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Generate a BLAKE2b hash from bytes.
3
+ * Uses the blake2 package to match Python's hashlib.blake2b with 8-byte digest.
4
+ */
5
+ export declare function generateBlake2bHashFromBytes(bytes: Buffer): string;
6
+ /**
7
+ * Generate a BLAKE2b hash from a base64 string.
8
+ */
9
+ export declare function generateBlake2bHashFromBase64(base64String: string): string;
10
+ /**
11
+ * Generate a BLAKE2b hash from a UTF-8 string.
12
+ */
13
+ export declare function generateBlake2bHashFromString(inputString: string): string;
14
+ /**
15
+ * Generate a BLAKE2b hash from a dictionary/object.
16
+ */
17
+ export declare function generateBlake2bHashFromDict(inputDict: Record<string, any>): string;
18
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIlE;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAG1E;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAGzE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAGlF"}
@@ -0,0 +1,31 @@
1
+ import * as blake2 from 'blake2';
2
+ /**
3
+ * Generate a BLAKE2b hash from bytes.
4
+ * Uses the blake2 package to match Python's hashlib.blake2b with 8-byte digest.
5
+ */
6
+ export function generateBlake2bHashFromBytes(bytes) {
7
+ const hash = blake2.createHash('blake2b', { digestLength: 8 });
8
+ hash.update(bytes);
9
+ return hash.digest('hex');
10
+ }
11
+ /**
12
+ * Generate a BLAKE2b hash from a base64 string.
13
+ */
14
+ export function generateBlake2bHashFromBase64(base64String) {
15
+ const bytes = Buffer.from(base64String, 'base64');
16
+ return generateBlake2bHashFromBytes(bytes);
17
+ }
18
+ /**
19
+ * Generate a BLAKE2b hash from a UTF-8 string.
20
+ */
21
+ export function generateBlake2bHashFromString(inputString) {
22
+ const bytes = Buffer.from(inputString, 'utf-8');
23
+ return generateBlake2bHashFromBytes(bytes);
24
+ }
25
+ /**
26
+ * Generate a BLAKE2b hash from a dictionary/object.
27
+ */
28
+ export function generateBlake2bHashFromDict(inputDict) {
29
+ const jsonString = JSON.stringify(inputDict, Object.keys(inputDict).sort());
30
+ return generateBlake2bHashFromString(jsonString.trim());
31
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Cryptographic hashing utilities
3
+ * Equivalent to Python's utils/hashing.py
4
+ */
5
+ export declare function md5(data: string | Buffer): string;
6
+ export declare function sha256(data: string | Buffer): string;
7
+ export declare function sha512(data: string | Buffer): string;
8
+ export declare function hmacSha256(data: string | Buffer, secret: string): string;
9
+ export declare function contentHash(content: any): string;
10
+ declare const _default: {
11
+ md5: typeof md5;
12
+ sha256: typeof sha256;
13
+ sha512: typeof sha512;
14
+ hmacSha256: typeof hmacSha256;
15
+ contentHash: typeof contentHash;
16
+ };
17
+ export default _default;
18
+ //# sourceMappingURL=hashing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashing.d.ts","sourceRoot":"","sources":["../../src/utils/hashing.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAExE;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,CAGhD;;;;;;;;AAED,wBAME"}
@@ -0,0 +1,28 @@
1
+ import { createHash, createHmac } from 'crypto';
2
+ /**
3
+ * Cryptographic hashing utilities
4
+ * Equivalent to Python's utils/hashing.py
5
+ */
6
+ export function md5(data) {
7
+ return createHash('md5').update(data).digest('hex');
8
+ }
9
+ export function sha256(data) {
10
+ return createHash('sha256').update(data).digest('hex');
11
+ }
12
+ export function sha512(data) {
13
+ return createHash('sha512').update(data).digest('hex');
14
+ }
15
+ export function hmacSha256(data, secret) {
16
+ return createHmac('sha256', secret).update(data).digest('hex');
17
+ }
18
+ export function contentHash(content) {
19
+ const normalized = typeof content === 'string' ? content : JSON.stringify(content);
20
+ return sha256(normalized);
21
+ }
22
+ export default {
23
+ md5,
24
+ sha256,
25
+ sha512,
26
+ hmacSha256,
27
+ contentHash,
28
+ };
@@ -0,0 +1,8 @@
1
+ export * from './stream.js';
2
+ export * from './ai_models.js';
3
+ export * from './json_schema_utils.js';
4
+ export * from './jsonl.js';
5
+ export * from './prompt_optimization.js';
6
+ export { default as jsonlUtils } from './jsonl.js';
7
+ export { default as promptOptimization } from './prompt_optimization.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AAGvC,cAAc,YAAY,CAAC;AAC3B,cAAc,0BAA0B,CAAC;AAGzC,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,10 @@
1
+ // Core utilities
2
+ export * from './stream.js';
3
+ export * from './ai_models.js';
4
+ export * from './json_schema_utils.js';
5
+ // New utilities for 100% feature parity
6
+ export * from './jsonl.js';
7
+ export * from './prompt_optimization.js';
8
+ // Re-export commonly used utilities
9
+ export { default as jsonlUtils } from './jsonl.js';
10
+ export { default as promptOptimization } from './prompt_optimization.js';
@@ -0,0 +1,18 @@
1
+ export declare function generateBlake2bHashFromString(input: string): string;
2
+ export declare function generateSchemaDataId(jsonSchema: Record<string, any>): string;
3
+ export declare function generateSchemaId(jsonSchema: Record<string, any>): string;
4
+ export declare function cleanSchema(schema: Record<string, any>, removeCustomFields?: boolean, fieldsToRemove?: string[]): Record<string, any>;
5
+ export declare function loadJsonSchema(jsonSchema: Record<string, any> | string): Record<string, any>;
6
+ export declare function expandRefs(schema: Record<string, any>): Record<string, any>;
7
+ export declare function createReasoningSchema(schema: Record<string, any>): Record<string, any>;
8
+ export declare function validateCurrency(currencyCode: any): string | null;
9
+ export declare function validateCountryCode(value: any): string | null;
10
+ export declare function validateEmailRegex(value: any): string | null;
11
+ export declare function validatePhoneNumber(value: any): string | null;
12
+ export declare function filterAuxiliaryFieldsJson(jsonData: any): any;
13
+ export declare function jsonSchemaToTypescriptInterface(schema: Record<string, any>, addFieldDescription?: boolean): string;
14
+ export declare function jsonSchemaToNlpDataStructure(schema: Record<string, any>): string;
15
+ export declare function jsonSchemaToStrictOpenaiSchema(schema: Record<string, any>): Record<string, any>;
16
+ export declare function unflattenDict(flatDict: Record<string, any>, separator?: string): Record<string, any>;
17
+ export declare function schemaToTsType(schema: Record<string, any>, definitions?: Record<string, any>, visited?: Set<string>, depth?: number, maxDepth?: number, addFieldDescription?: boolean): string;
18
+ //# sourceMappingURL=json_schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json_schema.d.ts","sourceRoot":"","sources":["../../src/utils/json_schema.ts"],"names":[],"mappings":"AAIA,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGnE;AAGD,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAS5E;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAIxE;AAGD,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,kBAAkB,GAAE,OAAc,EAClC,cAAc,GAAE,MAAM,EAAO,GAC5B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAiCrB;AAGD,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAQ5F;AAGD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA+B3E;AAGD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAmCtF;AAGD,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CAQjE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CAQ7D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CAO5D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CAQ7D;AAGD,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG,CA4B5D;AAGD,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,mBAAmB,GAAE,OAAc,GAClC,MAAM,CAoCR;AAGD,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAkChF;AAGD,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAqB/F;AAGD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,SAAS,GAAE,MAAY,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAmBzG;AAGD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,WAAW,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EACrC,OAAO,GAAE,GAAG,CAAC,MAAM,CAAa,EAChC,KAAK,GAAE,MAAU,EACjB,QAAQ,GAAE,MAAW,EACrB,mBAAmB,GAAE,OAAc,GAClC,MAAM,CAwCR"}