File size: 3,382 Bytes
ab9cd81
6fe7868
21dd7fa
4d30faf
 
ab9cd81
6fe7868
8b04581
4d30faf
6fe7868
4d30faf
6fe7868
4d30faf
8b04581
4d30faf
 
21dd7fa
4d30faf
6fe7868
4d30faf
6fe7868
8b04581
4d30faf
6fe7868
4d30faf
 
 
 
 
 
21dd7fa
4d30faf
 
 
 
6fe7868
 
 
4d30faf
 
6fe7868
4d30faf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ab9cd81
4d30faf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ab9cd81
4d30faf
 
 
 
 
ab9cd81
21dd7fa
ab9cd81
6fe7868
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import uuid
import time
import logging
from flask import Flask, request, jsonify
import requests

# === Конфигурация ===
AI_MODEL = "NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO"
HF_API_URL = "https://nymbo-serverless-textgen-hub.hf.space/run/bot"

# === Логгер ===
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

# === Инициализация Flask ===
app = Flask(__name__)

# === Корневой маршрут для проверки работоспособности ===
@app.route("/", methods=["GET"])
def index():
    return "Proxy free test", 200

# === Основной OpenAI-совместимый endpoint ===
@app.route("/v1/chat/completions", methods=["POST"])
def chat_completion():
    # Логируем входной запрос
    logger.info(f"📥 Запрос от клиента: {request.remote_addr}")
    logger.info(f"Headers:\n{dict(request.headers)}")
    logger.info(f"Body:\n{request.get_data(as_text=True)}")

    try:
        payload = request.get_json()
        messages = payload.get("messages", [])

        # Извлекаем последнее сообщение пользователя
        user_msg = next((m["content"] for m in reversed(messages) if m["role"] == "user"), None)
        system_msg = next((m["content"] for m in messages if m["role"] == "system"), "You are a helpful AI assistant.")

        if not user_msg:
            return jsonify({"error": "Missing user message"}), 400

        # Подготавливаем запрос к Hugging Face Space
        hf_payload = {
            "data": [
                [[user_msg, None]],     # history
                system_msg,             # system_msg
                512,                    # max_tokens
                0.7,                    # temperature
                0.95,                   # top_p
                0,                      # freq_penalty
                -1,                     # seed
                AI_MODEL,               # custom_model
                "",                     # search_term
                AI_MODEL                # selected_model
            ]
        }

        # Выполняем запрос
        hf_response = requests.post(HF_API_URL, json=hf_payload, timeout=60)
        hf_response.raise_for_status()
        result = hf_response.json()

        output_text = result["data"][0] if "data" in result else "❌ Unexpected response format"

        return jsonify({
            "id": f"chatcmpl-{uuid.uuid4().hex[:12]}",
            "object": "chat.completion",
            "created": int(time.time()),
            "model": AI_MODEL,
            "choices": [
                {
                    "index": 0,
                    "message": {
                        "role": "assistant",
                        "content": output_text
                    },
                    "finish_reason": "stop"
                }
            ],
            "usage": {
                "prompt_tokens": 0,
                "completion_tokens": 0,
                "total_tokens": 0
            }
        })

    except Exception as e:
        logger.exception("❌ Ошибка обработки запроса:")
        return jsonify({"error": str(e)}), 500

# === Запуск сервера ===
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=7860, debug=True)