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 / services / model-environment.php
ai-engine / classes / services Last commit date
image.php 23 hours ago message-builder.php 3 weeks ago model-environment.php 7 months ago response-id-manager.php 23 hours ago session.php 11 months ago usage-stats.php 1 month ago
model-environment.php
182 lines
1 <?php
2
3 class Meow_MWAI_Services_ModelEnvironment {
4 private $core;
5
6 public function __construct( $core ) {
7 $this->core = $core;
8 }
9
10 public function validate_env_model( $query ) {
11 if ( !$query || !is_object( $query ) ) {
12 throw new Exception( 'Invalid query object provided to validate_env_model.' );
13 }
14
15 // The query object uses envId (string ID) for the environment
16 $env = $query->envId ?? null;
17 $model = $query->model;
18
19 // For assistant queries with a valid envId already set, respect it
20 if ( $query instanceof Meow_MWAI_Query_Assistant && !empty( $env ) && !empty( $query->assistantId ) ) {
21 // Set model to 'n/a' for assistants since they don't need a model
22 if ( empty( $model ) ) {
23 $query->model = 'n/a';
24 }
25 return;
26 }
27
28 if ( empty( $env ) && empty( $model ) ) {
29 // Use specialized defaults based on query type
30 if ( $query instanceof Meow_MWAI_Query_Image ) {
31 $this->set_default_env_and_model( $query, 'ai_images_default_env', 'ai_images_default_model' );
32 }
33 else if ( $query instanceof Meow_MWAI_Query_Transcribe ) {
34 $this->set_default_env_and_model( $query, 'ai_audio_default_env', 'ai_audio_default_model' );
35 }
36 else if ( $query instanceof Meow_MWAI_Query_Embed ) {
37 $this->set_default_env_and_model( $query, 'ai_embeddings_default_env', 'ai_embeddings_default_model' );
38 }
39 else {
40 $this->set_default_env_and_model( $query, 'ai_default_env', 'ai_default_model' );
41 }
42 }
43 else if ( empty( $env ) && !empty( $model ) ) {
44 // For embeddings queries, require a configured environment
45 if ( $query instanceof Meow_MWAI_Query_Embed ) {
46 throw new Exception( __( 'AI Engine: No embeddings environment is configured. Please go to Settings > Default Environments for AI > Embeddings and select an environment.', 'ai-engine' ) );
47 }
48
49 // If the model is available in the list of models, we can use it
50 $envs = $this->core->get_option( 'ai_envs' );
51 $models = $this->core->get_option( 'ai_models' );
52
53 // First check custom models
54 if ( !empty( $models ) ) {
55 foreach ( $models as $currentModel ) {
56 if ( $currentModel['model'] === $model && isset( $currentModel['envId'] ) ) {
57 $query->envId = $currentModel['envId'];
58 // Note: Don't set $query->env here as it expects an object, not a string
59 $query->model = $currentModel['model'];
60 return;
61 }
62 }
63 }
64
65 // Then check models in environments
66 foreach ( $envs as $envId => $env ) {
67 if ( isset( $env['models'] ) ) {
68 foreach ( $env['models'] as $envModel ) {
69 if ( $envModel['model'] === $model ) {
70 $query->envId = $envId;
71 // Note: Don't set $query->env here as it expects an object, not a string
72 $query->model = $model;
73 return;
74 }
75 }
76 }
77 }
78
79 throw new Exception( 'The environment is required.' );
80 }
81 else if ( !empty( $env ) && empty( $model ) ) {
82 // EnvId is set but model is empty - get first model from selected environment
83 $envData = $this->get_ai_env( $env );
84 if ( !empty( $envData['models'] ) && is_array( $envData['models'] ) ) {
85 $firstModel = reset( $envData['models'] );
86 if ( !empty( $firstModel['model'] ) ) {
87 $query->model = $firstModel['model'];
88 return;
89 }
90 }
91
92 // Fallback: if environment has no models, try type-specific defaults
93 if ( $query instanceof Meow_MWAI_Query_Image ) {
94 $this->set_default_model_only( $query, 'ai_images_default_model' );
95 }
96 else if ( $query instanceof Meow_MWAI_Query_Transcribe ) {
97 $this->set_default_model_only( $query, 'ai_audio_default_model' );
98 }
99 else if ( $query instanceof Meow_MWAI_Query_Embed ) {
100 $this->set_default_model_only( $query, 'ai_embeddings_default_model' );
101 }
102 else {
103 $this->set_default_model_only( $query, 'ai_default_model' );
104 }
105 }
106 else {
107 // We have both, let's continue
108 }
109 }
110
111 private function set_default_env_and_model( $query, $envOption, $modelOption ) {
112 $env = $this->core->get_option( $envOption );
113 $model = $this->core->get_option( $modelOption );
114 if ( !empty( $env ) ) {
115 // Use envId property which is what the query object uses
116 $query->envId = $env;
117 // Note: Don't set $query->env here as it expects an object, not a string
118 }
119 if ( !empty( $model ) ) {
120 $query->model = $model;
121 }
122 }
123
124 private function set_default_model_only( $query, $modelOption ) {
125 // Only set the model, preserve existing envId
126 $model = $this->core->get_option( $modelOption );
127 if ( !empty( $model ) ) {
128 $query->model = $model;
129 }
130 }
131
132 public function get_embeddings_env( $envId = null ) {
133 // Use provided envId or fall back to default
134 if ( empty( $envId ) ) {
135 $envId = $this->core->get_option( 'embeddings_default_env' );
136 }
137
138 // Get embeddings environments (not AI environments)
139 $envs = $this->core->get_option( 'embeddings_envs' );
140 if ( !empty( $envs ) ) {
141 foreach ( $envs as $env ) {
142 if ( isset( $env['id'] ) && $env['id'] === $envId ) {
143 return $env;
144 }
145 }
146 }
147
148 return null;
149 }
150
151 public function get_ai_env( $envId ) {
152 $envs = $this->core->get_option( 'ai_envs' );
153 if ( !empty( $envs ) ) {
154 foreach ( $envs as $env ) {
155 if ( isset( $env['id'] ) && $env['id'] === $envId ) {
156 return $env;
157 }
158 }
159 }
160 return null;
161 }
162
163 public function get_assistant( $envId, $assistantId ) {
164 $env = $this->get_ai_env( $envId );
165 if ( isset( $env['assistants'] ) ) {
166 foreach ( $env['assistants'] as $assistant ) {
167 if ( $assistant['id'] === $assistantId ) {
168 return $assistant;
169 }
170 }
171 }
172 return null;
173 }
174
175 public function get_engine_models( $query ) {
176 $envId = $query->envId;
177 $env = $this->get_ai_env( $envId );
178 $models = apply_filters( 'mwai_engine_models', [], $env, $query );
179 return $models;
180 }
181 }
182