Skip to main content

A Python client for Yandex Neural API

Project description

Yandex Neural API Client

Yandex Neural API Client — это Python-библиотека для удобного взаимодействия с нейронными сетями Yandex.Cloud. С ее помощью вы можете генерировать тексты, изображения, выполнять токенизацию и получать эмбеддинги текста.

Содержание


Особенности

  • Генерация текста: Используйте мощные языковые модели Яндекса для создания текстов.
  • Генерация изображений: Создавайте изображения на основе текстовых описаний.
  • Токенизация: Разбивайте текст на токены.
  • Эмбеддинги: Получайте эмбеддинги для текстов и используйте их для вычисления сходства.
  • Асинхронные и синхронные методы: Поддержка как асинхронных, так и синхронных вызовов.
  • Стриминг: Получайте данные по мере их генерации.

Установка

pip install yandex-neural-api

Начало работы

Получение IAM-токена и Folder ID

Перед началом работы убедитесь, что у вас есть:

  • IAM-токен: Токен для аутентификации в Yandex.Cloud.
  • Folder ID: Идентификатор каталога в Yandex.Cloud.

Получить эти данные можно в консоли управления Yandex.Cloud.

Импорт библиотеки

from yandex_neural_api.client import YandexNeuralAPIClient

Описание класса YandexNeuralAPIClient

YandexNeuralAPIClient — главный класс библиотеки, предоставляющий методы для взаимодействия с Yandex Neural API.

Инициализация клиента

client = YandexNeuralAPIClient(
    iam_token: str,
    folder_id: str,
    model_type: str = 'pro',
    llm_temperature: float = 0.6,
    llm_max_tokens: int = 1000,
    image_mime_type: str = 'image/png',
    image_width_ratio: int = 1,
    image_height_ratio: int = 1,
    embedding_model: str = 'text-search-doc',
    log_level: int = logging.INFO
)

Параметры конструктора:

  • iam_token (str): Обязательный параметр. Ваш IAM-токен для авторизации в Yandex.Cloud.
  • folder_id (str): Обязательный параметр. Идентификатор каталога в Yandex.Cloud.
  • model_type (str): Тип модели для генерации текста. Возможные значения:
    • 'pro' (по умолчанию)
    • 'lite'
  • llm_temperature (float): Температура для генерации текста. По умолчанию 0.6. Определяет степень "творчества" модели. Значения от 0 до 1.
  • llm_max_tokens (int): Максимальное количество токенов для генерации текста. По умолчанию 1000.
  • image_mime_type (str): MIME-тип генерируемого изображения. По умолчанию 'image/png'.
  • image_width_ratio (int): Соотношение ширины изображения. По умолчанию 1.
  • image_height_ratio (int): Соотношение высоты изображения. По умолчанию 1.
  • embedding_model (str): Модель для получения эмбеддингов текста. Возможные значения:
    • 'text-search-doc' (по умолчанию) для документов.
    • 'text-search-query' для запросов.
  • log_level (int): Уровень логирования модуля logging. По умолчанию logging.INFO.

Методы класса

generate_text(prompt, stream=False, callback=None)

Синхронная генерация текста по заданному промпту.

Параметры:

  • prompt (str): Промпт (текст-запрос) для генерации.
  • stream (bool): Если True, данные будут приходить в режиме стриминга. По умолчанию False.
  • callback (Callable[[str], None], optional): Функция обратного вызова для обработки данных в режиме стриминга.

Возвращает:

  • str: Сгенерированный текст (если stream=False).

Пример:

text = client.generate_text("Напиши короткое стихотворение о море.")

generate_text_async(prompt, stream=False, callback=None)

Асинхронная генерация текста по заданному промпту.

Параметры:

  • prompt (str): Промпт (текст-запрос) для генерации.
  • stream (bool): Если True, данные будут приходить в режиме стриминга. По умолчанию False.
  • callback (Callable[[str], None], optional): Функция обратного вызова для обработки данных в режиме стриминга.

Возвращает:

  • str: Сгенерированный текст (если stream=False).

Пример:

async def generate():
    text = await client.generate_text_async("Опиши закат над океаном.")
    print(text)

asyncio.run(generate())

generate_image_async(prompt)

