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 +71 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +206 -0
- package/dist/index.js.map +1 -0
- package/package.json +15 -0
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
|
package/dist/index.d.ts
ADDED
|
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wCAEC;AAED,wDAUC;AAED,oDAIC;AAED,8CAeC;AAeD,gDAEC;AAED,0CAEC;AAED,4DAQC;AAED,gDAEC;AAED,oDAEC;AAED,gEAEC;AAED,0CA2BC;AAED,sCAUC;AAED,0DAUC;AAED,kDAOC;AA9ID,SAAgB,cAAc,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC;AAEM,KAAK,UAAU,sBAAsB,CAAC,IAAY;IACvD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,wDAAa,UAAU,GAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChC,GAAG,CAAC,IAAI,EAAE,CAAC;QACX,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,SAAgB,oBAAoB,CAAC,IAAY,EAAE,KAAa;IAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC1C,IAAI,MAAM,IAAI,KAAK;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,SAAgB,iBAAiB,CAAC,IAAY,EAAE,KAAa;IAC3D,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC;YAC/C,IAAI,OAAO;gBAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClC,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAClD,CAAC;IACH,CAAC;IACD,IAAI,OAAO;QAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,YAAY,GAA2B;IAC3C,OAAO,EAAE,MAAM;IACf,QAAQ,EAAE,MAAM;IAChB,aAAa,EAAE,MAAM;IACrB,aAAa,EAAE,MAAM;IACrB,eAAe,EAAE,KAAK;CACvB,CAAC;AAEF,MAAM,aAAa,GAAsD;IACvE,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;IACzC,aAAa,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE;CAClD,CAAC;AAEF,SAAgB,kBAAkB,CAAC,KAAa;IAC9C,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC;AACvC,CAAC;AAED,SAAgB,eAAe,CAAC,KAAa;IAC3C,OAAO,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC/D,CAAC;AAED,SAAgB,wBAAwB,CAAC,QAAkD,EAAE,KAAa;IACxG,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3C,KAAK,IAAI,OAAO,CAAC,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;IACzC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,kBAAkB;IAChC,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACnC,CAAC;AAED,SAAgB,oBAAoB,CAAC,MAAc,EAAE,KAAa;IAChE,OAAO,cAAc,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;AACxC,CAAC;AAED,SAAgB,0BAA0B,CAAC,MAAc,EAAE,OAAe;IACxE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,SAAgB,eAAe,CAC7B,IAAY,EACZ,QAA2C,QAAQ;IAEnD,MAAM,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,SAAS,GAAG,IAAI,CAAC;IAErB,MAAM,KAAK,GAA6B;QACtC,KAAK,EAAE,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,iBAAiB,CAAC;QACnD,UAAU,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,CAAC;KAC9F,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAE5C,OAAO;QACL,IAAI,EAAE,SAAS;QACf,OAAO,EAAE;YACP,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,cAAc,CAAC,GAAG,GAAG,CAAC;YAC3D,MAAM,EAAE,cAAc,GAAG,SAAS;SACnC;KACF,CAAC;AACJ,CAAC;AAED,SAAgB,aAAa,CAAC,IAAW;IACvC,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QACxC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC;QACxC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3B,OAAO,GAAG,MAAM,OAAO,IAAI,EAAE,CAAC;AAChC,CAAC;AAED,SAAgB,uBAAuB,CAAC,QAAgB;IACtD,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC7D,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC;YAAC,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACnD,CAAC;IACD,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACjD,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,CAAC;YAAC,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACpD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,mBAAmB,CAAC,KAAa;IAC/C,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAClD,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC;YAAC,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACnD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAEY,QAAA,SAAS,GAAG;IACvB,cAAc;IACd,sBAAsB;IACtB,oBAAoB;IACpB,iBAAiB;IACjB,kBAAkB;IAClB,eAAe;IACf,wBAAwB;IACxB,kBAAkB;IAClB,oBAAoB;IACpB,0BAA0B;IAC1B,eAAe;IACf,aAAa;IACb,uBAAuB;IACvB,mBAAmB;CACpB,CAAC"}
|
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
|
+
}
|