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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dcb39fec96b526bfa94c442221bae217f9ef2fab26946b446db1e9351232e7cf
|
|
| MD5 |
5a93d27f16d93e0cdcb9eee2c733ad4f
|
|
| BLAKE2b-256 |
762338acd7572546805452c19d5f5ae2d0595f0814df9833eb37f46366cb43a0
|
Provenance
The following attestation bundles were made for orchestrator_sdk-0.2.0.tar.gz:
Publisher:
publish-sdk.yml on k0perX-X/VKR
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
orchestrator_sdk-0.2.0.tar.gz -
Subject digest:
dcb39fec96b526bfa94c442221bae217f9ef2fab26946b446db1e9351232e7cf - Sigstore transparency entry: 1469746965
- Sigstore integration time:
-
Permalink:
k0perX-X/VKR@a3e89646646a0e0b43c685ece5179158590bf2cc -
Branch / Tag:
refs/heads/main - Owner: https://github.com/k0perX-X
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-sdk.yml@a3e89646646a0e0b43c685ece5179158590bf2cc -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file orchestrator_sdk-0.2.0-py3-none-any.whl.
File metadata
- Download URL: orchestrator_sdk-0.2.0-py3-none-any.whl
- Upload date:
- Size: 7.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
56fdcf0c3ff3e79540edf350388a2d1bfce717bbc43de0fc86be9b89df02f21c
|
|
| MD5 |
354113c098eebbb5be0bb016b5a9a7bb
|
|
| BLAKE2b-256 |
0fd0bb8255b3b7395a2d86b822bf2e92b4c651d5b87d58eeee384970220345d2
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
orchestrator_sdk-0.2.0-py3-none-any.whl -
Subject digest:
56fdcf0c3ff3e79540edf350388a2d1bfce717bbc43de0fc86be9b89df02f21c - Sigstore transparency entry: 1469747356
- Sigstore integration time:
-
Permalink:
k0perX-X/VKR@a3e89646646a0e0b43c685ece5179158590bf2cc -
Branch / Tag:
refs/heads/main - Owner: https://github.com/k0perX-X
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-sdk.yml@a3e89646646a0e0b43c685ece5179158590bf2cc -
Trigger Event:
workflow_dispatch
-
Statement type: