PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 3.5.7
AI Engine – The Chatbot, AI Framework & MCP for WordPress v3.5.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 / query / image.php
ai-engine / classes / query Last commit date
assist-feedback.php 10 months ago assistant.php 2 months ago base.php 1 week ago dropped-file.php 3 months ago edit-image.php 3 months ago embed.php 3 months ago feedback.php 10 months ago function.php 1 month ago image.php 1 month ago parameter.php 1 year ago text.php 1 week ago transcribe.php 8 months ago
image.php
213 lines
1 <?php
2
3 class Meow_MWAI_Query_Image extends Meow_MWAI_Query_Base {
4 public ?string $resolution = null;
5 public ?string $quality = null;
6 public ?string $style = null;
7 public ?string $localDownload = 'uploads';
8 public ?string $localDownloadExpiry = 'uploads';
9 public ?array $attachedFiles = null;
10
11 #region Constructors, Serialization
12
13 public function __construct( ?string $message = '', ?string $model = null ) {
14 parent::__construct( $message );
15 $this->model = $model;
16 $this->feature = 'text-to-image'; // image-to-image, inpainting, etc
17 global $mwai_core;
18 $this->localDownload = $mwai_core->get_option( 'image_local_download' );
19 $this->localDownloadExpiry = $mwai_core->get_option( 'image_expires_download' );
20 }
21
22 #[\ReturnTypeWillChange]
23 public function jsonSerialize(): array {
24 $json = [
25 'message' => $this->message,
26
27 'ai' => [
28 'model' => $this->model,
29 'feature' => $this->feature,
30 'resolution' => $this->resolution,
31 'quality' => $this->quality
32 ],
33
34 'system' => [
35 'class' => get_class( $this ),
36 'envId' => $this->envId,
37 'scope' => $this->scope,
38 'session' => $this->session,
39 'customId' => $this->customId,
40 ]
41 ];
42
43 if ( !empty( $this->context ) ) {
44 $json['context']['content'] = $this->context;
45 }
46
47 return $json;
48 }
49
50 #endregion
51
52 #region Parameters
53
54 public function set_resolution( string $resolution ) {
55 $this->resolution = $resolution;
56 }
57
58 public function set_quality( ?string $quality ) {
59 $this->quality = $quality !== null && $quality !== '' ? $quality : null;
60 }
61
62 public function set_style( string $style ) {
63 $this->style = $style;
64 }
65
66 /**
67 * Set how the image will be treated locally, if it will be downloaded or not, etc.
68 * @param string $localDownload The local download method. Could be 'uploads', 'library' or null.
69 */
70 public function set_local_download( ?string $localDownload ) {
71 $this->localDownload = $localDownload;
72 }
73
74 public function add_file( Meow_MWAI_Query_DroppedFile $file ): void {
75 if ( $this->attachedFiles === null ) {
76 $this->attachedFiles = [];
77 }
78 $this->attachedFiles[] = $file;
79 }
80
81 public function set_files( array $files ): void {
82 $this->attachedFiles = $files;
83 }
84
85 public function get_files(): ?array {
86 return $this->attachedFiles;
87 }
88
89 public function getAttachments(): array {
90 return $this->attachedFiles ?? [];
91 }
92
93 // Based on the params of the query, update the attributes
94 public function inject_params( array $params ): void {
95 parent::inject_params( $params );
96 $params = $this->convert_keys( $params );
97
98 if ( !empty( $params['resolution'] ) ) {
99 $this->set_resolution( $params['resolution'] );
100 }
101 if ( array_key_exists( 'quality', $params ) ) {
102 $this->set_quality( $params['quality'] );
103 }
104 if ( !empty( $params['style'] ) ) {
105 $this->set_style( $params['style'] );
106 }
107 // Check both camelCase and snake_case versions for compatibility
108 if ( array_key_exists( 'localDownload', $params ) ) {
109 $this->set_local_download( $params['localDownload'] );
110 }
111 elseif ( array_key_exists( 'local_download', $params ) ) {
112 $this->set_local_download( $params['local_download'] );
113 }
114 }
115
116 #endregion
117
118 #region Final Checks
119
120 public function final_checks() {
121 parent::final_checks();
122
123 // Force a single image per request (matches the supported behavior of current image models).
124 $this->maxResults = 1;
125
126 global $mwai_core;
127
128 $engine = Meow_MWAI_Engines_Factory::get( $mwai_core, $this->envId );
129
130 // If model is empty, use the image-specific default model (not the general default)
131 if ( empty( $this->model ) ) {
132 $this->model = $mwai_core->get_option( 'ai_images_default_model' );
133 if ( empty( $this->model ) ) {
134 // Fallback to general default if image-specific default is not set
135 $this->model = $mwai_core->get_option( 'ai_default_model' );
136 }
137 }
138
139 $modelInfo = $engine->retrieve_model_info( $this->model );
140 if ( empty( $modelInfo ) ) {
141 Meow_MWAI_Logging::error( 'No model info found for model: ' . $this->model, '🖼️' );
142 return;
143 }
144
145 // Let's check for resolutions.
146 if ( !isset( $modelInfo['resolutions'] ) || empty( $modelInfo['resolutions'] ) ) {
147 // Skip warning for non-image models (e.g., when using image_generation as a tool)
148 return;
149 }
150
151 // If we have no resolution set, we will use the first one
152 if ( empty( $this->resolution ) ) {
153 $this->resolution = $modelInfo['resolutions'][0]['name'];
154 }
155
156 // If we have a resolutions array ([ name, label ]), let's ensure our current resolution (name) is supported
157 $resolutions = $modelInfo['resolutions'];
158 $found = false;
159 foreach ( $resolutions as $resolution ) {
160 if ( $resolution['name'] === $this->resolution ) {
161 $found = true;
162 break;
163 }
164 }
165
166 // If we don't find the resolution, we will set it to the first one.
167 if ( !$found ) {
168 $supportedResolutions = [];
169 foreach ( $resolutions as $resolution ) {
170 $supportedResolutions[] = $resolution['name'];
171 }
172 $supportedResolutions = implode( ', ', $supportedResolutions );
173 $error = sprintf( 'The model %s does not support the resolution %s (using %s instead). Supported resolutions are: %s.', $this->model, $this->resolution, $resolutions[0]['name'], $supportedResolutions );
174 $this->resolution = $resolutions[0]['name'];
175 Meow_MWAI_Logging::error( $error, '🖼️' );
176 }
177
178 // Quality: only validate when the model declares supported qualities. Otherwise leave it as-is
179 // (null means "do not send the quality param to the API"; the provider picks its default).
180 if ( !empty( $modelInfo['qualities'] ) && empty( $this->quality ) ) {
181 // Fall back to the global default. If the saved default is not supported by the active
182 // model (e.g. user switched from GPT Image to a model with different vocabulary), the
183 // validation block below will silently reset it to the model's first declared quality.
184 $defaultQuality = $mwai_core->get_option( 'ai_images_default_quality' );
185 if ( !empty( $defaultQuality ) ) {
186 $this->quality = $defaultQuality;
187 }
188 }
189 if ( !empty( $modelInfo['qualities'] ) && !empty( $this->quality ) ) {
190 $qualities = $modelInfo['qualities'];
191 $foundQuality = false;
192 foreach ( $qualities as $quality ) {
193 if ( $quality['name'] === $this->quality ) {
194 $foundQuality = true;
195 break;
196 }
197 }
198 if ( !$foundQuality ) {
199 $supportedQualities = [];
200 foreach ( $qualities as $quality ) {
201 $supportedQualities[] = $quality['name'];
202 }
203 $supportedQualities = implode( ', ', $supportedQualities );
204 $error = sprintf( 'The model %s does not support the quality %s (using %s instead). Supported qualities are: %s.', $this->model, $this->quality, $qualities[0]['name'], $supportedQualities );
205 $this->quality = $qualities[0]['name'];
206 Meow_MWAI_Logging::error( $error, '🖼️' );
207 }
208 }
209 }
210
211 #endregion
212 }
213