from flask import Flask, request, jsonify, Response import requests import traceback app = Flask(__name__) # ============================== # CONFIG # ============================== OLLAMA_URL = "http://localhost:11434" DEFAULT_MODEL = "sweaterdog/andy-4:latest" # ============================== # CORS # ============================== @app.after_request def after_request(response): response.headers["Access-Control-Allow-Origin"] = "*" response.headers["Access-Control-Allow-Headers"] = "Content-Type" response.headers["Access-Control-Allow-Methods"] = "GET, POST, OPTIONS" return response # ============================== # HOME # ============================== @app.route("/") def home(): return f"""
Model: {DEFAULT_MODEL}
curl -X POST https://sanvrypt-mindcraft-vllm.hf.space/api/generate \\
-H "Content-Type: application/json" \\
-d '{{
"prompt": "Halo Andy-4!",
"stream": false
}}'
"""
# ==============================
# GENERATE
# ==============================
@app.route("/api/generate", methods=["POST", "OPTIONS"])
def generate():
if request.method == "OPTIONS":
return "", 204
try:
data = request.get_json(force=True)
# FORCE MODEL
data["model"] = DEFAULT_MODEL
resp = requests.post(
f"{OLLAMA_URL}/api/generate",
json=data,
stream=data.get("stream", False),
timeout=300
)
if data.get("stream", False):
def gen():
for line in resp.iter_lines():
if line:
yield line + b"\n"
return Response(gen(), content_type="application/x-ndjson")
return jsonify(resp.json())
except Exception as e:
traceback.print_exc()
return jsonify({"error": str(e)}), 500
# ==============================
# CHAT
# ==============================
@app.route("/api/chat", methods=["POST", "OPTIONS"])
def chat():
if request.method == "OPTIONS":
return "", 204
try:
data = request.get_json(force=True)
# FORCE MODEL
data["model"] = DEFAULT_MODEL
resp = requests.post(
f"{OLLAMA_URL}/api/chat",
json=data,
stream=data.get("stream", False),
timeout=300
)
if data.get("stream", False):
def gen():
for line in resp.iter_lines():
if line:
yield line + b"\n"
return Response(gen(), content_type="application/x-ndjson")
return jsonify(resp.json())
except Exception as e:
traceback.print_exc()
return jsonify({"error": str(e)}), 500
# ==============================
# FALLBACK
# ==============================
@app.route("/