gpt-tokenizer 2.0.0-beta.2 → 2.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.
Files changed (133) hide show
  1. package/README.md +54 -8
  2. package/cjs/GptEncoding.d.ts +33 -6
  3. package/cjs/GptEncoding.js +79 -34
  4. package/cjs/GptEncoding.js.map +1 -1
  5. package/cjs/GptEncoding.test.js +54 -0
  6. package/cjs/GptEncoding.test.js.map +1 -1
  7. package/cjs/encoding/cl100k_base.d.ts +3 -3
  8. package/cjs/encoding/cl100k_base.js +6 -4
  9. package/cjs/encoding/cl100k_base.js.map +1 -1
  10. package/cjs/encoding/p50k_base.d.ts +2 -2
  11. package/cjs/encoding/p50k_base.js +4 -4
  12. package/cjs/encoding/p50k_base.js.map +1 -1
  13. package/cjs/encoding/p50k_edit.d.ts +2 -2
  14. package/cjs/encoding/p50k_edit.js +4 -4
  15. package/cjs/encoding/p50k_edit.js.map +1 -1
  16. package/cjs/encoding/r50k_base.d.ts +2 -2
  17. package/cjs/encoding/r50k_base.js +4 -4
  18. package/cjs/encoding/r50k_base.js.map +1 -1
  19. package/cjs/mapping.d.ts +37 -0
  20. package/cjs/mapping.js +34 -2
  21. package/cjs/mapping.js.map +1 -1
  22. package/cjs/model/gpt-3.5-turbo-0301.d.ts +6 -0
  23. package/cjs/model/gpt-3.5-turbo-0301.js +38 -0
  24. package/cjs/model/gpt-3.5-turbo-0301.js.map +1 -0
  25. package/cjs/model/gpt-3.5-turbo.d.ts +6 -1
  26. package/cjs/model/gpt-3.5-turbo.js +21 -1
  27. package/cjs/model/gpt-3.5-turbo.js.map +1 -1
  28. package/cjs/model/gpt-4-0314.d.ts +6 -0
  29. package/cjs/model/gpt-4-0314.js +38 -0
  30. package/cjs/model/gpt-4-0314.js.map +1 -0
  31. package/cjs/model/gpt-4-32k-0314.d.ts +6 -0
  32. package/cjs/model/gpt-4-32k-0314.js +38 -0
  33. package/cjs/model/gpt-4-32k-0314.js.map +1 -0
  34. package/cjs/model/gpt-4-32k.d.ts +6 -0
  35. package/cjs/model/gpt-4-32k.js +38 -0
  36. package/cjs/model/gpt-4-32k.js.map +1 -0
  37. package/cjs/model/gpt-4.d.ts +6 -1
  38. package/cjs/model/gpt-4.js +21 -1
  39. package/cjs/model/gpt-4.js.map +1 -1
  40. package/cjs/modelParams.d.ts +5 -4
  41. package/cjs/modelParams.js +7 -4
  42. package/cjs/modelParams.js.map +1 -1
  43. package/cjs/specialTokens.d.ts +3 -0
  44. package/cjs/specialTokens.js +4 -1
  45. package/cjs/specialTokens.js.map +1 -1
  46. package/cjs/util.d.ts +2 -0
  47. package/cjs/util.js +19 -0
  48. package/cjs/util.js.map +1 -0
  49. package/dist/cl100k_base.js +1 -1
  50. package/dist/cl100k_base.js.map +1 -1
  51. package/dist/p50k_base.js +1 -1
  52. package/dist/p50k_base.js.map +1 -1
  53. package/dist/p50k_edit.js +1 -1
  54. package/dist/p50k_edit.js.map +1 -1
  55. package/dist/r50k_base.js +1 -1
  56. package/dist/r50k_base.js.map +1 -1
  57. package/esm/GptEncoding.d.ts +33 -6
  58. package/esm/GptEncoding.js +81 -36
  59. package/esm/GptEncoding.js.map +1 -1
  60. package/esm/GptEncoding.test.js +55 -1
  61. package/esm/GptEncoding.test.js.map +1 -1
  62. package/esm/codegen/generateByModel.js +19 -0
  63. package/esm/codegen/generateByModel.js.map +1 -0
  64. package/esm/{generateJsModels.js → codegen/generateJsEncodings.js} +4 -4
  65. package/esm/codegen/generateJsEncodings.js.map +1 -0
  66. package/esm/encoding/cl100k_base.d.ts +3 -3
  67. package/esm/encoding/cl100k_base.js +3 -3
  68. package/esm/encoding/cl100k_base.js.map +1 -1
  69. package/esm/encoding/p50k_base.d.ts +2 -2
  70. package/esm/encoding/p50k_base.js +1 -1
  71. package/esm/encoding/p50k_base.js.map +1 -1
  72. package/esm/encoding/p50k_edit.d.ts +2 -2
  73. package/esm/encoding/p50k_edit.js +1 -1
  74. package/esm/encoding/p50k_edit.js.map +1 -1
  75. package/esm/encoding/r50k_base.d.ts +2 -2
  76. package/esm/encoding/r50k_base.js +1 -1
  77. package/esm/encoding/r50k_base.js.map +1 -1
  78. package/esm/mapping.d.ts +37 -0
  79. package/esm/mapping.js +32 -0
  80. package/esm/mapping.js.map +1 -1
  81. package/esm/model/gpt-3.5-turbo-0301.d.ts +6 -0
  82. package/esm/model/gpt-3.5-turbo-0301.js +11 -0
  83. package/esm/model/gpt-3.5-turbo-0301.js.map +1 -0
  84. package/esm/model/gpt-3.5-turbo.d.ts +6 -1
  85. package/esm/model/gpt-3.5-turbo.js +10 -1
  86. package/esm/model/gpt-3.5-turbo.js.map +1 -1
  87. package/esm/model/gpt-4-0314.d.ts +6 -0
  88. package/esm/model/gpt-4-0314.js +11 -0
  89. package/esm/model/gpt-4-0314.js.map +1 -0
  90. package/esm/model/gpt-4-32k-0314.d.ts +6 -0
  91. package/esm/model/gpt-4-32k-0314.js +11 -0
  92. package/esm/model/gpt-4-32k-0314.js.map +1 -0
  93. package/esm/model/gpt-4-32k.d.ts +6 -0
  94. package/esm/model/gpt-4-32k.js +11 -0
  95. package/esm/model/gpt-4-32k.js.map +1 -0
  96. package/esm/model/gpt-4.d.ts +6 -1
  97. package/esm/model/gpt-4.js +10 -1
  98. package/esm/model/gpt-4.js.map +1 -1
  99. package/esm/modelParams.d.ts +5 -4
  100. package/esm/modelParams.js +6 -3
  101. package/esm/modelParams.js.map +1 -1
  102. package/esm/specialTokens.d.ts +3 -0
  103. package/esm/specialTokens.js +3 -0
  104. package/esm/specialTokens.js.map +1 -1
  105. package/esm/util.d.ts +2 -0
  106. package/esm/util.js +14 -0
  107. package/esm/util.js.map +1 -0
  108. package/package.json +8 -6
  109. package/src/GptEncoding.test.ts +78 -1
  110. package/src/GptEncoding.ts +125 -44
  111. package/src/__snapshots__/GptEncoding.test.ts.snap +811 -0
  112. package/src/codegen/generateByModel.ts +35 -0
  113. package/src/{generateJsModels.ts → codegen/generateJsEncodings.ts} +3 -3
  114. package/src/encoding/cl100k_base.ts +5 -1
  115. package/src/encoding/p50k_base.ts +1 -1
  116. package/src/encoding/p50k_edit.ts +1 -1
  117. package/src/encoding/r50k_base.ts +1 -1
  118. package/src/mapping.ts +42 -0
  119. package/src/model/gpt-3.5-turbo-0301.ts +32 -0
  120. package/src/model/gpt-3.5-turbo.ts +32 -1
  121. package/src/model/gpt-4-0314.ts +32 -0
  122. package/src/model/gpt-4-32k-0314.ts +32 -0
  123. package/src/model/gpt-4-32k.ts +32 -0
  124. package/src/model/gpt-4.ts +32 -1
  125. package/src/modelParams.ts +17 -10
  126. package/src/specialTokens.ts +3 -0
  127. package/src/util.ts +15 -0
  128. package/esm/generateByModel.js +0 -13
  129. package/esm/generateByModel.js.map +0 -1
  130. package/esm/generateJsModels.js.map +0 -1
  131. package/src/generateByModel.ts +0 -20
  132. /package/esm/{generateByModel.d.ts → codegen/generateByModel.d.ts} +0 -0
  133. /package/esm/{generateJsModels.d.ts → codegen/generateJsEncodings.d.ts} +0 -0
package/esm/mapping.d.ts CHANGED
@@ -5,7 +5,11 @@ export declare const r50k_base = "r50k_base";
5
5
  export declare const encodingNames: readonly ["cl100k_base", "p50k_base", "r50k_base", "p50k_edit"];