Асинхронная генерация изображения по заданному промпту.

Параметры:

  • prompt (str): Промпт (текстовое описание) для генерации изображения.

Возвращает:

  • bytes: Сгенерированное изображение в виде байтов.

Пример:

async def generate_image():
    image_data = await client.generate_image_async("Нарисуй красивый пейзаж с горами.")
    with open("image.png", "wb") as f:
        f.write(image_data)

asyncio.run(generate_image())

tokenize_text(text)

Токенизация заданного текста.

Параметры:

  • text (str): Текст для токенизации.

Возвращает:

  • Dict[str, Any]: Результаты токенизации в формате JSON.

Пример:

tokens = client.tokenize_text("Привет, мир!")
print(tokens)

get_text_embedding(text, text_type='doc')

Получение эмбеддинга для заданного текста.

Параметры:

  • text (str): Текст для получения эмбеддинга.
  • text_type (str): Тип текста. Возможные значения:
    • 'doc' (по умолчанию) для документов.
    • 'query' для запросов.

Возвращает:

  • list: Эмбеддинг в виде списка числовых значений.

Пример:

embedding = client.get_text_embedding("Что такое машинное обучение?", text_type='query')

update_text_generation_params(llm_temperature=None, llm_max_tokens=None)

Обновление параметров генерации текста.

Параметры:

  • llm_temperature (float, optional): Новая температура генерации текста.
  • llm_max_tokens (int, optional): Новое максимальное количество токенов.

Пример:

client.update_text_generation_params(llm_temperature=0.8, llm_max_tokens=1500)

update_image_generation_params(image_mime_type=None, image_width_ratio=None, image_height_ratio=None)

Обновление параметров генерации изображений.

Параметры:

  • image_mime_type (str, optional): Новый MIME-тип изображения.
  • image_width_ratio (int, optional): Новое соотношение ширины.
  • image_height_ratio (int, optional): Новое соотношение высоты.

Пример:

client.update_image_generation_params(image_mime_type='image/jpeg', image_width_ratio=16, image_height_ratio=9)

update_embedding_model(embedding_model)

Обновление модели эмбеддинга.

Параметры:

  • embedding_model (str): Новая модель эмбеддинга. Возможные значения:
    • 'text-search-doc' для документов.
    • 'text-search-query' для запросов.

Пример:

client.update_embedding_model('text-search-query')

Использование

Генерация текста

Синхронная генерация текста

from yandex_neural_api.client import YandexNeuralAPIClient

client = YandexNeuralAPIClient(iam_token="YOUR_IAM_TOKEN", folder_id="YOUR_FOLDER_ID")

prompt = "Напиши короткое стихотворение о программировании."
text = client.generate_text(prompt)
print(text)

Асинхронная генерация текста

import asyncio
from yandex_neural_api.client import YandexNeuralAPIClient

async def generate_text_async():
    client = YandexNeuralAPIClient(iam_token="YOUR_IAM_TOKEN", folder_id="YOUR_FOLDER_ID")
    prompt = "Напиши краткое описание об искусственном интеллекте."
    text = await client.generate_text_async(prompt)
    print(text)

asyncio.run(generate_text_async())

Стриминговая генерация текста

Синхронно:

def callback(data):
    print(data, end='', flush=True)

client.generate_text(prompt="Расскажи интересный факт о Вселенной.", stream=True, callback=callback)

Асинхронно:

async def async_streaming():
    def callback(data):
        print(data, end='', flush=True)

    await client.generate_text_async(prompt="Опиши закат над морем.", stream=True, callback=callback)

asyncio.run(async_streaming())

Генерация изображений

import asyncio
from yandex_neural_api.client import YandexNeuralAPIClient

async def generate_image():
    client = YandexNeuralAPIClient(iam_token="YOUR_IAM_TOKEN", folder_id="YOUR_FOLDER_ID")
    prompt = "Нарисуй красивый пейзаж с горами и рекой."
    image_data = await client.generate_image_async(prompt)
    with open("image.png", "wb") as f:
        f.write(image_data)
    print("Изображение сохранено как image.png")

asyncio.run(generate_image())

Токенизация текста

