public static function rest_generate(WP_REST_Request $req) { $params = $req->get_json_params(); $provider = sanitize_text_field((string)($params['provider'] ?? get_option(self::OPT_DEFAULT_PROVIDER, 'openai'))); $system = (string)($params['system'] ?? ''); $user = (string)($params['user'] ?? ''); $attachedFiles = $params['attachedFiles'] ?? []; $model = sanitize_text_field((string)($params['model'] ?? ( $provider === 'anthropic' ? get_option(self::OPT_DEFAULT_ANTHROPIC_MODEL, 'claude-sonnet-4-5') : get_option(self::OPT_DEFAULT_OPENAI_MODEL, 'gpt-4-turbo') ))); $max_output_tokens = isset($params['max_output_tokens']) ? (int)$params['max_output_tokens'] : 2200; $temperature = isset($params['temperature']) ? (float)$params['temperature'] : 0.2; $timeout = isset($params['timeout']) ? (int)$params['timeout'] : 240; if (strlen($system) < 10 || strlen($user) < 2) { return new WP_Error('sun_ai_error', 'System and user prompts are required.', ['status' => 400]); } if ($provider === 'anthropic') { $key = self::anthropic_key(); if ($key === '') return new WP_Error('sun_ai_error', 'Anthropic API key not set.', ['status' => 400]); $messages = [ ['role'=>'user','content'=>self::build_anthropic_content($user, $attachedFiles)] ]; $body = [ 'model' => $model, 'max_tokens' => $max_output_tokens, 'temperature' => $temperature, 'system' => $system, 'messages' => $messages ]; $res = self::call_anthropic($key, $body, $timeout); if (!empty($res['error'])) return new WP_Error('sun_ai_error', $res['error'], ['status' => $res['code']]); return new WP_REST_Response(['text'=>self::anthropic_extract_text($res['json'])], 200); } $key = self::openai_key(); if ($key === '') return new WP_Error('sun_ai_error', 'OpenAI API key not set.', ['status'=>400]); $messages = [ ['role'=>'system','content'=>$system], ['role'=>'user','content'=>self::build_openai_content($user, $attachedFiles)], ]; $body = [ 'model' => $model, 'messages' => $messages, 'max_tokens' => $max_output_tokens, 'temperature' => $temperature, ]; $res = self::call_openai($key, $body, $timeout); if (!empty($res['error'])) return new WP_REST_Response(['error'=>$res['error']], $res['code']); return new WP_REST_Response(['text'=>self::openai_extract_text($res['json'])], 200); } private static function build_openai_content($user, $attachedFiles) { $content = []; // Add text $content[] = ['type' => 'text', 'text' => $user]; // Add attached files if (is_array($attachedFiles)) { foreach ($attachedFiles as $file) { if (isset($file['type']) && isset($file['data'])) { if (strpos($file['type'], 'image/') === 0) { $content[] = [ 'type' => 'image_url', 'image_url' => ['url' => $file['data']] ]; } elseif ($file['type'] === 'application/pdf') { // For PDFs, add as text instruction $content[] = [ 'type' => 'text', 'text' => '[PDF attached - please analyze and extract information from it]' ]; } } } } return $content; } private static function build_anthropic_content($user, $attachedFiles) { $content = []; // Add attached files first if (is_array($attachedFiles)) { foreach ($attachedFiles as $file) { if (isset($file['type']) && isset($file['data'])) { if (strpos($file['type'], 'image/') === 0) { $media_type_map = [ 'image/jpeg' => 'image/jpeg', 'image/png' => 'image/png', 'image/webp' => 'image/webp', 'image/gif' => 'image/gif', ]; $media_type = $media_type_map[$file['type']] ?? 'image/jpeg'; // Extract base64 from data URL $base64 = preg_replace('/^data:image\/\w+;base64,/', '', $file['data']); $content[] = [ 'type' => 'image', 'source' => [ 'type' => 'base64', 'media_type' => $media_type, 'data' => $base64, ] ]; } elseif ($file['type'] === 'application/pdf') { $content[] = [ 'type' => 'text', 'text' => '[PDF attached - please analyze and extract information from it]' ]; } } } } // Add user text $content[] = ['type' => 'text', 'text' => $user]; return $content; } Donald Trump Archives - Page 9 of 14 - The Georgia Sun

Gift this article