Skip to main content

SDK for LLM Orchestrator scenarios

Project description

SDK Runtime - LLM Orchestrator

Описание

Библиотека SDK (Software Development Kit) для создания сценариев оркестратора LLM. Предоставляет публичный интерфейс, который передается сценарию во время выполнения. SDK не знает ничего о worker, backend, PostgreSQL, LM Studio или OpenWebUI: все реальные действия выполняются через внедренный runtime host.

Архитектурно сценарий в этой модели понимается как прикладной workflow. Оркестратор снаружи управляет только запуском такого workflow, а SDK дает сценарию управляемый доступ к внутренним операциям этого запуска: обращениям к модели, логам, метрикам и контексту выполнения.

Основные компоненты

  • Публичный SDK сценария - основной интерфейс, через который сценарий:

    • выполняет синхронный вызов модели;
    • запускает асинхронный вызов модели внутри текущего запуска;
    • ожидает или отменяет внутреннюю асинхронную операцию;
    • пишет логи и метрики;
    • читает контекст текущего запуска.
  • SDKRuntime (внутренний контракт) - runtime host, через который worker предоставляет инфраструктурные операции и координирует внутреннее выполнение сценария

  • SDKContext / RunMetadata (внутренний контекст) - входные данные сценария и метаданные текущего запуска

Требования

  • Python 3.10-3.14
  • Внешние зависимости не требуются

Установка

Как пакет (для использования в сценариях)

cd sdk
pip install -e .

Как зависимость воркера

В requirements.txt воркера добавьте:

-e ../sdk

Сборка wheel файла и публикация

Сборка wheel файла

cd sdk
pip install wheel
python setup.py bdist_wheel

Wheel файл будет создан в папке dist/ (например, dist/orchestrator_sdk-0.1.0-py3-none-any.whl).

Публикация в PyPI через GitHub Actions

В репозитории настроен workflow .github/workflows/publish-sdk.yml, который публикует только пакет sdk.

Публикация запускается:

  • автоматически при push в ветку main
  • только если в этом push изменена версия пакета в sdk/setup.py
  • вручную через workflow_dispatch, без требования менять версию

Пример релиза:

git checkout main
# изменить version="0.2.0" -> version="0.2.1" в sdk/setup.py
git commit -am "Release SDK 0.2.1"
git push origin main

Если workflow был запущен от push в main, но версия SDK не изменилась, публикация пропускается. Workflow завершает работу без публикации и пишет предупреждение в лог и summary run.

Workflow рассчитан на PyPI Trusted Publishing через GitHub OIDC, поэтому в PyPI нужно один раз настроить trusted publisher для этого репозитория и workflow publish-sdk.yml.

Публикация в внутреннем Python registry компании

Для публикации используйте twine:

pip install twine
twine upload --repository-url https://your-internal-registry.com/simple/ dist/*

Или настройте .pypirc файл:

[distutils]
index-servers =
    internal

[internal]
repository: https://your-internal-registry.com/simple/
username: your-username
password: your-password

Затем выполните:

