PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 3.1.0
AI Engine – The Chatbot, AI Framework & MCP for WordPress v3.1.0
3.5.8 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 / dropped-file.php
ai-engine / classes / query Last commit date
assist-feedback.php 10 months ago assistant.php 10 months ago base.php 10 months ago dropped-file.php 11 months ago edit-image.php 1 year ago embed.php 10 months ago feedback.php 10 months ago function.php 1 year ago image.php 10 months ago parameter.php 1 year ago text.php 10 months ago transcribe.php 11 months ago
dropped-file.php
138 lines
1 <?php
2
3 class Meow_MWAI_Query_DroppedFile {
4 private $data;
5 private $rawData;
6 private $type; // Defines what the data is about ('refId', 'url', or 'data')
7 private $purpose; // Can be 'assistant', 'vision' or 'files' => this needs to be checked
8 private $mimeType; // 'image/jpeg' or any other mime type
9 private $fileId; // The ID of the file in the database
10 public $originalPath; // The original file path (for files loaded from disk)
11
12 public static function from_url( $url, $purpose, $mimeType = null, $fileId = null ) {
13 if ( empty( $mimeType ) ) {
14 $mimeType = Meow_MWAI_Core::get_mime_type( $url );
15 }
16 return new Meow_MWAI_Query_DroppedFile( $url, 'url', $purpose, $mimeType, $fileId );
17 }
18
19 public static function from_data( $data, $purpose, $mimeType = null ) {
20 return new Meow_MWAI_Query_DroppedFile( $data, 'data', $purpose, $mimeType );
21 }
22
23 public static function from_path( $path, $purpose, $mimeType = null ) {
24 $data = file_get_contents( $path );
25 if ( empty( $mimeType ) ) {
26 $mimeType = Meow_MWAI_Core::get_mime_type( $path );
27 }
28 $droppedFile = new Meow_MWAI_Query_DroppedFile( $data, 'data', $purpose, $mimeType );
29 // Store the original path for filename extraction
30 $droppedFile->originalPath = $path;
31 return $droppedFile;
32 }
33
34 public function __construct( $data, $type, $purpose, $mimeType = null, $fileId = null ) {
35 if ( !empty( $type ) && $type !== 'refId' && $type !== 'url' && $type !== 'data' ) {
36 throw new Exception( 'AI Engine: The file type can only be refId, url or data.' );
37 }
38 if ( !empty( $purpose ) && $purpose !== 'assistant-in' && $purpose !== 'vision' && $purpose !== 'files' ) {
39 throw new Exception( 'AI Engine: The file purpose can only be assistant, vision or files.' );
40 }
41 $this->data = $data;
42 $this->type = $type;
43 $this->purpose = $purpose;
44 $this->mimeType = $mimeType;
45 $this->fileId = $fileId;
46 }
47
48 public function get_url() {
49 if ( $this->type === 'url' ) {
50 return $this->data;
51 }
52 throw new Exception( 'AI Engine: The file is not an URL.' );
53 }
54
55 private function get_raw_data() {
56 if ( !empty( $this->rawData ) ) {
57 return $this->rawData;
58 }
59 if ( $this->type === 'url' ) {
60 // Validate URL scheme to prevent SSRF attacks
61 $parts = wp_parse_url( $this->data );
62 if ( ! isset( $parts['scheme'] ) || ! in_array( $parts['scheme'], [ 'http', 'https' ], true ) ) {
63 throw new Exception( 'Invalid URL scheme; only HTTP/HTTPS allowed.' );
64 }
65
66 $this->rawData = file_get_contents( $this->data );
67 return $this->rawData;
68 }
69 else if ( $this->type === 'data' ) {
70 return $this->data;
71 }
72 throw new Exception( 'AI Engine: The file is not data or an URL.' );
73 }
74
75 public function get_data() {
76 if ( $this->type === 'url' ) {
77 return $this->get_raw_data();
78 }
79 else if ( $this->type === 'data' ) {
80 return $this->data;
81 }
82 throw new Exception( 'AI Engine: The file is not data or an URL.' );
83 }
84
85 public function get_base64() {
86 $data = $this->get_raw_data();
87 return base64_encode( $data );
88 }
89
90 // Will return something like "data:image/jpeg;base64,{data}"
91 public function get_inline_base64_url() {
92 $b64 = $this->get_base64();
93 return "data:{$this->mimeType};base64,{$b64}";
94 }
95
96 public function get_type() {
97 return $this->type;
98 }
99
100 public function get_purpose() {
101 return $this->purpose;
102 }
103
104 public function get_mimeType() {
105 return $this->mimeType;
106 }
107
108 public function is_image() {
109 return strpos( $this->mimeType, 'image' ) !== false;
110 }
111
112 public function get_fileId() {
113 return $this->fileId;
114 }
115
116 // Return a filename for this file. If the file is an URL, use the basename of
117 // its path. If the file is raw data, generate a generic name based on the mime type.
118 public function get_filename() {
119 // If we have an original path (from from_path), use its basename
120 if ( !empty( $this->originalPath ) ) {
121 return basename( $this->originalPath );
122 }
123 if ( $this->type === 'url' ) {
124 $path = parse_url( $this->data, PHP_URL_PATH );
125 return basename( $path );
126 }
127 if ( $this->type === 'data' ) {
128 if ( !empty( $this->mimeType ) ) {
129 $parts = explode( '/', $this->mimeType );
130 $ext = end( $parts );
131 return 'file.' . $ext;
132 }
133 return 'file.bin';
134 }
135 return 'file';
136 }
137 }
138