gpt-tokenizer 2.8.0 → 2.9.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 (410) hide show
  1. package/README.md +22 -4
  2. package/cjs/BytePairEncodingCore.d.ts +1 -0
  3. package/cjs/BytePairEncodingCore.js +3 -0
  4. package/cjs/BytePairEncodingCore.js.map +1 -1
  5. package/cjs/GptEncoding.d.ts +12 -2
  6. package/cjs/GptEncoding.js +43 -0
  7. package/cjs/GptEncoding.js.map +1 -1
  8. package/cjs/GptEncoding.test.js +121 -64
  9. package/cjs/GptEncoding.test.js.map +1 -1
  10. package/cjs/encoding/cl100k_base.d.ts +2 -2
  11. package/cjs/encoding/cl100k_base.js +4 -2
  12. package/cjs/encoding/cl100k_base.js.map +1 -1
  13. package/cjs/encoding/o200k_base.d.ts +2 -2
  14. package/cjs/encoding/o200k_base.js +4 -2
  15. package/cjs/encoding/o200k_base.js.map +1 -1
  16. package/cjs/encoding/p50k_base.d.ts +2 -2
  17. package/cjs/encoding/p50k_base.js +4 -2
  18. package/cjs/encoding/p50k_base.js.map +1 -1
  19. package/cjs/encoding/p50k_edit.d.ts +2 -2
  20. package/cjs/encoding/p50k_edit.js +6 -2
  21. package/cjs/encoding/p50k_edit.js.map +1 -1
  22. package/cjs/encoding/r50k_base.d.ts +2 -2
  23. package/cjs/encoding/r50k_base.js +4 -2
  24. package/cjs/encoding/r50k_base.js.map +1 -1
  25. package/cjs/extraApis.test.js +19 -17
  26. package/cjs/extraApis.test.js.map +1 -1
  27. package/cjs/model/babbage-002-finetune.d.ts +2 -0
  28. package/cjs/model/babbage-002-finetune.js +25 -0
  29. package/cjs/model/babbage-002-finetune.js.map +1 -0
  30. package/cjs/model/davinci-002-finetune.d.ts +2 -0
  31. package/cjs/model/davinci-002-finetune.js +25 -0
  32. package/cjs/model/davinci-002-finetune.js.map +1 -0
  33. package/cjs/model/gpt-3.5-turbo-0125.d.ts +2 -2
  34. package/cjs/model/gpt-3.5-turbo-0125.js +4 -2
  35. package/cjs/model/gpt-3.5-turbo-0125.js.map +1 -1
  36. package/cjs/model/gpt-3.5-turbo-0301.d.ts +2 -2
  37. package/cjs/model/gpt-3.5-turbo-0301.js +4 -2
  38. package/cjs/model/gpt-3.5-turbo-0301.js.map +1 -1
  39. package/cjs/model/gpt-3.5-turbo-0613.d.ts +2 -2
  40. package/cjs/model/gpt-3.5-turbo-0613.js +4 -2
  41. package/cjs/model/gpt-3.5-turbo-0613.js.map +1 -1
  42. package/cjs/model/gpt-3.5-turbo-1106.d.ts +2 -2
  43. package/cjs/model/gpt-3.5-turbo-1106.js +4 -2
  44. package/cjs/model/gpt-3.5-turbo-1106.js.map +1 -1
  45. package/cjs/model/gpt-3.5-turbo-16k-0613.d.ts +2 -2
  46. package/cjs/model/gpt-3.5-turbo-16k-0613.js +4 -2
  47. package/cjs/model/gpt-3.5-turbo-16k-0613.js.map +1 -1
  48. package/cjs/model/gpt-3.5-turbo-16k.d.ts +2 -2
  49. package/cjs/model/gpt-3.5-turbo-16k.js +4 -2
  50. package/cjs/model/gpt-3.5-turbo-16k.js.map +1 -1
  51. package/cjs/model/gpt-3.5-turbo-finetune.d.ts +2 -2
  52. package/cjs/model/gpt-3.5-turbo-finetune.js +4 -2
  53. package/cjs/model/gpt-3.5-turbo-finetune.js.map +1 -1
  54. package/cjs/model/gpt-3.5-turbo.d.ts +2 -2
  55. package/cjs/model/gpt-3.5-turbo.js +4 -2
  56. package/cjs/model/gpt-3.5-turbo.js.map +1 -1
  57. package/cjs/model/gpt-4-0125-preview.d.ts +2 -2
  58. package/cjs/model/gpt-4-0125-preview.js +4 -2
  59. package/cjs/model/gpt-4-0125-preview.js.map +1 -1
  60. package/cjs/model/gpt-4-0314.d.ts +2 -2
  61. package/cjs/model/gpt-4-0314.js +4 -2
  62. package/cjs/model/gpt-4-0314.js.map +1 -1
  63. package/cjs/model/gpt-4-0613.d.ts +2 -2
  64. package/cjs/model/gpt-4-0613.js +4 -2
  65. package/cjs/model/gpt-4-0613.js.map +1 -1
  66. package/cjs/model/gpt-4-1106-preview.d.ts +2 -2
  67. package/cjs/model/gpt-4-1106-preview.js +4 -2
  68. package/cjs/model/gpt-4-1106-preview.js.map +1 -1
  69. package/cjs/model/gpt-4-1106-vision-preview.d.ts +2 -2
  70. package/cjs/model/gpt-4-1106-vision-preview.js +4 -2
  71. package/cjs/model/gpt-4-1106-vision-preview.js.map +1 -1
  72. package/cjs/model/gpt-4-32k-0314.d.ts +2 -2
  73. package/cjs/model/gpt-4-32k-0314.js +4 -2
  74. package/cjs/model/gpt-4-32k-0314.js.map +1 -1
  75. package/cjs/model/gpt-4-32k-0613.d.ts +2 -2
  76. package/cjs/model/gpt-4-32k-0613.js +4 -2
  77. package/cjs/model/gpt-4-32k-0613.js.map +1 -1
  78. package/cjs/model/gpt-4-32k.d.ts +2 -2
  79. package/cjs/model/gpt-4-32k.js +4 -2
  80. package/cjs/model/gpt-4-32k.js.map +1 -1
  81. package/cjs/model/gpt-4-turbo-2024-04-09.d.ts +2 -2
  82. package/cjs/model/gpt-4-turbo-2024-04-09.js +4 -2
  83. package/cjs/model/gpt-4-turbo-2024-04-09.js.map +1 -1
  84. package/cjs/model/gpt-4-turbo-preview.d.ts +2 -2
  85. package/cjs/model/gpt-4-turbo-preview.js +4 -2
  86. package/cjs/model/gpt-4-turbo-preview.js.map +1 -1
  87. package/cjs/model/gpt-4-turbo.d.ts +2 -2
  88. package/cjs/model/gpt-4-turbo.js +4 -2
  89. package/cjs/model/gpt-4-turbo.js.map +1 -1
  90. package/cjs/model/gpt-4-vision-preview.d.ts +2 -2
  91. package/cjs/model/gpt-4-vision-preview.js +4 -2
  92. package/cjs/model/gpt-4-vision-preview.js.map +1 -1
  93. package/cjs/model/gpt-4.d.ts +2 -2
  94. package/cjs/model/gpt-4.js +4 -2
  95. package/cjs/model/gpt-4.js.map +1 -1
  96. package/cjs/model/gpt-4o-2024-05-13.d.ts +2 -2
  97. package/cjs/model/gpt-4o-2024-05-13.js +4 -2
  98. package/cjs/model/gpt-4o-2024-05-13.js.map +1 -1
  99. package/cjs/model/gpt-4o-2024-08-06-finetune.d.ts +2 -2
  100. package/cjs/model/gpt-4o-2024-08-06-finetune.js +4 -2
  101. package/cjs/model/gpt-4o-2024-08-06-finetune.js.map +1 -1
  102. package/cjs/model/gpt-4o-2024-08-06.d.ts +2 -2
  103. package/cjs/model/gpt-4o-2024-08-06.js +4 -2
  104. package/cjs/model/gpt-4o-2024-08-06.js.map +1 -1
  105. package/cjs/model/gpt-4o-2024-11-20.d.ts +7 -0
  106. package/cjs/model/gpt-4o-2024-11-20.js +44 -0
  107. package/cjs/model/gpt-4o-2024-11-20.js.map +1 -0
  108. package/cjs/model/gpt-4o-audio-preview-2024-10-01.d.ts +2 -2
  109. package/cjs/model/gpt-4o-audio-preview-2024-10-01.js +4 -2
  110. package/cjs/model/gpt-4o-audio-preview-2024-10-01.js.map +1 -1
  111. package/cjs/model/gpt-4o-audio-preview-2024-12-17.d.ts +7 -0
  112. package/cjs/model/gpt-4o-audio-preview-2024-12-17.js +44 -0
  113. package/cjs/model/gpt-4o-audio-preview-2024-12-17.js.map +1 -0
  114. package/cjs/model/gpt-4o-audio-preview.d.ts +2 -2
  115. package/cjs/model/gpt-4o-audio-preview.js +4 -2
  116. package/cjs/model/gpt-4o-audio-preview.js.map +1 -1
  117. package/cjs/model/gpt-4o-mini-2024-07-18-finetune.d.ts +2 -2
  118. package/cjs/model/gpt-4o-mini-2024-07-18-finetune.js +4 -2
  119. package/cjs/model/gpt-4o-mini-2024-07-18-finetune.js.map +1 -1
  120. package/cjs/model/gpt-4o-mini-2024-07-18.d.ts +2 -2
  121. package/cjs/model/gpt-4o-mini-2024-07-18.js +4 -2
  122. package/cjs/model/gpt-4o-mini-2024-07-18.js.map +1 -1
  123. package/cjs/model/gpt-4o-mini-audio-preview-2024-12-17.d.ts +7 -0
  124. package/cjs/model/gpt-4o-mini-audio-preview-2024-12-17.js +44 -0
  125. package/cjs/model/gpt-4o-mini-audio-preview-2024-12-17.js.map +1 -0
  126. package/cjs/model/gpt-4o-mini-audio-preview.d.ts +7 -0
  127. package/cjs/model/gpt-4o-mini-audio-preview.js +44 -0
  128. package/cjs/model/gpt-4o-mini-audio-preview.js.map +1 -0
  129. package/cjs/model/gpt-4o-mini-realtime-preview-2024-12-17.d.ts +7 -0
  130. package/cjs/model/gpt-4o-mini-realtime-preview-2024-12-17.js +44 -0
  131. package/cjs/model/gpt-4o-mini-realtime-preview-2024-12-17.js.map +1 -0
  132. package/cjs/model/gpt-4o-mini-realtime-preview.d.ts +7 -0
  133. package/cjs/model/gpt-4o-mini-realtime-preview.js +44 -0
  134. package/cjs/model/gpt-4o-mini-realtime-preview.js.map +1 -0
  135. package/cjs/model/gpt-4o-mini-training-2024-07-18.d.ts +2 -2
  136. package/cjs/model/gpt-4o-mini-training-2024-07-18.js +4 -2
  137. package/cjs/model/gpt-4o-mini-training-2024-07-18.js.map +1 -1
  138. package/cjs/model/gpt-4o-mini-training.d.ts +2 -2
  139. package/cjs/model/gpt-4o-mini-training.js +4 -2
  140. package/cjs/model/gpt-4o-mini-training.js.map +1 -1
  141. package/cjs/model/gpt-4o-mini.d.ts +2 -2
  142. package/cjs/model/gpt-4o-mini.js +4 -2
  143. package/cjs/model/gpt-4o-mini.js.map +1 -1
  144. package/cjs/model/gpt-4o-realtime-preview-2024-10-01.d.ts +2 -2
  145. package/cjs/model/gpt-4o-realtime-preview-2024-10-01.js +4 -2
  146. package/cjs/model/gpt-4o-realtime-preview-2024-10-01.js.map +1 -1
  147. package/cjs/model/gpt-4o-realtime-preview-2024-12-17.d.ts +7 -0
  148. package/cjs/model/gpt-4o-realtime-preview-2024-12-17.js +44 -0
  149. package/cjs/model/gpt-4o-realtime-preview-2024-12-17.js.map +1 -0
  150. package/cjs/model/gpt-4o-realtime-preview.d.ts +2 -2
  151. package/cjs/model/gpt-4o-realtime-preview.js +4 -2
  152. package/cjs/model/gpt-4o-realtime-preview.js.map +1 -1
  153. package/cjs/model/gpt-4o.d.ts +2 -2
  154. package/cjs/model/gpt-4o.js +4 -2
  155. package/cjs/model/gpt-4o.js.map +1 -1
  156. package/cjs/model/o1-2024-12-17.d.ts +2 -0
  157. package/cjs/model/o1-2024-12-17.js +25 -0
  158. package/cjs/model/o1-2024-12-17.js.map +1 -0
  159. package/cjs/model/o1.d.ts +2 -0
  160. package/cjs/model/o1.js +25 -0
  161. package/cjs/model/o1.js.map +1 -0
  162. package/cjs/model/o3-mini.d.ts +2 -0
  163. package/cjs/model/o3-mini.js +25 -0
  164. package/cjs/model/o3-mini.js.map +1 -0
  165. package/cjs/models.d.ts +38 -10
  166. package/cjs/models.js +201 -8
  167. package/cjs/models.js.map +1 -1
  168. package/cjs/otherRuntimes.test.d.ts +4 -0
  169. package/cjs/otherRuntimes.test.js +22 -0
  170. package/cjs/otherRuntimes.test.js.map +1 -0
  171. package/cjs/resolveEncodingAsync.js +17 -7
  172. package/cjs/resolveEncodingAsync.js.map +1 -1
  173. package/dist/cl100k_base.js +1 -1
  174. package/dist/cl100k_base.js.map +1 -1
  175. package/dist/o200k_base.js +1 -1
  176. package/dist/o200k_base.js.map +1 -1
  177. package/dist/p50k_base.js +1 -1
  178. package/dist/p50k_base.js.map +1 -1
  179. package/dist/p50k_edit.js +1 -1
  180. package/dist/p50k_edit.js.map +1 -1
  181. package/dist/r50k_base.js +1 -1
  182. package/dist/r50k_base.js.map +1 -1
  183. package/esm/BytePairEncodingCore.d.ts +1 -0
  184. package/esm/BytePairEncodingCore.js +3 -0
  185. package/esm/BytePairEncodingCore.js.map +1 -1
  186. package/esm/GptEncoding.d.ts +12 -2
  187. package/esm/GptEncoding.js +43 -0
  188. package/esm/GptEncoding.js.map +1 -1
  189. package/esm/GptEncoding.test.js +77 -20
  190. package/esm/GptEncoding.test.js.map +1 -1
  191. package/esm/encoding/cl100k_base.d.ts +2 -2
  192. package/esm/encoding/cl100k_base.js +2 -2
  193. package/esm/encoding/cl100k_base.js.map +1 -1
  194. package/esm/encoding/o200k_base.d.ts +2 -2
  195. package/esm/encoding/o200k_base.js +2 -2
  196. package/esm/encoding/o200k_base.js.map +1 -1
  197. package/esm/encoding/p50k_base.d.ts +2 -2
  198. package/esm/encoding/p50k_base.js +2 -2
  199. package/esm/encoding/p50k_base.js.map +1 -1
  200. package/esm/encoding/p50k_edit.d.ts +2 -2
  201. package/esm/encoding/p50k_edit.js +2 -2
  202. package/esm/encoding/p50k_edit.js.map +1 -1
  203. package/esm/encoding/r50k_base.d.ts +2 -2
  204. package/esm/encoding/r50k_base.js +2 -2
  205. package/esm/encoding/r50k_base.js.map +1 -1
  206. package/esm/extraApis.test.js +2 -0
  207. package/esm/extraApis.test.js.map +1 -1
  208. package/esm/model/babbage-002-finetune.d.ts +2 -0
  209. package/esm/model/babbage-002-finetune.js +4 -0
  210. package/esm/model/babbage-002-finetune.js.map +1 -0
  211. package/esm/model/davinci-002-finetune.d.ts +2 -0
  212. package/esm/model/davinci-002-finetune.js +4 -0
  213. package/esm/model/davinci-002-finetune.js.map +1 -0
  214. package/esm/model/gpt-3.5-turbo-0125.d.ts +2 -2
  215. package/esm/model/gpt-3.5-turbo-0125.js +2 -2
  216. package/esm/model/gpt-3.5-turbo-0125.js.map +1 -1
  217. package/esm/model/gpt-3.5-turbo-0301.d.ts +2 -2
  218. package/esm/model/gpt-3.5-turbo-0301.js +2 -2
  219. package/esm/model/gpt-3.5-turbo-0301.js.map +1 -1
  220. package/esm/model/gpt-3.5-turbo-0613.d.ts +2 -2
  221. package/esm/model/gpt-3.5-turbo-0613.js +2 -2
  222. package/esm/model/gpt-3.5-turbo-0613.js.map +1 -1
  223. package/esm/model/gpt-3.5-turbo-1106.d.ts +2 -2
  224. package/esm/model/gpt-3.5-turbo-1106.js +2 -2
  225. package/esm/model/gpt-3.5-turbo-1106.js.map +1 -1
  226. package/esm/model/gpt-3.5-turbo-16k-0613.d.ts +2 -2
  227. package/esm/model/gpt-3.5-turbo-16k-0613.js +2 -2
  228. package/esm/model/gpt-3.5-turbo-16k-0613.js.map +1 -1
  229. package/esm/model/gpt-3.5-turbo-16k.d.ts +2 -2
  230. package/esm/model/gpt-3.5-turbo-16k.js +2 -2
  231. package/esm/model/gpt-3.5-turbo-16k.js.map +1 -1
  232. package/esm/model/gpt-3.5-turbo-finetune.d.ts +2 -2
  233. package/esm/model/gpt-3.5-turbo-finetune.js +2 -2
  234. package/esm/model/gpt-3.5-turbo-finetune.js.map +1 -1
  235. package/esm/model/gpt-3.5-turbo.d.ts +2 -2
  236. package/esm/model/gpt-3.5-turbo.js +2 -2
  237. package/esm/model/gpt-3.5-turbo.js.map +1 -1
  238. package/esm/model/gpt-4-0125-preview.d.ts +2 -2
  239. package/esm/model/gpt-4-0125-preview.js +2 -2
  240. package/esm/model/gpt-4-0125-preview.js.map +1 -1
  241. package/esm/model/gpt-4-0314.d.ts +2 -2
  242. package/esm/model/gpt-4-0314.js +2 -2
  243. package/esm/model/gpt-4-0314.js.map +1 -1
  244. package/esm/model/gpt-4-0613.d.ts +2 -2
  245. package/esm/model/gpt-4-0613.js +2 -2
  246. package/esm/model/gpt-4-0613.js.map +1 -1
  247. package/esm/model/gpt-4-1106-preview.d.ts +2 -2
  248. package/esm/model/gpt-4-1106-preview.js +2 -2
  249. package/esm/model/gpt-4-1106-preview.js.map +1 -1
  250. package/esm/model/gpt-4-1106-vision-preview.d.ts +2 -2
  251. package/esm/model/gpt-4-1106-vision-preview.js +2 -2
  252. package/esm/model/gpt-4-1106-vision-preview.js.map +1 -1
  253. package/esm/model/gpt-4-32k-0314.d.ts +2 -2
  254. package/esm/model/gpt-4-32k-0314.js +2 -2
  255. package/esm/model/gpt-4-32k-0314.js.map +1 -1
  256. package/esm/model/gpt-4-32k-0613.d.ts +2 -2
  257. package/esm/model/gpt-4-32k-0613.js +2 -2
  258. package/esm/model/gpt-4-32k-0613.js.map +1 -1
  259. package/esm/model/gpt-4-32k.d.ts +2 -2
  260. package/esm/model/gpt-4-32k.js +2 -2
  261. package/esm/model/gpt-4-32k.js.map +1 -1
  262. package/esm/model/gpt-4-turbo-2024-04-09.d.ts +2 -2
  263. package/esm/model/gpt-4-turbo-2024-04-09.js +2 -2
  264. package/esm/model/gpt-4-turbo-2024-04-09.js.map +1 -1
  265. package/esm/model/gpt-4-turbo-preview.d.ts +2 -2
  266. package/esm/model/gpt-4-turbo-preview.js +2 -2
  267. package/esm/model/gpt-4-turbo-preview.js.map +1 -1
  268. package/esm/model/gpt-4-turbo.d.ts +2 -2
  269. package/esm/model/gpt-4-turbo.js +2 -2
  270. package/esm/model/gpt-4-turbo.js.map +1 -1
  271. package/esm/model/gpt-4-vision-preview.d.ts +2 -2
  272. package/esm/model/gpt-4-vision-preview.js +2 -2
  273. package/esm/model/gpt-4-vision-preview.js.map +1 -1
  274. package/esm/model/gpt-4.d.ts +2 -2
  275. package/esm/model/gpt-4.js +2 -2
  276. package/esm/model/gpt-4.js.map +1 -1
  277. package/esm/model/gpt-4o-2024-05-13.d.ts +2 -2
  278. package/esm/model/gpt-4o-2024-05-13.js +2 -2
  279. package/esm/model/gpt-4o-2024-05-13.js.map +1 -1
  280. package/esm/model/gpt-4o-2024-08-06-finetune.d.ts +2 -2
  281. package/esm/model/gpt-4o-2024-08-06-finetune.js +2 -2
  282. package/esm/model/gpt-4o-2024-08-06-finetune.js.map +1 -1
  283. package/esm/model/gpt-4o-2024-08-06.d.ts +2 -2
  284. package/esm/model/gpt-4o-2024-08-06.js +2 -2
  285. package/esm/model/gpt-4o-2024-08-06.js.map +1 -1
  286. package/esm/model/gpt-4o-2024-11-20.d.ts +7 -0
  287. package/esm/model/gpt-4o-2024-11-20.js +12 -0
  288. package/esm/model/gpt-4o-2024-11-20.js.map +1 -0
  289. package/esm/model/gpt-4o-audio-preview-2024-10-01.d.ts +2 -2
  290. package/esm/model/gpt-4o-audio-preview-2024-10-01.js +2 -2
  291. package/esm/model/gpt-4o-audio-preview-2024-10-01.js.map +1 -1
  292. package/esm/model/gpt-4o-audio-preview-2024-12-17.d.ts +7 -0
  293. package/esm/model/gpt-4o-audio-preview-2024-12-17.js +12 -0
  294. package/esm/model/gpt-4o-audio-preview-2024-12-17.js.map +1 -0
  295. package/esm/model/gpt-4o-audio-preview.d.ts +2 -2
  296. package/esm/model/gpt-4o-audio-preview.js +2 -2
  297. package/esm/model/gpt-4o-audio-preview.js.map +1 -1
  298. package/esm/model/gpt-4o-mini-2024-07-18-finetune.d.ts +2 -2
  299. package/esm/model/gpt-4o-mini-2024-07-18-finetune.js +2 -2
  300. package/esm/model/gpt-4o-mini-2024-07-18-finetune.js.map +1 -1
  301. package/esm/model/gpt-4o-mini-2024-07-18.d.ts +2 -2
  302. package/esm/model/gpt-4o-mini-2024-07-18.js +2 -2
  303. package/esm/model/gpt-4o-mini-2024-07-18.js.map +1 -1
  304. package/esm/model/gpt-4o-mini-audio-preview-2024-12-17.d.ts +7 -0
  305. package/esm/model/gpt-4o-mini-audio-preview-2024-12-17.js +12 -0
  306. package/esm/model/gpt-4o-mini-audio-preview-2024-12-17.js.map +1 -0
  307. package/esm/model/gpt-4o-mini-audio-preview.d.ts +7 -0
  308. package/esm/model/gpt-4o-mini-audio-preview.js +12 -0
  309. package/esm/model/gpt-4o-mini-audio-preview.js.map +1 -0
  310. package/esm/model/gpt-4o-mini-realtime-preview-2024-12-17.d.ts +7 -0
  311. package/esm/model/gpt-4o-mini-realtime-preview-2024-12-17.js +12 -0
  312. package/esm/model/gpt-4o-mini-realtime-preview-2024-12-17.js.map +1 -0
  313. package/esm/model/gpt-4o-mini-realtime-preview.d.ts +7 -0
  314. package/esm/model/gpt-4o-mini-realtime-preview.js +12 -0
  315. package/esm/model/gpt-4o-mini-realtime-preview.js.map +1 -0
  316. package/esm/model/gpt-4o-mini-training-2024-07-18.d.ts +2 -2
  317. package/esm/model/gpt-4o-mini-training-2024-07-18.js +2 -2
  318. package/esm/model/gpt-4o-mini-training-2024-07-18.js.map +1 -1
  319. package/esm/model/gpt-4o-mini-training.d.ts +2 -2
  320. package/esm/model/gpt-4o-mini-training.js +2 -2
  321. package/esm/model/gpt-4o-mini-training.js.map +1 -1
  322. package/esm/model/gpt-4o-mini.d.ts +2 -2
  323. package/esm/model/gpt-4o-mini.js +2 -2
  324. package/esm/model/gpt-4o-mini.js.map +1 -1
  325. package/esm/model/gpt-4o-realtime-preview-2024-10-01.d.ts +2 -2
  326. package/esm/model/gpt-4o-realtime-preview-2024-10-01.js +2 -2
  327. package/esm/model/gpt-4o-realtime-preview-2024-10-01.js.map +1 -1
  328. package/esm/model/gpt-4o-realtime-preview-2024-12-17.d.ts +7 -0
  329. package/esm/model/gpt-4o-realtime-preview-2024-12-17.js +12 -0
  330. package/esm/model/gpt-4o-realtime-preview-2024-12-17.js.map +1 -0
  331. package/esm/model/gpt-4o-realtime-preview.d.ts +2 -2
  332. package/esm/model/gpt-4o-realtime-preview.js +2 -2
  333. package/esm/model/gpt-4o-realtime-preview.js.map +1 -1
  334. package/esm/model/gpt-4o.d.ts +2 -2
  335. package/esm/model/gpt-4o.js +2 -2
  336. package/esm/model/gpt-4o.js.map +1 -1
  337. package/esm/model/o1-2024-12-17.d.ts +2 -0
  338. package/esm/model/o1-2024-12-17.js +4 -0
  339. package/esm/model/o1-2024-12-17.js.map +1 -0
  340. package/esm/model/o1.d.ts +2 -0
  341. package/esm/model/o1.js +4 -0
  342. package/esm/model/o1.js.map +1 -0
  343. package/esm/model/o3-mini.d.ts +2 -0
  344. package/esm/model/o3-mini.js +4 -0
  345. package/esm/model/o3-mini.js.map +1 -0
  346. package/esm/models.d.ts +38 -10
  347. package/esm/models.js +201 -8
  348. package/esm/models.js.map +1 -1
  349. package/esm/otherRuntimes.test.d.ts +4 -0
  350. package/esm/otherRuntimes.test.js +20 -0
  351. package/esm/otherRuntimes.test.js.map +1 -0
  352. package/package.json +9 -5
  353. package/src/BytePairEncodingCore.ts +4 -0
  354. package/src/GptEncoding.test.ts +102 -20
  355. package/src/GptEncoding.ts +56 -0
  356. package/src/__snapshots__/GptEncoding.test.ts.snap +958 -69
  357. package/src/encoding/cl100k_base.ts +4 -0
  358. package/src/encoding/o200k_base.ts +4 -0
  359. package/src/encoding/p50k_base.ts +4 -0
  360. package/src/encoding/p50k_edit.ts +8 -0
  361. package/src/encoding/r50k_base.ts +4 -0
  362. package/src/extraApis.test.ts +2 -0
  363. package/src/model/babbage-002-finetune.ts +3 -0
  364. package/src/model/davinci-002-finetune.ts +3 -0
  365. package/src/model/gpt-3.5-turbo-0125.ts +4 -0
  366. package/src/model/gpt-3.5-turbo-0301.ts +4 -0
  367. package/src/model/gpt-3.5-turbo-0613.ts +4 -0
  368. package/src/model/gpt-3.5-turbo-1106.ts +4 -0
  369. package/src/model/gpt-3.5-turbo-16k-0613.ts +4 -0
  370. package/src/model/gpt-3.5-turbo-16k.ts +4 -0
  371. package/src/model/gpt-3.5-turbo-finetune.ts +4 -0
  372. package/src/model/gpt-3.5-turbo.ts +4 -0
  373. package/src/model/gpt-4-0125-preview.ts +4 -0
  374. package/src/model/gpt-4-0314.ts +4 -0
  375. package/src/model/gpt-4-0613.ts +4 -0
  376. package/src/model/gpt-4-1106-preview.ts +4 -0
  377. package/src/model/gpt-4-1106-vision-preview.ts +4 -0
  378. package/src/model/gpt-4-32k-0314.ts +4 -0
  379. package/src/model/gpt-4-32k-0613.ts +4 -0
  380. package/src/model/gpt-4-32k.ts +4 -0
  381. package/src/model/gpt-4-turbo-2024-04-09.ts +4 -0
  382. package/src/model/gpt-4-turbo-preview.ts +4 -0
  383. package/src/model/gpt-4-turbo.ts +4 -0
  384. package/src/model/gpt-4-vision-preview.ts +4 -0
  385. package/src/model/gpt-4.ts +4 -0
  386. package/src/model/gpt-4o-2024-05-13.ts +4 -0
  387. package/src/model/gpt-4o-2024-08-06-finetune.ts +4 -0
  388. package/src/model/gpt-4o-2024-08-06.ts +4 -0
  389. package/src/model/gpt-4o-2024-11-20.ts +40 -0
  390. package/src/model/gpt-4o-audio-preview-2024-10-01.ts +4 -0
  391. package/src/model/gpt-4o-audio-preview-2024-12-17.ts +40 -0
  392. package/src/model/gpt-4o-audio-preview.ts +4 -0
  393. package/src/model/gpt-4o-mini-2024-07-18-finetune.ts +4 -0
  394. package/src/model/gpt-4o-mini-2024-07-18.ts +4 -0
  395. package/src/model/gpt-4o-mini-audio-preview-2024-12-17.ts +40 -0
  396. package/src/model/gpt-4o-mini-audio-preview.ts +40 -0
  397. package/src/model/gpt-4o-mini-realtime-preview-2024-12-17.ts +40 -0
  398. package/src/model/gpt-4o-mini-realtime-preview.ts +40 -0
  399. package/src/model/gpt-4o-mini-training-2024-07-18.ts +4 -0
  400. package/src/model/gpt-4o-mini-training.ts +4 -0
  401. package/src/model/gpt-4o-mini.ts +4 -0
  402. package/src/model/gpt-4o-realtime-preview-2024-10-01.ts +4 -0
  403. package/src/model/gpt-4o-realtime-preview-2024-12-17.ts +40 -0
  404. package/src/model/gpt-4o-realtime-preview.ts +4 -0
  405. package/src/model/gpt-4o.ts +4 -0
  406. package/src/model/o1-2024-12-17.ts +3 -0
  407. package/src/model/o1.ts +3 -0
  408. package/src/model/o3-mini.ts +3 -0
  409. package/src/models.ts +229 -19
  410. package/src/otherRuntimes.test.ts +23 -0
