PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / trunk
AI Engine – The Chatbot, AI Framework & MCP for WordPress vtrunk
3.6.2 3.6.1 3.6.0 3.5.9 3.5.8 3.5.7 3.5.6 3.5.5 3.5.4 3.5.3 3.5.2 3.5.1 3.5.0 3.4.9 3.4.8 3.4.7 0.2.1 1.6.91 0.2.2 1.6.92 0.2.3 1.6.93 0.2.4 1.6.94 0.2.5 1.6.95 0.2.6 1.6.96 0.2.7 1.6.97 0.2.8 1.6.98 0.2.9 1.6.99 0.3.0 1.7.0 0.3.1 1.7.1 0.3.2 1.7.2 0.3.3 1.7.3 0.3.4 1.7.4 0.3.5 1.7.5 0.3.6 1.7.6 0.4.0 1.7.7 0.4.1 1.7.8 0.4.2 1.7.9 0.4.3 1.8.0 0.4.4 1.8.1 0.4.5 1.8.2 0.4.6 1.8.3 0.4.7 1.8.4 0.4.8 1.8.5 0.4.9 1.8.6 0.5.0 1.8.7 0.5.1 1.8.8 0.5.2 1.8.9 0.5.3 1.9.0 0.5.4 1.9.1 0.5.5 1.9.2 0.5.6 1.9.3 0.5.7 1.9.4 0.5.8 1.9.5 0.5.9 1.9.6 0.6.0 1.9.7 0.6.1 1.9.8 0.6.2 1.9.81 0.6.3 1.9.82 0.6.4 1.9.83 0.6.5 1.9.84 0.6.6 1.9.85 0.6.7 1.9.86 0.6.8 1.9.87 0.6.9 1.9.88 0.7.0 1.9.89 0.7.1 1.9.90 0.7.2 1.9.91 0.7.3 1.9.92 0.7.4 1.9.93 0.7.5 1.9.94 0.7.6 1.9.95 0.7.7 1.9.96 0.7.8 1.9.97 0.7.9 1.9.98 0.8.0 1.9.99 0.8.1 2.0.0 0.8.2 2.0.1 0.8.3 2.0.2 0.8.4 2.0.3 0.8.5 2.0.4 0.8.6 2.0.5 0.8.7 2.0.6 0.8.8 2.0.7 0.8.9 2.0.8 0.9.0 2.0.9 0.9.2 2.1.0 0.9.3 2.1.1 0.9.4 2.1.2 0.9.5 2.1.3 0.9.6 2.1.4 0.9.7 2.1.5 0.9.8 2.1.6 0.9.81 2.1.7 0.9.82 2.1.8 0.9.83 2.1.9 0.9.84 2.2.0 0.9.85 2.2.1 0.9.86 2.2.2 0.9.87 2.2.3 0.9.88 2.2.4 0.9.89 2.2.5 0.9.9 2.2.51 0.9.91 2.2.52 0.9.92 2.2.53 0.9.93 2.2.54 0.9.94 2.2.56 0.9.95 2.2.57 0.9.96 2.2.6 0.9.97 2.2.60 0.9.98 2.2.61 0.9.99 2.2.62 1.0.0 2.2.63 1.0.01 2.2.70 1.0.1 2.2.80 1.0.2 2.2.81 1.0.3 2.2.90 1.0.4 2.2.91 1.0.5 2.2.92 1.0.6 2.2.93 1.0.7 2.2.94 1.0.8 2.2.95 1.0.9 2.3.0 1.1.0 2.3.1 1.1.1 2.3.2 1.1.2 2.3.3 1.1.3 2.3.4 1.1.4 2.3.5 1.1.5 2.3.6 1.1.6 2.3.7 1.1.7 2.3.8 1.1.8 2.3.9 1.1.9 2.4.0 1.2.0 2.4.1 1.2.1 2.4.2 1.2.2 2.4.3 1.2.21 2.4.4 1.2.3 2.4.5 1.2.30 2.4.6 1.3.0 2.4.7 1.3.1 2.4.8 1.3.2 2.4.9 1.3.3 2.5.0 1.3.31 2.5.1 1.3.32 2.5.2 1.3.33 2.5.3 1.3.34 2.5.4 1.3.35 2.5.5 1.3.36 2.5.6 1.3.37 2.5.7 1.3.38 2.5.8 1.3.39 2.5.9 1.3.40 2.6.0 1.3.41 2.6.1 1.3.42 2.6.2 1.3.43 2.6.3 1.3.44 2.6.5 1.3.45 2.6.6 1.3.46 2.6.7 1.3.47 2.6.8 1.3.48 2.6.9 1.3.49 2.7.0 1.3.50 2.7.1 1.3.51 2.7.2 1.3.52 2.7.3 1.3.53 2.7.4 1.3.54 2.7.5 1.3.56 2.7.6 1.3.57 2.7.7 1.3.58 2.7.8 1.3.59 2.7.9 1.3.60 2.8.0 1.3.61 2.8.1 1.3.62 2.8.2 1.3.63 2.8.3 1.3.64 2.8.4 1.3.65 2.8.5 1.3.66 2.8.6 1.3.67 2.8.7 1.3.68 2.8.8 1.3.69 2.8.9 1.3.70 2.9.0 1.3.71 2.9.1 1.3.72 2.9.2 1.3.73 2.9.3 1.3.74 2.9.4 1.3.75 2.9.5 1.3.76 2.9.6 1.3.77 2.9.7 1.3.78 2.9.8 1.3.79 2.9.9 1.3.80 3.0.0 1.3.81 3.0.1 1.3.82 3.0.2 1.3.83 3.0.3 1.3.84 3.0.4 1.3.85 3.0.5 1.3.86 3.0.6 1.3.87 3.0.7 1.3.88 3.0.8 1.3.89 3.0.9 1.3.90 3.1.0 1.3.91 3.1.1 1.3.92 3.1.2 1.3.93 3.1.3 1.3.94 3.1.4 1.3.95 3.1.5 1.3.96 3.1.6 1.3.97 3.1.7 1.3.98 3.1.8 1.3.99 3.1.9 1.4.0 3.2.0 1.4.1 3.2.1 1.4.2 3.2.2 1.4.3 3.2.3 1.4.4 3.2.4 1.4.5 3.2.5 1.4.6 3.2.6 1.4.7 3.2.7 1.4.8 3.2.8 1.4.9 3.2.9 1.5.0 3.3.0 1.5.1 3.3.1 1.5.2 3.3.2 1.5.3 3.3.3 1.5.4 3.3.4 1.5.5 3.3.5 1.5.6 3.3.6 1.5.7 3.3.7 1.5.8 3.3.8 1.5.9 3.3.9 1.6.0 3.4.0 1.6.1 3.4.1 1.6.2 3.4.2 1.6.3 3.4.3 1.6.5 3.4.4 1.6.51 3.4.5 1.6.52 3.4.6 1.6.53 1.6.54 1.6.55 1.6.56 1.6.57 1.6.58 1.6.59 1.6.60 1.6.61 1.6.62 1.6.63 1.6.64 1.6.65 1.6.66 1.6.67 1.6.68 trunk 1.6.69 0.0.1 1.6.70 0.0.2 1.6.71 0.0.3 1.6.72 0.0.4 1.6.73 0.0.5 1.6.74 0.0.6 1.6.75 0.0.7 1.6.76 0.0.8 1.6.77 0.0.9 1.6.78 0.1.0 1.6.79 0.1.1 1.6.81 0.1.2 1.6.82 0.1.3 1.6.83 0.1.4 1.6.84 0.1.5 1.6.85 0.1.6 1.6.86 0.1.7 1.6.87 0.1.8 1.6.88 0.1.9 1.6.89 0.2.0 1.6.90
ai-engine / vendor / yethee / tiktoken / src / Vocab / Vocab.php
ai-engine / vendor / yethee / tiktoken / src / Vocab Last commit date
Loader 10 months ago Vocab.php 10 months ago VocabLoader.php 10 months ago
Vocab.php
145 lines
1 <?php
2
3 declare(strict_types=1);
4
5 namespace Yethee\Tiktoken\Vocab;
6
7 use Countable;
8 use InvalidArgumentException;
9 use OutOfBoundsException;
10 use RuntimeException;
11 use Yethee\Tiktoken\Exception\ParseError;
12 use Yethee\Tiktoken\Util\EncodeUtil;
13
14 use function array_flip;
15 use function array_map;
16 use function assert;
17 use function base64_decode;
18 use function count;
19 use function explode;
20 use function fclose;
21 use function fgets;
22 use function file_exists;
23 use function fopen;
24 use function implode;
25 use function rewind;
26 use function sprintf;
27 use function stream_get_meta_data;
28 use function strval;
29
30 /** @psalm-import-type NonEmptyByteVector from EncodeUtil */
31 final class Vocab implements Countable
32 {
33 /** @var array<non-empty-string, int> */
34 private array $tokenToRankMap;
35
36 /** @var array<int, non-empty-string> */
37 private array $rankToTokenMap;
38
39 /** @param array<non-empty-string, int> $tokenRankMap */
40 private function __construct(array $tokenRankMap)
41 {
42 $this->tokenToRankMap = $tokenRankMap;
43 /** @psalm-suppress PropertyTypeCoercion */
44 $this->rankToTokenMap = array_map(strval(...), array_flip($tokenRankMap));
45
46 if (count($this->tokenToRankMap) !== count($this->rankToTokenMap)) {
47 throw new InvalidArgumentException('The map of tokens and ranks has duplicates of rank');
48 }
49 }
50
51 /** @param non-empty-string $bpeFile */
52 public static function fromFile(string $bpeFile): self
53 {
54 if (! file_exists($bpeFile)) {
55 throw new RuntimeException(sprintf('File "%s" does not exist', $bpeFile));
56 }
57
58 $stream = fopen($bpeFile, 'rb');
59
60 if ($stream === false) {
61 throw new RuntimeException(sprintf('Could not open file: %s', $bpeFile));
62 }
63
64 try {
65 return self::fromStream($stream);
66 } finally {
67 fclose($stream);
68 }
69 }
70
71 /**
72 * @param resource $stream
73 *
74 * @return static
75 */
76 public static function fromStream($stream): self
77 {
78 $meta = stream_get_meta_data($stream);
79
80 if ($meta['seekable']) {
81 rewind($stream);
82 }
83
84 $line = fgets($stream);
85 $lineNo = 1;
86 $map = [];
87
88 while ($line !== false) {
89 [$encodedToken, $rank] = explode(' ', $line);
90 $token = base64_decode($encodedToken, true);
91
92 if ($token === false) {
93 throw new ParseError(sprintf('Could not decode token "%s" at line %d', $encodedToken, $lineNo));
94 }
95
96 assert($token !== '');
97
98 $map[$token] = (int) $rank;
99
100 $line = fgets($stream);
101 $lineNo++;
102 }
103
104 return new self($map);
105 }
106
107 public function tryGetRank(string $binary): int|null
108 {
109 if ($binary === '') {
110 throw new InvalidArgumentException('Argument $binary cannot be an empty string');
111 }
112
113 return $this->tokenToRankMap[$binary] ?? null;
114 }
115
116 /** @throws OutOfBoundsException */
117 public function getRank(string $binary): int
118 {
119 if ($binary === '') {
120 throw new InvalidArgumentException('Argument $binary cannot be an empty string');
121 }
122
123 return $this->tokenToRankMap[$binary] ?? throw new OutOfBoundsException(sprintf(
124 'No rank for bytes vector: [%s]',
125 implode(', ', EncodeUtil::toBytes($binary)),
126 ));
127 }
128
129 /**
130 * @return non-empty-string
131 *
132 * @throws OutOfBoundsException
133 */
134 public function getToken(int $rank): string
135 {
136 return $this->rankToTokenMap[$rank] ?? throw new OutOfBoundsException(sprintf('No token for rank: %d', $rank));
137 }
138
139 /** @psalm-api */
140 public function count(): int
141 {
142 return count($this->tokenToRankMap);
143 }
144 }
145