eoinedge's picture
Add API-docs-scoped Edge Impulse RAG assistant (prebuilt index + inference)
4de1825 verified
Raw
History Blame Contribute Delete
2.04 kB
"""Minimal HTTP server for the Edge Impulse docs RAG assistant.
python serve.py --host 0.0.0.0 --port 8000
POST /ask {"question": "...", "k": 4} -> {"answer": "..."}
GET /health -> {"ok": true}
"""
from __future__ import annotations
import argparse
from pathlib import Path
from flask import Flask, jsonify, request
from rag import DEFAULT_API_BASE, DEFAULT_INDEX_DIR, DEFAULT_MODEL, ask
def create_app(index_dir: Path, api_base: str, model: 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,
k=int(payload.get("k", k)),
max_new_tokens=int(payload.get("max_new_tokens", 320)),
api_base=api_base,
model=model,
)
return jsonify({"answer": answer})
except Exception as exc: # noqa: BLE001 - surface the error to the client
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=8000)
parser.add_argument("--index-dir", type=Path, default=DEFAULT_INDEX_DIR)
parser.add_argument("--api-base", default=DEFAULT_API_BASE)
parser.add_argument("--model", default=DEFAULT_MODEL)
parser.add_argument("--k", type=int, default=4)
args = parser.parse_args()
app = create_app(args.index_dir, args.api_base, args.model, args.k)
app.run(host=args.host, port=args.port)
if __name__ == "__main__":
main()