qwen2
ExocoreV1 / main.py
Helenbaclayon Bacalso
Use airllm directly - strip custom loaders, just AutoModel
cae4f5b
Raw
History Blame Contribute Delete
2.79 kB
import os
import json
import requests as _requests
from bs4 import BeautifulSoup
from flask import Flask, render_template, request, jsonify, stream_with_context, Response
from airllm import AutoModel
app = Flask(__name__)
model = None
chat_history = []
MODEL_NAME = "Exocore/ExocoreV1"
def load_model():
global model
try:
model = AutoModel.from_pretrained(MODEL_NAME)
except Exception as e:
print(f"Model load error: {e}")
@app.route("/")
def index():
return render_template("index.html")
@app.route("/api/model-details", methods=["GET"])
def model_details():
if model is None:
return jsonify({"error": "No model loaded"}), 400
return jsonify({
"name": "ExocoreV1",
"type": "airllm",
})
@app.route("/api/chat", methods=["POST"])
def chat():
global chat_history
if model is None:
return jsonify({"error": "Model not loaded"}), 400
data = request.json
user_message = data.get("message", "").strip()
max_tokens = int(data.get("max_tokens", 128))
if not user_message:
return jsonify({"error": "Empty message"}), 400
def generate():
full_reply = ""
try:
input_text = [user_message]
input_tokens = model.tokenizer(
input_text,
return_tensors="pt",
return_attention_mask=False,
truncation=True,
max_length=128,
padding=False
)
generation_output = model.generate(
input_tokens["input_ids"].cuda(),
max_new_tokens=max_tokens,
use_cache=True,
return_dict_in_generate=True
)
output = model.tokenizer.decode(generation_output.sequences[0])
full_reply = output
for ch in full_reply:
yield f"data: {json.dumps({'token': ch})}\n\n"
chat_history.append({"role": "user", "content": user_message})
chat_history.append({"role": "assistant", "content": full_reply})
yield f"data: {json.dumps({'done': True})}\n\n"
except Exception as e:
yield f"data: {json.dumps({'error': str(e)})}\n\n"
return Response(stream_with_context(generate()), mimetype="text/event-stream")
@app.route("/api/clear", methods=["POST"])
def clear_history():
global chat_history
chat_history = []
return jsonify({"success": True})
@app.route("/api/status", methods=["GET"])
def status():
return jsonify({
"model_loaded": model is not None,
"history_length": len(chat_history),
})
if __name__ == "__main__":
load_model()
port = int(os.environ.get("PORT", 7860))
app.run(host="0.0.0.0", port=port, debug=False)