@mikugg/guidance 0.12.0 → 0.14.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/dist/lib/__test__/_trie.test.js +7 -7
- package/dist/lib/__test__/template.test.js +58 -44
- package/dist/lib/_mistral-tokenizer.d.ts +19 -0
- package/dist/lib/_mistral-tokenizer.d.ts.map +1 -0
- package/dist/lib/_mistral-tokenizer.js +452 -0
- package/dist/lib/template.d.ts.map +1 -1
- package/dist/lib/template.js +28 -3
- package/dist/lib/token-generator.d.ts +2 -2
- package/dist/lib/token-generator.d.ts.map +1 -1
- package/dist/lib/token-generator.js +10 -24
- package/dist/lib/tokenizer.d.ts +5 -0
- package/dist/lib/tokenizer.d.ts.map +1 -1
- package/dist/lib/tokenizer.js +26 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/lib/template.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAG3D,oBAAY,gBAAgB;IAC1B,GAAG,QAAQ;IACX,GAAG,QAAQ;CACZ;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,SAAS,CAAyB;gBAE9B,SAAS,EAAE,iBAAiB,EAAE,SAAS,EAAE,sBAAsB;IAKpE,YAAY,CAAC,SAAS,EAAE,iBAAiB;IAIzC,YAAY,CAAC,SAAS,EAAE,sBAAsB;IAIxC,eAAe,CAC1B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GACxC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAYjB,qBAAqB,CACjC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GACxC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/lib/template.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAG3D,oBAAY,gBAAgB;IAC1B,GAAG,QAAQ;IACX,GAAG,QAAQ;CACZ;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,SAAS,CAAyB;gBAE9B,SAAS,EAAE,iBAAiB,EAAE,SAAS,EAAE,sBAAsB;IAKpE,YAAY,CAAC,SAAS,EAAE,iBAAiB;IAIzC,YAAY,CAAC,SAAS,EAAE,sBAAsB;IAIxC,eAAe,CAC1B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GACxC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAYjB,qBAAqB,CACjC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GACxC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;IAoI5C,OAAO,CAAC,cAAc;CAQvB"}
|
package/dist/lib/template.js
CHANGED
|
@@ -142,11 +142,36 @@ class TemplateProcessor {
|
|
|
142
142
|
}
|
|
143
143
|
else {
|
|
144
144
|
// If there is more than one child, we generate the next token
|
|
145
|
-
const
|
|
145
|
+
const logit_bias = nextChildren.reduce((acc, child) => {
|
|
146
146
|
acc[child.toString()] = 100;
|
|
147
147
|
return acc;
|
|
148
|
-
}, {})
|
|
149
|
-
|
|
148
|
+
}, {});
|
|
149
|
+
const top_logprobs = yield __await(this.generator.generateTokenLogProgs(prompt, logit_bias));
|
|
150
|
+
// get max top_logpobs that is in logit_bias
|
|
151
|
+
let max = -Infinity;
|
|
152
|
+
let max_key = "";
|
|
153
|
+
for (const key in top_logprobs) {
|
|
154
|
+
const completedPrefix = this.tokenizer.encodeString(currentPrefixPrompt + key);
|
|
155
|
+
const completionTokens = completedPrefix.slice(currentPrefix.length);
|
|
156
|
+
if (top_logprobs[key] > max &&
|
|
157
|
+
completionTokens[0] &&
|
|
158
|
+
completionTokens[0] in logit_bias) {
|
|
159
|
+
max = top_logprobs[key];
|
|
160
|
+
max_key = key;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
// if no key in logit_bias, get max top_logprobs
|
|
164
|
+
if (max_key === "") {
|
|
165
|
+
// no key in logit_bias
|
|
166
|
+
max = -Infinity;
|
|
167
|
+
for (const key in top_logprobs) {
|
|
168
|
+
if (top_logprobs[key] > max) {
|
|
169
|
+
max = top_logprobs[key];
|
|
170
|
+
max_key = key;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
currentPrefixPrompt = currentPrefixPrompt + max_key;
|
|
150
175
|
}
|
|
151
176
|
} while (!completion);
|
|
152
177
|
result.set(variableName, completion);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ClientOptions } from "openai";
|
|
2
2
|
import { CompletionCreateParams } from "openai/resources/completions.mjs";
|
|
3
3
|
export declare abstract class AbstractTokenGenerator {
|
|
4
|
-
abstract
|
|
4
|
+
abstract generateTokenLogProgs(prompt: string, logit_bias: Record<string, number>): Promise<Record<string, number>>;
|
|
5
5
|
abstract generateString(prompt: string, options: Record<string, number | string | string[]>): AsyncGenerator<string>;
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
@@ -17,7 +17,7 @@ export declare class OpenAITokenGenerator extends AbstractTokenGenerator {
|
|
|
17
17
|
model: string;
|
|
18
18
|
baseURL?: string;
|
|
19
19
|
}, options?: ClientOptions, defaultCompletionParams?: CompletionCreateParams);
|
|
20
|
-
|
|
20
|
+
generateTokenLogProgs(prompt: string, logit_bias: Record<string, number>): Promise<Record<string, number>>;
|
|
21
21
|
generateString(prompt: string, options: Record<string, string | number | string[]>): AsyncGenerator<string>;
|
|
22
22
|
}
|
|
23
23
|
//# sourceMappingURL=token-generator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-generator.d.ts","sourceRoot":"","sources":["../../src/lib/token-generator.ts"],"names":[],"mappings":"AAAA,OAAe,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAE1E,8BAAsB,sBAAsB;IAC1C,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"token-generator.d.ts","sourceRoot":"","sources":["../../src/lib/token-generator.ts"],"names":[],"mappings":"AAAA,OAAe,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAE1E,8BAAsB,sBAAsB;IAC1C,QAAQ,CAAC,qBAAqB,CAC5B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,QAAQ,CAAC,cAAc,CACrB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,GAClD,cAAc,CAAC,MAAM,CAAC;CAC1B;AACD;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,sBAAsB;IAC9D,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,uBAAuB,CAAC,CAAyB;gBAGvD,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,EACD,OAAO,CAAC,EAAE,aAAa,EACvB,uBAAuB,CAAC,EAAE,sBAAsB;IAYnC,qBAAqB,CAClC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAgBlB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,GAClD,cAAc,CAAC,MAAM,CAAC;CAc1B"}
|
|
@@ -47,36 +47,22 @@ class OpenAITokenGenerator extends AbstractTokenGenerator {
|
|
|
47
47
|
this.openai = new openai_1.default(Object.assign({ apiKey: params.apiKey, baseURL: params.baseURL }, options));
|
|
48
48
|
this.defaultCompletionParams = defaultCompletionParams;
|
|
49
49
|
}
|
|
50
|
-
|
|
50
|
+
generateTokenLogProgs(prompt, logit_bias) {
|
|
51
51
|
var _a;
|
|
52
52
|
return __awaiter(this, void 0, void 0, function* () {
|
|
53
|
-
const result = yield this.openai.completions.create(
|
|
54
|
-
|
|
53
|
+
const result = yield this.openai.completions.create({
|
|
54
|
+
stream: false,
|
|
55
|
+
model: this.model,
|
|
56
|
+
prompt,
|
|
57
|
+
logit_bias,
|
|
58
|
+
logprobs: 10,
|
|
59
|
+
max_tokens: 1,
|
|
60
|
+
});
|
|
55
61
|
const logprobsResult = ((_a = result.choices[0].logprobs) === null || _a === void 0 ? void 0 : _a.top_logprobs) || [];
|
|
56
62
|
const top_logprobs = logprobsResult
|
|
57
63
|
? logprobsResult[0]
|
|
58
64
|
: { "2": 0 };
|
|
59
|
-
|
|
60
|
-
let max = -Infinity;
|
|
61
|
-
let max_key = "";
|
|
62
|
-
for (const key in top_logprobs) {
|
|
63
|
-
if (top_logprobs[key] > max && key in logit_bias) {
|
|
64
|
-
max = top_logprobs[key];
|
|
65
|
-
max_key = key;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
// if no key in logit_bias, get max top_logprobs
|
|
69
|
-
if (max_key === "") {
|
|
70
|
-
// no key in logit_bias
|
|
71
|
-
max = -Infinity;
|
|
72
|
-
for (const key in top_logprobs) {
|
|
73
|
-
if (top_logprobs[key] > max) {
|
|
74
|
-
max = top_logprobs[key];
|
|
75
|
-
max_key = key;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
return max_key;
|
|
65
|
+
return top_logprobs;
|
|
80
66
|
});
|
|
81
67
|
}
|
|
82
68
|
generateString(prompt, options) {
|
package/dist/lib/tokenizer.d.ts
CHANGED
|
@@ -13,4 +13,9 @@ export declare class GTPTokenizer extends AbstractTokenizer {
|
|
|
13
13
|
decodeString(arr: number[]): string;
|
|
14
14
|
getEOS(): string;
|
|
15
15
|
}
|
|
16
|
+
export declare class MistralTokenizer extends AbstractTokenizer {
|
|
17
|
+
encodeString(str: string, add_bos_token?: boolean, add_preceding_space?: boolean, log_performance?: boolean): number[];
|
|
18
|
+
decodeString(arr: number[], add_bos_token?: boolean, add_preceding_space?: boolean): string;
|
|
19
|
+
getEOS(): string;
|
|
20
|
+
}
|
|
16
21
|
//# sourceMappingURL=tokenizer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenizer.d.ts","sourceRoot":"","sources":["../../src/lib/tokenizer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tokenizer.d.ts","sourceRoot":"","sources":["../../src/lib/tokenizer.ts"],"names":[],"mappings":"AAIA,8BAAsB,iBAAiB;IACrC,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE;IAC5C,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM;IAC5C,QAAQ,CAAC,MAAM,IAAI,MAAM;CAC1B;AAED,qBAAa,cAAe,SAAQ,iBAAiB;IAC1C,YAAY,CACnB,GAAG,EAAE,MAAM,EACX,aAAa,CAAC,EAAE,OAAO,EACvB,mBAAmB,CAAC,EAAE,OAAO,EAC7B,eAAe,CAAC,EAAE,OAAO,GACxB,MAAM,EAAE;IAqBF,YAAY,CACnB,GAAG,EAAE,MAAM,EAAE,EACb,aAAa,CAAC,EAAE,OAAO,EACvB,mBAAmB,CAAC,EAAE,OAAO,GAC5B,MAAM;IAWA,MAAM,IAAI,MAAM;CAG1B;AAED,qBAAa,YAAa,SAAQ,iBAAiB;IACxC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE;IAMnC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM;IAInC,MAAM,IAAI,MAAM;CAG1B;AAED,qBAAa,gBAAiB,SAAQ,iBAAiB;IAC5C,YAAY,CACnB,GAAG,EAAE,MAAM,EACX,aAAa,CAAC,EAAE,OAAO,EACvB,mBAAmB,CAAC,EAAE,OAAO,EAC7B,eAAe,CAAC,EAAE,OAAO,GACxB,MAAM,EAAE;IAqBF,YAAY,CACnB,GAAG,EAAE,MAAM,EAAE,EACb,aAAa,CAAC,EAAE,OAAO,EACvB,mBAAmB,CAAC,EAAE,OAAO,GAC5B,MAAM;IAWA,MAAM,IAAI,MAAM;CAG1B"}
|
package/dist/lib/tokenizer.js
CHANGED
|
@@ -3,9 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.GTPTokenizer = exports.LLaMATokenizer = exports.AbstractTokenizer = void 0;
|
|
6
|
+
exports.MistralTokenizer = exports.GTPTokenizer = exports.LLaMATokenizer = exports.AbstractTokenizer = void 0;
|
|
7
7
|
const _llama_tokenizer_1 = __importDefault(require("./_llama-tokenizer"));
|
|
8
8
|
const gpt_tokenizer_1 = require("gpt-tokenizer");
|
|
9
|
+
const _mistral_tokenizer_1 = __importDefault(require("./_mistral-tokenizer"));
|
|
9
10
|
class AbstractTokenizer {
|
|
10
11
|
}
|
|
11
12
|
exports.AbstractTokenizer = AbstractTokenizer;
|
|
@@ -47,3 +48,27 @@ class GTPTokenizer extends AbstractTokenizer {
|
|
|
47
48
|
}
|
|
48
49
|
}
|
|
49
50
|
exports.GTPTokenizer = GTPTokenizer;
|
|
51
|
+
class MistralTokenizer extends AbstractTokenizer {
|
|
52
|
+
encodeString(str, add_bos_token, add_preceding_space, log_performance) {
|
|
53
|
+
if (str.endsWith(this.getEOS())) {
|
|
54
|
+
str = str.substring(0, str.length - this.getEOS().length);
|
|
55
|
+
return [
|
|
56
|
+
..._mistral_tokenizer_1.default.encode(str, add_bos_token, add_preceding_space, log_performance),
|
|
57
|
+
2, // EOS
|
|
58
|
+
];
|
|
59
|
+
}
|
|
60
|
+
return _mistral_tokenizer_1.default.encode(str, add_bos_token, add_preceding_space, log_performance);
|
|
61
|
+
}
|
|
62
|
+
decodeString(arr, add_bos_token, add_preceding_space) {
|
|
63
|
+
if (arr[arr.length - 1] === 2) {
|
|
64
|
+
arr = arr.slice(0, arr.length - 1);
|
|
65
|
+
return (_mistral_tokenizer_1.default.decode(arr, add_bos_token, add_preceding_space) +
|
|
66
|
+
this.getEOS());
|
|
67
|
+
}
|
|
68
|
+
return _mistral_tokenizer_1.default.decode(arr, add_bos_token, add_preceding_space);
|
|
69
|
+
}
|
|
70
|
+
getEOS() {
|
|
71
|
+
return "</s>";
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.MistralTokenizer = MistralTokenizer;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mikugg/guidance",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -39,5 +39,5 @@
|
|
|
39
39
|
"ts-node": "^10.9.1",
|
|
40
40
|
"typescript": "^5.2.2"
|
|
41
41
|
},
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "a891cb7ddee2878d49cbd55e9c5fa40fece6bfc8"
|
|
43
43
|
}
|