| Current Path : /var/www/pythonian/qwen-moe/ |
| Current File : /var/www/pythonian/qwen-moe/backend.py |
from flask import Flask, request, jsonify, send_from_directory
from flask_cors import CORS
import os
import requests
from http import HTTPStatus
from dashscope import Application
from dotenv import load_dotenv
import dashscope
app = Flask(__name__, static_folder='static')
CORS(app)
load_dotenv()
# Optional: override base URL only if using private endpoint
DASHSCOPE_BASE_URL = os.getenv("DASHSCOPE_URL")
DASHSCOPE_API_KEY = os.getenv("API_KEY")
APP_ID = os.getenv("APP_ID")
dashscope.base_http_api_url = f"{DASHSCOPE_BASE_URL}/api/v1/"
print(DASHSCOPE_BASE_URL, DASHSCOPE_API_KEY, APP_ID)
# Validate required env vars
if not DASHSCOPE_API_KEY or not APP_ID:
raise EnvironmentError("Missing required environment variables: API_KEY and APP_ID")
@app.route('/')
def index():
return send_from_directory(app.static_folder, 'index.html')
@app.route('/create-memory', methods=['POST'])
def create_memory():
workspace_id = os.getenv("WORKSPACE_ID")
if not workspace_id:
return jsonify({"error": "Missing WORKSPACE_ID in .env"}), 500
url = f"https://dashscope.aliyuncs.com/api/v1/{workspace_id}/memories"
headers = {
"Authorization": f"Bearer {os.getenv('API_KEY')}",
"Content-Type": "application/json"
}
# Optional description
payload = {"description": request.json.get("description", "User memory")}
try:
response = requests.post(url, headers=headers, json=payload)
if response.status_code == 200:
data = response.json()
return jsonify({"memory_id": data["memoryId"]}), 200
else:
return jsonify({
"error": "CreateMemory failed",
"status_code": response.status_code,
"response": response.text
}), response.status_code
except Exception as e:
return jsonify({"error": str(e)}), 500
@app.route('/chat', methods=['POST'])
def chat():
data = request.get_json()
user_message = data.get('message')
memory_id = data.get('memory_id')
if not user_message:
return jsonify({"error": "Missing 'message' in request body"}), 400
try:
response = Application.call(
app_id=APP_ID,
prompt=user_message,
api_key=DASHSCOPE_API_KEY,
memory_id=memory_id # Can be None — SDK handles it
)
except Exception as e:
return jsonify({"error": f"SDK call failed: {str(e)}"}), 500
if response.status_code != HTTPStatus.OK:
print(response)
return jsonify({
'error': f'API request failed: {response.message}',
'request_id': response.request_id,
'status_code': response.status_code
}), 500
else:
print(response)
return jsonify({
'response': response.output.get('text', ''),
'request_id': response.request_id
})
if __name__ == '__main__':
app.run(debug=True, port=5000)