Your IP : 216.73.216.79


Current Path : /var/www/pythonian/qwen-moe/
Upload File :
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)