text = "Привет, как у тебя дела?"
tokens = client.tokenize_text(text)
print(tokens)

Получение эмбеддингов

Для документов (text_type='doc'):

doc_text = "Машинное обучение - это область искусственного интеллекта."
embedding = client.get_text_embedding(doc_text, text_type='doc')
print(embedding)

Для запросов (text_type='query'):

query_text = "Что такое машинное обучение?"
embedding = client.get_text_embedding(query_text, text_type='query')
print(embedding)

Вычисление сходства между текстами:

import numpy as np
from scipy.spatial.distance import cdist

# Исходные данные
doc_texts = [
    "Машинное обучение - это область искусственного интеллекта.",
    "Кошки любят играть с клубками ниток.",
    "Python - популярный язык программирования."
]
query_text = "Что такое машинное обучение?"

# Получение эмбеддингов
doc_embeddings = [client.get_text_embedding(doc, text_type='doc') for doc in doc_texts]
query_embedding = client.get_text_embedding(query_text, text_type='query')

# Преобразование в numpy массивы
doc_embeddings_np = np.array(doc_embeddings)
query_embedding_np = np.array(query_embedding)

# Вычисление косинусного сходства
distances = cdist([query_embedding_np], doc_embeddings_np, metric='cosine')
similarities = 1 - distances

# Поиск наиболее похожего документа
most_similar_index = np.argmax(similarities)
print(f"Наиболее похожий документ: {doc_texts[most_similar_index]}")

Настройка параметров

Вы можете изменять параметры генерации текста, изображений и эмбеддингов во время работы.

Обновление параметров генерации текста:

client.update_text_generation_params(llm_temperature=0.8, llm_max_tokens=1500)

Обновление параметров генерации изображений:

client.update_image_generation_params(image_mime_type='image/jpeg', image_width_ratio=16, image_height_ratio=9)

Обновление модели эмбеддинга:

client.update_embedding_model('text-search-query')

Логирование

Вы можете настроить уровень логирования при инициализации клиента:

import logging

client = YandexNeuralAPIClient(
    iam_token="YOUR_IAM_TOKEN",
    folder_id="YOUR_FOLDER_ID",
    log_level=logging.DEBUG
)

Уровни логирования:

  • logging.DEBUG: Подробная отладочная информация.
  • logging.INFO: Информационные сообщения (по умолчанию).
  • logging.WARNING: Предупреждения о потенциальных проблемах.
  • logging.ERROR: Ошибки, которые не препятствуют работе программы.
  • logging.CRITICAL: Критические ошибки, ведущие к завершению программы.

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

import asyncio
import logging
from yandex_neural_api.client import YandexNeuralAPIClient
import numpy as np
from scipy.spatial.distance import cdist
import json

