| from flask import Flask, request, jsonify |
| from transformers import pipeline |
| import torch, json, os |
|
|
| app = Flask(__name__) |
|
|
| MODEL_CACHE_DIR = os.environ.get("HF_HOME", "./model_cache") |
|
|
| |
| pipe_20b = pipeline( |
| "text-generation", |
| model=os.path.join(MODEL_CACHE_DIR, "models--openai--gpt-oss-20b", "snapshots"), |
| torch_dtype="auto", |
| device_map="auto" |
| ) |
|
|
| MEMORY_FILE = "memory.json" |
|
|
| def load_memory(): |
| return json.load(open(MEMORY_FILE)) if os.path.exists(MEMORY_FILE) else {} |
|
|
| def save_memory(): |
| json.dump(conversations, open(MEMORY_FILE, "w")) |
|
|
| conversations = load_memory() |
|
|
| def generate_with_memory(pipe, session_id, user_message): |
| conversations.setdefault(session_id, []) |
| conversations[session_id].append({"role": "user", "content": user_message}) |
| outputs = pipe(user_message, max_new_tokens=256) |
| response_text = outputs[0]["generated_text"] |
| conversations[session_id].append({"role": "assistant", "content": response_text}) |
| save_memory() |
| return response_text |
|
|
| @app.route("/generate_20b") |
| def generate_20b(): |
| msg = request.args.get("message", "") |
| sid = request.args.get("session_id", "default") |
| if not msg.strip(): |
| return jsonify({"error": "No message provided"}), 400 |
| resp = generate_with_memory(pipe_20b, sid, msg) |
| return jsonify({"model": "gpt-oss-20b", "session_id": sid, "input": msg, "response": resp}) |
|
|
| @app.route("/reset_session") |
| def reset_session(): |
| sid = request.args.get("session_id", "default") |
| conversations.pop(sid, None) |
| save_memory() |
| return jsonify({"status": "Session reset", "session_id": sid}) |
|
|
| if __name__ == "__main__": |
| app.run(host="0.0.0.0", port=7860) |