$threadId, "assistant_id" => ASSISTANT_ID, "tool_resources" => [ "file_search" => [ "file_ids" => $fileIds ] ] ]); logMessage2("📡 Отправляем запрос на запуск анализа в API: $payload"); $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => "https://api.proxyapi.ru/openai/v1/threads/$threadId/runs", // Заменили v2 на v1 CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => $payload, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . OPENAI_API_KEY, 'Content-Type: application/json' ] ]); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $curlError = curl_error($ch); curl_close($ch); if ($curlError) { logMessage2("❌ Ошибка cURL при запуске анализа: $curlError"); die("❌ Ошибка cURL при запуске анализа: $curlError\n"); } logMessage2("📡 Ответ API при запуске анализа (HTTP $httpCode): $response"); $decoded = json_decode($response, true); if ($httpCode !== 200 || !isset($decoded['id'])) { logMessage2("❌ Ошибка запуска анализа! API ответил: " . json_encode($decoded, JSON_UNESCAPED_UNICODE)); die("❌ Ошибка запуска анализа! Ответ API: " . json_encode($decoded, JSON_UNESCAPED_UNICODE) . "\n"); } logMessage2("✅ Анализ документов успешно запущен! Run ID: " . $decoded['id']); return true; } /* ===================== Основной скрипт ===================== */ // 🔹 1️⃣ Загружаем файлы в OpenAI logMessage2("🚀 Запуск скрипта загрузки файлов и создания треда..."); $fileIds = []; $supportedExtensions = ['txt', 'doc', 'docx', 'pdf']; if (!is_dir(DOCUMENTS_FOLDER)) { die("❌ Ошибка: Папка " . DOCUMENTS_FOLDER . " не найдена!\n"); } foreach (scandir(DOCUMENTS_FOLDER) as $file) { if ($file[0] === '.') continue; // Пропускаем скрытые файлы $filePath = DOCUMENTS_FOLDER . '/' . $file; $extension = pathinfo($file, PATHINFO_EXTENSION); if (in_array(strtolower($extension), $supportedExtensions)) { echo "🔄 Загружаем: $file ...\n"; logMessage2("🔄 Загружаем файл: $filePath"); $fileId = uploadFileToOpenAI($filePath); // Используем функцию из vectorgpt.php if ($fileId) { echo "✅ Файл загружен! File ID: $fileId\n"; logMessage2("✅ Файл загружен! File ID: $fileId"); $fileIds[] = $fileId; } else { echo "❌ Ошибка загрузки файла: $file\n"; logMessage2("❌ Ошибка загрузки файла: $filePath"); } } } // 🔹 2️⃣ Создаём новый `thread_id` logMessage2("🔄 Создаём новый `thread_id`..."); $threadId = createNewThread(); if (!$threadId) { logMessage2("❌ Ошибка создания треда!"); die("❌ Ошибка создания треда!\n"); } echo "✅ Создан новый `thread_id`: $threadId\n"; logMessage2("✅ Создан новый `thread_id`: $threadId"); // 🔹 3️⃣ Прикрепляем файлы к `thread_id` if (!empty($fileIds)) { echo "🔄 Прикрепляем файлы к треду...\n"; logMessage2("🔄 Прикрепляем файлы к `thread_id`: $threadId"); if (attachFilesToThread($threadId, $fileIds)) { echo "✅ Файлы успешно прикреплены!\n"; logMessage2("✅ Файлы успешно прикреплены к `thread_id`: $threadId"); } else { logMessage2("❌ Ошибка прикрепления файлов к `thread_id`!"); die("❌ Ошибка прикрепления файлов!\n"); } } else { echo "⚠️ Нет загруженных файлов для прикрепления.\n"; logMessage2("⚠️ Нет загруженных файлов для прикрепления."); } // 🔹 4️⃣ Выводим `thread_id` echo "🎯 Используйте этот `thread_id` в запросах: $threadId\n"; logMessage2("🎯 Завершено! Используйте `thread_id`: $threadId"); ?>