Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
# Ключи внешних сервисов
TRANSCRIBE_PROVIDER=groq
GROQ_API_KEYS=
DEEPGRAM_API_KEY=
DEEPGRAM_BASE_URL=https://api.deepgram.com
DEEPGRAM_MODEL=nova-3
# Фиксированный язык. Используется только при DEEPGRAM_DETECT_LANGUAGE=false.
# Для речи с переключением между несколькими языками можно задать multi.
DEEPGRAM_LANGUAGE=ru
# true: Deepgram определяет один доминирующий язык и DEEPGRAM_LANGUAGE игнорируется.
# Это не режим mixed-language/code-switching; для него используйте language=multi выше.
DEEPGRAM_DETECT_LANGUAGE=false
DEEPGRAM_UTT_SPLIT=0.8
OPENROUTER_API_KEY=
# OPENROUTER_BASE_URL=https://openrouter.ai/api/v1

Expand Down
37 changes: 30 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ HTTP-сервис обработки лекций: на вход — лекци

1. **Приём медиа**: аудиофайл, видеофайл или URL видео (скачивается через yt-dlp);
для видео извлекается аудиодорожка для транскрибации.
2. **Транскрибация** аудио в SRT через Groq Whisper (нарезка на чанки, ротация ключей при rate limit).
2. **Транскрибация** аудио в SRT через Groq Whisper или Deepgram Nova-3.
3. **Слайды** — три источника: из приложенного PDF/PPTX (pymupdf + LibreOffice),
автоматически из видеоряда через Gemini Vision, либо без слайдов (флаг `no_slides`).
4. **Структуризация** транскрипта на темы и подтемы через Gemini, с привязкой слайдов.
Expand Down Expand Up @@ -85,7 +85,8 @@ Obsidian (Settings → Community plugins), иначе вместо плеера

```bash
cp .env.example .env
# Заполните GROQ_API_KEYS, OPENROUTER_API_KEY, CORE_POSTGRES_PASSWORD,
# Выберите TRANSCRIBE_PROVIDER, заполните ключ выбранного STT-провайдера,
# OPENROUTER_API_KEY, CORE_POSTGRES_PASSWORD,
# S3_ACCESS_KEY и S3_SECRET_KEY.
docker compose up --build
```
Expand Down Expand Up @@ -141,7 +142,8 @@ chmod +x minio-init.sh
docker network create lecturelog-shared || true
```

Отредактируйте `.env`: задайте `GROQ_API_KEYS`, `OPENROUTER_API_KEY`,
Отредактируйте `.env`: выберите `TRANSCRIBE_PROVIDER`, задайте ключ выбранного
STT-провайдера, `OPENROUTER_API_KEY`,
`CORE_POSTGRES_PASSWORD`, `S3_SECRET_KEY`, публичный `S3_PUBLIC_ENDPOINT` и общий
с web `LECTURELOG_WEBHOOK_SECRET`. Для связки с web укажите:

Expand Down Expand Up @@ -327,7 +329,14 @@ python scripts/submit_task.py --base http://my-host:8000/api/v1 status <task_id>

| Переменная | Назначение |
| ---------------------- | --------------------------------------------------------- |
| `GROQ_API_KEYS` | Ключи Groq (через запятую), для транскрибации (см. раздел про лимиты бесплатных тиров). |
| `TRANSCRIBE_PROVIDER` | STT-провайдер: `groq` (по умолчанию) или `deepgram`. |
| `GROQ_API_KEYS` | Ключи Groq через запятую; обязательны только для провайдера `groq`. |
| `DEEPGRAM_API_KEY` | Ключ Deepgram; обязателен только для провайдера `deepgram`. |
| `DEEPGRAM_BASE_URL` | Официальный HTTPS endpoint Deepgram. |
| `DEEPGRAM_MODEL` | Модель Deepgram (по умолчанию `nova-3`). |
| `DEEPGRAM_LANGUAGE` | Язык Deepgram (по умолчанию `ru`). |
| `DEEPGRAM_DETECT_LANGUAGE` | Автоопределение доминирующего языка (`true`/`false`). При `true` фиксированный `DEEPGRAM_LANGUAGE` не отправляется. |
| `DEEPGRAM_UTT_SPLIT` | Порог паузы utterance в секундах (по умолчанию `0.8`). |
| `OPENROUTER_API_KEY` | Ключ OpenRouter; LLM-вызовы идут через BYOK Google AI Studio. |
| `OPENROUTER_BASE_URL` | Base URL OpenRouter (по умолчанию `https://openrouter.ai/api/v1`). |
| `LLM_MODELS_*` | Приоритетные списки моделей по этапам структуризации (fallback при 429). |
Expand All @@ -352,14 +361,15 @@ python scripts/submit_task.py --base http://my-host:8000/api/v1 status <task_id>

