PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 1.4.0
AI Engine – The Chatbot, AI Framework & MCP for WordPress v1.4.0
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 security.php 3 years ago ui.php 3 years ago
querytext.php
259 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 public $newMessage = null;
10
11 public function __construct( $prompt = '', $maxTokens = 1024, $model = 'gpt-3.5-turbo' ) {
12 parent::__construct( $prompt );
13 $this->setModel( $model );
14 $this->setMaxTokens( $maxTokens );
15 }
16
17 public function getLastPrompt() {
18 if ( empty( $this->messages ) ) {
19 return $this->prompt;
20 }
21 $lastMessage = end( $this->messages );
22 return $lastMessage['content'];
23 }
24
25 // Quick and dirty token estimation
26 // Let's keep this synchronized with Helpers in JS
27 function estimateTokens( $content )
28 {
29 $text = "";
30 // https://github.com/openai/openai-cookbook/blob/main/examples/How_to_count_tokens_with_tiktoken.ipynb
31 if ( is_array( $content ) ) {
32 foreach ( $content as $message ) {
33 $name = "";
34 $role = $message['role'];
35 $content = $message['content'];
36 $text .= "=#=$role\n$content=#=\n";
37 }
38 }
39 else {
40 $text = $content;
41 }
42 $tokens = 0;
43 return apply_filters( 'mwai_estimate_tokens', (int)$tokens, $text, $this->model );
44 }
45
46 /**
47 * Make sure the maxTokens is not greater than the model's context length.
48 */
49 public function checkFix() {
50 if ( empty( $this->model ) ) { return; }
51 $realMax = 4096;
52 $finetuneFamily = preg_match('/^([a-zA-Z]{0,32}):/', $this->model, $matches );
53 $finetuneFamily = ( isset( $matches ) && count( $matches ) > 0 ) ? $matches[1] : 'N/A';
54 $foundModel = null;
55 foreach ( MWAI_OPENAI_MODELS as $currentModel ) {
56 if ( $currentModel['model'] === $this->model || $currentModel['family'] === $finetuneFamily ) {
57 $foundModel = $currentModel['name'];
58 $realMax = $currentModel['maxTokens'];
59 break;
60 }
61 }
62 $estimatedTokens = $this->estimateTokens( $this->messages );
63 if ( $estimatedTokens > $realMax ) {
64 throw new Exception( "The prompt is too long! It contains about $estimatedTokens tokens (estimation). The model $foundModel only accepts a maximum of $realMax tokens. " );
65 }
66 $realMax = (int)($realMax - $estimatedTokens) - 16;
67 if ( $this->maxTokens > $realMax ) {
68 $this->maxTokens = $realMax;
69 }
70 }
71
72 /**
73 * ID of the model to use.
74 * @param string $model ID of the model to use.
75 */
76 public function setModel( $model ) {
77 $this->model = $model;
78 $this->mode = 'completion';
79 foreach ( MWAI_OPENAI_MODELS as $currentModel ) {
80 if ( $currentModel['model'] === $this->model ) {
81 if ( $currentModel['mode'] ) {
82 $this->mode = $currentModel['mode'];
83 }
84 break;
85 }
86 }
87 }
88
89 /**
90 * Given a prompt, the model will return one or more predicted completions.
91 * It can also return the probabilities of alternative tokens at each position.
92 * @param string $prompt The prompt to generate completions.
93 */
94 public function setPrompt( $prompt ) {
95 parent::setPrompt( $prompt );
96 $this->validateMessages();
97 }
98
99 /**
100 * Similar to the prompt, but focus on the new/last message.
101 * Only used when the model has a chat mode (and only used in messages).
102 * @param string $prompt The messages to generate completions.
103 */
104 public function setNewMessage( $newMessage ) {
105 $this->newMessage = $newMessage;
106 $this->validateMessages();
107 }
108
109 public function replace( $search, $replace ) {
110 $this->prompt = str_replace( $search, $replace, $this->prompt );
111 $this->validateMessages();
112 }
113
114 /**
115 * Similar to the prompt, but use an array of messages instead.
116 * @param string $prompt The messages to generate completions.
117 */
118 public function setMessages( $messages ) {
119 $messages = array_map( function( $message ) {
120 return [ 'role' => $message['role'], 'content' => $message['content'] ];
121 }, $messages );
122 $this->messages = $messages;
123 $this->validateMessages();
124 }
125
126 public function getLastMessage() {
127 if ( !empty( $this->messages ) ) {
128 return $this->messages[count( $this->messages ) - 1];
129 }
130 return null;
131 }
132
133 // Function that adds a message just before the last message
134 public function injectContext( $content ) {
135 if ( !empty( $this->messages ) ) {
136 $lastMessage = $this->getLastMessage();
137 $lastMessageIndex = count( $this->messages ) - 1;
138 $this->messages[$lastMessageIndex] = [ 'role' => 'system', 'content' => $content ];
139 array_push( $this->messages, $lastMessage );
140 }
141 $this->validateMessages();
142 }
143
144 /**
145 * The context that is used for the chat completion (mode === 'chat').
146 * @param string $context The context to use.
147 */
148 public function setContext( $context ) {
149 $this->context = apply_filters( 'mwai_ai_context', $context, $this );
150 $this->validateMessages();
151 }
152
153 private function validateMessages() {
154 // Messages should end with either the prompt or, if exists, the newMessage.
155 $message = empty( $this->newMessage ) ? $this->prompt : $this->newMessage;
156 if ( empty( $this->messages ) ) {
157 $this->messages = [ [ 'role' => 'user', 'content' => $message ] ];
158 }
159 else {
160 $last = &$this->messages[ count( $this->messages ) - 1 ];
161 if ( $last['role'] === 'user' ) {
162 $last['content'] = $message;
163 }
164 }
165
166 // The main context must be first.
167 if ( !empty( $this->context ) ) {
168 if ( is_array( $this->messages ) && count( $this->messages ) > 0 ) {
169 if ( $this->messages[0]['role'] !== 'system' ) {
170 array_unshift( $this->messages, [ 'role' => 'system', 'content' => $this->context ] );
171 }
172 else {
173 $this->messages[0]['content'] = $this->context;
174 }
175 }
176 }
177 }
178
179 /**
180 * The maximum number of tokens to generate in the completion.
181 * The token count of your prompt plus max_tokens cannot exceed the model's context length.
182 * Most models have a context length of 2048 tokens (except for the newest models, which support 4096).
183 * @param float $prompt The maximum number of tokens.
184 */
185 public function setMaxTokens( $maxTokens ) {
186 $this->maxTokens = intval( $maxTokens );
187 }
188
189 /**
190 * Set the sampling temperature to use. Higher values means the model will take more risks.
191 * Try 0.9 for more creative applications, and 0 for ones with a well-defined answer.
192 * @param float $temperature The temperature.
193 */
194 public function setTemperature( $temperature ) {
195 $temperature = floatval( $temperature );
196 if ( $temperature > 1 ) {
197 $temperature = 1;
198 }
199 if ( $temperature < 0 ) {
200 $temperature = 0;
201 }
202 $this->temperature = round( $temperature, 2 );
203 }
204
205 /**
206 * Up to 4 sequences where the API will stop generating further tokens.
207 * The returned text will not contain the stop sequence.
208 * @param float $stop The stop.
209 */
210 public function setStop( $stop ) {
211 if ( !empty( $stop ) ) {
212 $this->stop = $stop;
213 }
214 }
215
216 // Based on the params of the query, update the attributes
217 public function injectParams( $params ) {
218 if ( isset( $params['model'] ) ) {
219 $this->setModel( $params['model'] );
220 }
221 if ( isset( $params['prompt'] ) ) {
222 $this->setPrompt( $params['prompt'] );
223 }
224 if ( isset( $params['context'] ) ) {
225 $this->setContext( $params['context'] );
226 }
227 if ( isset( $params['messages'] ) ) {
228 $this->setMessages( $params['messages'] );
229 }
230 if ( isset( $params['newMessage'] ) ) {
231 $this->setNewMessage( $params['newMessage'] );
232 }
233 if ( isset( $params['maxTokens'] ) ) {
234 $this->setMaxTokens( $params['maxTokens'] );
235 }
236 if ( isset( $params['temperature'] ) ) {
237 $this->setTemperature( $params['temperature'] );
238 }
239 if ( isset( $params['stop'] ) ) {
240 $this->setStop( $params['stop'] );
241 }
242 if ( isset( $params['maxResults'] ) ) {
243 $this->setMaxResults( $params['maxResults'] );
244 }
245 if ( isset( $params['env'] ) ) {
246 $this->setEnv( $params['env'] );
247 }
248 if ( isset( $params['session'] ) ) {
249 $this->setSession( $params['session'] );
250 }
251 // Should add the params related to Open AI and Azure
252 if ( isset( $params['service'] ) ) {
253 $this->setService( $params['service'] );
254 }
255 if ( isset( $params['apiKey'] ) ) {
256 $this->setApiKey( $params['apiKey'] );
257 }
258 }
259 }