From 224748fc08a8ab7b8f16831bb753accd73093bf3 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sun, 28 Sep 2025 00:22:57 +0000 Subject: [PATCH] Commit - 20250928-002256718 --- api.php | 48 ++++++++++++++++++++----------------------- db/knowledge_base.txt | 3 +-- 2 files changed, 23 insertions(+), 28 deletions(-) diff --git a/api.php b/api.php index 7cba1a9..c3823cc 100644 --- a/api.php +++ b/api.php @@ -27,9 +27,9 @@ function get_env($key, $default = null) { // --- Main Logic --- // 1. Get API Key -$apiKey = get_env('MISTRAL_API_KEY'); +$apiKey = get_env('GEMINI_API_KEY'); if (!$apiKey) { - echo json_encode(['reply' => 'Ошибка: API-ключ не найден. Пожалуйста, добавьте его в файл .env с именем MISTRAL_API_KEY.']); + echo json_encode(['reply' => 'Ошибка: API-ключ не найден. Пожалуйста, добавьте его в файл .env']); exit; } @@ -50,33 +50,28 @@ if (!file_exists($knowledgeBasePath)) { } $knowledgeBase = file_get_contents($knowledgeBasePath); -// 4. Prepare the messages for the AI -$systemPrompt = "Ты — ИИ-ассистент, специалист по внутренней системе управления складом под названием HUB. Твоя задача — отвечать на вопросы пользователя, основываясь ИСКЛЮЧИТЕЛЬНО на предоставленной базе знаний. Не придумывай ничего от себя. Если ответа в базе знаний нет, вежливо сообщи, что ты можешь отвечать только на вопросы, связанные с системой HUB.\n\nВот база знаний:\n---\n" . $knowledgeBase; +// 4. Prepare the prompt for the AI +$prompt = "Ты — ИИ-ассистент, специалист по внутренней системе управления складом под названием HUB. Твоя задача — отвечать на вопросы пользователя, основываясь ИСКЛЮЧИТЕЛЬНО на предоставленной базе знаний. Не придумывай ничего от себя. Если ответа в базе знаний нет, вежливо сообщи, что ты можешь отвечать только на вопросы, связанные с системой HUB.\n\nВот база знаний:\n---\n" . $knowledgeBase . "\n---\n\nВопрос пользователя: \"" . $userMessage . "\""; -// 5. Call the Mistral API -$url = 'https://api.mistral.ai/v1/chat/completions'; +// 5. Call the Gemini API +$url = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=' . $apiKey; $data = [ - 'model' => 'mistral-small-latest', // Or another suitable model - 'messages' => [ + 'contents' => [ [ - 'role' => 'system', - 'content' => $systemPrompt - ], - [ - 'role' => 'user', - 'content' => $userMessage + 'parts' => [ + ['text' => $prompt] + ] ] ] ]; $options = [ 'http' => [ - 'header' => "Content-Type: application/json\n" . - "Authorization: Bearer " . $apiKey . "\n", + 'header' => "Content-type: application/json\r\n", 'method' => 'POST', 'content' => json_encode($data), - 'ignore_errors' => true + 'ignore_errors' => true // To see the error message from the API ] ]; @@ -86,29 +81,30 @@ $http_response_header = $http_response_header ?? []; // 6. Process the response if ($response === FALSE) { - $error = 'Не удалось связаться с API Mistral. '; + $error = 'Не удалось связаться с API. '; + // Check for more specific errors if possible $last_error = error_get_last(); if ($last_error) { $error .= $last_error['message']; } + // Try to get the HTTP status and response body $status_line = $http_response_header[0] ?? 'HTTP/1.1 500 Internal Server Error'; preg_match('{HTTP/\S+\s(\d+)}', $status_line, $match); $status = $match[1] ?? 500; - error_log("Mistral API Error: Status $status, Response: $response"); + error_log("Gemini API Error: Status $status, Response: $response"); - echo json_encode(['reply' => "Ошибка при обращении к сервису ИИ (Mistral). Статус: $status. Пожалуйста, проверьте ключ API и настройки сервера."]); + echo json_encode(['reply' => "Ошибка при обращении к сервису ИИ. Статус: $status. Пожалуйста, проверьте ключ API и настройки сервера."]); } else { $result = json_decode($response, true); - if (isset($result['choices'][0]['message']['content'])) { - $reply = $result['choices'][0]['message']['content']; + if (isset($result['candidates'][0]['content']['parts'][0]['text'])) { + $reply = $result['candidates'][0]['content']['parts'][0]['text']; echo json_encode(['reply' => $reply]); } else { // Log the actual error response from the API for debugging - error_log("Mistral API - Unexpected response structure: " . $response); - $errorMessage = $result['message'] ?? 'Неизвестная ошибка.'; - echo json_encode(['reply' => 'Получен неожиданный ответ от сервиса ИИ (Mistral). ' . $errorMessage]); + error_log("Gemini API - Unexpected response structure: " . $response); + echo json_encode(['reply' => 'Получен неожиданный ответ от сервиса ИИ. Возможно, проблема с конфигурацией или ключом API.']); } -} +} \ No newline at end of file diff --git a/db/knowledge_base.txt b/db/knowledge_base.txt index 5d03386..0b869b4 100644 --- a/db/knowledge_base.txt +++ b/db/knowledge_base.txt @@ -1,2 +1 @@ -# База знаний: Система HUB ## 1. Введение в систему HUB **Цель:** Понять назначение HUB и его роль в управлении складскими данными. **HUB** — это система для управления складскими предметами (грузами, контейнерами, коробками и т.д.) и процессами их перемещения, хранения и инвентаризации. Она позволяет отслеживать состояние предметов, их историю, взаимодействие с контейнерами и логистическими точками, а также проводить пересчеты и настраивать складскую инфраструктуру. ### Ключевые понятия - **Предмет**: Объект хранения (например, ТЯ, коробка, отправление). - **Логистический контейнер (ЛК)**: Емкость для хранения/перемещения предметов (статусы: "Формируется", "Сформирован" и др.). - **Инвентаризация / пересчет**: Проверка фактического наличия предметов на складе против учетных данных. - **КМО**: Внутренний термин, предположительно связанный с документацией о материальных ошибках/недостачах (например, "Книга Материальных Остатков"). - **ЦМН**: Цель доставки (место назначения предмета). - **Тайм-слот**: Временной интервал для доставки. --- ## 2. Основы интерфейса HUB и карточка предмета **Цель:** Знакомство с интерфейсом HUB и структурой карточки предмета. HUB содержит главное меню, схему склада и таблицу со списком предметов. Основная работа ведется через **карточку предмета** — детализированное окно с информацией о конкретном объекте. ### 2.1 Структура карточки предмета Карточка доступна при клике на ID предмета в таблице **"Предметы"**. Она включает следующие вкладки: | Вкладка | Описание | Основные данные | |-------------------------|----------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------| | **«О предмете»** | Основная информация о предмете. | Тип, статус, ID, номенклатура, принадлежность, стоимость, адрес хранения. | | **«Состав»** | Текущий и исторический состав контейнера (для предметов, являющихся контейнерами). | Список предметов внутри, даты -1. навигация_по_карточке.pdf Навигация по карточке предмета В HUB можно просматривать информацию по всем типам предметов: ТЯ, КТЯ, тарная паллета, груз/транзитный груз, коробка/транзитная коробка, квант-коробка, отправление, экземпляр. Карточка предмета содержит: Вкладка «О предмете»: основная информация о предмете. Вкладка «Состав»: текущий и исторический состав контейнера. Вкладка «История (перемещения)» — перемещения между ячейками склада, контейнерами и логистическими точками. Вкладка «Отгрузки»: все выдачи предмета. Вкладка «Транспорт»: вхождения и выходы из транспортных сущностей. Вкладка «История свойств»: изменения свойств предмета (статус, ЦМН, слот доставки). 2. состав_лог_конт.pdf Просмотр состава логистического контейнера Открыть карточку контейнера, перейти на вкладку «Состав». По умолчанию отображается состав на текущий момент времени. Чтобы выгрузить состав в Excel, нажмите на значок «скачать» в правом верхнем углу. Важно: Для логистических контейнеров в статусе «Формируется» состав виден только в HUB. Для просмотра истории изменения состава логистического контейнера необходимо выключить тогл «Только с пустой датой извлечения». 3. пересчеты_hub.pdf Пересчеты и инвентаризации Вкладка «Пересчеты»: Запуск пересчетов: Выберите место или несколько мест на схеме склада. Нажмите на кнопку «Запустить пересчет». Подтвердите запуск в окне «Запустить пересчет?». Информация о ячейке: Нажмите на пиктограмму "i" справа от выбранной ячейки. Инфографика по пересчетам: Нажмите на кнопку в правой части экрана для просмотра инфографики. Просмотр детализированной информации: При нажатии на ID инвентаризации/пересчета откроется окно с детализированной информацией. В этом окне можно скачать фактический, балансовый списки и списки излишков и недостач. Вкладка «Задания»: Полная информация о заданиях на пересчет/инвентаризацию и их исполнителях. Утерянные предметы и акты на удержание КМО: На вкладках можно увидеть список утерянных предметов и акты на удержание КМО. 4. информа \ No newline at end of file +Это БАЗА знаний 1. Введение в систему HUB Цель: Понять назначение HUB и его роль в управлении складскими данными. HUB — это система для управления складскими предметами (грузами, контейнерами, коробками и т.д.) и процессами их перемещения, хранения и инвентаризации. Она позволяет отслеживать состояние предметов, их историю, взаимодействие с контейнерами и логистическими точками, а также проводить пересчеты и настраивать складскую инфраструктуру. Ключевые понятия: Предмет: Объект хранения (например, ТЯ, коробка, отправление). Логистический контейнер (ЛК): Емкость для хранения/перемещения предметов (статусы: "Формируется", "Сформирован" и др.). Инвентаризация/пересчет: Проверка фактического наличия предметов на складе против учетных данных. КМО: Внутренний термин, предположительно связанный с документацией о материальных ошибках/недостачах (например, "Книга Материальных Остатков"). ЦМН: Цель доставки (место назначения предмета). Тайм-слот: Временной интервал для доставки. 2. Основы интерфейса HUB и карточка предмета Цель: Знакомство с интерфейсом HUB и структурой карточки предмета. HUB содержит главное меню, схему склада и таблицу со списком предметов. Основная работа ведется через карточку предмета — детализированное окно с информацией о конкретном объекте. 2.1 Структура карточки предмета Карточка доступна при клике на ID предмета в таблице "Предметы". Она включает следующие вкладки: Вкладка Описание Основные данные «О предмете» Основная информация о предмете. Тип, статус, ID, номенклатура, принадлежность, стоимость, адрес хранения. «Состав» Текущий и исторический состав контейнера (для предметов, являющихся контейнерами). Список предметов внутри, даты добавления/удаления, статусы элементов состава. «История (перемещения)» История перемещений предмета между ячейками, контейнерами и логистическими точками. Тип события (принято, перемещено, вошло/вышло из контейнера), дата, источник/цель. «Отгрузки» Запись о выдаче предмета (отгрузке) со склада. Дата отгрузки, получате \ No newline at end of file