name = $name; $this->description = $description; $this->parameters = $parameters; $this->type = $type ?? 'manual'; $this->id = $id; $this->target = $target ?? 'server'; } public function serializeForOpenAI() { // Initialize the base structure with name and description $json = [ 'name' => $this->name, 'description' => $this->description ]; // Check if parameters are set and not empty if ( !empty( $this->parameters ) ) { $properties = []; $required = []; // Loop through each parameter to construct the properties object foreach ( $this->parameters as $parameter ) { $properties[$parameter->name] = [ 'type' => $parameter->type, // Assuming each parameter has a 'type' attribute 'description' => $parameter->description, // Assuming each parameter has a 'description' attribute ]; // If an enum is set for the parameter, include it if ( isset($parameter->enum) ) { $properties[$parameter->name]['enum'] = $parameter->enum; } // If the parameter is required, add its name to the required array if ( $parameter->required ) { $required[] = $parameter->name; } } // Assemble the parameters part of the JSON $json['parameters'] = [ 'type' => 'object', 'properties' => $properties, 'required' => $required, ]; } return $json; } public function serializeForAnthropic() { $json = [ 'name' => $this->name, 'description' => $this->description, 'input_schema' => [ 'type' => 'object', 'properties' => new stdClass() ], ]; if ( !empty( $this->parameters ) ) { $properties = []; $required = []; foreach ( $this->parameters as $parameter ) { $properties[$parameter->name] = [ 'type' => $parameter->type, 'description' => $parameter->description, ]; if ( isset( $parameter->enum ) ) { $properties[$parameter->name]['enum'] = $parameter->enum; } if ( $parameter->required ) { $required[] = $parameter->name; } } $json['input_schema']['properties'] = empty( $properties ) ? new stdClass() : $properties; if ( !empty( $required ) ) { $json['input_schema']['required'] = $required; } } return $json; } public static function fromJson( array $json ): Meow_MWAI_Query_Function { $funcName = $json['name']; $funcDesc = $json['desc']; $funcType = $json['type'] ?? null; $funcId = $json['id'] ?? null; $funcTarget = $json['target'] ?? null; if ( $funcId === null && !empty( $json['snippetId'] ) ) { $funcId = $json['snippetId']; } $args = []; if ( !empty( $json['args'] ) ) { foreach ( $json['args'] as $arg ) { $name = ltrim( $arg['name'], '$' ); $desc = $arg['desc'] ?? null; $type = $arg['type'] ?? 'string'; $required = $arg['required'] ?? false; $args[] = new Meow_MWAI_Query_Parameter( $name, $desc, $type, $required ); } } return new self( $funcName, $funcDesc, $args, $funcType, $funcId, $funcTarget ); } public static function toJson( Meow_MWAI_Query_Function $function ): array { $json = [ 'name' => $function->name, 'desc' => $function->description, 'type' => $function->type, 'id' => $function->id, 'target' => $function->target, 'args' => [], ]; foreach ( $function->parameters as $param ) { $json['args'][] = [ 'name' => $param->name, 'desc' => $param->description, 'type' => $param->type, 'required' => $param->required, ]; } return $json; } }