PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 3.3.8
AI Engine – The Chatbot, AI Framework & MCP for WordPress v3.3.8
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 6 months ago base.php 6 months ago dropped-file.php 5 months ago edit-image.php 8 months ago embed.php 7 months ago feedback.php 10 months ago function.php 8 months ago image.php 6 months ago parameter.php 1 year ago text.php 6 months ago transcribe.php 8 months ago
image.php
173 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 // Since DALL-E 3 only supports 1 image, we force it.
115 // (Likely the same limitation for other models.)
116 $this->maxResults = 1;
117
118 global $mwai_core;
119
120 $engine = Meow_MWAI_Engines_Factory::get( $mwai_core, $this->envId );
121
122 // If model is empty, use the image-specific default model (not the general default)
123 if ( empty( $this->model ) ) {
124 $this->model = $mwai_core->get_option( 'ai_images_default_model' );
125 if ( empty( $this->model ) ) {
126 // Fallback to general default if image-specific default is not set
127 $this->model = $mwai_core->get_option( 'ai_default_model' );
128 }
129 }
130
131 $modelInfo = $engine->retrieve_model_info( $this->model );
132 if ( empty( $modelInfo ) ) {
133 Meow_MWAI_Logging::error( 'No model info found for model: ' . $this->model, '🖼️' );
134 return;
135 }
136
137 // Let's check for resolutions.
138 if ( !isset( $modelInfo['resolutions'] ) || empty( $modelInfo['resolutions'] ) ) {
139 // Skip warning for non-image models (e.g., when using image_generation as a tool)
140 return;
141 }
142
143 // If we have no resolution set, we will use the first one
144 if ( empty( $this->resolution ) ) {
145 $this->resolution = $modelInfo['resolutions'][0]['name'];
146 }
147
148 // If we have a resolutions array ([ name, label ]), let's ensure our current resolution (name) is supported
149 $resolutions = $modelInfo['resolutions'];
150 $found = false;
151 foreach ( $resolutions as $resolution ) {
152 if ( $resolution['name'] === $this->resolution ) {
153 $found = true;
154 break;
155 }
156 }
157
158 // If we don't find the resolution, we will set it to the first one.
159 if ( !$found ) {
160 $supportedResolutions = [];
161 foreach ( $resolutions as $resolution ) {
162 $supportedResolutions[] = $resolution['name'];
163 }
164 $supportedResolutions = implode( ', ', $supportedResolutions );
165 $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 );
166 $this->resolution = $resolutions[0]['name'];
167 Meow_MWAI_Logging::error( $error, '🖼️' );
168 }
169 }
170
171 #endregion
172 }
173