PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 3.4.7
AI Engine – The Chatbot, AI Framework & MCP for WordPress v3.4.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 2 months 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 8 months ago image.php 2 months ago parameter.php 1 year ago text.php 6 months ago transcribe.php 8 months ago
image.php
172 lines
1 <?php
2
3 class Meow_MWAI_Query_Image extends Meow_MWAI_Query_Base {
4 public ?string $resolution = null;
5 public ?string $style = null;
6 public ?string $localDownload = 'uploads';
7 public ?string $localDownloadExpiry = 'uploads';
8 public ?array $attachedFiles = null;
9
10 #region Constructors, Serialization
11
12 public function __construct( ?string $message = '', ?string $model = null ) {
13 parent::__construct( $message );
14 $this->model = $model;
15 $this->feature = 'text-to-image'; // image-to-image, inpainting, etc
16 global $mwai_core;
17 $this->localDownload = $mwai_core->get_option( 'image_local_download' );
18 $this->localDownloadExpiry = $mwai_core->get_option( 'image_expires_download' );
19 }
20
21 #[\ReturnTypeWillChange]
22 public function jsonSerialize(): array {
23 $json = [
24 'message' => $this->message,
25
26 'ai' => [
27 'model' => $this->model,
28 'feature' => $this->feature,
29 'resolution' => $this->resolution
30 ],
31
32 'system' => [
33 'class' => get_class( $this ),
34 'envId' => $this->envId,
35 'scope' => $this->scope,
36 'session' => $this->session,
37 'customId' => $this->customId,
38 ]
39 ];
40
41 if ( !empty( $this->context ) ) {
42 $json['context']['content'] = $this->context;
43 }
44
45 return $json;
46 }
47
48 #endregion
49
50 #region Parameters
51
52 public function set_resolution( string $resolution ) {
53 $this->resolution = $resolution;
54 }
55
56 public function set_style( string $style ) {
57 $this->style = $style;
58 }
59
60 /**
61 * Set how the image will be treated locally, if it will be downloaded or not, etc.
62 * @param string $localDownload The local download method. Could be 'uploads', 'library' or null.
63 */
64 public function set_local_download( ?string $localDownload ) {
65 $this->localDownload = $localDownload;
66 }
67
68 public function add_file( Meow_MWAI_Query_DroppedFile $file ): void {
69 if ( $this->attachedFiles === null ) {
70 $this->attachedFiles = [];
71 }
72 $this->attachedFiles[] = $file;
73 }
74
75 public function set_files( array $files ): void {
76 $this->attachedFiles = $files;
77 }
78
79 public function get_files(): ?array {
80 return $this->attachedFiles;
81 }
82
83 public function getAttachments(): array {
84 return $this->attachedFiles ?? [];
85 }
86
87 // Based on the params of the query, update the attributes
88 public function inject_params( array $params ): void {
89 parent::inject_params( $params );
90 $params = $this->convert_keys( $params );
91
92 if ( !empty( $params['resolution'] ) ) {
93 $this->set_resolution( $params['resolution'] );
94 }
95 if ( !empty( $params['style'] ) ) {
96 $this->set_style( $params['style'] );
97 }
98 // Check both camelCase and snake_case versions for compatibility
99 if ( array_key_exists( 'localDownload', $params ) ) {
100 $this->set_local_download( $params['localDownload'] );
101 }
102 elseif ( array_key_exists( 'local_download', $params ) ) {
103 $this->set_local_download( $params['local_download'] );
104 }
105 }
106
107 #endregion
108
109 #region Final Checks
110
111 public function final_checks() {
112 parent::final_checks();
113
114 // Force a single image per request (matches the supported behavior of current image models).
115 $this->maxResults = 1;
116
117 global $mwai_core;
118
119 $engine = Meow_MWAI_Engines_Factory::get( $mwai_core, $this->envId );
120
121 // If model is empty, use the image-specific default model (not the general default)
122 if ( empty( $this->model ) ) {
123 $this->model = $mwai_core->get_option( 'ai_images_default_model' );
124 if ( empty( $this->model ) ) {
125 // Fallback to general default if image-specific default is not set
126 $this->model = $mwai_core->get_option( 'ai_default_model' );
127 }
128 }
129
130 $modelInfo = $engine->retrieve_model_info( $this->model );
131 if ( empty( $modelInfo ) ) {
132 Meow_MWAI_Logging::error( 'No model info found for model: ' . $this->model, '🖼️' );
133 return;
134 }
135
136 // Let's check for resolutions.
137 if ( !isset( $modelInfo['resolutions'] ) || empty( $modelInfo['resolutions'] ) ) {
138 // Skip warning for non-image models (e.g., when using image_generation as a tool)
139 return;
140 }
141
142 // If we have no resolution set, we will use the first one
143 if ( empty( $this->resolution ) ) {
144 $this->resolution = $modelInfo['resolutions'][0]['name'];
145 }
146
147 // If we have a resolutions array ([ name, label ]), let's ensure our current resolution (name) is supported
148 $resolutions = $modelInfo['resolutions'];
149 $found = false;
150 foreach ( $resolutions as $resolution ) {
151 if ( $resolution['name'] === $this->resolution ) {
152 $found = true;
153 break;
154 }
155 }
156
157 // If we don't find the resolution, we will set it to the first one.
158 if ( !$found ) {
159 $supportedResolutions = [];
160 foreach ( $resolutions as $resolution ) {
161 $supportedResolutions[] = $resolution['name'];
162 }
163 $supportedResolutions = implode( ', ', $supportedResolutions );
164 $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 );
165 $this->resolution = $resolutions[0]['name'];
166 Meow_MWAI_Logging::error( $error, '🖼️' );
167 }
168 }
169
170 #endregion
171 }
172