xaix / app.py
reikernx's picture
Update app.py
75a0d77 verified
Raw
History Blame Contribute Delete
2.03 kB
from flask import Flask, request, jsonify
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
import os
import json
app = Flask(__name__)
HISTORY_FILE = "history.json"
MAX_HISTORY = 10 # Keep only the last 10 lines per user
# Load history from file (or create empty)
if os.path.exists(HISTORY_FILE):
with open(HISTORY_FILE, "r", encoding="utf-8") as f:
user_histories = json.load(f)
else:
user_histories = {}
# Choose a Transformers-compatible DeepSeek Distill model
MODEL_NAME = "Qwen/Qwen3-1.7B"
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForCausalLM.from_pretrained(
MODEL_NAME,
torch_dtype=torch.float16,
device_map="auto"
)
def save_history():
"""Save all histories to a JSON file."""
with open(HISTORY_FILE, "w", encoding="utf-8") as f:
json.dump(user_histories, f, ensure_ascii=False, indent=2)
@app.route("/message", methods=["GET"])
def handle_message():
user_message = request.args.get("message")
user_id = request.args.get("userid")
if not user_message or not user_id:
return jsonify({"error": "Both 'message' and 'userid' are required"}), 400
# Retrieve or initialize history
history = user_histories.get(user_id, [])
history.append(f"User: {user_message}")
history = history[-MAX_HISTORY:]
conversation_text = "\n".join(history) + "\nAI:"
inputs = tokenizer(conversation_text, return_tensors="pt").to(model.device)
outputs = model.generate(
**inputs,
max_new_tokens=256,
temperature=0.6,
do_sample=True
)
reply = tokenizer.decode(outputs[0], skip_special_tokens=True)
if "AI:" in reply:
reply_text = reply.split("AI:")[-1].strip()
else:
reply_text = reply.strip()
history.append(f"AI: {reply_text}")
user_histories[user_id] = history
save_history()
return jsonify({"response": reply_text})
if __name__ == "__main__":
app.run(host="0.0.0.0", port=7860, debug=True)