def main():
    # Настройка логирования
    logging.basicConfig(level=logging.INFO)

    # Инициализация клиента
    client = YandexNeuralAPIClient(
        iam_token="YOUR_IAM_TOKEN",
        folder_id="YOUR_FOLDER_ID",
        model_type='pro',
        llm_temperature=0.7,
        llm_max_tokens=1000,
        log_level=logging.DEBUG
    )

    # Синхронная генерация текста
    print("Синхронная генерация текста:")
    prompt_text_sync = "Напиши короткое стихотворение о программировании."
    text_sync = client.generate_text(prompt_text_sync)
    print(text_sync)
    print("="*50)

    # Асинхронная генерация текста
    async def async_text_generation():
        print("Асинхронная генерация текста:")
        prompt_text_async = "Напиши краткое описание об искусственном интеллекте."
        text_async = await client.generate_text_async(prompt_text_async)
        print(text_async)
        print("="*50)
    asyncio.run(async_text_generation())

    # Синхронная стриминговая генерация текста
    print("Синхронная стриминговая генерация текста:")
    def sync_streaming_callback(data):
        try:
            json_data = json.loads(data)
            text = json_data['result']['alternatives'][0]['message']['text']
            print(text, end='', flush=True)
        except json.JSONDecodeError:
            pass  # Игнорируем некорректные части ответа
        except KeyError:
            pass  # Игнорируем неполные данные

    prompt_stream_sync = "Расскажи интересный факт о Вселенной."
    client.generate_text(prompt_stream_sync, stream=True, callback=sync_streaming_callback)
    print("\n" + "="*50)

    # Асинхронная стриминговая генерация текста
    async def async_streaming():
        print("Асинхронная стриминговая генерация текста:")
        def async_streaming_callback(data):
            try:
                json_data = json.loads(data)
                text = json_data['result']['alternatives'][0]['message']['text']
                print(text, end='', flush=True)
            except json.JSONDecodeError:
                pass
            except KeyError:
                pass

        prompt_stream_async = "Опиши закат над морем."
        await client.generate_text_async(prompt_stream_async, stream=True, callback=async_streaming_callback)
        print("\n" + "="*50)
    asyncio.run(async_streaming())

    # Токенизация текста
    print("Токенизация текста:")
    text_to_tokenize = "Привет, как у тебя дела?"
    tokenization_result = client.tokenize_text(text_to_tokenize)
    print(tokenization_result)
    print("="*50)

    # Получение эмбеддингов
    print("Получение эмбеддингов:")
    doc_texts = [
        "Машинное обучение - это область искусственного интеллекта.",
        "Кошки любят играть с клубками ниток.",
        "Python - это популярный язык программирования."
    ]
    query_text = "Что такое машинное обучение?"

    doc_embeddings = [client.get_text_embedding(text, text_type='doc') for text in doc_texts]
    query_embedding = client.get_text_embedding(query_text, text_type='query')

    doc_embeddings_np = np.array(doc_embeddings)
    query_embedding_np = np.array(query_embedding)

    distances = cdist([query_embedding_np], doc_embeddings_np, metric='cosine')
    similarities = 1 - distances

    most_similar_index = np.argmax(similarities)
    most_similar_doc = doc_texts[most_similar_index]
    similarity_score = similarities[0][most_similar_index]

    print(f"Поисковый запрос: {query_text}")
    print(f"Наиболее похожий документ: {most_similar_doc}")
    print(f"Коэффициент сходства: {similarity_score}")
    print("="*50)

    # Асинхронная генерация изображения
    async def async_image_generation():
        print("Асинхронная генерация изображения:")
        prompt_image = "Нарисуй красивый пейзаж с горами и рекой."
        image_data = await client.generate_image_async(prompt_image)
        with open("generated_image.png", "wb") as f:
            f.write(image_data)
        print("Изображение сохранено как generated_image.png")
    asyncio.run(async_image_generation())

if __name__ == "__main__":
    main()

Лицензия

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


Примечание: Не забудьте заменить "YOUR_IAM_TOKEN" и "YOUR_FOLDER_ID" на ваши реальные значения. Получить их можно в консоли Yandex.Cloud. Убедитесь, что у вашего аккаунта есть необходимые права для использования API сервисов.


Контакты

Если у вас есть вопросы или предложения, пожалуйста, создайте issue в репозитории или свяжитесь со мной напрямую.

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

yandex_neural_api-0.0.1.tar.gz (13.0 kB view details)

Uploaded Source

Built Distribution

yandex_neural_api-0.0.1-py3-none-any.whl (13.9 kB view details)

Uploaded Python 3

File details

Details for the file yandex_neural_api-0.0.1.tar.gz.

File metadata

  • Download URL: yandex_neural_api-0.0.1.tar.gz
  • Upload date:
  • Size: 13.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.27.2

File hashes

Hashes for yandex_neural_api-0.0.1.tar.gz
Algorithm Hash digest
SHA256 6839f228b4136b900e230b25d9762e0bc925c24206995a744a175305dd8d5ebc
MD5 70db92a6939e5d122d4d83e7c8963bca
BLAKE2b-256 ca129204c9f0fdad970397933b27272c944fb4db6c5178c1a5feb71fc04c95bc

See more details on using hashes here.

File details

Details for the file yandex_neural_api-0.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for yandex_neural_api-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b085d19335a42ac429b2223d48ea3585aab94b6fc61657e51b4ce33267f6f8cc
MD5 d367c9cf3bdf16378eebfdc0aef72152
BLAKE2b-256 b5233c6e2678d46b304bf15b758c9fb8ded695c76c927acc3b154dc9f6be74ad

See more details on using hashes here.

Supported by

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