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 / query / function.php
ai-engine / classes / query Last commit date
assist-feedback.php 10 months ago assistant.php 2 months ago base.php 1 week 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 1 month ago image.php 1 month ago parameter.php 11 months ago text.php 1 week ago transcribe.php 8 months ago
function.php
210 lines
1 <?php
2
3 class Meow_MWAI_Query_Function {
4 public string $name;
5 public string $description;
6 public array $parameters;
7 public string $type; // 'code-engine', etc...
8 public string $target; // 'server' or 'client'
9 public string $behavior; // 'dynamic' (default) or 'static'
10 public ?string $id;
11
12 public function __construct(
13 string $name,
14 string $description,
15 array $parameters = [],
16 ?string $type = null,
17 ?string $id = null,
18 ?string $target = null,
19 ?string $behavior = null
20 ) {
21 // $name: The name of the function to be called.
22 // Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64.
23 if ( !preg_match( '/^[a-zA-Z0-9_-]{1,64}$/', $name ) ) {
24 throw new InvalidArgumentException( "AI Engine: Invalid function name ($name) for Meow_MWAI_Query_Function." );
25 }
26
27 foreach ( $parameters as $parameter ) {
28 if ( !( $parameter instanceof Meow_MWAI_Query_Parameter ) ) {
29 throw new InvalidArgumentException( 'AI Engine: Invalid parameter for Meow_MWAI_Query_Function.' );
30 }
31 }
32
33 $this->name = $name;
34 $this->description = $description;
35 $this->parameters = $parameters;
36 $this->type = $type ?? 'manual';
37 $this->id = $id;
38 $this->target = $target ?? 'server';
39 $this->behavior = ( $behavior === 'static' ) ? 'static' : 'dynamic';
40 }
41
42 public function serializeForOpenAI() {
43 // Initialize the base structure with name and description
44 $json = [ 'name' => $this->name, 'description' => $this->description ];
45
46 $properties = [];
47 $required = [];
48
49 // Loop through each parameter to construct the properties object
50 if ( !empty( $this->parameters ) ) {
51 foreach ( $this->parameters as $parameter ) {
52
53 $properties[$parameter->name] = [
54 'type' => $parameter->type, // Assuming each parameter has a 'type' attribute
55 'description' => $parameter->description, // Assuming each parameter has a 'description' attribute
56 ];
57
58 // If the parameter type is "array" and has a "items" attribute, include it
59 if ( $parameter->type === 'array' ) {
60 $properties[$parameter->name]['items'] = [
61 'type' => 'string', // Assuming the items are strings
62 ];
63 }
64
65 // If an enum is set for the parameter, include it
66 if ( isset( $parameter->enum ) ) {
67 $properties[$parameter->name]['enum'] = $parameter->enum;
68 }
69
70 // If the parameter is required, add its name to the required array
71 if ( $parameter->required ) {
72 $required[] = $parameter->name;
73 }
74 }
75 }
76
77 // Always include parameters field (required by some APIs like OVH even when empty)
78 // Properties must be an object (stdClass) when empty, not an empty array
79 $json['parameters'] = [
80 'type' => 'object',
81 'properties' => empty( $properties ) ? new stdClass() : $properties,
82 'required' => $required,
83 ];
84
85 return $json;
86 }
87
88 public function serializeForAnthropic() {
89 $json = [
90 'name' => $this->name,
91 'description' => $this->description,
92 'input_schema' => [
93 'type' => 'object',
94 'properties' => new stdClass()
95 ],
96 ];
97
98 if ( !empty( $this->parameters ) ) {
99 $properties = [];
100 $required = [];
101 foreach ( $this->parameters as $parameter ) {
102 $properties[$parameter->name] = [
103 'type' => $parameter->type,
104 'description' => $parameter->description,
105 ];
106 if ( isset( $parameter->enum ) ) {
107 $properties[$parameter->name]['enum'] = $parameter->enum;
108 }
109 if ( $parameter->required ) {
110 $required[] = $parameter->name;
111 }
112 }
113 $json['input_schema']['properties'] = empty( $properties ) ? new stdClass() : $properties;
114 if ( !empty( $required ) ) {
115 $json['input_schema']['required'] = $required;
116 }
117 }
118
119 return $json;
120 }
121
122 public function serializeForGemini() {
123 $json = [
124 'name' => $this->name,
125 'description' => $this->description,
126 'parameters' => [
127 'type' => 'object',
128 'properties' => new stdClass(),
129 'required' => []
130 ]
131 ];
132
133 if ( !empty( $this->parameters ) ) {
134 $properties = [];
135 $required = [];
136 foreach ( $this->parameters as $parameter ) {
137 $properties[$parameter->name] = [
138 'type' => $parameter->type,
139 'description' => $parameter->description,
140 ];
141
142 // If the parameter type is "array" and has a "items" attribute, include it
143 if ( $parameter->type === 'array' ) {
144 $properties[$parameter->name]['items'] = [
145 'type' => 'string',
146 ];
147 }
148
149 if ( isset( $parameter->enum ) ) {
150 $properties[$parameter->name]['enum'] = $parameter->enum;
151 }
152 if ( $parameter->required ) {
153 $required[] = $parameter->name;
154 }
155 }
156 // Gemini requires properties to be an object (stdClass), not an array
157 $json['parameters']['properties'] = empty( $properties ) ? new stdClass() : (object) $properties;
158 $json['parameters']['required'] = $required;
159 }
160
161 return $json;
162 }
163
164 public static function fromJson( array $json ): Meow_MWAI_Query_Function {
165 $funcName = $json['name'];
166 $funcDesc = $json['description'] ?? '';
167 $funcType = $json['type'] ?? null;
168 $funcId = $json['id'] ?? null;
169 $funcTarget = $json['target'] ?? null;
170 $funcBehavior = $json['behavior'] ?? null;
171 if ( $funcId === null && !empty( $json['snippetId'] ) ) {
172 $funcId = $json['snippetId'];
173 }
174 $args = [];
175 if ( !empty( $json['args'] ) ) {
176 foreach ( $json['args'] as $arg ) {
177 $name = ltrim( $arg['name'], '$' );
178 $desc = $arg['description'] ?? null;
179 $type = $arg['type'] ?? 'string';
180 $required = $arg['required'] ?? false;
181 $args[] = new Meow_MWAI_Query_Parameter( $name, $desc, $type, $required );
182 }
183 }
184 return new self( $funcName, $funcDesc, $args, $funcType, $funcId, $funcTarget, $funcBehavior );
185 }
186
187 public static function toJson( Meow_MWAI_Query_Function $function ): array {
188 $json = [
189 'name' => $function->name,
190 'desc' => $function->description,
191 'type' => $function->type,
192 'id' => $function->id,
193 'target' => $function->target,
194 'behavior' => $function->behavior,
195 'args' => [],
196 ];
197
198 foreach ( $function->parameters as $param ) {
199 $json['args'][] = [
200 'name' => $param->name,
201 'desc' => $param->description,
202 'type' => $param->type,
203 'required' => $param->required,
204 ];
205 }
206
207 return $json;
208 }
209 }
210