Цей документ визначає технічні операції, які виконує geminiService.ts, включаючи протоколи вводу-виводу та алгоритми трансформації даних.
Призначення: Основний метод для обробки запитів користувача, що використовує контекст бази даних та інструменти заземлення (Grounding).
| Вхідні дані | Тип | Опис |
|---|---|---|
query |
string |
Текст запиту користувача українською мовою. |
organizations |
Organization[] |
Масив об'єктів організацій, відфільтрований за регіоном. |
userLocation |
{lat, lng} |
(Опційно) Координати користувача для Google Maps. |
useThinking |
boolean |
Прапор активації режиму глибоких міркувань. |
- Аналіз наміру: Система шукає ключові слова ("перевір", "актуально") для вибору моделі
gemini-3-pro-preview(якщо потрібна верифікація) абоgemini-3-flash-preview(для швидких відповідей). - Формування контексту: Масив
organizations(до 5200 точок) агрегується у коротке резюме: "У списку X організацій. Категорії: Y, Z.". - Вибір інструментів (Tools):
- Якщо запит про локацію: підключається
googleMaps. - Якщо запит про верифікацію: підключається
googleSearch.
- Якщо запит про локацію: підключається
- Вихід: Об'єкт
AnalyzeResult, що містить згенерований текст та масив посилань на джерела.
Призначення: Перетворення тексту у мовлення з емоційним забарвленням пані Думки.
| Вхідні дані | Трансформація | Вихідні дані |
|---|---|---|
| Текст (UTF-8) | Додавання тегу [EMOTIONAL STYLE: Warm...] + запит до моделі TTS |
ArrayBuffer (Raw PCM 24kHz, 16-bit) |
- Модель:
gemini-2.5-flash-preview-tts. - Голос:
Kore(оптимізовано під жіночий вокал). - Обробка: Декодування Base64 -> Перетворення у
Uint8Array-> Отримання бінарного буфера дляWeb Audio API.
Призначення: Забезпечення двостороннього голосового зв'язку в реальному часі.
- Вхід (Input): Захоплення аудіо з
getUserMedia. - Трансформація вводу:
Float32Array(Microphone) ->Int16Array(PCM).- Енкапсуляція в Base64.
- Відправка через WebSocket:
mimeType: 'audio/pcm;rate=16000'.
- Обробка виводу:
- Отримання чанків Base64 від моделі.
- Декодування PCM.
- Планування відтворення через
nextStartTimeдля усунення розривів (gapless playback).
Призначення: Створення швидкого огляду можливостей допомоги у вибраному радіусі.
Алгоритм:
- Відбір ТОП-20 найбільш релевантних організацій з поточного фільтра.
- Трансформація об'єктів у рядок:
Назва (Категорія): Послуги;. - Запит до моделі з інструкцією виділити найважливіше для людини в скруті.
- Вихід: Текст у стилі "Парада від пані Думки".
| Сценарій | Дія API | Трансформація даних |
|---|---|---|
| Помилка 429 | Retry logic | Експоненціальна затримка (2s -> 4s -> 8s) |
| Відсутність API Key | Блокування викликів | Повернення статичного повідомлення про помилку |
| Порожній контекст | Grounding | Перемикання на чистий Google Search без локальних даних |