Skip to main content

Библиотека для работы с Yandex GPT API и SpeechKit API

Эта библиотека предоставляет удобные функции для взаимодействия с Yandex GPT API и Yandex SpeechKit API. Она поддерживает как синхронный, так и асинхронный режимы работы, включая потоковую генерацию текста и расширенные возможности по распознаванию речи с определением говорящего.

Особенности

Yandex GPT API

  • Синхронный режим - для простых запросов с блокирующим выполнением
  • Асинхронный режим - для эффективной обработки нескольких запросов без блокировки
  • Потоковый режим - для получения ответов по мере их генерации (синхронный)
  • Асинхронный потоковый режим - с использованием библиотеки httpx
  • Обработка JSON-ответов - корректное извлечение текста из структурированных ответов
  • Параллельное выполнение запросов - для одновременной обработки нескольких промптов
  • Отладочный режим - для детального анализа запросов и ответов

Yandex SpeechKit STT v3 API

  • Распознавание аудиофайлов - поддержка отправки аудиофайлов на распознавание
  • Синхронный режим - для простой отправки файлов и получения результатов
  • Асинхронный режим - для более эффективной работы без блокировки исполнения
  • Гибкие настройки распознавания - полная поддержка параметров API (модель, язык, формат и т.д.)
  • Работа с разными форматами аудио - MP3, WAV и другие поддерживаемые форматы
  • Анализ речи - возможность использовать различные аналитические функции API
  • Разметка говорящих - поддержка диаризации речи с идентификацией разных говорящих
  • Работа с метками каналов - поддержка параметра channel_tag для разделения разных дикторов
  • Автоматическая конвертация аудио - преобразование стерео в моно для разметки говорящих

Требования

  • Python 3.7+
  • Библиотеки:
    • requests - для синхронных запросов
    • httpx - для асинхронных запросов
    • python-dotenv - для работы с переменными окружения
    • asyncio - для асинхронного выполнения

Установка

pip install yandex-gpt-api

Настройка

Для работы с API необходимо создать файл .env в корне проекта со следующими переменными:

API_KEY=ваш_api_ключ
FOLDER_ID=идентификатор_ваш_папки_в_облаке
# ИЛИ
IAM_TOKEN=ваш_iam_токен
FOLDER_ID=идентификатор_ваш_папки_в_облаке

Примеры использования

GPT API

Синхронный режим

from yandex_gpt_api import gpt
import json
import os

# Настройка аутентификации
if os.getenv('API_KEY'):
    api_key = os.environ['API_KEY']
    headers = {'Authorization': f'Api-Key {api_key}'}
else:
    iam_token = os.environ['IAM_TOKEN']
    headers = {'Authorization': f'Bearer {iam_token}'}

# Подготовка сообщений
messages = [
    {"role": "system", "text": "Вы - опытный научный сотрудник"},
    {"role": "user", "text": "Расскажи кратко о квантовой механике"}
]

# Выполнение запроса
response = gpt(headers, messages, temperature=0.7, max_tokens=1000)

# Разбор ответа
data = json.loads(response)
if 'result' in data and 'alternatives' in data['result']:
    for alt in data['result']['alternatives']:
        if 'message' in alt and 'text' in alt['message']:
            text = alt['message']['text']
            print(f"Ответ: {text}")

Асинхронный потоковый режим

import asyncio
from yandex_gpt_api import gpt_streaming_httpx
import os

# Настройка аутентификации
if os.getenv('API_KEY'):
    api_key = os.environ['API_KEY']
    headers = {'Authorization': f'Api-Key {api_key}'}
else:
    iam_token = os.environ['IAM_TOKEN']
    headers = {'Authorization': f'Bearer {iam_token}'}

# Подготовка сообщений
messages = [
    {"role": "system", "text": "Вы - полезный ассистент"},
    {"role": "user", "text": "Составь список из 5 интересных фактов о космосе"}
]

async def main():
    # Получаем ответ по частям
    print("Получаем ответ: ", end="", flush=True)
    async for chunk in gpt_streaming_httpx(headers, messages):
        print(chunk, end="", flush=True)
    print()

asyncio.run(main())

SpeechKit STT v3 API

Синхронный режим распознавания файла

