api_key = get_option('aigh_api_key', ''); $this->model = get_option('aigh_model', 'gpt-4o-mini'); } public function chat_completion($messages, $temperature = 0.7, $max_tokens = 2000) { if (empty($this->api_key)) { return new WP_Error('no_api_key', 'OpenAI API key not configured'); } $response = wp_remote_post('https://api.openai.com/v1/chat/completions', array( 'headers' => array( 'Authorization' => 'Bearer ' . $this->api_key, 'Content-Type' => 'application/json', ), 'body' => json_encode(array( 'model' => $this->model, 'messages' => $messages, 'temperature' => $temperature, 'max_tokens' => $max_tokens )), 'timeout' => 120 )); if (is_wp_error($response)) { return $response; } $body = json_decode(wp_remote_retrieve_body($response), true); if (isset($body['error'])) { return new WP_Error('openai_error', $body['error']['message']); } if (!isset($body['choices'][0]['message']['content'])) { return new WP_Error('invalid_response', 'Unexpected API response format'); } return $body['choices'][0]['message']['content']; } public function generate_json($system_prompt, $user_prompt, $temperature = 0.7) { $messages = array( array( 'role' => 'system', 'content' => $system_prompt ), array( 'role' => 'user', 'content' => $user_prompt ) ); $response = $this->chat_completion($messages, $temperature, 4000); if (is_wp_error($response)) { return $response; } $response = trim($response); $response = preg_replace('/^```json\s*/i', '', $response); $response = preg_replace('/\s*```$/i', '', $response); $decoded = json_decode($response, true); if (json_last_error() !== JSON_ERROR_NONE) { return new WP_Error('json_decode_error', 'Failed to decode JSON response'); } return $decoded; } public function generate_text($system_prompt, $user_prompt, $temperature = 0.7, $max_tokens = 2000) { $messages = array( array( 'role' => 'system', 'content' => $system_prompt ), array( 'role' => 'user', 'content' => $user_prompt ) ); return $this->chat_completion($messages, $temperature, $max_tokens); } }