liyaengine
Official Python client for the Liya Engine public API.
Status: early access. This SDK currently covers Collections, Agents, Workflows, and Evaluations. More resources (Domains, Run, Guardrail Policies) ship incrementally — see Roadmap.
Install
pip install liyaengine
Quickstart
from liyaengine import LiyaEngine
client = LiyaEngine(api_key="liya_...")
collection = client.collections.create(
slug="contracts",
label="Contracts",
domain_keys=["legal-ops"],
)
collections = client.collections.list()
Or as a context manager (closes the underlying HTTP connection pool automatically):
with LiyaEngine(api_key="liya_...") as client:
collections = client.collections.list()
Get an API key from your Liya Engine dashboard under Settings → API Keys.
Agents
agent = client.agents.create(
agent_key="support-triage",
name="Support Triage",
goal="Triage incoming support tickets and route them to the right team.",
)
# Agents are created in draft status — deploy to activate for execution.
client.agents.deploy(agent.agent_key)
result = client.agents.run(agent.agent_key, input={"message": "My order hasn't arrived yet."})
history = client.agents.list_runs(agent.agent_key)
Workflows
workflow = client.workflows.create(
name="Lead Intake",
steps=[{"step_type": "trigger", "config": {"trigger_subtype": "webhook"}}],
)
# Workflows are created in draft status — deploy to publish and make them
# callable. Deploying a webhook-triggered workflow for the first time mints
# its webhook secret; capture it immediately, it is never returned again.
deployed = client.workflows.deploy(workflow.workflow_key)
webhook_url, webhook_secret = deployed["webhook_url"], deployed["webhook_secret"]
# Roll the secret with a grace window so in-flight senders don't break.
client.workflows.rotate_webhook_secret(workflow.workflow_key, grace_period_seconds=300)
# Flip a deployed workflow on/off without touching its definition.
client.workflows.toggle(workflow.workflow_key)
result = client.workflows.run(workflow.workflow_key, input={"email": "ada@example.com"})
history = client.workflows.list_runs(workflow.workflow_key)
deploy()androtate_webhook_secret()return the plaintext webhook secret exactly once. Store it immediately — subsequent reads (get,list) only ever exposetrigger_config["has_secret"].
Evaluations
A Suite binds a Dataset to one specific intent; suites.run() calls that intent for real and scores what it produces. runs.submit()/evaluations.score() score a response you already generated yourself — no intent execution involved.
dataset = client.evaluations.datasets.create(
name="Support Replies",
cases=[{"input": {"message": "Where is my order?"}}],
)
suite = client.evaluations.suites.create(
name="Order Status Suite",
domain_key="support",
intent_key="order-status",
dataset_id=dataset.id,
)
# Runs are always async — poll for status/results.
run = client.evaluations.suites.run(suite.id)
result = client.evaluations.runs.get(run.id)
# A failed run can be resumed — already-scored cases are skipped.
client.evaluations.runs.resume(run.id)
# Score a response you already generated, no dataset/suite required.
scored = client.evaluations.score(
input={"message": "Where is my order?"},
output="Your order shipped yesterday and should arrive by Friday.",
)
custom_scorer_webhook_secreton a Suite is write-only — it's never returned; only acustom_scorer_webhook_secret_setboolean comes back on reads.
Error handling
Every failed request raises LiyaEngineAPIError, carrying the API's code, message, and HTTP status:
from liyaengine import LiyaEngineAPIError
try:
client.collections.create(slug="contracts", label="Contracts", domain_keys=["legal-ops"])
except LiyaEngineAPIError as err:
if err.code == "SLUG_CONFLICT":
# handle the conflict
pass
raise
Network failures and timeouts raise LiyaEngineNetworkError instead. Requests are retried automatically on 429/5xx responses and transient network errors (2 retries by default).
Configuration
LiyaEngine(
api_key="liya_...",
base_url="https://api.liyaengine.ai", # override for local/staging
timeout_s=30.0,
max_retries=2,
)
Roadmap
- Collections
- Agents (full CRUD, deploy, run, run/session history)
- Workflows (full CRUD, toggle, deploy, webhook secret rotate, run, run history)
- Evaluations (Datasets/Cases/Suites/Runs/Reviews CRUD, suite execution, cancel/resume, statistical + pairwise compare, standalone scoring)
- Domains (custom domain + intent CRUD)
- Run / Run (streaming)
- Guardrail Policies
- Async client
Full docs: https://liyaengine.ai/docs/sdks/python
Development
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
mypy src
pytest
License
MIT
Release files for liyaengine 0.4.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 | |
|---|---|---|---|
| liyaengine-0.4.0.tar.gz | 19.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| liyaengine-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 36.2 kB
Release files / liyaengine-0.4.0.tar.gz
| Download URL | liyaengine-0.4.0.tar.gz |
|---|---|
| Size | 19.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e6ac53ea70f8a38e0bb83d8be4ec28454f25bc5570964cefbb885e29fab8e2e4
|
|
BLAKE2b-256 checksum How to use checksums |
44f48434e50b0105bc41ed4415d6f9504131506b5d5c17709ed6067e084fa6e2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 20, 2026.
Transparency logRelease files / liyaengine-0.4.0-py3-none-any.whl
| Download URL | liyaengine-0.4.0-py3-none-any.whl |
|---|---|
| Size | 17.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
925906baeff9c3543664f1539caca95f8c6a23561c5f5dec87e0f6419a6f49d4
|
|
BLAKE2b-256 checksum How to use checksums |
583d81589b5d5ec9084ceef55c37a4501438824f1bd6572c158965980b33873c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 20, 2026.
Transparency log