Skip to main content

CLI клиент для взаимодействия с Model Provider API

Project description

CLI Client для Model Provider API

CLI Client – это асинхронная библиотека для взаимодействия с API-сервером, предоставляющим расширенный функционал:

• Генерация текстов
• Создание изображений
• Транскрибация аудио
• Синтез речи
• Получение доступных моделей по провайдеру и типу возможности

Библиотека позволяет использовать как синхронный, так и потоковый (streaming) режим работы через HTTP (aiohttp). Кроме того, она уже интегрирована с консольной утилитой, позволяющей вызывать основные функции напрямую из терминала.


Требования и установка

Для работы клиента необходим Python 3.8+ и следующие зависимости:

  • asyncio
  • aiohttp (для HTTP-запросов)
  • (для разработки/тестирования) pytest, pytest-asyncio

Установку библиотеки из PyPI можно выполнить командой:

pip install cli-client

Если вы разрабатываете локально, установите зависимости через pip:

pip install aiohttp pytest pytest-asyncio

Быстрый старт

Ниже приведён пример базового использования клиента:

import asyncio
from cli_client import APIClient, Provider

async def main():
    # Инициализация клиента с указанием базового URL сервера
    client = APIClient(base_url="http://your-api-server:8000")
    
    # Пример генерации текста
    result_text = await client.generate_text(
        message="Привет, расскажи анекдот",
        provider=Provider.OPENAI,
        model="gpt-4o-mini"
    )
    print("Сгенерированный текст:", result_text)
    
    # Пример генерации изображения
    result_image = await client.generate_image(
        prompt="A futuristic cityscape",
        provider=Provider.OPENAI,
        model="dalle-3",
        size="1024x1024"
    )
    print("Результат генерации изображения:", result_image)
    
    # Пример транскрибации аудио (файл читается как бинарные данные)
    with open("audio_sample.mp3", "rb") as f:
        audio_data = f.read()
    transcription = await client.process_audio(
        audio_file=audio_data,
        provider=Provider.OPENAI,
        model="whisper",
        format_output="json"
    )
    print("Результат транскрипции аудио:", transcription)
    
    # Пример синтеза речи
    voice_result = await client.generate_voice(
        text="Привет, как дела?",
        provider=Provider.OPENAI,
        model="tts",
    )
    print("Результаты синтеза речи:", voice_result)
    
    # Пример получения доступных моделей для текстовой генерации
    models = await client.get_available_models(provider=Provider.OPENAI, capability="text")
    print("Доступные модели для текста:", models)
    
    await client.close()

asyncio.run(main())

Также клиент можно запускать через консольную утилиту:

cli-client --ip http://localhost:8000 --provider openai --endpoint text --message "Привет, расскажи анекдот"

Основные функции и их возможности

1. Генерация текста – generate_text

Функция позволяет получить сгенерированный текст с учетом дополнительных параметров. При необходимости можно передать изображение в виде байтов или base64-строки для создания контекста.

Параметры:

  • message (str): Основной текст запроса.
  • provider (Provider): Провайдер генерации (например, OPENAI, GEMINI и др.).
  • model (Optional[str]): Название модели, если требуется.
  • image_bytes (Optional[Union[bytes, str]]): Байты изображения или base64-строка.
  • max_tokens (int): Максимальное число токенов (по умолчанию 150).
  • temperature (float): Параметр «тёплоты» генерации (по умолчанию 0.7).
  • stream (bool): Если True, функция возвращает асинхронный генератор для потокового вывода.

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

result = await client.generate_text(
    message="Расскажи интересную историю",
    provider=Provider.ANTHROPIC,
    max_tokens=300
)
print(result)

2. Генерация изображения – generate_image

Функция отправляет текстовое описание (prompt) и возвращает сгенерированное изображение (например, URL).

Параметры:

  • prompt (str): Описание изображения.
  • provider (Provider): Провайдер генерации изображений.
  • model (Optional[str]): Название модели (если требуется).
  • size (str): Размер изображения (например, "1024x1024").

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

result = await client.generate_image(
    prompt="A serene landscape with mountains",
    provider=Provider.OPENAI
)
print(result)

3. Обработка аудио – process_audio

Позволяет передать аудиофайл для транскрибации (распознавания речи).

Параметры:

  • audio_file (bytes): Байты аудиофайла.
  • provider (Provider): Провайдер обработки аудио.
  • mode (Optional[str]): Режим обработки (если имеется несколько).
  • format_output (str): Формат вывода ("text" или "json").
  • async_process (bool): Флаг асинхронной обработки (True – возвращается job_id).
  • transcriptions (Optional[Dict[str, Any]]): Дополнительные параметры транскрипции.

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

with open("audio_sample.mp3", "rb") as f:
    audio_data = f.read()

transcription = await client.process_audio(
    audio_file=audio_data,
    provider=Provider.OPENAI,
    format_output="json",
    transcriptions={"task": "transcribe"}
)
print(transcription)

4. Синтез речи – generate_voice

Функция для преобразования текста в речь. Возвращает словарь с результатами (например, аудио в формате base64).

