PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 2.8.4
AI Engine – The Chatbot, AI Framework & MCP for WordPress v2.8.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 / event.php
ai-engine / classes Last commit date
engines 1 year ago modules 1 year ago queries 1 year ago admin.php 1 year ago api.php 1 year ago core.php 1 year ago discussion.php 1 year ago event.php 1 year ago init.php 1 year ago logging.php 1 year ago reply.php 1 year ago rest.php 1 year ago
event.php
246 lines
1 <?php
2
3 // Load constants once at class definition
4 if ( !defined( 'MWAI_STREAM_TYPES' ) ) {
5 require_once MWAI_PATH . '/constants/stream_types.php';
6 }
7
8 class Meow_MWAI_Event {
9 private $type;
10 private $subtype;
11 private $content;
12 private $metadata;
13 private $visibility;
14 private $timestamp;
15
16 public function __construct( $type = 'live', $subtype = null ) {
17 $this->type = $type;
18 $this->subtype = $subtype ?: MWAI_STREAM_TYPES['CONTENT'];
19 $this->content = '';
20 $this->metadata = [];
21 $this->visibility = $this->get_default_visibility( $this->subtype );
22 $this->timestamp = microtime( true );
23 }
24
25 // Setters with fluent interface
26 public function set_content( $content ) {
27 $this->content = $content;
28 return $this;
29 }
30
31 public function set_metadata( $key, $value = null ) {
32 if ( is_array( $key ) ) {
33 $this->metadata = array_merge( $this->metadata, $key );
34 } else {
35 $this->metadata[$key] = $value;
36 }
37 return $this;
38 }
39
40 public function set_visibility( $visibility ) {
41 $this->visibility = $visibility;
42 return $this;
43 }
44
45 public function set_subtype( $subtype ) {
46 $this->subtype = $subtype;
47 $this->visibility = $this->get_default_visibility( $subtype );
48 return $this;
49 }
50
51 // Get default visibility based on subtype
52 private function get_default_visibility( $subtype ) {
53 $hidden_types = [
54 MWAI_STREAM_TYPES['TOOL_ARGS'],
55 MWAI_STREAM_TYPES['DEBUG'],
56 MWAI_STREAM_TYPES['HEARTBEAT'],
57 ];
58
59 $collapsed_types = [
60 MWAI_STREAM_TYPES['THINKING'],
61 MWAI_STREAM_TYPES['MCP_DISCOVERY'],
62 MWAI_STREAM_TYPES['STATUS'],
63 ];
64
65 if ( in_array( $subtype, $hidden_types ) ) {
66 return MWAI_STREAM_VISIBILITY['HIDDEN'];
67 }
68
69 if ( in_array( $subtype, $collapsed_types ) ) {
70 return MWAI_STREAM_VISIBILITY['COLLAPSED'];
71 }
72
73 return MWAI_STREAM_VISIBILITY['VISIBLE'];
74 }
75
76 // Convert to array for JSON encoding
77 public function to_array() {
78 $data = [
79 'type' => $this->type,
80 'data' => $this->content,
81 'timestamp' => $this->timestamp,
82 ];
83
84 // Only add extra fields for 'live' messages
85 if ( $this->type === 'live' ) {
86 $data['subtype'] = $this->subtype;
87 $data['visibility'] = $this->visibility;
88
89 if ( !empty( $this->metadata ) ) {
90 $data['metadata'] = $this->metadata;
91 }
92 }
93
94 return $data;
95 }
96
97 // Static factory methods for common message types
98 public static function content( $content ) {
99 return ( new self( 'live', MWAI_STREAM_TYPES['CONTENT'] ) )
100 ->set_content( $content );
101 }
102
103 public static function thinking( $content ) {
104 return ( new self( 'live', MWAI_STREAM_TYPES['THINKING'] ) )
105 ->set_content( $content );
106 }
107
108 public static function tool_call( $tool_name, $args = null ) {
109 $msg = ( new self( 'live', MWAI_STREAM_TYPES['TOOL_CALL'] ) )
110 ->set_content( "Calling function: $tool_name" )
111 ->set_metadata( 'tool_name', $tool_name );
112
113 if ( $args ) {
114 $msg->set_metadata( 'args', $args );
115 }
116
117 return $msg;
118 }
119
120 public static function status( $status, $details = null ) {
121 $msg = ( new self( 'live', MWAI_STREAM_TYPES['STATUS'] ) )
122 ->set_content( $status );
123
124 if ( $details ) {
125 $msg->set_metadata( 'details', $details );
126 }
127
128 return $msg;
129 }
130
131 public static function debug( $message, $data = null ) {
132 $msg = ( new self( 'live', MWAI_STREAM_TYPES['DEBUG'] ) )
133 ->set_content( $message );
134
135 if ( $data ) {
136 $msg->set_metadata( 'debug_data', $data );
137 }
138
139 return $msg;
140 }
141
142 public static function error( $message ) {
143 return new self( 'error', null );
144 }
145
146 public static function end( $data ) {
147 return new self( 'end', null );
148 }
149
150 // Standardized event helpers for consistent messaging
151
152 public static function request_sent() {
153 return self::status( 'Request sent...' );
154 }
155
156 public static function generating_response() {
157 return self::status( 'Generating response...' );
158 }
159
160 public static function response_completed() {
161 return self::status( 'Response completed.' );
162 }
163
164 public static function request_completed( $duration ) {
165 return self::status( "Request completed in $duration." );
166 }
167
168 public static function stream_completed() {
169 return self::status( 'Stream completed.' );
170 }
171
172 public static function mcp_discovery( $server_count, $tool_count ) {
173 return ( new self( 'live', MWAI_STREAM_TYPES['MCP_DISCOVERY'] ) )
174 ->set_content( "Got $server_count MCP server(s) and $tool_count tool(s)." )
175 ->set_metadata( 'server_count', $server_count )
176 ->set_metadata( 'tool_count', $tool_count );
177 }
178
179 public static function mcp_calling( $tool_name, $tool_id = null, $args = null ) {
180 $msg = ( new self( 'live', 'mcp_tool_call' ) )
181 ->set_content( "Calling $tool_name..." )
182 ->set_metadata( 'tool_name', $tool_name )
183 ->set_metadata( 'is_mcp', true );
184
185 if ( $tool_id ) {
186 $msg->set_metadata( 'tool_id', $tool_id );
187 }
188
189 if ( $args ) {
190 $msg->set_metadata( 'arguments', $args );
191 }
192
193 return $msg;
194 }
195
196 public static function mcp_result( $tool_name, $tool_use_id = null ) {
197 $msg = ( new self( 'live', 'mcp_tool_result' ) )
198 ->set_content( "Got result from $tool_name." )
199 ->set_metadata( 'tool_name', $tool_name )
200 ->set_metadata( 'is_mcp', true );
201
202 if ( $tool_use_id ) {
203 $msg->set_metadata( 'tool_use_id', $tool_use_id );
204 }
205
206 return $msg;
207 }
208
209 public static function function_calling( $function_name, $args = null ) {
210 $msg = ( new self( 'live', MWAI_STREAM_TYPES['TOOL_CALL'] ) )
211 ->set_content( "Calling $function_name..." )
212 ->set_metadata( 'tool_name', $function_name );
213
214 if ( $args ) {
215 $msg->set_metadata( 'arguments', $args );
216 }
217
218 return $msg;
219 }
220
221 public static function function_result( $function_name ) {
222 return ( new self( 'live', MWAI_STREAM_TYPES['TOOL_RESULT'] ) )
223 ->set_content( "Got result from $function_name." )
224 ->set_metadata( 'tool_name', $function_name );
225 }
226
227 public static function embeddings( $count, $query = null, $namespace = null ) {
228 $content = $count > 0
229 ? "Found $count relevant context(s) from embeddings."
230 : "Searching embeddings...";
231
232 $msg = ( new self( 'live', MWAI_STREAM_TYPES['EMBEDDINGS'] ) )
233 ->set_content( $content )
234 ->set_metadata( 'count', $count );
235
236 if ( $query ) {
237 $msg->set_metadata( 'query', $query );
238 }
239
240 if ( $namespace ) {
241 $msg->set_metadata( 'namespace', $namespace );
242 }
243
244 return $msg;
245 }
246 }