ornith-1.0-9b-api / server.py
ChoruYt's picture
Switch to Ollama: remove llama-cpp/convert
0440f4a
Raw
History Blame Contribute Delete
2.18 kB
import os, json, time
import requests
from flask import Flask, request, jsonify, Response, stream_with_context
from flask_cors import CORS
OLLAMA_URL = os.environ.get("OLLAMA_URL", "http://localhost:11434")
app = Flask(__name__)
CORS(app)
def ollama_chat(messages, stream=False):
return requests.post(
f"{OLLAMA_URL}/api/chat",
json={"model": "ornith:9b", "messages": messages, "stream": stream},
stream=stream,
)
@app.route("/")
def index():
return jsonify({"service": "Ornith 9B via Ollama"})
@app.route("/health")
def health():
try:
r = requests.get(f"{OLLAMA_URL}/api/tags", timeout=5)
return jsonify({"status": "ok", "ollama": r.ok})
except:
return jsonify({"status": "error", "ollama": False})
@app.route("/ask", methods=["GET", "POST"])
def ask():
stream = str(request.args.get("stream", "")).lower() in ["true", "1", "yes"]
if request.method == "GET":
q = request.args.get("q", "").strip()
else:
data = request.get_json(silent=True) or {}
q = data.get("q", "").strip()
if "stream" in data:
stream = str(data.get("stream")).lower() in ["true", "1", "yes"]
if not q:
return jsonify({"error": "Missing q"}), 400
r = ollama_chat([{"role": "user", "content": q}], stream=stream)
if stream:
def gen():
for line in r.iter_lines(decode_unicode=True):
if line:
try:
d = json.loads(line)
if d.get("done"):
yield "data: [DONE]\n\n"
else:
yield f"data: {json.dumps({'text': d.get('message', {}).get('content', '')})}\n\n"
except:
pass
return Response(gen(), mimetype="text/event-stream")
else:
data = r.json()
return jsonify({"response": data.get("message", {}).get("content", "")})
if __name__ == "__main__":
port = int(os.environ.get("PORT", 7860))
print(f"[INFO] Server on :{port}", flush=True)
app.run(host="0.0.0.0", port=port, debug=False, threaded=True)