from yandex_gpt_api import stt_recognize_file, stt_get_recognition
import json
import os
import time

# Настройка аутентификации
if os.getenv('API_KEY'):
    api_key = os.environ['API_KEY']
    headers = {'Authorization': f'Api-Key {api_key}'}
else:
    iam_token = os.environ['IAM_TOKEN']
    headers = {'Authorization': f'Bearer {iam_token}'}

# Путь к аудиофайлу
file_path = 'путь_к_аудио_файлу.mp3'

# Настройка параметров распознавания
audio_format = {
    "containerAudio": {
        "containerAudioType": "MP3"
    }
}

language_restriction = {
    "restrictionType": "WHITELIST",
    "languageCode": ["ru-RU"]
}

# Отправляем файл на распознавание
response = stt_recognize_file(
    auth_headers=headers,
    content=file_path,
    audio_format=audio_format,
    language_restriction=language_restriction
)

# Получаем ID операции
operation_id = response['id']
print(f"Операция запущена с ID: {operation_id}")

# Ждем, пока файл будет обработан (обычно нужно 30+ секунд)
print("Ожидание обработки файла...")
time.sleep(30)

# Получаем результат распознавания
recognition_result = stt_get_recognition(headers, operation_id)

# Извлекаем распознанный текст
if 'final' in recognition_result:
    alternatives = recognition_result['final'].get('alternatives', [])
    if alternatives:
        text = alternatives[0].get('text', '')
        print(f"Распознанный текст: {text}")

Асинхронный режим распознавания файла

import asyncio
from yandex_gpt_api import stt_recognize_file_async, stt_get_recognition_async
import os

# Настройка аутентификации
if os.getenv('API_KEY'):
    api_key = os.environ['API_KEY']
    headers = {'Authorization': f'Api-Key {api_key}'}
else:
    iam_token = os.environ['IAM_TOKEN']
    headers = {'Authorization': f'Bearer {iam_token}'}

async def recognize_audio():
    # Путь к аудиофайлу
    file_path = 'путь_к_аудио_файлу.mp3'
    
    # Настройка параметров распознавания
    audio_format = {
        "containerAudio": {
            "containerAudioType": "MP3"
        }
    }
    
    language_restriction = {
        "restrictionType": "WHITELIST",
        "languageCode": ["ru-RU"]
    }
    
    # Отправляем файл на распознавание асинхронно
    response = await stt_recognize_file_async(
        auth_headers=headers,
        content=file_path,
        audio_format=audio_format,
        language_restriction=language_restriction
    )
    
    operation_id = response['id']
    print(f"Операция запущена с ID: {operation_id}")
    
    # Ждем обработки файла
    await asyncio.sleep(30)
    
    # Получаем результат распознавания асинхронно
    recognition_result = await stt_get_recognition_async(headers, operation_id)
    
    # Извлекаем распознанный текст
    if 'final' in recognition_result:
        alternatives = recognition_result['final'].get('alternatives', [])
        if alternatives:
            text = alternatives[0].get('text', '')
            print(f"Распознанный текст: {text}")

asyncio.run(recognize_audio())

Распознавание с разметкой говорящих (диаризация)

from yandex_gpt_api import stt_recognize_with_speaker_labeling, stt_get_recognition
import json
import os
import time

# Настройка аутентификации
if os.getenv('API_KEY'):
    api_key = os.environ['API_KEY']
    headers = {'Authorization': f'Api-Key {api_key}'}
else:
    iam_token = os.environ['IAM_TOKEN']
    headers = {'Authorization': f'Bearer {iam_token}'}

# Путь к аудиофайлу
file_path = 'путь_к_аудио_файлу.mp3'

# Отправляем файл на распознавание с разметкой говорящих
# Параметр channel_tag можно использовать для метки каналов
response = stt_recognize_with_speaker_labeling(
    auth_headers=headers,
    content=file_path,
    channel_tag="1",  # Метка канала
    convert_stereo_to_mono=True  # Автоматически преобразовать стерео в моно если нужно
)

# Получаем ID операции
operation_id = response['id']
print(f"Операция запущена с ID: {operation_id}")

# Ждем, пока файл будет обработан
print("Ожидание обработки файла...")
time.sleep(30)