twine upload -r internal dist/*

Использование в сценариях

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

# my_scenario.py

def run(sdk, context):
    """
    sdk: публичный SDK сценария, передаваемый воркером
    context: dict - входные данные сценария (из input_data)
    """

    sdk.log("INFO", "Начало выполнения сценария")

    prepared = normalize_input(context)

    primary_result = sdk.call_model(
        prompt=f"Проанализируй следующую задачу: {prepared['task_description']}"
    )

    background_handle = sdk.start_model_call(
        prompt=f"Подготовь альтернативную трактовку: {prepared['task_description']}"
    )

    reference_data = load_reference_data(prepared["source_id"])

    secondary_result = sdk.await_model_call(background_handle, timeout=60)

    sdk.emit_metric("scenario_duration_seconds", 12.5, tags={"scenario": "my_scenario"})

    return {
        "analysis": primary_result,
        "alternative": secondary_result,
        "reference": reference_data,
    }

В этом примере важно не название конкретных методов, а архитектурная семантика:

  • сценарий выполняет обращения к модели только внутри собственного запуска;
  • асинхронный вызов модели не создает новый элемент операторской очереди;
  • не-LLM шаги (normalize_input, load_reference_data) остаются обычной прикладной логикой сценария;
  • оркестратор при этом продолжает управлять только одним верхнеуровневым запуском.

Архитектурный принцип

  • Сценарий знает только публичный SDK текущего запуска.
  • SDK знает только внутренний контракт runtime host.
  • Worker создает SDKRuntime, подставляет его в SDK и тем самым связывает сценарий с логами, LLM и интеграциями.
  • Публичный SDK не должен давать сценарию создавать новые элементы операторской очереди; асинхронность допускается только как внутренняя механика текущего запуска.

Версионирование и предупреждения совместимости

Worker должен выполнять compatibility-check версии orchestrator-sdk, зафиксированной сценарием, во время прогрева runtime. Эта проверка носит диагностический характер и по умолчанию должна завершаться warning, а не hard-fail.

Правила:

  • orchestrator-sdk должен сохранять обратную совместимость
  • различие между версией SDK у сценария и версией SDK у worker не должно автоматически блокировать запуск
  • если для некоторой функции требуется более новая версия SDK, это должно быть явно отражено в документации SDK и в compatibility-warning, который увидит worker
  • warning должен связывать номер версии и конкретные функции, которые могут быть недоступны
  • worker runtime поставляет собственную версию orchestrator-sdk, поэтому сценарий не обязан устанавливать SDK в отдельный runtime-каталог во время прогрева

Требование к сопровождению SDK:

  • при добавлении нового публичного метода нужно указать минимальную версию SDK, в которой он появился
  • вместе с этим нужно описать текст warning, который должен видеть runtime при работе со старой версией сценария
  • этот каталог предупреждений должен поддерживаться в актуальном состоянии внутри документации SDK

При переходе на эту архитектуру каталог минимальных версий должен описывать не низкоуровневые queue/request-операции, а целевые публичные возможности SDK:

  • синхронный вызов модели внутри текущего запуска;
  • запуск внутренней асинхронной операции модели;
  • ожидание результата внутренней асинхронной операции;
  • отмена внутренней асинхронной операции;
  • логирование;
  • публикация метрик;
  • доступ к метаданным текущего запуска.

Тексты compatibility-warning должны быть привязаны именно к этим возможностям.

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

sdk/
├── README.md
├── setup.py
├── requirements.txt
└── orchestrator_sdk/
    ├── __init__.py
    ├── sdk.py              # OrchestratorSDK
    ├── runtime.py          # SDKRuntime contract
    └── context.py          # SDKContext, RunMetadata

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

orchestrator_sdk-0.2.0.tar.gz (6.7 kB view details)

Uploaded Source

Built Distribution

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

orchestrator_sdk-0.2.0-py3-none-any.whl (7.1 kB view details)

Uploaded Python 3

File details

Details for the file orchestrator_sdk-0.2.0.tar.gz.

File metadata

  • Download URL: orchestrator_sdk-0.2.0.tar.gz
  • Upload date:
  • Size: 6.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for orchestrator_sdk-0.2.0.tar.gz
Algorithm Hash digest
SHA256 dcb39fec96b526bfa94c442221bae217f9ef2fab26946b446db1e9351232e7cf
MD5 5a93d27f16d93e0cdcb9eee2c733ad4f
BLAKE2b-256 762338acd7572546805452c19d5f5ae2d0595f0814df9833eb37f46366cb43a0

See more details on using hashes here.

Provenance

The following attestation bundles were made for orchestrator_sdk-0.2.0.tar.gz:

Publisher: publish-sdk.yml on k0perX-X/VKR

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file orchestrator_sdk-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for orchestrator_sdk-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 56fdcf0c3ff3e79540edf350388a2d1bfce717bbc43de0fc86be9b89df02f21c
MD5 354113c098eebbb5be0bb016b5a9a7bb
BLAKE2b-256 0fd0bb8255b3b7395a2d86b822bf2e92b4c651d5b87d58eeee384970220345d2

See more details on using hashes here.

Provenance

The following attestation bundles were made for orchestrator_sdk-0.2.0-py3-none-any.whl:

Publisher: publish-sdk.yml on k0perX-X/VKR

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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