Metadata-Version: 2.4
Name: parlat-cli
Version: 0.2.0
Summary: Parlat — voice transcription SDK, CLI, and MCP server for Pro users
Author: Parlat
License: MIT
Project-URL: Homepage, https://parlat.ru
Project-URL: Documentation, https://parlat.ru/docs.html
Project-URL: Source, https://pypi.org/project/parlat-cli/
Keywords: voice,transcription,speech-to-text,russian,mcp,asr
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Multimedia :: Sound/Audio :: Speech
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.11
Description-Content-Type: text/markdown
Requires-Dist: click>=8.1
Requires-Dist: httpx>=0.27
Provides-Extra: record
Requires-Dist: sounddevice>=0.4.6; extra == "record"
Requires-Dist: webrtcvad-wheels>=2.0.10; extra == "record"
Requires-Dist: numpy>=1.24; extra == "record"
Provides-Extra: mcp
Requires-Dist: mcp>=0.9.0; extra == "mcp"
Provides-Extra: all
Requires-Dist: parlat-cli[mcp,record]; extra == "all"
Provides-Extra: dev
Requires-Dist: pytest>=8.0; extra == "dev"
Requires-Dist: respx>=0.21; extra == "dev"
Requires-Dist: parlat-cli[mcp,record]; extra == "dev"

# parlat-cli

Python SDK, CLI и MCP-сервер для [Парлат](https://parlat.ru) — голосовой расшифровки на русском.

## Установка

Выберите режим в зависимости от использования:

```bash
# 1. Только SDK + базовый CLI (login / status / transcribe FILE)
#    ~3 MB зависимостей, без C-расширений.
pip install parlat-cli

# 2. + микрофон (parlat record)
pip install 'parlat-cli[record]'

# 3. + MCP-сервер для Claude Code / Cursor / Windsurf / Claude Desktop
pip install 'parlat-cli[mcp]'

# 4. Всё разом
pip install 'parlat-cli[all]'
```

## SDK

```python
from parlat.client import APIClient, ApiError

client = APIClient(
    "https://api.parlat.ru",
    token="parlat_sk_..."   # из /dashboard/api-keys
)

# Файл с диска
result = client.transcribe_file("meeting.mp3", language="auto")
print(result["text"])

# Уже загруженные байты (например, из Telegram-бота)
audio_bytes = await download_from_tg(...)
result = client.transcribe_file(
    "voice.oga",
    file_bytes=audio_bytes,
    language="ru",
)
```

Все ошибки бросают `ApiError(code, message, upgrade_url, status)`:

```python
try:
    client.transcribe_file("big.wav")
except ApiError as e:
    if e.code == "not_pro":
        print(f"Upgrade: {e.upgrade_url}")
    elif e.code == "file_too_large":
        print("Too big — split into 25 MB chunks")
```

## CLI

```bash
parlat login                            # email + пароль интерактивно
parlat status                           # план и квота
parlat transcribe meeting.mp3           # файл → текст в stdout
parlat transcribe voice.oga --lang ru   # форсировать язык
parlat record --copy                    # с микрофона (нужен [record])
parlat record --max 30                  # лимит 30 сек
parlat logout                           # удалить токен
```

Exit codes: `0` ok, `1` ошибка API, `2` не залогинен, `3` нужна Pro-подписка, `4` сеть, `5` не установлен extra.

## MCP

После `pip install 'parlat-cli[mcp]'` и `parlat login` добавьте в свой MCP-клиент:

```jsonc
// ~/.config/claude-code/mcp.json (или аналог для Cursor / Windsurf / Claude Desktop)
{
  "mcpServers": {
    "parlat": {
      "command": "parlat",
      "args": ["mcp"]
    }
  }
}
```

Появятся два инструмента:
- `transcribe_voice` — записать с микрофона, вернуть текст. Авто-стоп после 2 сек тишины.
- `transcribe_file` — расшифровать локальный файл.

## Telegram-бот за 30 секунд

```python
from aiogram import Bot, Dispatcher, F, types
import aiohttp, os

bot = Bot(token=os.environ["TG_TOKEN"])
dp = Dispatcher()

@dp.message(F.voice)
async def handle_voice(msg: types.Message):
    file = await bot.get_file(msg.voice.file_id)
    url = f"https://api.telegram.org/file/bot{bot.token}/{file.file_path}"
    async with aiohttp.ClientSession() as s:
        r = await s.post(
            "https://api.parlat.ru/v1/transcribe/url",
            headers={"Authorization": f"Bearer {os.environ['PARLAT_KEY']}"},
            json={"url": url, "language": "auto"},
        )
        data = await r.json()
        await msg.answer(data["text"])
```

Никаких локальных моделей, никакого ffmpeg на твоей стороне — всё на сервере Parlat.

## Получить API-ключ

1. Регистрация на [parlat.ru/signup](https://parlat.ru/signup)
2. Оформить Pro на [parlat.ru/pricing](https://parlat.ru/pricing) (290 ₽/мес)
3. [parlat.ru/dashboard/api-keys](https://parlat.ru/dashboard/api-keys) → «Создать ключ»

## Документация

[parlat.ru/docs.html](https://parlat.ru/docs.html) — полный endpoint reference, примеры на Python/Node/aiogram, error codes, лимиты.

## Лицензия

MIT. См. [pypi.org/project/parlat-cli](https://pypi.org/project/parlat-cli/).
