zerohelper-ai 11.0.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 ADDED
@@ -0,0 +1,71 @@
1
+ # zerohelper-ai
2
+
3
+ AI utilities for ZeroHelper.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install zerohelper-ai
9
+ npm install tiktoken compromise natural
10
+ ```
11
+
12
+ ## Usage
13
+
14
+ ```typescript
15
+ import {
16
+ estimateTokens, estimateTokensAccurate,
17
+ truncateToTokenLimit, splitByTokenLimit,
18
+ getModelTokenLimit, getModelPricing,
19
+ estimateConversationCost,
20
+ optimizeMessage,
21
+ extractJSONFromMarkdown,
22
+ parseStreamingChunk
23
+ } from 'zerohelper-ai';
24
+
25
+ // Token estimation
26
+ const tokens = estimateTokens('Hello world'); // ~3 tokens
27
+ const accurate = await estimateTokensAccurate('Hello world'); // Uses tiktoken
28
+
29
+ // Truncation
30
+ const truncated = truncateToTokenLimit(longText, 1000);
31
+ const chunks = splitByTokenLimit(longText, 4000);
32
+
33
+ // Cost estimation
34
+ const cost = estimateConversationCost([
35
+ { role: 'user', content: 'Hello' }
36
+ ], 'gpt-4o');
37
+
38
+ // Message optimization
39
+ const optimized = optimizeMessage('Please help me with...', 'medium');
40
+ // { text: 'Help me with...', savings: { percent: 25, tokens: 50 } }
41
+
42
+ // Output parsing
43
+ const json = extractJSONFromMarkdown('```json\n{"key": "value"}\n```');
44
+ const chunk = parseStreamingChunk('data: {"content": "hi"}');
45
+ ```
46
+
47
+ ## Functions
48
+
49
+ ### Token Estimation
50
+ - `estimateTokens(text)` - Quick token estimate
51
+ - `estimateTokensAccurate(text)` - Accurate with tiktoken
52
+ - `truncateToTokenLimit(text, limit)` - Truncate to limit
53
+ - `splitByTokenLimit(text, limit)` - Split into chunks
54
+
55
+ ### Model Info
56
+ - `getModelTokenLimit(model)` - Get context limit
57
+ - `getModelPricing(model)` - Get input/output pricing
58
+ - `estimateConversationCost(messages, model)` - Calculate cost
59
+
60
+ ### Prompt Optimization
61
+ - `optimizeMessage(text, level?)` - Optimize for tokens
62
+ - `truncatePromptByPercentage(prompt, percent)` - Truncate by %
63
+ - `isTokenLimitExceeded(prompt, limit)` - Check limit
64
+
65
+ ### Output Processing
66
+ - `extractJSONFromMarkdown(markdown)` - Extract JSON
67
+ - `parseStreamingChunk(chunk)` - Parse SSE chunks
68
+
69
+ ## License
70
+
71
+ ISC
@@ -0,0 +1,43 @@
1
+ export declare function estimateTokens(text: string): number;
2
+ export declare function estimateTokensAccurate(text: string): Promise<number>;
3
+ export declare function truncateToTokenLimit(text: string, limit: number): string;
4
+ export declare function splitByTokenLimit(text: string, limit: number): string[];
5
+ export declare function getModelTokenLimit(model: string): number;
6
+ export declare function getModelPricing(model: string): {
7
+ input: number;
8
+ output: number;
9
+ };
10
+ export declare function estimateConversationCost(messages: Array<{
11
+ role: string;
12
+ content: string;
13
+ }>, model: string): number;
14
+ export declare function getSupportedModels(): string[];
15
+ export declare function isTokenLimitExceeded(prompt: string, limit: number): boolean;
16
+ export declare function truncatePromptByPercentage(prompt: string, percent: number): string;
17
+ export declare function optimizeMessage(text: string, level?: 'light' | 'medium' | 'aggressive'): {
18
+ text: string;
19
+ savings: {
20
+ percent: number;
21
+ tokens: number;
22
+ };
23
+ };
24
+ export declare function convertToTOON(data: any[]): string;
25
+ export declare function extractJSONFromMarkdown(markdown: string): any;
26
+ export declare function parseStreamingChunk(chunk: string): any;
27
+ export declare const ai_module: {
28
+ estimateTokens: typeof estimateTokens;
29
+ estimateTokensAccurate: typeof estimateTokensAccurate;
30
+ truncateToTokenLimit: typeof truncateToTokenLimit;
31
+ splitByTokenLimit: typeof splitByTokenLimit;
32
+ getModelTokenLimit: typeof getModelTokenLimit;
33
+ getModelPricing: typeof getModelPricing;
34
+ estimateConversationCost: typeof estimateConversationCost;
35
+ getSupportedModels: typeof getSupportedModels;
36
+ isTokenLimitExceeded: typeof isTokenLimitExceeded;
37
+ truncatePromptByPercentage: typeof truncatePromptByPercentage;
38
+ optimizeMessage: typeof optimizeMessage;
39
+ convertToTOON: typeof convertToTOON;
40
+ extractJSONFromMarkdown: typeof extractJSONFromMarkdown;
41
+ parseStreamingChunk: typeof parseStreamingChunk;
42
+ };
43
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAU1E;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIxE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAevE;AAeD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAEhF;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQlH;AAED,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAE3E;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAElF;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,KAAK,GAAE,OAAO,GAAG,QAAQ,GAAG,YAAuB,GAClD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAwBhE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,CAUjD;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAU7D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAOtD;AAED,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;CAerB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ai_module = void 0;
37
+ exports.estimateTokens = estimateTokens;
38
+ exports.estimateTokensAccurate = estimateTokensAccurate;
39
+ exports.truncateToTokenLimit = truncateToTokenLimit;
40
+ exports.splitByTokenLimit = splitByTokenLimit;
41
+ exports.getModelTokenLimit = getModelTokenLimit;
42
+ exports.getModelPricing = getModelPricing;
43
+ exports.estimateConversationCost = estimateConversationCost;
44
+ exports.getSupportedModels = getSupportedModels;
45
+ exports.isTokenLimitExceeded = isTokenLimitExceeded;
46
+ exports.truncatePromptByPercentage = truncatePromptByPercentage;
47
+ exports.optimizeMessage = optimizeMessage;
48
+ exports.convertToTOON = convertToTOON;
49
+ exports.extractJSONFromMarkdown = extractJSONFromMarkdown;
50
+ exports.parseStreamingChunk = parseStreamingChunk;
51
+ function estimateTokens(text) {
52
+ return Math.ceil(text.length / 4);
53
+ }
54
+ async function estimateTokensAccurate(text) {
55
+ try {
56
+ const tiktoken = await Promise.resolve().then(() => __importStar(require('tiktoken')));
57
+ const enc = tiktoken.encoding_for_model('gpt-4');
58
+ const tokens = enc.encode(text);
59
+ enc.free();
60
+ return tokens.length;
61
+ }
62
+ catch {
63
+ return estimateTokens(text);
64
+ }
65
+ }
66
+ function truncateToTokenLimit(text, limit) {
67
+ const tokens = Math.ceil(text.length / 4);
68
+ if (tokens <= limit)
69
+ return text;
70
+ return text.slice(0, limit * 4);
71
+ }
72
+ function splitByTokenLimit(text, limit) {
73
+ const chunks = [];
74
+ let current = '';
75
+ const words = text.split(' ');
76
+ for (const word of words) {
77
+ if ((current + ' ' + word).length / 4 >= limit) {
78
+ if (current)
79
+ chunks.push(current);
80
+ current = word;
81
+ }
82
+ else {
83
+ current = current ? current + ' ' + word : word;
84
+ }
85
+ }
86
+ if (current)
87
+ chunks.push(current);
88
+ return chunks;
89
+ }
90
+ const MODEL_LIMITS = {
91
+ 'gpt-4': 128000,
92
+ 'gpt-4o': 128000,
93
+ 'gpt-4o-mini': 128000,
94
+ 'gpt-4-turbo': 128000,
95
+ 'gpt-3.5-turbo': 16385,
96
+ };
97
+ const MODEL_PRICING = {
98
+ 'gpt-4o': { input: 0.0025, output: 0.01 },
99
+ 'gpt-4o-mini': { input: 0.00015, output: 0.0006 },
100
+ };
101
+ function getModelTokenLimit(model) {
102
+ return MODEL_LIMITS[model] || 128000;
103
+ }
104
+ function getModelPricing(model) {
105
+ return MODEL_PRICING[model] || { input: 0.01, output: 0.03 };
106
+ }
107
+ function estimateConversationCost(messages, model) {
108
+ const pricing = getModelPricing(model);
109
+ let total = 0;
110
+ for (const msg of messages) {
111
+ const tokens = estimateTokens(msg.content);
112
+ total += pricing.input * tokens / 1000;
113
+ }
114
+ return total;
115
+ }
116
+ function getSupportedModels() {
117
+ return Object.keys(MODEL_LIMITS);
118
+ }
119
+ function isTokenLimitExceeded(prompt, limit) {
120
+ return estimateTokens(prompt) > limit;
121
+ }
122
+ function truncatePromptByPercentage(prompt, percent) {
123
+ return prompt.slice(0, Math.floor(prompt.length * (percent / 100)));
124
+ }
125
+ function optimizeMessage(text, level = 'medium') {
126
+ const originalTokens = estimateTokens(text);
127
+ let optimized = text;
128
+ const rules = {
129
+ light: [/\s+/g],
130
+ medium: [/\s+/g, /\bplease\b/gi, /\bthank you\b/gi],
131
+ aggressive: [/\s+/g, /\bplease\b/gi, /\bthank you\b/gi, /\bcould you\b/gi, /\bwould you\b/gi],
132
+ };
133
+ for (const pattern of rules[level]) {
134
+ optimized = optimized.replace(pattern, ' ');
135
+ }
136
+ optimized = optimized.trim().replace(/\s+/g, ' ');
137
+ const newTokens = estimateTokens(optimized);
138
+ return {
139
+ text: optimized,
140
+ savings: {
141
+ percent: Math.round((1 - newTokens / originalTokens) * 100),
142
+ tokens: originalTokens - newTokens,
143
+ },
144
+ };
145
+ }
146
+ function convertToTOON(data) {
147
+ if (!data.length)
148
+ return '';
149
+ const keys = Object.keys(data[0]);
150
+ const header = `[${keys.length}]{${keys.join(',')}}:`;
151
+ const rows = data.map(row => keys.map(k => {
152
+ const val = row[k];
153
+ if (typeof val === 'string')
154
+ return val;
155
+ return JSON.stringify(val);
156
+ }).join(',')).join('\n ');
157
+ return `${header}\n ${rows}`;
158
+ }
159
+ function extractJSONFromMarkdown(markdown) {
160
+ const jsonMatch = markdown.match(/```json\n([\s\S]*?)\n```/);
161
+ if (jsonMatch) {
162
+ try {
163
+ return JSON.parse(jsonMatch[1]);
164
+ }
165
+ catch { }
166
+ }
167
+ const braceMatch = markdown.match(/\{[\s\S]*\}/);
168
+ if (braceMatch) {
169
+ try {
170
+ return JSON.parse(braceMatch[0]);
171
+ }
172
+ catch { }
173
+ }
174
+ return null;
175
+ }
176
+ function parseStreamingChunk(chunk) {
177
+ try {
178
+ return JSON.parse(chunk);
179
+ }
180
+ catch { }
181
+ const dataMatch = chunk.match(/data:\s*(\{.*\})/);
182
+ if (dataMatch) {
183
+ try {
184
+ return JSON.parse(dataMatch[1]);
185
+ }
186
+ catch { }
187
+ }
188
+ return null;
189
+ }
190
+ exports.ai_module = {
191
+ estimateTokens,
192
+ estimateTokensAccurate,
193
+ truncateToTokenLimit,
194
+ splitByTokenLimit,
195
+ getModelTokenLimit,
196
+ getModelPricing,
197
+ estimateConversationCost,
198
+ getSupportedModels,
199
+ isTokenLimitExceeded,
200
+ truncatePromptByPercentage,
201
+ optimizeMessage,
202
+ convertToTOON,
203
+ extractJSONFromMarkdown,
204
+ parseStreamingChunk,
205
+ };
206
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "zerohelper-ai",
3
+ "version": "11.0.0",
4
+ "description": "AI utilities for ZeroHelper",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "scripts": { "build": "tsc", "clean": "rm -rf dist" },
8
+ "keywords": ["zerohelper", "ai", "llm", "token"],
9
+ "author": "Onure9e",
10
+ "license": "ISC",
11
+ "dependencies": { "tiktoken": "^1.0.11", "compromise": "^14.10.0", "natural": "^6.12.0" },
12
+ "devDependencies": { "@types/node": "^22.10.2", "typescript": "^5.7.2" },
13
+ "files": ["dist", "README.md"],
14
+ "publishConfig": { "access": "public" }
15
+ }