from __future__ import annotations import argparse from pathlib import Path from flask import Flask, jsonify, request from ask import ask def create_app(index_dir: Path, base_model: str, adapter: str, k: int) -> Flask: app = Flask(__name__) @app.get("/health") def health(): return jsonify({"ok": True}) @app.post("/ask") def ask_route(): payload = request.get_json(silent=True) or {} question = str(payload.get("question", "")).strip() if not question: return jsonify({"error": "question is required"}), 400 try: answer = ask( question, index_dir=index_dir, base_model=base_model, adapter=adapter, k=int(payload.get("k", k)), max_new_tokens=int(payload.get("max_new_tokens", 320)), ) return jsonify({"answer": answer}) except Exception as exc: return jsonify({"error": str(exc)}), 500 return app def main() -> None: parser = argparse.ArgumentParser(description="Serve the Edge Impulse docs RAG assistant.") parser.add_argument("--host", default="127.0.0.1") parser.add_argument("--port", type=int, default=8080) parser.add_argument("--index-dir", type=Path, default=Path("data/index")) parser.add_argument("--base-model", default="Qwen/Qwen2.5-Coder-0.5B-Instruct") parser.add_argument("--adapter", default="") parser.add_argument("--k", type=int, default=4) args = parser.parse_args() app = create_app(args.index_dir, args.base_model, args.adapter, args.k) app.run(host=args.host, port=args.port) if __name__ == "__main__": main()