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