# Получаем результат распознавания
recognition_result = stt_get_recognition(headers, operation_id)

# Проверяем наличие channel_tag в результате
if 'result' in recognition_result and 'channelTag' in recognition_result['result']:
    channel_tag = recognition_result['result']['channelTag']
    print(f"Метка канала: {channel_tag}")

# Извлекаем распознанный текст
if 'result' in recognition_result and 'final' in recognition_result['result']:
    alternatives = recognition_result['result']['final'].get('alternatives', [])
    if alternatives:
        text = alternatives[0].get('text', '')
        print(f"Распознанный текст: {text}")

Асинхронное распознавание с разметкой говорящих

import asyncio
from yandex_gpt_api import stt_recognize_with_speaker_labeling_async, stt_get_recognition_async
import os

# Настройка аутентификации
if os.getenv('API_KEY'):
    api_key = os.environ['API_KEY']
    headers = {'Authorization': f'Api-Key {api_key}'}
else:
    iam_token = os.environ['IAM_TOKEN']
    headers = {'Authorization': f'Bearer {iam_token}'}

async def recognize_audio_with_speaker_labeling():
    # Путь к аудиофайлу
    file_path = 'путь_к_аудио_файлу.mp3'
    
    # Отправляем файл на распознавание с разметкой говорящих
    response = await stt_recognize_with_speaker_labeling_async(
        auth_headers=headers,
        content=file_path,
        channel_tag="1",  # Метка канала
        convert_stereo_to_mono=True  # Автоматически преобразовать стерео в моно если нужно
    )
    
    operation_id = response['id']
    print(f"Операция запущена с ID: {operation_id}")
    
    # Ждем результатов асинхронно
    print("Ожидание обработки файла...")
    await asyncio.sleep(30)  # Даем время на обработку
    
    # Получаем результаты распознавания
    recognition_result = await stt_get_recognition_async(headers, operation_id)
    
    if 'result' in recognition_result and 'channelTag' in recognition_result['result']:
        channel_tag = recognition_result['result']['channelTag']
        print(f"Метка канала: {channel_tag}")
    
    if 'result' in recognition_result and 'final' in recognition_result['result']:
        alternatives = recognition_result['result']['final'].get('alternatives', [])
        if alternatives:
            text = alternatives[0].get('text', '')
            print(f"Распознанный текст: {text}")

# Запуск асинхронной функции
asyncio.run(recognize_audio_with_speaker_labeling())

Примеры

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

  1. async_chat_example.py - демонстрирует использование асинхронных функций GPT API, включая потоковый режим
  2. test_yandex_gpt_api.py - автотест для проверки работы функций GPT API
  3. test_yandex_stt_api.py - автотест для проверки работы функций SpeechKit STT API

Запуск примеров и тестов

# Запуск асинхронного чата
python async_chat_example.py

# Запуск автотестов GPT API
python test_yandex_gpt_api.py

# Запуск автотестов SpeechKit STT API
python test_yandex_stt_api.py

Лицензия

MIT

Metadata

Release files for yandex-gpt-api 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for yandex-gpt-api 0.1.2
File Size Uploaded
yandex_gpt_api-0.1.2.tar.gz 33.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for yandex-gpt-api 0.1.2
File Interpreter ABI Platform
yandex_gpt_api-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 45.3 kB

Release files / yandex_gpt_api-0.1.2.tar.gz

Download URL yandex_gpt_api-0.1.2.tar.gz
Size 33.2 kB
Tags Source
SHA-256 checksum
How to use checksums
c2797884accb61f390637770d206c9eec305837308108472fee4394ce339981e
BLAKE2b-256 checksum
How to use checksums
ba9893cd42922adbb2e58ed8e894fabb535523e26dd25b33c7a0a33b7cdd4491
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.10

Release files / yandex_gpt_api-0.1.2-py3-none-any.whl

Download URL yandex_gpt_api-0.1.2-py3-none-any.whl
Size 12.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a01fc2adf8b56c0082b99ec902a36a4b34739a434db3f8ae8e8cb35b041d53b8
BLAKE2b-256 checksum
How to use checksums
bb8f14a37d1d3407c690e42e847ff833e1f6880aaa4f18dca830bb867efa5d07
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.10

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page