PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 3.2.4
AI Engine – The Chatbot, AI Framework & MCP for WordPress v3.2.4
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 7 months ago message-builder.php 8 months ago model-environment.php 7 months ago response-id-manager.php 1 year ago session.php 11 months ago usage-stats.php 8 months ago
model-environment.php
177 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 // If the model is available in the list of models, we can use it
45 $envs = $this->core->get_option( 'ai_envs' );
46 $models = $this->core->get_option( 'ai_models' );
47
48 // First check custom models
49 if ( !empty( $models ) ) {
50 foreach ( $models as $currentModel ) {
51 if ( $currentModel['model'] === $model && isset( $currentModel['envId'] ) ) {
52 $query->envId = $currentModel['envId'];
53 // Note: Don't set $query->env here as it expects an object, not a string
54 $query->model = $currentModel['model'];
55 return;
56 }
57 }
58 }
59
60 // Then check models in environments
61 foreach ( $envs as $envId => $env ) {
62 if ( isset( $env['models'] ) ) {
63 foreach ( $env['models'] as $envModel ) {
64 if ( $envModel['model'] === $model ) {
65 $query->envId = $envId;
66 // Note: Don't set $query->env here as it expects an object, not a string
67 $query->model = $model;
68 return;
69 }
70 }
71 }
72 }
73
74 throw new Exception( 'The environment is required.' );
75 }
76 else if ( !empty( $env ) && empty( $model ) ) {
77 // EnvId is set but model is empty - get first model from selected environment
78 $envData = $this->get_ai_env( $env );
79 if ( !empty( $envData['models'] ) && is_array( $envData['models'] ) ) {
80 $firstModel = reset( $envData['models'] );
81 if ( !empty( $firstModel['model'] ) ) {
82 $query->model = $firstModel['model'];
83 return;
84 }
85 }
86
87 // Fallback: if environment has no models, try type-specific defaults
88 if ( $query instanceof Meow_MWAI_Query_Image ) {
89 $this->set_default_model_only( $query, 'ai_images_default_model' );
90 }
91 else if ( $query instanceof Meow_MWAI_Query_Transcribe ) {
92 $this->set_default_model_only( $query, 'ai_audio_default_model' );
93 }
94 else if ( $query instanceof Meow_MWAI_Query_Embed ) {
95 $this->set_default_model_only( $query, 'ai_embeddings_default_model' );
96 }
97 else {
98 $this->set_default_model_only( $query, 'ai_default_model' );
99 }
100 }
101 else {
102 // We have both, let's continue
103 }
104 }
105
106 private function set_default_env_and_model( $query, $envOption, $modelOption ) {
107 $env = $this->core->get_option( $envOption );
108 $model = $this->core->get_option( $modelOption );
109 if ( !empty( $env ) ) {
110 // Use envId property which is what the query object uses
111 $query->envId = $env;
112 // Note: Don't set $query->env here as it expects an object, not a string
113 }
114 if ( !empty( $model ) ) {
115 $query->model = $model;
116 }
117 }
118
119 private function set_default_model_only( $query, $modelOption ) {
120 // Only set the model, preserve existing envId
121 $model = $this->core->get_option( $modelOption );
122 if ( !empty( $model ) ) {
123 $query->model = $model;
124 }
125 }
126
127 public function get_embeddings_env( $envId = null ) {
128 // Use provided envId or fall back to default
129 if ( empty( $envId ) ) {
130 $envId = $this->core->get_option( 'embeddings_default_env' );
131 }
132
133 // Get embeddings environments (not AI environments)
134 $envs = $this->core->get_option( 'embeddings_envs' );
135 if ( !empty( $envs ) ) {
136 foreach ( $envs as $env ) {
137 if ( isset( $env['id'] ) && $env['id'] === $envId ) {
138 return $env;
139 }
140 }
141 }
142
143 return null;
144 }
145
146 public function get_ai_env( $envId ) {
147 $envs = $this->core->get_option( 'ai_envs' );
148 if ( !empty( $envs ) ) {
149 foreach ( $envs as $env ) {
150 if ( isset( $env['id'] ) && $env['id'] === $envId ) {
151 return $env;
152 }
153 }
154 }
155 return null;
156 }
157
158 public function get_assistant( $envId, $assistantId ) {
159 $env = $this->get_ai_env( $envId );
160 if ( isset( $env['assistants'] ) ) {
161 foreach ( $env['assistants'] as $assistant ) {
162 if ( $assistant['id'] === $assistantId ) {
163 return $assistant;
164 }
165 }
166 }
167 return null;
168 }
169
170 public function get_engine_models( $query ) {
171 $envId = $query->envId;
172 $env = $this->get_ai_env( $envId );
173 $models = apply_filters( 'mwai_engine_models', [], $env, $query );
174 return $models;
175 }
176 }
177