## Ключи API и лимиты бесплатных тиров

Сервис рассчитан на работу на **бесплатных тарифах** Groq и Google AI Studio через
OpenRouter BYOK. Для Groq можно указывать несколько ключей через запятую в
Сервис поддерживает Groq и Deepgram для STT, а LLM вызывает через OpenRouter BYOK.
Для Groq можно указывать несколько ключей через запятую в
`GROQ_API_KEYS`; LLM-вызовы используют один `OPENROUTER_API_KEY`, а fallback идёт
по приоритетному списку моделей.

Получить бесплатные ключи:

- Groq — [console.groq.com/keys](https://console.groq.com/keys)
- Deepgram — [console.deepgram.com](https://console.deepgram.com/)
- Google AI Studio key для OpenRouter BYOK — [aistudio.google.com/apikey](https://aistudio.google.com/apikey)

### Groq (транскрибация, Whisper large-v3)
Expand All @@ -371,6 +381,19 @@ OpenRouter BYOK. Для Groq можно указывать несколько к
освобождения ближайшего ключа.
- Чем больше ключей — тем выше суммарная пропускная способность транскрибации.

### Deepgram (транскрибация, Nova-3)

- Задайте `TRANSCRIBE_PROVIDER=deepgram` и `DEEPGRAM_API_KEY`.
- Файл отправляется одним потоковым запросом, без полной загрузки в память.
- Каждый запрос содержит `mip_opt_out=true`; автоматического fallback на Groq нет.
- Разрешены только официальные HTTPS endpoint'ы Deepgram. Дефолты: модель `nova-3`,
язык `ru`, `utt_split=0.8`.
- Для автоматического определения доминирующего языка задайте
`DEEPGRAM_DETECT_LANGUAGE=true`. Для смешанной речи с переключением языков
используйте `DEEPGRAM_LANGUAGE=multi` при выключенном автоопределении.
- Временные сетевые и серверные ошибки повторяются с backoff; неподдерживаемое или
повреждённое аудио классифицируется как `bad_input`.

### LLM через OpenRouter BYOK (структуризация и VLM)

OpenRouter вызывается в режиме BYOK с провайдером `google-ai-studio`, без fallback на
Expand Down Expand Up @@ -399,7 +422,7 @@ pytest
```

Юнит-тесты гоняют репозиторий на SQLite in-memory, а инфраструктурные зависимости
(Groq/Gemini/ffmpeg) мокаются — реальные ключи и внешние сервисы для тестов не нужны.
(Groq/Deepgram/LLM/ffmpeg) мокаются — реальные ключи и внешние сервисы для тестов не нужны.

## Линтер и форматтер

Expand Down
13 changes: 12 additions & 1 deletion deploy/env.core.example
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,19 @@ CORE_MINIO_CONSOLE_PORT=9001
# Пароль Postgres ядра. Заполните на сервере: openssl rand -hex 24
CORE_POSTGRES_PASSWORD=

# Ключи внешних сервисов.
# Ключи внешних сервисов. Для STT обязателен только ключ выбранного провайдера.
TRANSCRIBE_PROVIDER=groq
GROQ_API_KEYS=
DEEPGRAM_API_KEY=
DEEPGRAM_BASE_URL=https://api.deepgram.com
DEEPGRAM_MODEL=nova-3
# Фиксированный язык. Используется только при DEEPGRAM_DETECT_LANGUAGE=false.
# Для речи с переключением между несколькими языками можно задать multi.
DEEPGRAM_LANGUAGE=ru
# true: Deepgram определяет один доминирующий язык и DEEPGRAM_LANGUAGE игнорируется.
# Это не режим mixed-language/code-switching; для него используйте language=multi выше.
DEEPGRAM_DETECT_LANGUAGE=false
DEEPGRAM_UTT_SPLIT=0.8
OPENROUTER_API_KEY=
# OPENROUTER_BASE_URL=https://openrouter.ai/api/v1

Expand Down
Loading
Loading