import os import json import requests from flask import Flask, request, Response, stream_with_context, render_template_string app = Flask(__name__) # ЁЯФР рд╣рдЧрд┐рдВрдЧ рдлреЗрд╕ 'Secrets' рд╕реЗ рдЖрдкрдХрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдбреЗрдЯрд╛ рдЙрдард╛рдирд╛ API_KEY = os.environ.get("YOUR_VEDIKA_API_KEY") BASE_URL = os.environ.get("BASE_URL") MODEL_ID = os.environ.get("MODEL_ID") # URL рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдирд╛ (рдЕрдЧрд░ BASE_URL рдореЗрдВ рдЕрдВрдд рдореЗрдВ /chat/completions рдирд╣реАрдВ рд╣реИ рддреЛ рдЙрд╕реЗ рдЬреЛрдбрд╝рдирд╛) if BASE_URL and not BASE_URL.endswith("/chat/completions"): INVOKE_URL = f"{BASE_URL.rstrip('/')}/chat/completions" else: INVOKE_URL = BASE_URL @app.route('/') def home(): try: with open('index.html', 'r', encoding='utf-8') as f: html_content = f.read() return render_template_string(html_content) except Exception as e: return f"index.html file missing! Error: {str(e)}" @app.route('/api/chat', methods=['POST']) def chat(): data = request.get_json() or {} user_message = data.get("message", "") attachments = data.get("attachments", []) # ЁЯОи рдорд▓реНрдЯреАрдореЛрдбрд▓ рдХрдВрдЯреЗрдВрдЯ рдПрд░реЗ рддреИрдпрд╛рд░ рдХрд░рдирд╛ content_payload = [] # 1. рдЯреЗрдХреНрд╕реНрдЯ рдЗрдирдкреБрдЯ рдХреЛ рдЬреЛрдбрд╝рдирд╛ if user_message.strip(): content_payload.append({"type": "text", "text": user_message}) # 2. рдЗрдореЗрдЬ рдпрд╛ рдСрдбрд┐рдпреЛ (Base64) рдХреЛ рдЬреЛрдбрд╝рдирд╛ for att in attachments: att_type = att.get("type") b64_data = att.get("data") if att_type == "image": content_payload.append({ "type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{b64_data}"} }) elif att_type == "audio": content_payload.append({ "type": "input_audio", "input_audio": {"data": b64_data, "format": "wav"} }) # рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ if not content_payload: content_payload.append({"type": "text", "text": "Hello"}) headers = { "Authorization": f"Bearer {API_KEY}", "Accept": "text/event-stream" } # рдбрд╛рдпрдирд╛рдорд┐рдХ рдореЙрдбрд▓ рдЖрдИрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ payload = { "model": MODEL_ID, "messages": [{"role": "user", "content": content_payload}], "max_tokens": 2048, "temperature": 0.20, "top_p": 0.70, "stream": True } # API рдкрд░ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рднреЗрдЬрдирд╛ response = requests.post(INVOKE_URL, headers=headers, json=payload, stream=True) def generate(): for line in response.iter_lines(): if line: decoded_line = line.decode("utf-8") if decoded_line.startswith("data: "): yield decoded_line + "\n\n" return Response(stream_with_context(generate()), mimetype='text/event-stream') if __name__ == '__main__': app.run(host='0.0.0.0', port=7860)