Metadata-Version: 2.4
Name: lyboai
Version: 0.1.0
Summary: LyboAI Mobile Edge Runtime — Python SDK for on-device AI agent creation, evaluation, and training workflows
Author: LyboAI
License: Apache-2.0
Project-URL: Homepage, https://lyboai.app/developers
Project-URL: Documentation, https://lyboai.app/developers/docs
Project-URL: Repository, https://github.com/rajandua20/lyboai-mobile-edge-runtime
Keywords: on-device-ai,edge-ai,llm,slm,agents,offline-ai,private-ai
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Operating System :: OS Independent
Requires-Python: >=3.9
Description-Content-Type: text/markdown

# lyboai (Python SDK)

Python is the **builder's language** for the LyboAI ecosystem: create agents,
package and sign capability packs, run evaluations, tune routing, and export
training datasets. Agents execute in the Rust runtime — locally via the
`lybo` binary (this SDK drives it over the JSON-lines protocol, identical to
the on-device C ABI) and on phones via the mobile bindings.

```bash
pip install -e sdk/python        # from the repo, or publish to your index
cargo build -p lybo-cli           # the runtime the SDK drives
```

## Create an agent

```python
from lyboai import Client

with Client(data_dir="/tmp/agent", binary="./target/debug/lybo") as lybo:
    lybo.install_knowledge(doc_id="handbook", title="Team Handbook",
                           body="Support tickets are answered within 24 hours.")
    lybo.register_skill(skill_id="app.ask", name="Ask the handbook",
                        triggers=["what does the handbook say"],
                        keywords=["handbook"], pattern="retrieval")

    session = lybo.start_session()
    out = lybo.run_to_completion(session, "what does the handbook say about tickets")
    print(out["output"]["text"], out["output"]["sources"])
```

## Train routing from labelled examples

```python
from lyboai import train_triggers

learned = train_triggers({
    "faq.ask":  ["what does the guide say about refunds", "search the faq"],
    "task.plan": ["plan my week", "break this goal into steps"],
})
# → per-skill {"triggers": [...], "keywords": [...]} via class-discriminative
#   tf-idf; feeds both the keyword tier and the on-device semantic centroids.
```

## Build, sign, evaluate, ship a pack

```python
from lyboai import PackBuilder, sign_pack, evaluate

src = (PackBuilder("acme.faq", "FAQ", "1.0.0", publisher="acme")
       .add_knowledge("faq", "Store FAQ", "Refunds take five business days.")
       .add_skill("faq.ask", "Ask FAQ", pattern="retrieval",
                  triggers=learned["faq.ask"]["triggers"],
                  keywords=learned["faq.ask"]["keywords"],
                  knowledge_scopes=["acme.faq"])
       .add_eval_case("faq.suite", "routes", "what does the guide say about refunds",
                      expect_skill="faq.ask", expect_contains=["refund"])
       .save("pack.json"))
sign_pack("pack.json", SECRET_KEY_HEX, "dist/acme-faq.lybopack")

with Client(data_dir="/tmp/qa", trust=[f"acme:{PUBLIC_KEY_HEX}"]) as lybo:
    lybo.install_pack_file("dist/acme-faq.lybopack")
    report = evaluate(lybo, suite)          # routing + outcome + content checks
    assert report.ok, report.summary()      # gate your CI on this
```

## Export training data (privacy-preserving)

```python
from lyboai import export_routing_dataset
export_routing_dataset(lybo, "routing.jsonl")
# skill ids, confidence, outcomes, latency, model ids — never raw user content.
```

Run the SDK's own tests: `LYBO_BIN=./target/debug/lybo python3 -m unittest discover sdk/python/tests`