6
6
  export declare const modelToEncodingMap: {
7
7
  readonly 'gpt-4': "cl100k_base";
8
+ readonly 'gpt-4-32k': "cl100k_base";
9
+ readonly 'gpt-4-0314': "cl100k_base";
10
+ readonly 'gpt-4-32k-0314': "cl100k_base";
8
11
  readonly 'gpt-3.5-turbo': "cl100k_base";
12
+ readonly 'gpt-3.5-turbo-0301': "cl100k_base";
9
13
  readonly 'text-davinci-003': "p50k_base";
10
14
  readonly 'text-davinci-002': "p50k_base";
11
15
  readonly 'text-davinci-001': "r50k_base";
@@ -36,5 +40,38 @@ export declare const modelToEncodingMap: {
36
40
  readonly 'code-search-babbage-code-001': "r50k_base";
37
41
  readonly 'code-search-ada-code-001': "r50k_base";
38
42
  };
43
+ export interface ChatParameters {
44
+ messageSeparator: string;
45
+ roleSeparator: string;
46
+ }
47
+ declare const internalChatModelParams: {
48
+ 'gpt-3.5-turbo': {
49
+ messageSeparator: string;
50
+ roleSeparator: string;
51
+ };
52
+ 'gpt-3.5-turbo-0301': {
53
+ messageSeparator: string;
54
+ roleSeparator: string;
55
+ };
56
+ 'gpt-4': {
57
+ messageSeparator: string;
58
+ roleSeparator: string;
59
+ };
60
+ 'gpt-4-0314': {
61
+ messageSeparator: string;
62
+ roleSeparator: string;
63
+ };
64
+ 'gpt-4-32k': {
65
+ messageSeparator: string;
66
+ roleSeparator: string;
67
+ };
68
+ 'gpt-4-32k-0314': {
69
+ messageSeparator: string;
70
+ roleSeparator: string;
71
+ };
72
+ };
73
+ export declare const chatModelParams: Partial<Record<ModelName, ChatParameters>>;
39
74
  export type ModelName = keyof typeof modelToEncodingMap;
75
+ export type ChatModelName = keyof typeof internalChatModelParams;
40
76
  export type EncodingName = (typeof modelToEncodingMap)[ModelName];
77
+ export {};
package/esm/mapping.js CHANGED
@@ -1,4 +1,5 @@
1
1
  /* eslint-disable camelcase */
2
+ import { ImSep } from './specialTokens.js';
2
3
  export const cl100k_base = 'cl100k_base';
3
4
  export const p50k_base = 'p50k_base';
4
5
  export const p50k_edit = 'p50k_edit';
@@ -12,7 +13,11 @@ export const encodingNames = [
12
13
  export const modelToEncodingMap = {
13
14
  // chat
14
15
  'gpt-4': cl100k_base,
16
+ 'gpt-4-32k': cl100k_base,
17
+ 'gpt-4-0314': cl100k_base,
18
+ 'gpt-4-32k-0314': cl100k_base,
15
19
  'gpt-3.5-turbo': cl100k_base,
20
+ 'gpt-3.5-turbo-0301': cl100k_base,
16
21
  // text
17
22
  'text-davinci-003': p50k_base,
18
23
  'text-davinci-002': p50k_base,
@@ -48,4 +53,31 @@ export const modelToEncodingMap = {
48
53
  'code-search-babbage-code-001': r50k_base,
49
54
  'code-search-ada-code-001': r50k_base,
50
55
  };
56
+ const internalChatModelParams = {
57
+ 'gpt-3.5-turbo': {
58
+ messageSeparator: '\n',
59
+ roleSeparator: '\n',
60
+ },
61
+ 'gpt-3.5-turbo-0301': {
62
+ messageSeparator: '\n',
63
+ roleSeparator: '\n',
64
+ },
65
+ 'gpt-4': {
66
+ messageSeparator: '',
67
+ roleSeparator: ImSep,
68
+ },
69
+ 'gpt-4-0314': {
70
+ messageSeparator: '',
71
+ roleSeparator: ImSep,
72
+ },
73
+ 'gpt-4-32k': {
74
+ messageSeparator: '',
75
+ roleSeparator: ImSep,
76
+ },
77
+ 'gpt-4-32k-0314': {
78
+ messageSeparator: '',
79
+ roleSeparator: ImSep,
80
+ },
81
+ };
82
+ export const chatModelParams = internalChatModelParams;
51
83
  //# sourceMappingURL=mapping.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mapping.js","sourceRoot":"","sources":["../src/mapping.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAA;AACxC,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAA;AACpC,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAA;AACpC,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAA;AAEpC,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,WAAW;IACX,SAAS;IACT,SAAS;IACT,SAAS;CACD,CAAA;AAEV,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,OAAO;IACP,OAAO,EAAE,WAAW;IACpB,eAAe,EAAE,WAAW;IAC5B,OAAO;IACP,kBAAkB,EAAE,SAAS;IAC7B,kBAAkB,EAAE,SAAS;IAC7B,kBAAkB,EAAE,SAAS;IAC7B,gBAAgB,EAAE,SAAS;IAC3B,kBAAkB,EAAE,SAAS;IAC7B,cAAc,EAAE,SAAS;IACzB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,SAAS;IAClB,GAAG,EAAE,SAAS;IACd,OAAO;IACP,kBAAkB,EAAE,SAAS;IAC7B,kBAAkB,EAAE,SAAS;IAC7B,kBAAkB,EAAE,SAAS;IAC7B,kBAAkB,EAAE,SAAS;IAC7B,eAAe,EAAE,SAAS;IAC1B,eAAe,EAAE,SAAS;IAC1B,OAAO;IACP,uBAAuB,EAAE,SAAS;IAClC,uBAAuB,EAAE,SAAS;IAClC,aAAa;IACb,wBAAwB,EAAE,WAAW;IACrC,iBAAiB;IACjB,6BAA6B,EAAE,SAAS;IACxC,2BAA2B,EAAE,SAAS;IACtC,6BAA6B,EAAE,SAAS;IACxC,yBAAyB,EAAE,SAAS;IACpC,6BAA6B,EAAE,SAAS;IACxC,2BAA2B,EAAE,SAAS;IACtC,6BAA6B,EAAE,SAAS;IACxC,yBAAyB,EAAE,SAAS;IACpC,8BAA8B,EAAE,SAAS;IACzC,0BAA0B,EAAE,SAAS;CAC7B,CAAA"}
1
+ {"version":3,"file":"mapping.js","sourceRoot":"","sources":["../src/mapping.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAE9B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAE1C,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAA;AACxC,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAA;AACpC,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAA;AACpC,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAA;AAEpC,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,WAAW;IACX,SAAS;IACT,SAAS;IACT,SAAS;CACD,CAAA;AAEV,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,OAAO;IACP,OAAO,EAAE,WAAW;IACpB,WAAW,EAAE,WAAW;IACxB,YAAY,EAAE,WAAW;IACzB,gBAAgB,EAAE,WAAW;IAC7B,eAAe,EAAE,WAAW;IAC5B,oBAAoB,EAAE,WAAW;IACjC,OAAO;IACP,kBAAkB,EAAE,SAAS;IAC7B,kBAAkB,EAAE,SAAS;IAC7B,kBAAkB,EAAE,SAAS;IAC7B,gBAAgB,EAAE,SAAS;IAC3B,kBAAkB,EAAE,SAAS;IAC7B,cAAc,EAAE,SAAS;IACzB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,SAAS;IAClB,GAAG,EAAE,SAAS;IACd,OAAO;IACP,kBAAkB,EAAE,SAAS;IAC7B,kBAAkB,EAAE,SAAS;IAC7B,kBAAkB,EAAE,SAAS;IAC7B,kBAAkB,EAAE,SAAS;IAC7B,eAAe,EAAE,SAAS;IAC1B,eAAe,EAAE,SAAS;IAC1B,OAAO;IACP,uBAAuB,EAAE,SAAS;IAClC,uBAAuB,EAAE,SAAS;IAClC,aAAa;IACb,wBAAwB,EAAE,WAAW;IACrC,iBAAiB;IACjB,6BAA6B,EAAE,SAAS;IACxC,2BAA2B,EAAE,SAAS;IACtC,6BAA6B,EAAE,SAAS;IACxC,yBAAyB,EAAE,SAAS;IACpC,6BAA6B,EAAE,SAAS;IACxC,2BAA2B,EAAE,SAAS;IACtC,6BAA6B,EAAE,SAAS;IACxC,yBAAyB,EAAE,SAAS;IACpC,8BAA8B,EAAE,SAAS;IACzC,0BAA0B,EAAE,SAAS;CAC7B,CAAA;AAOV,MAAM,uBAAuB,GAAG;IAC9B,eAAe,EAAE;QACf,gBAAgB,EAAE,IAAI;QACtB,aAAa,EAAE,IAAI;KACpB;IACD,oBAAoB,EAAE;QACpB,gBAAgB,EAAE,IAAI;QACtB,aAAa,EAAE,IAAI;KACpB;IACD,OAAO,EAAE;QACP,gBAAgB,EAAE,EAAE;QACpB,aAAa,EAAE,KAAK;KACrB;IACD,YAAY,EAAE;QACZ,gBAAgB,EAAE,EAAE;QACpB,aAAa,EAAE,KAAK;KACrB;IACD,WAAW,EAAE;QACX,gBAAgB,EAAE,EAAE;QACpB,aAAa,EAAE,KAAK;KACrB;IACD,gBAAgB,EAAE;QAChB,gBAAgB,EAAE,EAAE;QACpB,aAAa,EAAE,KAAK;KACrB;CACF,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAC1B,uBAAuB,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { GptEncoding } from '../GptEncoding.js';
2
+ export * from '../specialTokens.js';
3
+ declare const api: GptEncoding;
4
+ declare const decode: (inputTokensToDecode: Iterable<number>) => string, decodeAsyncGenerator: (inputTokensToDecode: AsyncIterable<number>) => AsyncGenerator<string, void, unknown>, decodeGenerator: (inputTokensToDecode: Iterable<number>) => Generator<string, void, unknown>, encode: (lineToEncode: string, encodeOptions?: import("../GptEncoding.js").EncodeOptions) => number[], encodeGenerator: (lineToEncode: string, { allowedSpecial, disallowedSpecial, }?: import("../GptEncoding.js").EncodeOptions) => Generator<number[], number, undefined>, isWithinTokenLimit: (input: string | Iterable<import("../GptEncoding.js").ChatMessage>, tokenLimit: number) => number | false, encodeChat: (chat: readonly import("../GptEncoding.js").ChatMessage[], model?: "gpt-4" | "gpt-4-32k" | "gpt-4-0314" | "gpt-4-32k-0314" | "gpt-3.5-turbo" | "gpt-3.5-turbo-0301" | "text-davinci-003" | "text-davinci-002" | "text-davinci-001" | "text-curie-001" | "text-babbage-001" | "text-ada-001" | "davinci" | "curie" | "babbage" | "ada" | "code-davinci-002" | "code-davinci-001" | "code-cushman-002" | "code-cushman-001" | "davinci-codex" | "cushman-codex" | "text-davinci-edit-001" | "code-davinci-edit-001" | "text-embedding-ada-002" | "text-similarity-davinci-001" | "text-similarity-curie-001" | "text-similarity-babbage-001" | "text-similarity-ada-001" | "text-search-davinci-doc-001" | "text-search-curie-doc-001" | "text-search-babbage-doc-001" | "text-search-ada-doc-001" | "code-search-babbage-code-001" | "code-search-ada-code-001" | undefined) => number[], encodeChatGenerator: (chat: Iterable<import("../GptEncoding.js").ChatMessage>, model?: "gpt-4" | "gpt-4-32k" | "gpt-4-0314" | "gpt-4-32k-0314" | "gpt-3.5-turbo" | "gpt-3.5-turbo-0301" | "text-davinci-003" | "text-davinci-002" | "text-davinci-001" | "text-curie-001" | "text-babbage-001" | "text-ada-001" | "davinci" | "curie" | "babbage" | "ada" | "code-davinci-002" | "code-davinci-001" | "code-cushman-002" | "code-cushman-001" | "davinci-codex" | "cushman-codex" | "text-davinci-edit-001" | "code-davinci-edit-001" | "text-embedding-ada-002" | "text-similarity-davinci-001" | "text-similarity-curie-001" | "text-similarity-babbage-001" | "text-similarity-ada-001" | "text-search-davinci-doc-001" | "text-search-curie-doc-001" | "text-search-babbage-doc-001" | "text-search-ada-doc-001" | "code-search-babbage-code-001" | "code-search-ada-code-001" | undefined) => Generator<number[], void, undefined>;
5
+ export { decode, decodeAsyncGenerator, decodeGenerator, encode, encodeChat, encodeChatGenerator, encodeGenerator, isWithinTokenLimit, };
6
+ export default api;
@@ -0,0 +1,11 @@
1
+ /* eslint-disable import/extensions */
2
+ import { convertTokenBytePairEncodingFromTuples } from '../convertTokenBytePairEncodingFromTuples.js';
3
+ import encoder from '../encodings/cl100k_base.js';
4
+ import { GptEncoding } from '../GptEncoding.js';
5
+ export * from '../specialTokens.js';
6
+ const api = GptEncoding.getEncodingApiForModel('gpt-3.5-turbo-0301', () => convertTokenBytePairEncodingFromTuples(encoder));
7
+ const { decode, decodeAsyncGenerator, decodeGenerator, encode, encodeGenerator, isWithinTokenLimit, encodeChat, encodeChatGenerator, } = api;
8
+ export { decode, decodeAsyncGenerator, decodeGenerator, encode, encodeChat, encodeChatGenerator, encodeGenerator, isWithinTokenLimit, };
9
+ // eslint-disable-next-line import/no-default-export
10
+ export default api;
11
+ //# sourceMappingURL=gpt-3.5-turbo-0301.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gpt-3.5-turbo-0301.js","sourceRoot":"","sources":["../../src/model/gpt-3.5-turbo-0301.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,EAAE,sCAAsC,EAAE,MAAM,8CAA8C,CAAA;AACrG,OAAO,OAAO,MAAM,6BAA6B,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,cAAc,qBAAqB,CAAA;AAEnC,MAAM,GAAG,GAAG,WAAW,CAAC,sBAAsB,CAAC,oBAAoB,EAAE,GAAG,EAAE,CACxE,sCAAsC,CAAC,OAAO,CAAC,CAChD,CAAA;AACD,MAAM,EACJ,MAAM,EACN,oBAAoB,EACpB,eAAe,EACf,MAAM,EACN,eAAe,EACf,kBAAkB,EAClB,UAAU,EACV,mBAAmB,GACpB,GAAG,GAAG,CAAA;AACP,OAAO,EACL,MAAM,EACN,oBAAoB,EACpB,eAAe,EACf,MAAM,EACN,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,kBAAkB,GACnB,CAAA;AACD,oDAAoD;AACpD,eAAe,GAAG,CAAA"}
@@ -1 +1,6 @@
1
- export * from '../encoding/cl100k_base.js';
1
+ import { GptEncoding } from '../GptEncoding.js';
2
+ export * from '../specialTokens.js';
3
+ declare const api: GptEncoding;
4
+ declare const decode: (inputTokensToDecode: Iterable<number>) => string, decodeAsyncGenerator: (inputTokensToDecode: AsyncIterable<number>) => AsyncGenerator<string, void, unknown>, decodeGenerator: (inputTokensToDecode: Iterable<number>) => Generator<string, void, unknown>, encode: (lineToEncode: string, encodeOptions?: import("../GptEncoding.js").EncodeOptions) => number[], encodeGenerator: (lineToEncode: string, { allowedSpecial, disallowedSpecial, }?: import("../GptEncoding.js").EncodeOptions) => Generator<number[], number, undefined>, isWithinTokenLimit: (input: string | Iterable<import("../GptEncoding.js").ChatMessage>, tokenLimit: number) => number | false, encodeChat: (chat: readonly import("../GptEncoding.js").ChatMessage[], model?: "gpt-4" | "gpt-4-32k" | "gpt-4-0314" | "gpt-4-32k-0314" | "gpt-3.5-turbo" | "gpt-3.5-turbo-0301" | "text-davinci-003" | "text-davinci-002" | "text-davinci-001" | "text-curie-001" | "text-babbage-001" | "text-ada-001" | "davinci" | "curie" | "babbage" | "ada" | "code-davinci-002" | "code-davinci-001" | "code-cushman-002" | "code-cushman-001" | "davinci-codex" | "cushman-codex" | "text-davinci-edit-001" | "code-davinci-edit-001" | "text-embedding-ada-002" | "text-similarity-davinci-001" | "text-similarity-curie-001" | "text-similarity-babbage-001" | "text-similarity-ada-001" | "text-search-davinci-doc-001" | "text-search-curie-doc-001" | "text-search-babbage-doc-001" | "text-search-ada-doc-001" | "code-search-babbage-code-001" | "code-search-ada-code-001" | undefined) => number[], encodeChatGenerator: (chat: Iterable<import("../GptEncoding.js").ChatMessage>, model?: "gpt-4" | "gpt-4-32k" | "gpt-4-0314" | "gpt-4-32k-0314" | "gpt-3.5-turbo" | "gpt-3.5-turbo-0301" | "text-davinci-003" | "text-davinci-002" | "text-davinci-001" | "text-curie-001" | "text-babbage-001" | "text-ada-001" | "davinci" | "curie" | "babbage" | "ada" | "code-davinci-002" | "code-davinci-001" | "code-cushman-002" | "code-cushman-001" | "davinci-codex" | "cushman-codex" | "text-davinci-edit-001" | "code-davinci-edit-001" | "text-embedding-ada-002" | "text-similarity-davinci-001" | "text-similarity-curie-001" | "text-similarity-babbage-001" | "text-similarity-ada-001" | "text-search-davinci-doc-001" | "text-search-curie-doc-001" | "text-search-babbage-doc-001" | "text-search-ada-doc-001" | "code-search-babbage-code-001" | "code-search-ada-code-001" | undefined) => Generator<number[], void, undefined>;
5
+ export { decode, decodeAsyncGenerator, decodeGenerator, encode, encodeChat, encodeChatGenerator, encodeGenerator, isWithinTokenLimit, };
6
+ export default api;
@@ -1,2 +1,11 @@
1
- export * from '../encoding/cl100k_base.js';
1
+ /* eslint-disable import/extensions */
2
+ import { convertTokenBytePairEncodingFromTuples } from '../convertTokenBytePairEncodingFromTuples.js';
3
+ import encoder from '../encodings/cl100k_base.js';
4
+ import { GptEncoding } from '../GptEncoding.js';
5
+ export * from '../specialTokens.js';
6
+ const api = GptEncoding.getEncodingApiForModel('gpt-3.5-turbo', () => convertTokenBytePairEncodingFromTuples(encoder));
7
+ const { decode, decodeAsyncGenerator, decodeGenerator, encode, encodeGenerator, isWithinTokenLimit, encodeChat, encodeChatGenerator, } = api;
8
+ export { decode, decodeAsyncGenerator, decodeGenerator, encode, encodeChat, encodeChatGenerator, encodeGenerator, isWithinTokenLimit, };
9
+ // eslint-disable-next-line import/no-default-export
10
+ export default api;
2
11
  //# sourceMappingURL=gpt-3.5-turbo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gpt-3.5-turbo.js","sourceRoot":"","sources":["../../src/model/gpt-3.5-turbo.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA"}
1
+ {"version":3,"file":"gpt-3.5-turbo.js","sourceRoot":"","sources":["../../src/model/gpt-3.5-turbo.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,EAAE,sCAAsC,EAAE,MAAM,8CAA8C,CAAA;AACrG,OAAO,OAAO,MAAM,6BAA6B,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,cAAc,qBAAqB,CAAA;AAEnC,MAAM,GAAG,GAAG,WAAW,CAAC,sBAAsB,CAAC,eAAe,EAAE,GAAG,EAAE,CACnE,sCAAsC,CAAC,OAAO,CAAC,CAChD,CAAA;AACD,MAAM,EACJ,MAAM,EACN,oBAAoB,EACpB,eAAe,EACf,MAAM,EACN,eAAe,EACf,kBAAkB,EAClB,UAAU,EACV,mBAAmB,GACpB,GAAG,GAAG,CAAA;AACP,OAAO,EACL,MAAM,EACN,oBAAoB,EACpB,eAAe,EACf,MAAM,EACN,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,kBAAkB,GACnB,CAAA;AACD,oDAAoD;AACpD,eAAe,GAAG,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { GptEncoding } from '../GptEncoding.js';
2
+ export * from '../specialTokens.js';
3
+ declare const api: GptEncoding;
4
+ declare const decode: (inputTokensToDecode: Iterable<number>) => string, decodeAsyncGenerator: (inputTokensToDecode: AsyncIterable<number>) => AsyncGenerator<string, void, unknown>, decodeGenerator: (inputTokensToDecode: Iterable<number>) => Generator<string, void, unknown>, encode: (lineToEncode: string, encodeOptions?: import("../GptEncoding.js").EncodeOptions) => number[], encodeGenerator: (lineToEncode: string, { allowedSpecial, disallowedSpecial, }?: import("../GptEncoding.js").EncodeOptions) => Generator<number[], number, undefined>, isWithinTokenLimit: (input: string | Iterable<import("../GptEncoding.js").ChatMessage>, tokenLimit: number) => number | false, encodeChat: (chat: readonly import("../GptEncoding.js").ChatMessage[], model?: "gpt-4" | "gpt-4-32k" | "gpt-4-0314" | "gpt-4-32k-0314" | "gpt-3.5-turbo" | "gpt-3.5-turbo-0301" | "text-davinci-003" | "text-davinci-002" | "text-davinci-001" | "text-curie-001" | "text-babbage-001" | "text-ada-001" | "davinci" | "curie" | "babbage" | "ada" | "code-davinci-002" | "code-davinci-001" | "code-cushman-002" | "code-cushman-001" | "davinci-codex" | "cushman-codex" | "text-davinci-edit-001" | "code-davinci-edit-001" | "text-embedding-ada-002" | "text-similarity-davinci-001" | "text-similarity-curie-001" | "text-similarity-babbage-001" | "text-similarity-ada-001" | "text-search-davinci-doc-001" | "text-search-curie-doc-001" | "text-search-babbage-doc-001" | "text-search-ada-doc-001" | "code-search-babbage-code-001" | "code-search-ada-code-001" | undefined) => number[], encodeChatGenerator: (chat: Iterable<import("../GptEncoding.js").ChatMessage>, model?: "gpt-4" | "gpt-4-32k" | "gpt-4-0314" | "gpt-4-32k-0314" | "gpt-3.5-turbo" | "gpt-3.5-turbo-0301" | "text-davinci-003" | "text-davinci-002" | "text-davinci-001" | "text-curie-001" | "text-babbage-001" | "text-ada-001" | "davinci" | "curie" | "babbage" | "ada" | "code-davinci-002" | "code-davinci-001" | "code-cushman-002" | "code-cushman-001" | "davinci-codex" | "cushman-codex" | "text-davinci-edit-001" | "code-davinci-edit-001" | "text-embedding-ada-002" | "text-similarity-davinci-001" | "text-similarity-curie-001" | "text-similarity-babbage-001" | "text-similarity-ada-001" | "text-search-davinci-doc-001" | "text-search-curie-doc-001" | "text-search-babbage-doc-001" | "text-search-ada-doc-001" | "code-search-babbage-code-001" | "code-search-ada-code-001" | undefined) => Generator<number[], void, undefined>;
5
+ export { decode, decodeAsyncGenerator, decodeGenerator, encode, encodeChat, encodeChatGenerator, encodeGenerator, isWithinTokenLimit, };
6
+ export default api;
@@ -0,0 +1,11 @@
1
+ /* eslint-disable import/extensions */
2
+ import { convertTokenBytePairEncodingFromTuples } from '../convertTokenBytePairEncodingFromTuples.js';
3
+ import encoder from '../encodings/cl100k_base.js';
4
+ import { GptEncoding } from '../GptEncoding.js';
5
+ export * from '../specialTokens.js';
6
+ const api = GptEncoding.getEncodingApiForModel('gpt-4-0314', () => convertTokenBytePairEncodingFromTuples(encoder));
7
+ const { decode, decodeAsyncGenerator, decodeGenerator, encode, encodeGenerator, isWithinTokenLimit, encodeChat, encodeChatGenerator, } = api;
8
+ export { decode, decodeAsyncGenerator, decodeGenerator, encode, encodeChat, encodeChatGenerator, encodeGenerator, isWithinTokenLimit, };
9
+ // eslint-disable-next-line import/no-default-export
10
+ export default api;
11
+ //# sourceMappingURL=gpt-4-0314.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gpt-4-0314.js","sourceRoot":"","sources":["../../src/model/gpt-4-0314.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,EAAE,sCAAsC,EAAE,MAAM,8CAA8C,CAAA;AACrG,OAAO,OAAO,MAAM,6BAA6B,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,cAAc,qBAAqB,CAAA;AAEnC,MAAM,GAAG,GAAG,WAAW,CAAC,sBAAsB,CAAC,YAAY,EAAE,GAAG,EAAE,CAChE,sCAAsC,CAAC,OAAO,CAAC,CAChD,CAAA;AACD,MAAM,EACJ,MAAM,EACN,oBAAoB,EACpB,eAAe,EACf,MAAM,EACN,eAAe,EACf,kBAAkB,EAClB,UAAU,EACV,mBAAmB,GACpB,GAAG,GAAG,CAAA;AACP,OAAO,EACL,MAAM,EACN,oBAAoB,EACpB,eAAe,EACf,MAAM,EACN,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,kBAAkB,GACnB,CAAA;AACD,oDAAoD;AACpD,eAAe,GAAG,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { GptEncoding } from '../GptEncoding.js';
2
+ export * from '../specialTokens.js';
3
+ declare const api: GptEncoding;
4
+ declare const decode: (inputTokensToDecode: Iterable<number>) => string, decodeAsyncGenerator: (inputTokensToDecode: AsyncIterable<number>) => AsyncGenerator<string, void, unknown>, decodeGenerator: (inputTokensToDecode: Iterable<number>) => Generator<string, void, unknown>, encode: (lineToEncode: string, encodeOptions?: import("../GptEncoding.js").EncodeOptions) => number[], encodeGenerator: (lineToEncode: string, { allowedSpecial, disallowedSpecial, }?: import("../GptEncoding.js").EncodeOptions) => Generator<number[], number, undefined>, isWithinTokenLimit: (input: string | Iterable<import("../GptEncoding.js").ChatMessage>, tokenLimit: number) => number | false, encodeChat: (chat: readonly import("../GptEncoding.js").ChatMessage[], model?: "gpt-4" | "gpt-4-32k" | "gpt-4-0314" | "gpt-4-32k-0314" | "gpt-3.5-turbo" | "gpt-3.5-turbo-0301" | "text-davinci-003" | "text-davinci-002" | "text-davinci-001" | "text-curie-001" | "text-babbage-001" | "text-ada-001" | "davinci" | "curie" | "babbage" | "ada" | "code-davinci-002" | "code-davinci-001" | "code-cushman-002" | "code-cushman-001" | "davinci-codex" | "cushman-codex" | "text-davinci-edit-001" | "code-davinci-edit-001" | "text-embedding-ada-002" | "text-similarity-davinci-001" | "text-similarity-curie-001" | "text-similarity-babbage-001" | "text-similarity-ada-001" | "text-search-davinci-doc-001" | "text-search-curie-doc-001" | "text-search-babbage-doc-001" | "text-search-ada-doc-001" | "code-search-babbage-code-001" | "code-search-ada-code-001" | undefined) => number[], encodeChatGenerator: (chat: Iterable<import("../GptEncoding.js").ChatMessage>, model?: "gpt-4" | "gpt-4-32k" | "gpt-4-0314" | "gpt-4-32k-0314" | "gpt-3.5-turbo" | "gpt-3.5-turbo-0301" | "text-davinci-003" | "text-davinci-002" | "text-davinci-001" | "text-curie-001" | "text-babbage-001" | "text-ada-001" | "davinci" | "curie" | "babbage" | "ada" | "code-davinci-002" | "code-davinci-001" | "code-cushman-002" | "code-cushman-001" | "davinci-codex" | "cushman-codex" | "text-davinci-edit-001" | "code-davinci-edit-001" | "text-embedding-ada-002" | "text-similarity-davinci-001" | "text-similarity-curie-001" | "text-similarity-babbage-001" | "text-similarity-ada-001" | "text-search-davinci-doc-001" | "text-search-curie-doc-001" | "text-search-babbage-doc-001" | "text-search-ada-doc-001" | "code-search-babbage-code-001" | "code-search-ada-code-001" | undefined) => Generator<number[], void, undefined>;
5
+ export { decode, decodeAsyncGenerator, decodeGenerator, encode, encodeChat, encodeChatGenerator, encodeGenerator, isWithinTokenLimit, };
6
+ export default api;
@@ -0,0 +1,11 @@
1
+ /* eslint-disable import/extensions */
2
+ import { convertTokenBytePairEncodingFromTuples } from '../convertTokenBytePairEncodingFromTuples.js';
3
+ import encoder from '../encodings/cl100k_base.js';
4
+ import { GptEncoding } from '../GptEncoding.js';
5
+ export * from '../specialTokens.js';
6
+ const api = GptEncoding.getEncodingApiForModel('gpt-4-32k-0314', () => convertTokenBytePairEncodingFromTuples(encoder));
7
+ const { decode, decodeAsyncGenerator, decodeGenerator, encode, encodeGenerator, isWithinTokenLimit, encodeChat, encodeChatGenerator, } = api;
8
+ export { decode, decodeAsyncGenerator, decodeGenerator, encode, encodeChat, encodeChatGenerator, encodeGenerator, isWithinTokenLimit, };
9
+ // eslint-disable-next-line import/no-default-export
10
+ export default api;
11
+ //# sourceMappingURL=gpt-4-32k-0314.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gpt-4-32k-0314.js","sourceRoot":"","sources":["../../src/model/gpt-4-32k-0314.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,EAAE,sCAAsC,EAAE,MAAM,8CAA8C,CAAA;AACrG,OAAO,OAAO,MAAM,6BAA6B,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,cAAc,qBAAqB,CAAA;AAEnC,MAAM,GAAG,GAAG,WAAW,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,GAAG,EAAE,CACpE,sCAAsC,CAAC,OAAO,CAAC,CAChD,CAAA;AACD,MAAM,EACJ,MAAM,EACN,oBAAoB,EACpB,eAAe,EACf,MAAM,EACN,eAAe,EACf,kBAAkB,EAClB,UAAU,EACV,mBAAmB,GACpB,GAAG,GAAG,CAAA;AACP,OAAO,EACL,MAAM,EACN,oBAAoB,EACpB,eAAe,EACf,MAAM,EACN,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,kBAAkB,GACnB,CAAA;AACD,oDAAoD;AACpD,eAAe,GAAG,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { GptEncoding } from '../GptEncoding.js';
2
+ export * from '../specialTokens.js';
3
+ declare const api: GptEncoding;
4
+ declare const decode: (inputTokensToDecode: Iterable<number>) => string, decodeAsyncGenerator: (inputTokensToDecode: AsyncIterable<number>) => AsyncGenerator<string, void, unknown>, decodeGenerator: (inputTokensToDecode: Iterable<number>) => Generator<string, void, unknown>, encode: (lineToEncode: string, encodeOptions?: import("../GptEncoding.js").EncodeOptions) => number[], encodeGenerator: (lineToEncode: string, { allowedSpecial, disallowedSpecial, }?: import("../GptEncoding.js").EncodeOptions) => Generator<number[], number, undefined>, isWithinTokenLimit: (input: string | Iterable<import("../GptEncoding.js").ChatMessage>, tokenLimit: number) => number | false, encodeChat: (chat: readonly import("../GptEncoding.js").ChatMessage[], model?: "gpt-4" | "gpt-4-32k" | "gpt-4-0314" | "gpt-4-32k-0314" | "gpt-3.5-turbo" | "gpt-3.5-turbo-0301" | "text-davinci-003" | "text-davinci-002" | "text-davinci-001" | "text-curie-001" | "text-babbage-001" | "text-ada-001" | "davinci" | "curie" | "babbage" | "ada" | "code-davinci-002" | "code-davinci-001" | "code-cushman-002" | "code-cushman-001" | "davinci-codex" | "cushman-codex" | "text-davinci-edit-001" | "code-davinci-edit-001" | "text-embedding-ada-002" | "text-similarity-davinci-001" | "text-similarity-curie-001" | "text-similarity-babbage-001" | "text-similarity-ada-001" | "text-search-davinci-doc-001" | "text-search-curie-doc-001" | "text-search-babbage-doc-001" | "text-search-ada-doc-001" | "code-search-babbage-code-001" | "code-search-ada-code-001" | undefined) => number[], encodeChatGenerator: (chat: Iterable<import("../GptEncoding.js").ChatMessage>, model?: "gpt-4" | "gpt-4-32k" | "gpt-4-0314" | "gpt-4-32k-0314" | "gpt-3.5-turbo" | "gpt-3.5-turbo-0301" | "text-davinci-003" | "text-davinci-002" | "text-davinci-001" | "text-curie-001" | "text-babbage-001" | "text-ada-001" | "davinci" | "curie" | "babbage" | "ada" | "code-davinci-002" | "code-davinci-001" | "code-cushman-002" | "code-cushman-001" | "davinci-codex" | "cushman-codex" | "text-davinci-edit-001" | "code-davinci-edit-001" | "text-embedding-ada-002" | "text-similarity-davinci-001" | "text-similarity-curie-001" | "text-similarity-babbage-001" | "text-similarity-ada-001" | "text-search-davinci-doc-001" | "text-search-curie-doc-001" | "text-search-babbage-doc-001" | "text-search-ada-doc-001" | "code-search-babbage-code-001" | "code-search-ada-code-001" | undefined) => Generator<number[], void, undefined>;
5
+ export { decode, decodeAsyncGenerator, decodeGenerator, encode, encodeChat, encodeChatGenerator, encodeGenerator, isWithinTokenLimit, };
6
+ export default api;
@@ -0,0 +1,11 @@
1
+ /* eslint-disable import/extensions */
2
+ import { convertTokenBytePairEncodingFromTuples } from '../convertTokenBytePairEncodingFromTuples.js';
3
+ import encoder from '../encodings/cl100k_base.js';
4
+ import { GptEncoding } from '../GptEncoding.js';
5
+ export * from '../specialTokens.js';
6
+ const api = GptEncoding.getEncodingApiForModel('gpt-4-32k', () => convertTokenBytePairEncodingFromTuples(encoder));
7
+ const { decode, decodeAsyncGenerator, decodeGenerator, encode, encodeGenerator, isWithinTokenLimit, encodeChat, encodeChatGenerator, } = api;
8
+ export { decode, decodeAsyncGenerator, decodeGenerator, encode, encodeChat, encodeChatGenerator, encodeGenerator, isWithinTokenLimit, };
9
+ // eslint-disable-next-line import/no-default-export
10
+ export default api;
11
+ //# sourceMappingURL=gpt-4-32k.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gpt-4-32k.js","sourceRoot":"","sources":["../../src/model/gpt-4-32k.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,EAAE,sCAAsC,EAAE,MAAM,8CAA8C,CAAA;AACrG,OAAO,OAAO,MAAM,6BAA6B,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,cAAc,qBAAqB,CAAA;AAEnC,MAAM,GAAG,GAAG,WAAW,CAAC,sBAAsB,CAAC,WAAW,EAAE,GAAG,EAAE,CAC/D,sCAAsC,CAAC,OAAO,CAAC,CAChD,CAAA;AACD,MAAM,EACJ,MAAM,EACN,oBAAoB,EACpB,eAAe,EACf,MAAM,EACN,eAAe,EACf,kBAAkB,EAClB,UAAU,EACV,mBAAmB,GACpB,GAAG,GAAG,CAAA;AACP,OAAO,EACL,MAAM,EACN,oBAAoB,EACpB,eAAe,EACf,MAAM,EACN,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,kBAAkB,GACnB,CAAA;AACD,oDAAoD;AACpD,eAAe,GAAG,CAAA"}
@@ -1 +1,6 @@
1
- export * from '../encoding/cl100k_base.js';
1
+ import { GptEncoding } from '../GptEncoding.js';
2
+ export * from '../specialTokens.js';
3
+ declare const api: GptEncoding;
4
+ declare const decode: (inputTokensToDecode: Iterable<number>) => string, decodeAsyncGenerator: (inputTokensToDecode: AsyncIterable<number>) => AsyncGenerator<string, void, unknown>, decodeGenerator: (inputTokensToDecode: Iterable<number>) => Generator<string, void, unknown>, encode: (lineToEncode: string, encodeOptions?: import("../GptEncoding.js").EncodeOptions) => number[], encodeGenerator: (lineToEncode: string, { allowedSpecial, disallowedSpecial, }?: import("../GptEncoding.js").EncodeOptions) => Generator<number[], number, undefined>, isWithinTokenLimit: (input: string | Iterable<import("../GptEncoding.js").ChatMessage>, tokenLimit: number) => number | false, encodeChat: (chat: readonly import("../GptEncoding.js").ChatMessage[], model?: "gpt-4" | "gpt-4-32k" | "gpt-4-0314" | "gpt-4-32k-0314" | "gpt-3.5-turbo" | "gpt-3.5-turbo-0301" | "text-davinci-003" | "text-davinci-002" | "text-davinci-001" | "text-curie-001" | "text-babbage-001" | "text-ada-001" | "davinci" | "curie" | "babbage" | "ada" | "code-davinci-002" | "code-davinci-001" | "code-cushman-002" | "code-cushman-001" | "davinci-codex" | "cushman-codex" | "text-davinci-edit-001" | "code-davinci-edit-001" | "text-embedding-ada-002" | "text-similarity-davinci-001" | "text-similarity-curie-001" | "text-similarity-babbage-001" | "text-similarity-ada-001" | "text-search-davinci-doc-001" | "text-search-curie-doc-001" | "text-search-babbage-doc-001" | "text-search-ada-doc-001" | "code-search-babbage-code-001" | "code-search-ada-code-001" | undefined) => number[], encodeChatGenerator: (chat: Iterable<import("../GptEncoding.js").ChatMessage>, model?: "gpt-4" | "gpt-4-32k" | "gpt-4-0314" | "gpt-4-32k-0314" | "gpt-3.5-turbo" | "gpt-3.5-turbo-0301" | "text-davinci-003" | "text-davinci-002" | "text-davinci-001" | "text-curie-001" | "text-babbage-001" | "text-ada-001" | "davinci" | "curie" | "babbage" | "ada" | "code-davinci-002" | "code-davinci-001" | "code-cushman-002" | "code-cushman-001" | "davinci-codex" | "cushman-codex" | "text-davinci-edit-001" | "code-davinci-edit-001" | "text-embedding-ada-002" | "text-similarity-davinci-001" | "text-similarity-curie-001" | "text-similarity-babbage-001" | "text-similarity-ada-001" | "text-search-davinci-doc-001" | "text-search-curie-doc-001" | "text-search-babbage-doc-001" | "text-search-ada-doc-001" | "code-search-babbage-code-001" | "code-search-ada-code-001" | undefined) => Generator<number[], void, undefined>;
5
+ export { decode, decodeAsyncGenerator, decodeGenerator, encode, encodeChat, encodeChatGenerator, encodeGenerator, isWithinTokenLimit, };
6
+ export default api;
@@ -1,2 +1,11 @@
1
- export * from '../encoding/cl100k_base.js';
1
+ /* eslint-disable import/extensions */
2
+ import { convertTokenBytePairEncodingFromTuples } from '../convertTokenBytePairEncodingFromTuples.js';
3
+ import encoder from '../encodings/cl100k_base.js';
4
+ import { GptEncoding } from '../GptEncoding.js';
5
+ export * from '../specialTokens.js';
6
+ const api = GptEncoding.getEncodingApiForModel('gpt-4', () => convertTokenBytePairEncodingFromTuples(encoder));
7
+ const { decode, decodeAsyncGenerator, decodeGenerator, encode, encodeGenerator, isWithinTokenLimit, encodeChat, encodeChatGenerator, } = api;
8
+ export { decode, decodeAsyncGenerator, decodeGenerator, encode, encodeChat, encodeChatGenerator, encodeGenerator, isWithinTokenLimit, };
9
+ // eslint-disable-next-line import/no-default-export
10
+ export default api;
2
11
  //# sourceMappingURL=gpt-4.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gpt-4.js","sourceRoot":"","sources":["../../src/model/gpt-4.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA"}
1
+ {"version":3,"file":"gpt-4.js","sourceRoot":"","sources":["../../src/model/gpt-4.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,EAAE,sCAAsC,EAAE,MAAM,8CAA8C,CAAA;AACrG,OAAO,OAAO,MAAM,6BAA6B,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,cAAc,qBAAqB,CAAA;AAEnC,MAAM,GAAG,GAAG,WAAW,CAAC,sBAAsB,CAAC,OAAO,EAAE,GAAG,EAAE,CAC3D,sCAAsC,CAAC,OAAO,CAAC,CAChD,CAAA;AACD,MAAM,EACJ,MAAM,EACN,oBAAoB,EACpB,eAAe,EACf,MAAM,EACN,eAAe,EACf,kBAAkB,EAClB,UAAU,EACV,mBAAmB,GACpB,GAAG,GAAG,CAAA;AACP,OAAO,EACL,MAAM,EACN,oBAAoB,EACpB,eAAe,EACf,MAAM,EACN,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,kBAAkB,GACnB,CAAA;AACD,oDAAoD;AACpD,eAAe,GAAG,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { EncoderMap } from './EncoderMap.js';
2
- import type { EncodingName } from './mapping.js';
3
- export interface ModelParams {
2
+ import type { EncodingName, ModelName } from './mapping.js';
3
+ export interface EncodingParams {
4
4
  /**
5
5
  * The expected total number of tokens in the vocabulary, including both regular and special tokens.
6
6
  * This parameter is used to ensure that the combined number of regular and special tokens matches the expected total.
@@ -15,8 +15,9 @@ export interface ModelParams {
15
15
  tokenSplitRegex: RegExp;
16
16
  mergeableBytePairRanks: EncoderMap;
17
17
  specialTokenMapping: Map<string, number>;
18
+ modelName?: ModelName;
18
19
  }
19
20
  export type GetMergeableRanksFn = (encodingName: EncodingName) => EncoderMap;
20
21
  export type GetMergeableRanksAsyncFn = (encodingName: EncodingName) => Promise<EncoderMap>;
21
- export declare function getModelParams(encodingName: EncodingName, getMergeableRanks: GetMergeableRanksFn): ModelParams;
22
- export declare function getModelParamsAsync(encodingName: EncodingName, getMergeableRanks: GetMergeableRanksAsyncFn): Promise<ModelParams>;
22
+ export declare function getEncodingParams(encodingName: EncodingName, getMergeableRanks: GetMergeableRanksFn): EncodingParams;
23
+ export declare function getModelParamsAsync(encodingName: EncodingName, getMergeableRanks: GetMergeableRanksAsyncFn): Promise<EncodingParams>;
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable no-magic-numbers */
2
2
  import { EncoderMap } from './EncoderMap.js';
3
- import { EndOfPrompt, EndOfText, FimMiddle, FimPrefix, FimSuffix, } from './specialTokens.js';
3
+ import { EndOfPrompt, EndOfText, FimMiddle, FimPrefix, FimSuffix, ImEnd, ImSep, ImStart, } from './specialTokens.js';
4
4
  const tokenSplitRegex = /'s|'t|'re|'ve|'m|'ll|'d| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+/gu;
5
5
  function R50KBase(mergeableBytePairRanks) {
6
6
  return {
@@ -37,6 +37,9 @@ function Cl100KBase(mergeableBytePairRanks) {
37
37
  [FimPrefix, 100258],
38
38
  [FimMiddle, 100259],
39
39
  [FimSuffix, 100260],
40
+ [ImStart, 100264],
41
+ [ImEnd, 100265],
42
+ [ImSep, 100266],
40
43
  [EndOfPrompt, 100276],
41
44
  ]);
42
45
  return {
@@ -45,7 +48,7 @@ function Cl100KBase(mergeableBytePairRanks) {
45
48
  specialTokenMapping,
46
49
  };
47
50
  }
48
- export function getModelParams(encodingName, getMergeableRanks) {
51
+ export function getEncodingParams(encodingName, getMergeableRanks) {
49
52
  const mergeableBytePairRanks = getMergeableRanks(encodingName);
50
53
  switch (encodingName.toLowerCase()) {
51
54
  case 'r50k_base':
@@ -62,6 +65,6 @@ export function getModelParams(encodingName, getMergeableRanks) {
62
65
  }
63
66
  export async function getModelParamsAsync(encodingName, getMergeableRanks) {
64
67
  const mergeableBytePairRanks = await getMergeableRanks(encodingName);
65
- return getModelParams(encodingName, () => mergeableBytePairRanks);
68
+ return getEncodingParams(encodingName, () => mergeableBytePairRanks);
66
69
  }
67
70
  //# sourceMappingURL=modelParams.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"modelParams.js","sourceRoot":"","sources":["../src/modelParams.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EACL,WAAW,EACX,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,GACV,MAAM,oBAAoB,CAAA;AAmB3B,MAAM,eAAe,GACnB,8EAA8E,CAAA;AAEhF,SAAS,QAAQ,CAAC,sBAAkC;IAClD,OAAO;QACL,sBAAsB,EAAE,KAAM;QAC9B,eAAe;QACf,sBAAsB;QACtB,mBAAmB,EAAE,IAAI,GAAG,CAAiB,CAAC,CAAC,SAAS,EAAE,KAAM,CAAC,CAAC,CAAC;KACpE,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,sBAAkC;IAClD,OAAO;QACL,sBAAsB,EAAE,KAAM;QAC9B,eAAe;QACf,sBAAsB;QACtB,mBAAmB,EAAE,IAAI,GAAG,CAAiB,CAAC,CAAC,SAAS,EAAE,KAAM,CAAC,CAAC,CAAC;KACpE,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,sBAAkC;IAClD,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAiB;QAClD,CAAC,SAAS,EAAE,KAAM,CAAC;QACnB,CAAC,SAAS,EAAE,KAAM,CAAC;QACnB,CAAC,SAAS,EAAE,KAAM,CAAC;QACnB,CAAC,SAAS,EAAE,KAAM,CAAC;KACpB,CAAC,CAAA;IAEF,OAAO;QACL,eAAe;QACf,sBAAsB;QACtB,mBAAmB;KACpB,CAAA;AACH,CAAC;AAED,SAAS,UAAU,CAAC,sBAAkC;IACpD,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAiB;QAClD,CAAC,SAAS,EAAE,MAAO,CAAC;QACpB,CAAC,SAAS,EAAE,MAAO,CAAC;QACpB,CAAC,SAAS,EAAE,MAAO,CAAC;QACpB,CAAC,SAAS,EAAE,MAAO,CAAC;QACpB,CAAC,WAAW,EAAE,MAAO,CAAC;KACvB,CAAC,CAAA;IAEF,OAAO;QACL,eAAe,EACb,uHAAuH;QACzH,sBAAsB;QACtB,mBAAmB;KACpB,CAAA;AACH,CAAC;AAOD,MAAM,UAAU,cAAc,CAC5B,YAA0B,EAC1B,iBAAsC;IAEtC,MAAM,sBAAsB,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAA;IAC9D,QAAQ,YAAY,CAAC,WAAW,EAAE,EAAE;QAClC,KAAK,WAAW;YACd,OAAO,QAAQ,CAAC,sBAAsB,CAAC,CAAA;QAEzC,KAAK,WAAW;YACd,OAAO,QAAQ,CAAC,sBAAsB,CAAC,CAAA;QAEzC,KAAK,WAAW;YACd,OAAO,QAAQ,CAAC,sBAAsB,CAAC,CAAA;QAEzC,KAAK,aAAa;YAChB,OAAO,UAAU,CAAC,sBAAsB,CAAC,CAAA;QAE3C;YACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,YAAY,EAAE,CAAC,CAAA;KAC5D;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,YAA0B,EAC1B,iBAA2C;IAE3C,MAAM,sBAAsB,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAA;IACpE,OAAO,cAAc,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,sBAAsB,CAAC,CAAA;AACnE,CAAC"}
1
+ {"version":3,"file":"modelParams.js","sourceRoot":"","sources":["../src/modelParams.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EACL,WAAW,EACX,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,KAAK,EACL,KAAK,EACL,OAAO,GACR,MAAM,oBAAoB,CAAA;AAoB3B,MAAM,eAAe,GACnB,8EAA8E,CAAA;AAEhF,SAAS,QAAQ,CAAC,sBAAkC;IAClD,OAAO;QACL,sBAAsB,EAAE,KAAM;QAC9B,eAAe;QACf,sBAAsB;QACtB,mBAAmB,EAAE,IAAI,GAAG,CAAiB,CAAC,CAAC,SAAS,EAAE,KAAM,CAAC,CAAC,CAAC;KACpE,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,sBAAkC;IAClD,OAAO;QACL,sBAAsB,EAAE,KAAM;QAC9B,eAAe;QACf,sBAAsB;QACtB,mBAAmB,EAAE,IAAI,GAAG,CAAiB,CAAC,CAAC,SAAS,EAAE,KAAM,CAAC,CAAC,CAAC;KACpE,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,sBAAkC;IAClD,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAiB;QAClD,CAAC,SAAS,EAAE,KAAM,CAAC;QACnB,CAAC,SAAS,EAAE,KAAM,CAAC;QACnB,CAAC,SAAS,EAAE,KAAM,CAAC;QACnB,CAAC,SAAS,EAAE,KAAM,CAAC;KACpB,CAAC,CAAA;IAEF,OAAO;QACL,eAAe;QACf,sBAAsB;QACtB,mBAAmB;KACpB,CAAA;AACH,CAAC;AAED,SAAS,UAAU,CAAC,sBAAkC;IACpD,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAiB;QAClD,CAAC,SAAS,EAAE,MAAO,CAAC;QACpB,CAAC,SAAS,EAAE,MAAO,CAAC;QACpB,CAAC,SAAS,EAAE,MAAO,CAAC;QACpB,CAAC,SAAS,EAAE,MAAO,CAAC;QACpB,CAAC,OAAO,EAAE,MAAO,CAAC;QAClB,CAAC,KAAK,EAAE,MAAO,CAAC;QAChB,CAAC,KAAK,EAAE,MAAO,CAAC;QAChB,CAAC,WAAW,EAAE,MAAO,CAAC;KACvB,CAAC,CAAA;IAEF,OAAO;QACL,eAAe,EACb,uHAAuH;QACzH,sBAAsB;QACtB,mBAAmB;KACpB,CAAA;AACH,CAAC;AAOD,MAAM,UAAU,iBAAiB,CAC/B,YAA0B,EAC1B,iBAAsC;IAEtC,MAAM,sBAAsB,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAA;IAC9D,QAAQ,YAAY,CAAC,WAAW,EAAE,EAAE;QAClC,KAAK,WAAW;YACd,OAAO,QAAQ,CAAC,sBAAsB,CAAC,CAAA;QAEzC,KAAK,WAAW;YACd,OAAO,QAAQ,CAAC,sBAAsB,CAAC,CAAA;QAEzC,KAAK,WAAW;YACd,OAAO,QAAQ,CAAC,sBAAsB,CAAC,CAAA;QAEzC,KAAK,aAAa;YAChB,OAAO,UAAU,CAAC,sBAAsB,CAAC,CAAA;QAE3C;YACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,YAAY,EAAE,CAAC,CAAA;KAC5D;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,YAA0B,EAC1B,iBAA2C;IAE3C,MAAM,sBAAsB,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAA;IACpE,OAAO,iBAAiB,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,sBAAsB,CAAC,CAAA;AACtE,CAAC"}
@@ -2,4 +2,7 @@ export declare const EndOfText = "<|endoftext|>";
2
2
  export declare const FimPrefix = "<|fim_prefix|>";
3
3
  export declare const FimMiddle = "<|fim_middle|>";
4
4
  export declare const FimSuffix = "<|fim_suffix|>";
5
+ export declare const ImStart = "<|im_start|>";
6
+ export declare const ImEnd = "<|im_end|>";
7
+ export declare const ImSep = "<|im_sep|>";
5
8
  export declare const EndOfPrompt = "<|endofprompt|>";
@@ -2,5 +2,8 @@ export const EndOfText = '<|endoftext|>';
2
2
  export const FimPrefix = '<|fim_prefix|>';
3
3
  export const FimMiddle = '<|fim_middle|>';
4
4
  export const FimSuffix = '<|fim_suffix|>';
5
+ export const ImStart = '<|im_start|>'; // 100264
6
+ export const ImEnd = '<|im_end|>'; // 100265
7
+ export const ImSep = '<|im_sep|>'; // 100266
5
8
  export const EndOfPrompt = '<|endofprompt|>';
6
9
  //# sourceMappingURL=specialTokens.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"specialTokens.js","sourceRoot":"","sources":["../src/specialTokens.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,eAAe,CAAA;AACxC,MAAM,CAAC,MAAM,SAAS,GAAG,gBAAgB,CAAA;AACzC,MAAM,CAAC,MAAM,SAAS,GAAG,gBAAgB,CAAA;AACzC,MAAM,CAAC,MAAM,SAAS,GAAG,gBAAgB,CAAA;AACzC,MAAM,CAAC,MAAM,WAAW,GAAG,iBAAiB,CAAA"}
1
+ {"version":3,"file":"specialTokens.js","sourceRoot":"","sources":["../src/specialTokens.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,eAAe,CAAA;AACxC,MAAM,CAAC,MAAM,SAAS,GAAG,gBAAgB,CAAA;AACzC,MAAM,CAAC,MAAM,SAAS,GAAG,gBAAgB,CAAA;AACzC,MAAM,CAAC,MAAM,SAAS,GAAG,gBAAgB,CAAA;AACzC,MAAM,CAAC,MAAM,OAAO,GAAG,cAAc,CAAA,CAAC,SAAS;AAC/C,MAAM,CAAC,MAAM,KAAK,GAAG,YAAY,CAAA,CAAC,SAAS;AAC3C,MAAM,CAAC,MAAM,KAAK,GAAG,YAAY,CAAA,CAAC,SAAS;AAC3C,MAAM,CAAC,MAAM,WAAW,GAAG,iBAAiB,CAAA"}
package/esm/util.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare function getMaxValueFromMap(map: Map<unknown, number>): number;
2
+ export declare function getSpecialTokenRegex(tokens: Set<string>): RegExp;
package/esm/util.js ADDED
@@ -0,0 +1,14 @@
1
+ import { escapeRegExp } from './escapeRegExp.js';
2
+ export function getMaxValueFromMap(map) {
3
+ let max = 0;
4
+ map.forEach((val) => {
5
+ max = Math.max(max, val);
6
+ });
7
+ return max;
8
+ }
9
+ export function getSpecialTokenRegex(tokens) {
10
+ const escapedTokens = [...tokens].map(escapeRegExp);
11
+ const inner = escapedTokens.join('|');
12
+ return new RegExp(`(${inner})`);
13
+ }
14
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,MAAM,UAAU,kBAAkB,CAAC,GAAyB;IAC1D,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAClB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;IACF,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAmB;IACtD,MAAM,aAAa,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;IACnD,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACrC,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,CAAC,CAAA;AACjC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "gpt-tokenizer",
3
- "version": "2.0.0-beta.2",
4
- "description": "BPE Encoder Decoder for GPT-2 / GPT-3",
3
+ "version": "2.1.0",
4
+ "description": "A pure JavaScript implementation of a BPE tokenizer (Encoder/Decoder) for GPT-2 / GPT-3 / GPT-4 and other OpenAI models",
5
5
  "keywords": [
6
6
  "BPE",
7
7
  "encoder",
@@ -72,14 +72,16 @@
72
72
  "dist"
73
73
  ],
74
74
  "scripts": {
75
+ "codegen:models": "yarn tsx src/codegen/generateByModel.ts",
76
+ "codegen:encodings": "yarn tsx src/codegen/generateJsEncodings.ts",
75
77
  "build": "yarn build:cjs && yarn build:esm && yarn build:umd",
76
78
  "build:cjs": "yarn rrun tsc --outDir cjs --module commonjs --target es2022 --project tsconfig-cjs.json",
77
79
  "build:esm": "yarn rrun tsc --outDir esm --module esnext --target es2022 && echo '{\"name\": \"gpt-tokenizer\", \"type\": \"module\"}' > ./esm/package.json",
78
80
  "build:umd": "yarn build:umd:cl100k_base && yarn build:umd:p50k_base && yarn build:umd:p50k_edit && yarn build:umd:r50k_base",
79
- "build:umd:cl100k_base": "beemo webpack --entry='./src/main.ts' --env 'outDir=dist' --env 'moduleTarget=umd' --env 'engineTarget=web' --env 'codeTarget=es2022' --env 'name=GPTTokenizer' --env 'export=default' --env 'filename=cl100k_base.js'",
80
- "build:umd:p50k_base": "beemo webpack --entry='./src/encoding/p50k_base.ts' --env 'outDir=dist' --env 'moduleTarget=umd' --env 'engineTarget=web' --env 'codeTarget=es2022' --env 'name=GPTTokenizer' --env 'export=default' --env 'filename=p50k_base.js'",
81
- "build:umd:p50k_edit": "beemo webpack --entry='./src/encoding/p50k_edit.ts' --env 'outDir=dist' --env 'moduleTarget=umd' --env 'engineTarget=web' --env 'codeTarget=es2022' --env 'name=GPTTokenizer' --env 'export=default' --env 'filename=p50k_edit.js'",
82
- "build:umd:r50k_base": "beemo webpack --entry='./src/encoding/r50k_base.ts' --env 'outDir=dist' --env 'moduleTarget=umd' --env 'engineTarget=web' --env 'codeTarget=es2022' --env 'name=GPTTokenizer' --env 'export=default' --env 'filename=r50k_base.js'",
81
+ "build:umd:cl100k_base": "beemo webpack --entry='./src/main.ts' --env 'outDir=dist' --env 'moduleTarget=umd' --env 'engineTarget=web' --env 'codeTarget=es2022' --env 'name=GPTTokenizer_cl100k_base' --env 'export=api' --env 'filename=cl100k_base.js'",
82
+ "build:umd:p50k_base": "beemo webpack --entry='./src/encoding/p50k_base.ts' --env 'outDir=dist' --env 'moduleTarget=umd' --env 'engineTarget=web' --env 'codeTarget=es2022' --env 'name=GPTTokenizer_p50k_base' --env 'export=api' --env 'filename=p50k_base.js'",
83
+ "build:umd:p50k_edit": "beemo webpack --entry='./src/encoding/p50k_edit.ts' --env 'outDir=dist' --env 'moduleTarget=umd' --env 'engineTarget=web' --env 'codeTarget=es2022' --env 'name=GPTTokenizer_p50k_edit' --env 'export=api' --env 'filename=p50k_edit.js'",
84
+ "build:umd:r50k_base": "beemo webpack --entry='./src/encoding/r50k_base.ts' --env 'outDir=dist' --env 'moduleTarget=umd' --env 'engineTarget=web' --env 'codeTarget=es2022' --env 'name=GPTTokenizer_r50k_base' --env 'export=api' --env 'filename=r50k_base.js'",
83
85
  "clean": "git clean -dfX --exclude=node_modules src && beemo typescript:sync-project-refs",
84
86
  "format": "yarn rrun prettier --write \"./{src,tests,.config}/**/!(*.d).{.js,jsx,ts,tsx,json,md}\"",
85
87
  "postinstallDev": "yarn prepare",
@@ -1,7 +1,12 @@
1
1
  import fs from 'fs'
2
2
  import path from 'path'
3
3
  import { GptEncoding } from './GptEncoding.js'
4
- import { type EncodingName, encodingNames } from './mapping.js'
4
+ import {
5
+ type ChatModelName,
6
+ type EncodingName,
7
+ chatModelParams,
8
+ encodingNames,
9
+ } from './mapping.js'
5
10
  import { resolveEncoding } from './resolveEncoding.js'
6
11
 
7
12
  const sharedResults = {
@@ -155,6 +160,78 @@ describe.each(encodingNames)('%s', (encodingName: EncodingName) => {
155
160
  })
156
161
  })
157
162
 
163
+ const chatModelNames = Object.keys(chatModelParams) as readonly ChatModelName[]
164
+
165
+ const exampleMessages = [
166
+ {
167
+ role: 'system',
168
+ content:
169
+ 'You are a helpful, pattern-following assistant that translates corporate jargon into plain English.',
170
+ },
171
+ {
172
+ role: 'system',
173
+ name: 'example_user',
174
+ content: 'New synergies will help drive top-line growth.',
175
+ },
176
+ {
177
+ role: 'system',
178
+ name: 'example_assistant',
179
+ content: 'Things working well together will increase revenue.',
180
+ },
181
+ {
182
+ role: 'system',
183
+ name: 'example_user',
184
+ content:
185
+ "Let's circle back when we have more bandwidth to touch base on opportunities for increased leverage.",
186
+ },
187
+ {
188
+ role: 'system',
189
+ name: 'example_assistant',
190
+ content: "Let's talk later when we're less busy about how to do better.",
191
+ },
192
+ {
193
+ role: 'user',
194
+ content:
195
+ "This late pivot means we don't have time to boil the ocean for the client deliverable.",
196
+ },
197
+ ] as const
198
+
199
+ describe.each(chatModelNames)('%s', (modelName) => {
200
+ const encoding = GptEncoding.getEncodingApiForModel(
201
+ modelName,
202
+ resolveEncoding,
203
+ )
204
+ const expectedEncodedLength = modelName.startsWith('gpt-3.5-turbo')
205
+ ? 127
206
+ : 121
207
+
208
+ describe('chat functionality', () => {
209
+ it('encodes a chat correctly', () => {
210
+ const encoded = encoding.encodeChat(exampleMessages)
211
+ expect(encoded).toMatchSnapshot()
212
+ expect(encoded).toHaveLength(expectedEncodedLength)
213
+
214
+ const decoded = encoding.decode(encoded)
215
+ expect(decoded).toMatchSnapshot()
216
+ })
217
+
218
+ it('isWithinTokenLimit: false', () => {
219
+ const isWithinTokenLimit = encoding.isWithinTokenLimit(
220
+ exampleMessages,
221
+ 50,
222
+ )
223
+ expect(isWithinTokenLimit).toBe(false)
224
+ })
225
+ it('isWithinTokenLimit: true (number)', () => {
226
+ const isWithinTokenLimit = encoding.isWithinTokenLimit(
227
+ exampleMessages,
228
+ 150,
229
+ )
230
+ expect(isWithinTokenLimit).toBe(expectedEncodedLength)
231
+ })
232
+ })
233
+ })
234
+
158
235
  function loadTestPlans() {
159
236
  const testPlanPath = path.join(__dirname, '../data/TestPlans.txt')
160
237
  const testPlanData = fs.readFileSync(testPlanPath, 'utf8')