@@ -1,5 +1,7 @@
1
1
  import fs from 'fs'
2
2
  import path from 'path'
3
+ // eslint-disable-next-line import/no-extraneous-dependencies
4
+ import { describe, expect, test } from 'vitest'
3
5
  import { ALL_SPECIAL_TOKENS } from './constants.js'
4
6
  import { type ChatMessage, GptEncoding } from './GptEncoding.js'
5
7
  import {
@@ -8,7 +10,9 @@ import {
8
10
  chatModelParams,
9
11
  encodingNames,
10
12
  } from './mapping.js'
13
+ import { models } from './models.js'
11
14
  import { resolveEncoding } from './resolveEncoding.js'
15
+ import { EndOfText } from './specialTokens.js'
12
16
 
13
17
  const sharedResults = {
14
18
  space: [220],
@@ -66,8 +70,8 @@ const offsetPrompts = [
66
70
  // Basic prompt with "hello world"
67
71
  'hello world',
68
72
 
69
- // Basic prompt with special token "<|endoftext|>"
70
- 'hello world<|endoftext|> green cow',
73
+ // Basic prompt with special token end of text token
74
+ `hello world${EndOfText} green cow`,
71
75
 
72
76
  // Chinese text: "我非常渴望与人工智能一起工作"
73
77
  '我非常渴望与人工智能一起工作',
@@ -96,7 +100,7 @@ describe.each(encodingNames)('%s', (encodingName: EncodingName) => {
96
100
  } = encoding
97
101
 
98
102
  describe('encode and decode', () => {
99
- it.each(offsetPrompts)('offset prompt: %s', (str) => {
103
+ test.each(offsetPrompts)('offset prompt: %s', (str) => {
100
104
  expect(
101
105
  decode(encode(str, { allowedSpecial: ALL_SPECIAL_TOKENS })),
102
106
  ).toEqual(str)
@@ -105,7 +109,7 @@ describe.each(encodingNames)('%s', (encodingName: EncodingName) => {
105
109
 
106
110
  describe('basic functionality', () => {
107
111
  const result = results[encodingName]
108
- it('empty string', () => {
112
+ test('empty string', () => {
109
113
  const str = ''
110
114
  expect(encode(str)).toEqual([])
111
115
  expect(decode(encode(str))).toEqual(str)
@@ -113,7 +117,7 @@ describe.each(encodingNames)('%s', (encodingName: EncodingName) => {
113
117
  expect(isWithinTokenLimit(str, 3)).toBe(0)
114
118
  })
115
119
 
116
- it('space', () => {
120
+ test('space', () => {
117
121
  const str = ' '
118
122
  expect(encode(str)).toEqual(result.space)
119
123
  expect(decode(encode(str))).toEqual(str)
@@ -121,13 +125,13 @@ describe.each(encodingNames)('%s', (encodingName: EncodingName) => {
121
125
  expect(isWithinTokenLimit(str, 0)).toBe(false)
122
126
  })
123
127
 
124
- it('tab', () => {
128
+ test('tab', () => {
125
129
  const str = '\t'
126
130
  expect(encode(str)).toEqual(result.tab)
127
131
  expect(decode(encode(str))).toEqual(str)
128
132
  })
129
133
 
130
- it('simple text', () => {
134
+ test('simple text', () => {
131
135
  const str = 'This is some text'
132
136
  expect(encode(str)).toEqual(result[str])
133
137
  expect(decode(encode(str))).toEqual(str)
@@ -135,14 +139,14 @@ describe.each(encodingNames)('%s', (encodingName: EncodingName) => {
135
139
  expect(isWithinTokenLimit(str, 5)).toBe(result[str].length)
136
140
  })
137
141
 
138
- it('multi-token word', () => {
142
+ test('multi-token word', () => {
139
143
  const str = 'indivisible'
140
144
  expect(encode(str)).toEqual(result.indivisible)
141
145
  expect(decode(encode(str))).toEqual(str)
142
146
  expect(isWithinTokenLimit(str, 3)).toBe(result.indivisible.length)
143
147
  })
144
148
 
145
- it('emojis', () => {
149
+ test('emojis', () => {
146
150
  const str = 'hello 👋 world 🌍'
147
151
  expect(encode(str)).toEqual(result[str])
148
152
  expect(decode(encode(str))).toEqual(str)
@@ -150,7 +154,7 @@ describe.each(encodingNames)('%s', (encodingName: EncodingName) => {
150
154
  expect(isWithinTokenLimit(str, 400)).toBe(result[str].length)
151
155
  })
152
156
 
153
- it('decode token-by-token via generator', () => {
157
+ test('decode token-by-token via generator', () => {
154
158
  const str = 'hello 👋 world 🌍'
155
159
  const generator = decodeGenerator(result[str])
156
160
  result.decodedHelloWorldTokens.forEach((token: string) => {
@@ -158,8 +162,8 @@ describe.each(encodingNames)('%s', (encodingName: EncodingName) => {
158
162
  })
159
163
  })
160
164
 
161
- it('encodes and decodes special tokens', () => {
162
- const str = 'hello <|endoftext|> world'
165
+ test('encodes and decodes special tokens', () => {
166
+ const str = `hello ${EndOfText} world`
163
167
  const encoded = encode(str, {
164
168
  allowedSpecial: ALL_SPECIAL_TOKENS,
165
169
  })
@@ -174,7 +178,7 @@ describe.each(encodingNames)('%s', (encodingName: EncodingName) => {
174
178
  }
175
179
  }
176
180
 
177
- it('decode token-by-token via async generator', async () => {
181
+ test('decode token-by-token via async generator', async () => {
178
182
  const generator = decodeAsyncGenerator(getHelloWorldTokensAsync())
179
183
  const decoded = [...result.decodedHelloWorldTokens]
180
184
  for await (const value of generator) {
@@ -182,14 +186,14 @@ describe.each(encodingNames)('%s', (encodingName: EncodingName) => {
182
186
  }
183
187
  })
184
188
 
185
- it('properties of Object', () => {
189
+ test('properties of Object', () => {
186
190
  const str = 'toString constructor hasOwnProperty valueOf'
187
191
 
188
192
  expect(encode(str)).toEqual(result[str])
189
193
  expect(decode(encode(str))).toEqual(str)
190
194
  })
191
195
 
192
- it('text with commas', () => {
196
+ test('text with commas', () => {
193
197
  const str = 'hello, I am a text, and I have commas. a,b,c'
194
198
  expect(decode(encode(str))).toEqual(str)
195
199
  expect(encode(str)).toStrictEqual(result[str])
@@ -200,10 +204,10 @@ describe.each(encodingNames)('%s', (encodingName: EncodingName) => {
200
204
 
201
205
  describe('test plan', () => {
202
206
  testPlans[encodingName].forEach(({ sample, encoded }) => {
203
- it(`encodes ${sample}`, () => {
207
+ test(`encodes ${sample}`, () => {
204
208
  expect(encode(sample)).toEqual(encoded)
205
209
  })
206
- it(`decodes ${sample}`, () => {
210
+ test(`decodes ${sample}`, () => {
207
211
  expect(decode(encoded)).toEqual(sample)
208
212
  })
209
213
  })
@@ -258,7 +262,7 @@ describe.each(chatModelNames)('%s', (modelName) => {
258
262
  : 121
259
263
 
260
264
  describe('chat functionality', () => {
261
- it('encodes a chat correctly', () => {
265
+ test('encodes a chat correctly', () => {
262
266
  const encoded = encoding.encodeChat(exampleMessages)
263
267
  expect(encoded).toMatchSnapshot()
264
268
  expect(encoded).toHaveLength(expectedEncodedLength)
@@ -267,14 +271,14 @@ describe.each(chatModelNames)('%s', (modelName) => {
267
271
  expect(decoded).toMatchSnapshot()
268
272
  })
269
273
 
270
- it('isWithinTokenLimit: false', () => {
274
+ test('isWithinTokenLimit: false', () => {
271
275
  const isWithinTokenLimit = encoding.isWithinTokenLimit(
272
276
  exampleMessages,
273
277
  50,
274
278
  )
275
279
  expect(isWithinTokenLimit).toBe(false)
276
280
  })
277
- it('isWithinTokenLimit: true (number)', () => {
281
+ test('isWithinTokenLimit: true (number)', () => {
278
282
  const isWithinTokenLimit = encoding.isWithinTokenLimit(
279
283
  exampleMessages,
280
284
  150,
@@ -284,6 +288,84 @@ describe.each(chatModelNames)('%s', (modelName) => {
284
288
  })
285
289
  })
286
290
 
291
+ describe('estimateCost functionality', () => {
292
+ const gpt4oEncoding = GptEncoding.getEncodingApiForModel(
293
+ 'gpt-4o',
294
+ resolveEncoding,
295
+ )
296
+ const gpt35Encoding = GptEncoding.getEncodingApiForModel(
297
+ 'gpt-3.5-turbo',
298
+ resolveEncoding,
299
+ )
300
+
301
+ test('estimates cost correctly for gpt-4o model', () => {
302
+ const tokenCount = 1_000
303
+ const cost = gpt4oEncoding.estimateCost(tokenCount)
304
+
305
+ // gpt-4o has $2.5 per million tokens for input and $10 per million tokens for output
306
+ expect(cost.input).toBeCloseTo(0.002_5, 6) // 1000/1M * $2.5
307
+ expect(cost.output).toBeCloseTo(0.01, 6) // 1000/1M * $10
308
+ expect(cost.batchInput).toBeCloseTo(0.001_25, 6) // 1000/1M * $1.25
309
+ expect(cost.batchOutput).toBeCloseTo(0.005, 6) // 1000/1M * $5
310
+ })
311
+
312
+ test('estimates cost correctly for gpt-3.5-turbo model', () => {
313
+ const tokenCount = 1_000
314
+ const cost = gpt35Encoding.estimateCost(tokenCount)
315
+
316
+ // gpt-3.5-turbo has $0.5 per million tokens for input and $1.5 per million tokens for output
317
+ expect(cost.input).toBeCloseTo(0.000_5, 6) // 1000/1M * $0.5
318
+ expect(cost.output).toBeCloseTo(0.001_5, 6) // 1000/1M * $1.5
319
+ expect(cost.batchInput).toBeCloseTo(0.000_25, 6) // 1000/1M * $0.25
320
+ expect(cost.batchOutput).toBeCloseTo(0.000_75, 6) // 1000/1M * $0.75
321
+ })
322
+
323
+ test('allows overriding model name', () => {
324
+ const tokenCount = 1_000
325
+ // Use gpt-4o encoding but override with gpt-3.5-turbo model name
326
+ const cost = gpt4oEncoding.estimateCost(tokenCount, 'gpt-3.5-turbo')
327
+
328
+ expect(cost.input).toBeCloseTo(0.000_5, 6) // 1000/1M * $0.5
329
+ expect(cost.output).toBeCloseTo(0.001_5, 6) // 1000/1M * $1.5
330
+ })
331
+
332
+ test('throws error when model name is not provided', () => {
333
+ const encoding = GptEncoding.getEncodingApi('cl100k_base', resolveEncoding)
334
+ const tokenCount = 1_000
335
+
336
+ // No model name was provided during initialization or function call
337
+ expect(() => encoding.estimateCost(tokenCount)).toThrow(
338
+ 'Model name must be provided either during initialization or passed in to the method.',
339
+ )
340
+ })
341
+
342
+ test('throws error for unknown model', () => {
343
+ const tokenCount = 1_000
344
+ expect(() =>
345
+ gpt4oEncoding.estimateCost(tokenCount, 'non-existent-model' as any),
346
+ ).toThrow('Unknown model: non-existent-model')
347
+ })
348
+
349
+ test('only includes properties that exist for the model', () => {
350
+ // Find a model that only has input cost but no output cost
351
+ const modelWithInputOnly = Object.entries(models).find(
352
+ ([_, model]) =>
353
+ model.cost?.input !== undefined && model.cost?.output === undefined,
354
+ )
355
+
356
+ if (modelWithInputOnly) {
357
+ const [modelName] = modelWithInputOnly
358
+ const cost = gpt4oEncoding.estimateCost(1_000, modelName as any)
359
+
360
+ expect(cost.input).toBeDefined()
361
+ expect(cost.output).toBeUndefined()
362
+ } else {
363
+ // Skip test if we can't find an appropriate model
364
+ console.log('Skipping test: no model with input-only cost found')
365
+ }
366
+ })
367
+ })
368
+
287
369
  function loadTestPlans() {
288
370
  const testPlanPath = path.join(__dirname, '../data/TestPlans.txt')
289
371
  const testPlanData = fs.readFileSync(testPlanPath, 'utf8')
@@ -15,6 +15,7 @@ import {
15
15
  type GetMergeableRanksFn,
16
16
  getEncodingParams,
17
17
  } from './modelParams.js'
18
+ import { type CostEstimate, models } from './models.js'
18
19
  import {
19
20
  EndOfPrompt,
20
21
  EndOfText,
@@ -128,6 +129,8 @@ export class GptEncoding {
128
129
  this.encodeChatGenerator = this.encodeChatGenerator.bind(this)
129
130
  this.countTokens = this.countTokens.bind(this)
130
131
  this.setMergeCacheSize = this.setMergeCacheSize.bind(this)
132
+ this.clearMergeCache = this.clearMergeCache.bind(this)
133
+ this.estimateCost = this.estimateCost.bind(this)
131
134
  this.modelName = modelName
132
135
  }
133
136
 
@@ -366,6 +369,10 @@ export class GptEncoding {
366
369
  this.bytePairEncodingCoreProcessor.setMergeCacheSize(size)
367
370
  }
368
371
 
372
+ clearMergeCache(): void {
373
+ this.bytePairEncodingCoreProcessor.clearMergeCache()
374
+ }
375
+
369
376
  decode(inputTokensToDecode: Iterable<number>): string {
370
377
  return this.bytePairEncodingCoreProcessor.decodeNative(inputTokensToDecode)
371
378
  }
@@ -455,4 +462,53 @@ export class GptEncoding {
455
462
 
456
463
  return buffer
457
464
  }
465
+
466
+ /**
467
+ * Estimates the cost of processing a given token count using the model's pricing.
468
+ *
469
+ * @param tokenCount - The number of tokens to estimate cost for
470
+ * @param modelName - Optional model name to use for cost calculation (defaults to this.modelName)
471
+ * @returns Cost estimate object with applicable price components (input, output, batchInput, batchOutput)
472
+ */
473
+ estimateCost(tokenCount: number, modelName = this.modelName): CostEstimate {
474
+ if (!modelName) {
475
+ throw new Error(
476
+ 'Model name must be provided either during initialization or passed in to the method.',
477
+ )
478
+ }
479
+
480
+ const model = models[modelName]
481
+ if (!model) {
482
+ throw new Error(`Unknown model: ${modelName}`)
483
+ }
484
+
485
+ if (!model.cost) {
486
+ throw new Error(`No cost information available for model: ${modelName}`)
487
+ }
488
+
489
+ const costPerMillion = model.cost
490
+ const result: CostEstimate = {}
491
+
492
+ // Calculate cost per token and multiply by token count
493
+ // eslint-disable-next-line no-magic-numbers
494
+ const millionTokens = tokenCount / 1_000_000
495
+
496
+ if (costPerMillion.input !== undefined) {
497
+ result.input = costPerMillion.input * millionTokens
498
+ }
499
+
500
+ if (costPerMillion.output !== undefined) {
501
+ result.output = costPerMillion.output * millionTokens
502
+ }
503
+
504
+ if (costPerMillion.batchInput !== undefined) {
505
+ result.batchInput = costPerMillion.batchInput * millionTokens
506
+ }
507
+
508
+ if (costPerMillion.batchOutput !== undefined) {
509
+ result.batchOutput = costPerMillion.batchOutput * millionTokens
510
+ }
511
+
512
+ return result
513
+ }
458
514
  }