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
Metadata
Release files for orchestrator-sdk 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| orchestrator_sdk-0.2.0.tar.gz | 6.7 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| orchestrator_sdk-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 13.8 kB
Release files / orchestrator_sdk-0.2.0.tar.gz
| Download URL | orchestrator_sdk-0.2.0.tar.gz |
|---|---|
| Size | 6.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
dcb39fec96b526bfa94c442221bae217f9ef2fab26946b446db1e9351232e7cf
|
|
BLAKE2b-256 checksum How to use checksums |
762338acd7572546805452c19d5f5ae2d0595f0814df9833eb37f46366cb43a0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 8, 2026.
Transparency logRelease files / orchestrator_sdk-0.2.0-py3-none-any.whl
| Download URL | orchestrator_sdk-0.2.0-py3-none-any.whl |
|---|---|
| Size | 7.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
56fdcf0c3ff3e79540edf350388a2d1bfce717bbc43de0fc86be9b89df02f21c
|
|
BLAKE2b-256 checksum How to use checksums |
0fd0bb8255b3b7395a2d86b822bf2e92b4c651d5b87d58eeee384970220345d2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 8, 2026.
Transparency logSecurity for orchestrator-sdk 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for orchestrator_sdk-0.2.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 8, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.