PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 1.3.47
AI Engine – The Chatbot, AI Framework & MCP for WordPress v1.3.47
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 / classes / querytext.php
ai-engine / classes Last commit date
modules 3 years ago admin.php 3 years ago ai.php 3 years ago answer.php 3 years ago api.php 3 years ago core.php 3 years ago init.php 3 years ago openai.php 3 years ago query.php 3 years ago queryembed.php 3 years ago queryimage.php 3 years ago querytext.php 3 years ago querytranscribe.php 3 years ago rest.php 3 years ago ui.php 3 years ago
querytext.php
220 lines
1 <?php
2
3 class Meow_MWAI_QueryText extends Meow_MWAI_Query {
4 public $maxTokens = 1024;
5 public $temperature = 0.8;
6 public $stop = null;
7 public $messages = [];
8 public $context = null;
9
10 public function __construct( $prompt = '', $maxTokens = 1024, $model = 'gpt-3.5-turbo' ) {
11 parent::__construct( $prompt );
12 $this->setModel( $model );
13 $this->setMaxTokens( $maxTokens );
14 }
15
16 // Quick and dirty token estimation
17 // Let's keep this synchronized with Helpers in JS
18 function estimateTokens( $text )
19 {
20 $asciiCount = 0;
21 $nonAsciiCount = 0;
22 for ($i = 0; $i < mb_strlen( $text ); $i++) {
23 $char = mb_substr( $text, $i, 1 );
24 if ( ord($char) < 128 ) {
25 $asciiCount++;
26 }
27 else {
28 $nonAsciiCount++;
29 }
30 }
31 $asciiTokens = $asciiCount / 3.5;
32 $nonAsciiTokens = $nonAsciiCount * 2.5;
33 $tokens = $asciiTokens + $nonAsciiTokens;
34 return (int)$tokens;
35 }
36
37 /**
38 * Make sure the maxTokens is not greater than the model's context length.
39 */
40 private function validateMaxTokens() {
41 if ( empty( $this->model ) ) { return; }
42 $realMax = 4096;
43 $finetuneFamily = preg_match('/^([a-zA-Z]{0,32}):/', $this->model, $matches );
44 $finetuneFamily = ( isset( $matches ) && count( $matches ) > 0 ) ? $matches[1] : 'N/A';
45 $foundModel = null;
46 foreach ( MWAI_OPENAI_MODELS as $currentModel ) {
47 if ( $currentModel['model'] === $this->model || $currentModel['family'] === $finetuneFamily ) {
48 $foundModel = $currentModel['name'];
49 $realMax = $currentModel['maxTokens'];
50 break;
51 }
52 }
53 $estimatedTokens = $this->estimateTokens( $this->prompt );
54 if ( ( $estimatedTokens - 256) > $realMax ) {
55 throw new Exception( "The prompt is too long! It contains about $estimatedTokens tokens (estimation). The model $foundModel only accepts a maximum of $realMax tokens. " );
56 }
57 $realMax = $realMax - $estimatedTokens;
58 if ( $this->maxTokens > $realMax ) {
59 $this->maxTokens = $realMax;
60 }
61 }
62
63 /**
64 * ID of the model to use.
65 * @param string $model ID of the model to use.
66 */
67 public function setModel( $model ) {
68 $this->model = $model;
69 if ( $model === 'gpt-3.5-turbo') {
70 $this->mode = 'chat';
71 }
72 else {
73 $this->mode = 'completion';
74 }
75 }
76
77 /**
78 * Given a prompt, the model will return one or more predicted completions.
79 * It can also return the probabilities of alternative tokens at each position.
80 * @param string $prompt The prompt to generate completions.
81 */
82 public function setPrompt( $prompt ) {
83 parent::setPrompt( $prompt );
84 $this->validateMaxTokens();
85 $this->validateMessages();
86 }
87
88 /**
89 * Similar to the prompt, but use an array of messages instead.
90 * @param string $prompt The messages to generate completions.
91 */
92 public function setMessages( $messages ) {
93 $messages = array_map( function( $message ) {
94 return [ 'role' => $message['role'], 'content' => $message['content'] ];
95 }, $messages );
96 $this->messages = $messages;
97 $this->validateMessages();
98 }
99
100 public function getLastMessage() {
101 if ( !empty( $this->messages ) ) {
102 return $this->messages[count( $this->messages ) - 1];
103 }
104 return null;
105 }
106
107 // Function that adds a message just before the last message
108 public function injectContext( $content ) {
109 if ( !empty( $this->messages ) ) {
110 $lastMessage = $this->getLastMessage();
111 $lastMessageIndex = count( $this->messages ) - 1;
112 $this->messages[$lastMessageIndex] = [ 'role' => 'system', 'content' => $content ];
113 array_push( $this->messages, $lastMessage );
114 }
115 $this->validateMessages();
116 }
117
118 /**
119 * The context that is used for the chat completion (mode === 'chat').
120 * @param string $context The context to use.
121 */
122 public function setContext( $context ) {
123 $this->context = apply_filters( 'mwai_ai_context', $context, $this );
124 $this->validateMessages();
125 }
126
127 private function validateMessages() {
128 if ( empty( $this->messages ) ) {
129 $this->messages = [];
130 if ( !empty( $this->prompt ) ) {
131 array_push( $this->messages, [ 'role' => 'user', 'content' => $this->prompt ] );
132 }
133 }
134 if ( !empty( $this->context ) ) {
135 if ( is_array( $this->messages ) && count( $this->messages ) > 0 ) {
136 if ( $this->messages[0]['role'] !== 'system' ) {
137 array_unshift( $this->messages, [ 'role' => 'system', 'content' => $this->context ] );
138 }
139 else {
140 $this->messages[0]['content'] = $this->context;
141 }
142 }
143 }
144 }
145
146 /**
147 * The maximum number of tokens to generate in the completion.
148 * The token count of your prompt plus max_tokens cannot exceed the model's context length.
149 * Most models have a context length of 2048 tokens (except for the newest models, which support 4096).
150 * @param float $prompt The maximum number of tokens.
151 */
152 public function setMaxTokens( $maxTokens ) {
153 $this->maxTokens = intval( $maxTokens );
154 $this->validateMaxTokens();
155 }
156
157 /**
158 * Set the sampling temperature to use. Higher values means the model will take more risks.
159 * Try 0.9 for more creative applications, and 0 for ones with a well-defined answer.
160 * @param float $temperature The temperature.
161 */
162 public function setTemperature( $temperature ) {
163 $temperature = floatval( $temperature );
164 if ( $temperature > 1 ) {
165 $temperature = 1;
166 }
167 if ( $temperature < 0 ) {
168 $temperature = 0;
169 }
170 $this->temperature = $temperature;
171 }
172
173 /**
174 * Up to 4 sequences where the API will stop generating further tokens.
175 * The returned text will not contain the stop sequence.
176 * @param float $stop The stop.
177 */
178 public function setStop( $stop ) {
179 if ( !empty( $stop ) ) {
180 $this->stop = $stop;
181 }
182 }
183
184 // Based on the params of the query, update the attributes
185 public function injectParams( $params ) {
186 if ( isset( $params['model'] ) ) {
187 $this->setModel( $params['model'] );
188 }
189 if ( isset( $params['prompt'] ) ) {
190 $this->setPrompt( $params['prompt'] );
191 }
192 if ( isset( $params['messages'] ) ) {
193 $this->setMessages( $params['messages'] );
194 }
195 if ( isset( $params['context'] ) ) {
196 $this->setContext( $params['context'] );
197 }
198 if ( isset( $params['maxTokens'] ) ) {
199 $this->setMaxTokens( $params['maxTokens'] );
200 }
201 if ( isset( $params['temperature'] ) ) {
202 $this->setTemperature( $params['temperature'] );
203 }
204 if ( isset( $params['stop'] ) ) {
205 $this->setStop( $params['stop'] );
206 }
207 if ( isset( $params['apiKey'] ) ) {
208 $this->setApiKey( $params['apiKey'] );
209 }
210 if ( isset( $params['maxResults'] ) ) {
211 $this->setMaxResults( $params['maxResults'] );
212 }
213 if ( isset( $params['env'] ) ) {
214 $this->setEnv( $params['env'] );
215 }
216 if ( isset( $params['session'] ) ) {
217 $this->setSession( $params['session'] );
218 }
219 }
220 }