PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 3.1.3
AI Engine – The Chatbot, AI Framework & MCP for WordPress v3.1.3
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 / query / text.php
ai-engine / classes / query Last commit date
assist-feedback.php 10 months ago assistant.php 8 months ago base.php 8 months ago dropped-file.php 8 months ago edit-image.php 8 months ago embed.php 10 months ago feedback.php 10 months ago function.php 8 months ago image.php 8 months ago parameter.php 1 year ago text.php 8 months ago transcribe.php 8 months ago
text.php
227 lines
1 <?php
2
3 class Meow_MWAI_Query_Text extends Meow_MWAI_Query_Base implements JsonSerializable {
4 // Core Content
5 public ?Meow_MWAI_Query_DroppedFile $attachedFile = null;
6 public ?array $attachedFiles = null; // Multiple files support
7
8 // Parameters
9 public ?float $temperature = null;
10 public ?int $maxTokens = null;
11 public ?string $stop = null;
12 public ?string $responseFormat = null;
13 public ?string $reasoning = null; // GPT-5 reasoning effort
14 public ?string $verbosity = null; // GPT-5 verbosity level
15
16 #region Constructors, Serialization
17
18 public function __construct( ?string $message = '', ?int $maxTokens = null, string $model = null ) {
19 parent::__construct( $message );
20 if ( !empty( $model ) ) {
21 $this->set_model( $model );
22 }
23 if ( !empty( $maxTokens ) ) {
24 $this->set_max_tokens( $maxTokens );
25 }
26 }
27
28 #[\ReturnTypeWillChange]
29 public function jsonSerialize(): array {
30 $json = [
31 'message' => $this->message,
32 'instructions' => $this->instructions,
33
34 'ai' => [
35 'model' => $this->model,
36 'feature' => $this->feature,
37 'maxTokens' => $this->maxTokens,
38 'temperature' => $this->temperature,
39 ],
40
41 'system' => [
42 'class' => get_class( $this ),
43 'envId' => $this->envId,
44 'scope' => $this->scope,
45 'session' => $this->session,
46 'customId' => $this->customId,
47 'maxMessages' => $this->maxMessages,
48 ]
49 ];
50
51 if ( !empty( $this->context ) ) {
52 $json['context']['content'] = $this->context;
53 }
54
55 if ( !empty( $this->attachedFile ) ) {
56 $json['context']['hasFile'] = true;
57 if ( $this->attachedFile->get_type() === 'url' ) {
58 $json['context']['fileUrl'] = $this->attachedFile->get_url();
59 }
60 }
61
62 if ( !empty( $this->attachedFiles ) ) {
63 $json['context']['hasFiles'] = true;
64 $json['context']['fileCount'] = count( $this->attachedFiles );
65 }
66
67 return $json;
68 }
69
70 #endregion
71
72 #region File Handling
73
74 /**
75 * Get all attached files as a normalized array.
76 * This method provides backward compatibility by merging both attachedFile (legacy)
77 * and attachedFiles (current) into a single array.
78 *
79 * @return Meow_MWAI_Query_DroppedFile[] Array of attached files
80 */
81 public function getAttachments(): array {
82 $files = $this->attachedFiles ?? [];
83
84 // Backward compatibility: include legacy attachedFile if it exists and isn't already in the array
85 if ( $this->attachedFile && !in_array( $this->attachedFile, $files, true ) ) {
86 // Prepend the single file so it appears first (maintains legacy behavior)
87 array_unshift( $files, $this->attachedFile );
88 }
89
90 return $files;
91 }
92
93 /**
94 * Add a file to the attachedFiles array.
95 * This is the unified method for both single and multi-file uploads.
96 */
97 public function add_file( Meow_MWAI_Query_DroppedFile $file ): void {
98 if ( $this->attachedFiles === null ) {
99 $this->attachedFiles = [];
100 }
101 $this->attachedFiles[] = $file;
102 }
103
104 public function set_files( array $files ): void {
105 $this->attachedFiles = $files;
106 }
107
108 public function get_files(): ?array {
109 return $this->attachedFiles;
110 }
111
112 #endregion
113
114 #region Parameters
115
116 /**
117 * The type of return expected from the API. It can be either null or "json".
118 * @param int $maxResults The maximum number of completions.
119 */
120 public function set_response_format( $responseFormat ) {
121 if ( !empty( $responseFormat ) && $responseFormat !== 'json' ) {
122 throw new Exception( 'AI Engine: The response format can only be null or json.' );
123 }
124 $this->responseFormat = $responseFormat;
125 }
126
127 /**
128 * The maximum number of tokens to generate in the completion.
129 * The token count of your prompt plus max_tokens cannot exceed the model's context length.
130 * Most models have a context length of 2048 tokens (except for the newest models, which support 4096).
131 * @param float $maxTokens The maximum number of tokens.
132 */
133 public function set_max_tokens( int $maxTokens ): void {
134 $this->maxTokens = $maxTokens;
135 }
136
137 /**
138 * Set the sampling temperature to use. Higher values means the model will take more risks.
139 * Try 0.9 for more creative applications, and 0 for ones with a well-defined reply.
140 * @param float $temperature The temperature.
141 */
142 public function set_temperature( float $temperature ): void {
143 $temperature = floatval( $temperature );
144 if ( $temperature > 1 ) {
145 $temperature = 1;
146 }
147 if ( $temperature < 0 ) {
148 $temperature = 0;
149 }
150 $this->temperature = round( $temperature, 2 );
151 }
152
153 public function set_stop( string $stop ): void {
154 $this->stop = $stop;
155 }
156
157 /**
158 * Set the reasoning effort for GPT-5 models.
159 * @param string $reasoning The reasoning effort level (minimal, low, medium, high).
160 */
161 public function set_reasoning( string $reasoning ): void {
162 $valid = ['minimal', 'low', 'medium', 'high'];
163 if ( !in_array( $reasoning, $valid ) ) {
164 throw new Exception( 'AI Engine: Invalid reasoning level. Must be one of: minimal, low, medium, high.' );
165 }
166 $this->reasoning = $reasoning;
167 }
168
169 /**
170 * Set the verbosity level for GPT-5 models.
171 * @param string $verbosity The verbosity level (low, medium, high).
172 */
173 public function set_verbosity( string $verbosity ): void {
174 $valid = ['low', 'medium', 'high'];
175 if ( !in_array( $verbosity, $valid ) ) {
176 throw new Exception( 'AI Engine: Invalid verbosity level. Must be one of: low, medium, high.' );
177 }
178 $this->verbosity = $verbosity;
179 }
180
181 #endregion
182
183 #region Inject Params
184
185 // Based on the params of the query, update the attributes
186 public function inject_params( array $params ): void {
187 parent::inject_params( $params );
188 $params = $this->convert_keys( $params );
189
190 if ( !empty( $params['maxTokens'] ) && intval( $params['maxTokens'] ) > 0 ) {
191 $this->set_max_tokens( intval( $params['maxTokens'] ) );
192 }
193 if ( isset( $params['temperature'] ) && $params['temperature'] !== '' ) {
194 $this->set_temperature( $params['temperature'] );
195 }
196 if ( !empty( $params['stop'] ) ) {
197 $this->set_stop( $params['stop'] );
198 }
199 if ( !empty( $params['responseFormat'] ) ) {
200 $this->set_response_format( $params['responseFormat'] );
201 }
202 // Accept both 'reasoning' and 'reasoningEffort' (UI uses reasoningEffort)
203 if ( !empty( $params['reasoning'] ) ) {
204 $this->set_reasoning( $params['reasoning'] );
205 }
206 if ( !empty( $params['reasoningEffort'] ) ) {
207 $this->set_reasoning( $params['reasoningEffort'] );
208 }
209 if ( !empty( $params['verbosity'] ) ) {
210 $this->set_verbosity( $params['verbosity'] );
211 }
212 // Store prompt-related params as extra params
213 if ( !empty( $params['promptId'] ) ) {
214 $this->setExtraParam( 'promptId', $params['promptId'] );
215 }
216 // TODO: Prompt Variables support - might be added later
217 // if ( !empty( $params['promptVariables'] ) ) {
218 // $this->setExtraParam( 'promptVariables', $params['promptVariables'] );
219 // }
220 // if ( !empty( $params['promptVersion'] ) ) {
221 // $this->setExtraParam( 'promptVersion', $params['promptVersion'] );
222 // }
223 }
224
225 #endregion
226 }
227