File size: 2,215 Bytes
052388d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #!/usr/bin/env python3
"""Laya decision model — simple runner (torch-free).
pip install coreai-core transformers numpy
python3 run.py --task guardrail --state "rm -rf /home/user/projects" \
--question '{"disposition":{"type":"choice","instructions":"...",
"criteria":{"allow":"...","block":"..."}}}'
python3 run.py --task lang_route --state "wake me at nine" \
--question '{"lang":{"type":"choice","instructions":"...",
"criteria":{"en":"...","de":"..."}}}'
Prints one JSON verdict: chain, choice, confidence, probs, acted.
Questions with no "criteria" render as binary noul (yes/no). --unit
gpu|cpu|ne (gpu recommended; unpinned ANE loads can SIGABRT). One process,
one agent — reuse it for many decide() calls in your own code via
CombinedAgent directly (see src/laya_port/combined_agent.py).
"""
import argparse, json, os, sys
HERE = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, os.path.join(HERE, "src"))
def main():
ap = argparse.ArgumentParser(description="Laya combined decision model")
ap.add_argument("--task", required=True,
help="triage|lang_route|guardrail|act_escalate|tool_route|"
"skill_route|mail_sort|supervise|choose|compact|rerank")
ap.add_argument("--state", required=True, help="agent state text")
ap.add_argument("--question", required=True,
help='typed question JSON: {"<name>": {type, instructions, criteria}}')
ap.add_argument("--unit", default="gpu", choices=["gpu", "cpu", "ne"])
ap.add_argument("--pad", action="store_true",
help="pad every call to asset L_max (pays re-specialization "
"once at startup; ~16 ms/call warm vs seconds per shape)")
a = ap.parse_args()
from laya_port.combined_agent import CombinedAgent
ag = CombinedAgent(os.path.join(HERE, "laya-combined-f16.aimodel"),
os.path.join(HERE, "configs"), unit=a.unit)
q = json.loads(a.question)
shape = ag.prov["shape"]["L_max"] if a.pad else None
print(json.dumps(ag.decide(a.task, a.state, q, pad_to=shape), indent=1))
if __name__ == "__main__":
main()
|