cobuild / app.py
reikernx's picture
Update app.py
b059201 verified
Raw
History Blame Contribute Delete
1.96 kB
from flask import Flask, request, jsonify
import subprocess
MODEL_PATH = "/app/model/qwen2.5-coder-1.5b-instruct-q4_k_m.gguf"
BINARY_PATH = "/llama.cpp/build/bin/llama-cli"
MAX_TOKENS = "128"
THREADS = "2"
CONTEXT_SIZE = "2048"
app = Flask(__name__)
def query_model(system: str, user: str) -> str:
prompt = f"System: {system}\nUser: {user}" if system else user
try:
cmd = [
BINARY_PATH,
"-m", MODEL_PATH,
"-t", THREADS,
"-c", CONTEXT_SIZE,
"-p", prompt,
"--n_predict", MAX_TOKENS,
"--temp", "0.7",
"--top_k", "40",
"--top_p", "0.9",
"--repeat_penalty", "1.1",
"--no-warmup"
]
result = subprocess.run(
cmd,
capture_output=True,
text=True,
timeout=90 # allow slightly longer for HF
)
if result.returncode != 0:
return f"Model error:\n{result.stderr.strip()}"
return result.stdout.strip() or "No output from model."
except subprocess.TimeoutExpired:
return "Error: Model took too long (timeout)."
except Exception as e:
return f"Unexpected error:\n{str(e)}"
@app.route("/api/query", methods=["GET", "POST"])
def api_query():
if request.method == "POST":
data = request.json or {}
user_prompt = data.get("prompt", "")
system_prompt = data.get("system", "")
else:
user_prompt = request.args.get("prompt", "")
system_prompt = request.args.get("system", "")
if not user_prompt.strip():
return jsonify({"error": "Prompt is required"}), 400
output = query_model(system_prompt, user_prompt)
return jsonify({"output": output})
@app.route("/")
def home():
return "API is running"
@app.route("/health")
def health():
return {"status": "ok"}
if __name__ == "__main__":
app.run(host="0.0.0.0", port=7860)