LLM-подключения и распознавание речи

Screph поддерживает облачные и локальные подключения, но не делает runtime fallback на другой profile. Пользовательский контент получает только runtime, выбранный для функции; сохранение подключения может запустить catalogue/access probe, а активация speech settings — отдельную проверку без project content.

1. Подключения LLM

Откройте Настройки → Настройки LLM. Каждое подключение хранит тип provider, endpoint, выбранную модель и параметры доступа. Поддерживаются:

  • OpenAI, Anthropic, Gemini, OpenRouter;
  • Ollama и LM Studio;
  • любой совместимый с OpenAI endpoint;
  • LiteLLM Proxy — показывается в advanced-режиме.

Запросы выполняются через общий LiteLLM runtime. Сохранение строки готового подключения сразу запускает access/catalog check. В generic profile editor кнопка проверки сначала сохраняет текущую форму и API key, затем выполняет probe — это не read-only действие. Ошибка credentials, endpoint или capability не переключает запрос на другой профиль.

Подтверждённый access/model list хранится только в текущем экземпляре connection service. После нового запуска настроенная модель может показываться как «доступ не проверен». Профильная manual model добавляется в успешный каталог, даже если provider её не перечислил. Для роли cv список фильтруется эвристикой по имени/metadata, но при отсутствии vision-кандидатов показывает весь список: наличие в combo и общий test не доказывают поддержку изображений или structured response.

Screph Cloud LLM — направление развития, а не доступное сейчас подключение. Для текущей работы настройте BYOK-provider или локальный Ollama/LM Studio.

2. Назначение профиля роли

Одно подключение не обязано обслуживать всю программу. Роль выбирает profile/model для конкретного контура; отдельную capability или safety policy сама роль не создаёт:

  • assistant — встроенный AI Assistant;
  • cv — CV auto-tune, планирование pipeline и Action CV/VLM;
  • codegen — Screph Code;
  • semantic_selection — семантический выбор элементов;
  • test — проверка подключения и модели.

При сохранении первого profile пустые роли cv, test и semantic_selection назначаются ему автоматически; codegen — только если соответствующий UI включён. Роль assistant автоматически не заполняется. Это initial assignment, а не runtime fallback. Удаление profile очищает все роли, которые на него ссылаются.

Если профиль роли отключён, удалён или недоступен, соответствующая операция завершается понятной ошибкой. Resolution order: явно переданные profile/model, затем role profile/model, затем default model самого profile. Проверьте роль отдельно даже тогда, когда само подключение успешно проходит общий test.

3. Ключи, локальная работа и передача данных

  • LLM и current voice API keys сохраняются через system keyring; в Windows-сборке это Windows Credential Manager с service name Screph. Обычный profile payload в ScrephData/settings_modules/settings.json содержит provider kind, model, endpoint, timeout и roles, но не значение API key.
  • Если keyring недоступен, сохранение секрета завершается ошибкой: plaintext fallback в обычный settings JSON не используется. Environment variables остаются явным runtime-source и могут наследоваться дочерними процессами.
  • Ollama и LM Studio позволяют оставить запросы на локальной машине, если сервис и модель действительно запущены локально.
  • Облачный профиль может передавать prompt, выбранный context и изображения provider. Конкретный состав зависит от функции и её privacy/attachment settings.
  • В AI Assistant отправка изображений и артефактов выключена по умолчанию. У Action CV default block_unredacted блокирует provider call; roi_only закрашивает всё вне ROI, а allow_unredacted является явным разрешением исходного кадра. Prompt также включает type/time/source действия, key/button и координаты при наличии, ROI hint, frame metadata/hashes, response contract и каталог разрешённых методов.

Когда общий LLM request действительно получает image_path, Screph читает файл, преобразует его в RGB JPEG, уменьшает максимум до 1024×1024 с quality 85 и отправляет base64 data URL с detail=low. Для CV/image request profile timeout заменяется transport timeout в 120 минут; число retries остаётся request/profile setting и передаётся LiteLLM.

Успешные ответы общего runtime добавляют локальную строку в ScrephData/llm/usage_events.jsonl: feature, profile, model, tokens, рассчитанную cost, latency и status. Prompt/response text туда не пишется. Автоматического retention и кнопки очистки нет; исключения до создания response обычно в этот файл не попадают, поэтому это не полный billing/error ledger.

Где хранятся секреты и как их удалить →

4. Распознавание речи

Откройте Настройки → Распознавание речи. Раздел содержит вкладки настройки и теста; выбранный recognizer используется голосовыми аннотациями. Реализованы provider-aware adapters для:

  • Vosk — локальные batch и streaming режимы; нужны voice.local, микрофон и подходящая языковая модель.
  • Yandex — SDK, streaming или async в зависимости от доступной конфигурации.
  • Google Cloud — явно выбранное облачное распознавание и его credentials/capabilities.
  • OpenAI — распознавание через настроенный provider path.

Сеть у локального Vosk. Само распознавание выполняется локально, но первое открытие списка языка или модели запускает фоновый запрос https://alphacephei.com/vosk/models/model-list.json. Результат кэшируется в процессе на 5 минут; при ошибке используется встроенный список. ZIP выбранной speech- или punctuation-модели скачивается только после отдельной команды, а аудио к Alpha Cephei не отправляется.

Проверка при открытии OpenAI/LiteLLM. Когда страница настроек активируется, её refresh_on_open запускается без отдельного нажатия Проверить. Для OpenAI с разрешённым key загружается GET https://api.openai.com/v1/models. Для настроенного non-OpenAI LiteLLM transcription path выполняется реальный probe: provider получает credentials/config и сгенерированный WAV из 0,1 секунды тишины (mono, 16 kHz). Это не microphone audio, но запрос может учитываться или логироваться провайдером.

Не каждый provider поддерживает каждый режим. Loader проверяет выбранную capability и показывает unavailable, если streaming/async/backend path для этой конфигурации не реализован или недоступен; он не подменяет provider локальным Vosk.

5. Настроить и проверить голос

  1. Выберите recognizer и его режим. Для Vosk сначала подготовьте voice.local на вкладке зависимостей.
  2. Укажите модель, регион, endpoint или credentials, которые требует выбранный provider.
  3. Разрешите приложению доступ к микрофону в Windows и выберите правильное input device.
  4. На вкладке Тест распознавания запишите короткую фразу и проверьте transcript, язык и задержку.
  5. Только после теста включайте голосовую аннотацию в рабочем проекте.

Commit и semantic processing — отдельные настройки. Режим Обычный отправляет transcript выбранной annotation target; два режима Копировать... работают только с clipboard. После обычного commit голосовая аннотация по умолчанию также проходит через selection-semantics и может применить high-confidence typed rule. Для dictation-only отключите обработку voice annotations на вкладке Выбор элементов → Семантика.

6. Быстрая диагностика

  • Модель не появилась: проверьте endpoint и connection test; для локального сервиса убедитесь, что он запущен.
  • CV видит другое подключение: проверьте назначение роли cv, а не только последний отредактированный профиль.
  • Vosk не запускается: перепроверьте voice.local, путь к языковой модели и microphone permission.
  • Cloud speech возвращает capability error: выберите поддерживаемый режим для provider; ошибка не означает автоматического перехода в batch или на другой сервис.