AUBIN-Mini / code /aubin_mini /__main__.py
emrevrg's picture
Upload folder using huggingface_hub
b95ffe7 verified
Raw History Blame Contribute Delete
2.78 kB
"""aubin-mini command line.
aubin-mini decide request.json # {"state": ..., "questions": {...}} → JSON result
aubin-mini serve --port 8009 # POST /decide with the same JSON, GET /health
"""
import argparse
import json
import sys
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
from . import AubinMini, __version__
def main(argv=None):
ap = argparse.ArgumentParser(prog="aubin-mini")
ap.add_argument("--model", default="emrevrg/AUBIN-Mini", help="HF repo or local directory")
ap.add_argument("--variant", default="phone", choices=["phone", "nb4"])
ap.add_argument("--threads", type=int, default=None)
sub = ap.add_subparsers(dest="cmd", required=True)
d = sub.add_parser("decide"); d.add_argument("request", help="JSON file, or - for stdin")
s = sub.add_parser("serve"); s.add_argument("--host", default="127.0.0.1"); s.add_argument("--port", type=int, default=8009)
a = ap.parse_args(argv)
m = AubinMini.from_pretrained(a.model, a.variant, threads=a.threads)
if a.cmd == "decide":
req = json.load(sys.stdin if a.request == "-" else open(a.request, encoding="utf-8"))
print(json.dumps(m.decide(req.get("state", ""), req["questions"]), ensure_ascii=False, indent=2))
return
class H(BaseHTTPRequestHandler):
def _send(self, code, obj):
b = json.dumps(obj, ensure_ascii=False).encode("utf-8")
self.send_response(code); self.send_header("Content-Type", "application/json; charset=utf-8")
self.send_header("Content-Length", str(len(b))); self.end_headers(); self.wfile.write(b)
def do_GET(self):
if self.path == "/health":
self._send(200, {"ok": True, "model": "AUBIN Mini", "version": __version__, "variant": m.variant})
else:
self._send(404, {"error": "not found"})
def do_POST(self):
if self.path != "/decide":
return self._send(404, {"error": "not found"})
try:
req = json.loads(self.rfile.read(int(self.headers.get("Content-Length", 0))) or b"{}")
self._send(200, m.decide(req.get("state", ""), req["questions"]))
except KeyError as e:
self._send(400, {"error": f"missing field: {e.args[0]}"})
except (ValueError, TypeError, AttributeError) as e:
self._send(400, {"error": str(e)})
def log_message(self, *args):
pass
print(f"AUBIN Mini {__version__} ({m.variant}) on http://{a.host}:{a.port} POST /decide", flush=True)
ThreadingHTTPServer((a.host, a.port), H).serve_forever()
if __name__ == "__main__":
main()