Параметры:

  • text (str): Исходный текст для озвучивания.
  • provider (Provider): Провайдер синтеза речи.
  • model (Optional[str]): Название модели (если требуется).

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

voice_data = await client.generate_voice(
    text="Добрый день!",
    provider=Provider.OPENAI
)
print(voice_data)

5. Получение доступных моделей – get_available_models

Позволяет получить список моделей, доступных у провайдера для конкретной функциональности (например, текст, изображение, аудио).

Параметры:

  • provider (Optional[Union[Provider, str]]): Имя провайдера.
  • capability (Optional[Union[Capability, str]]): Тип функциональности (например, "text", "vision").

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

models = await client.get_available_models(provider=Provider.OPENAI, capability="text")
print("Доступные модели:", models)

Модель данных для управления отправкой запроса

Для валидации и корректной упаковки параметров можно использовать Pydantic-модель. Например:

from pydantic import BaseModel, Field
from typing import List, Optional, Union

class TextGenerationRequest(BaseModel):
    message: str
    provider: str
    model: Optional[str] = None
    max_tokens: int = Field(default=150, ge=1)
    temperature: float = Field(default=0.7, ge=0, le=1)
    stream: bool = False
    system: Optional[str] = ""
    messages: Optional[List[dict]] = []
    reasoning_effort: Optional[str] = None
    image_bytes: Optional[Union[str, bytes]] = None

Такой подход позволит гарантировать корректность типов и упростить дальнейшую отладку и расширение функционала.


Структура проекта

Пример рекомендуемой структуры клиентского проекта:

MyClientCLI/
├── cli_client/              # Основной пакет библиотеки
│   ├── __init__.py
│   ├── client.py            # Класс APIClient с реализацией функций generate_text, generate_image, process_audio, generate_voice, get_available_models
│   ├── config.py            # Загрузка конфигураций из переменных окружения и INI-файлов
│   ├── exceptions.py        # Пользовательские исключения (APIClientError, ServerError, AuthenticationError, ProviderNotImplementedError)
│   ├── utils.py             # Вспомогательные классы и перечисления (Provider, Capability)
│   ├── models.py            # Вспомогательные классы 
│   └── __main__.py          # Точка входа для CLI (функция main)
├── tests/                   # Тесты (например, test_client.py)
│   └── test_client.py
├── LICENSE                  # Лицензия проекта
├── README.md                # Данный файл описания
└── pyproject.toml           # Конфигурация сборки и метаданные пакета

Дальнейшие возможности расширения функционала

Помимо описанных функций, возможны следующие доработки:

• Реализация асинхронного контекстного менеджера (добавить методы aenter и aexit) для удобного использования:

async with APIClient(base_url="http://localhost:8000") as client:
    # работа с клиентом

• Интеграция расширенного логирования (модуль logging) для отладки запросов и ответов.

• Механизм повторных попыток (retries) с экспоненциальной задержкой для временных сбоев подключения.

• Локальное кэширование результатов вызова get_available_models и других часто запрашиваемых данных.

• Расширение возможностей CLI (добавление новых аргументов, настройка дополнительных эндпоинтов и поддержки websocket‑подключений).

• Автоматизированное тестирование (с использованием pytest и CI/CD сервисов).


Лицензия

Этот проект распространяется под лицензией MIT. Подробности смотрите в файле LICENSE.


Вывод

CLI Client для Model Provider API представляет собой мощное решение для интеграции с сервером генерации контента. Библиотека поддерживает не только базовые функции (текст, изображение, аудио), но и расширенные возможности потоковой обработки и асинхронного взаимодействия. Рекомендуется ознакомиться с примерами использования, протестировать работу на тестовом сервере и при необходимости расширять функционал с учётом требований вашего проекта.

Для любых вопросов или предложений по улучшению, пожалуйста, обращайтесь к разработчику.


Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cli_client-0.1.1.tar.gz (17.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cli_client-0.1.1-py3-none-any.whl (13.8 kB view details)

Uploaded Python 3

File details

Details for the file cli_client-0.1.1.tar.gz.

File metadata

  • Download URL: cli_client-0.1.1.tar.gz
  • Upload date:
  • Size: 17.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.1

File hashes

Hashes for cli_client-0.1.1.tar.gz
Algorithm Hash digest
SHA256 84a500c385ff59441f227efcd49ab17bbf270f78adaa2d2cda0b5e022b8bd31a
MD5 464c0c45aa8e9bb370a5a83467cfa03b
BLAKE2b-256 7740178056e8fa271e8af6ed26dd54a24849d490b6cfa64d08ff01f4c04b3cde

See more details on using hashes here.

File details

Details for the file cli_client-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: cli_client-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 13.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.1

File hashes

Hashes for cli_client-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9d0bdf5280e7b63b0fd3bb2ea0ee12d37012b6149fe6e80f939521856381be24
MD5 ed0cfa25e670b3e51ed9c15b459089f0
BLAKE2b-256 3a2fdcd55e330475d44553a0349a17f20a42d58bd07e33562f213799acb46b4d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page