import os import time import requests import threading from flask import Flask, request, jsonify app = Flask(__name__) # आपका दिया गया Google Apps Script URL GAS_URL = "https://script.google.com/macros/s/AKfycbwh2d9IZNpcLNbv8aJSSSI4RBTzuoZ5wi7TDHaBMX9BeOm7TjKxcjfaTEPLJi-q8AXyyQ/exec" # बैकग्राउंड में GAS को अपडेट करने का फंक्शन (ताकि API रिस्पॉन्स फास्ट रहे) def update_gas_usage(api_key, model, tokens_used): def task(): try: payload = { "action": "log_usage", "api_key": api_key, "model": model, "tokens_used": tokens_used, "timestamp": int(time.time()) } # GAS को डेटा भेजना (टोकन और रिक्वेस्ट अपडेट करने के लिए) requests.post(GAS_URL, json=payload) print(f"✅ GAS Updated: {tokens_used} tokens logged for {api_key}") except Exception as e: print(f"❌ Failed to update GAS: {e}") threading.Thread(target=task).start() @app.route('/', methods=['GET']) def home(): return jsonify({"status": "Vedika AI API Gateway is Running!"}), 200 @app.route('/v1/models', methods=['GET']) def get_models(): """GAS URL से मॉडल्स एक्सट्रैक्ट करके OpenAI फॉर्मेट में रिटर्न करना""" try: response = requests.get(GAS_URL) data = response.json() # मॉडल्स की लिस्ट निकालना (आपके GAS रिस्पॉन्स स्ट्रक्चर के अनुसार) models_array = data if isinstance(data, list) else data.get("models", []) openai_formatted_models = { "object": "list", "data": [ { "id": model.get("id", model) if isinstance(model, dict) else model, "object": "model", "created": int(time.time()), "owned_by": "Vedika AI", "permission": [], "root": model.get("id", model) if isinstance(model, dict) else model, "parent": None } for model in models_array ] } return jsonify(openai_formatted_models), 200 except Exception as e: return jsonify({"error": "Failed to fetch models from GAS"}), 500 @app.route('/v1/chat/completions', methods=['POST']) def chat_completions(): """चैट रिक्वेस्ट हैंडल करना और टोकन अपडेट करना""" # 1. API Key चेक करना auth_header = request.headers.get("Authorization") if not auth_header or not auth_header.startswith("Bearer "): return jsonify({"error": {"message": "Unauthorized: Missing API Key", "type": "invalid_request_error"}}), 401 user_api_key = auth_header.split(" ")[1] request_data = request.json model_name = request_data.get("model", "Vedika-Flash") # --------------------------------------------------------- # 2. यहाँ आप अपने असली AI प्रोवाइडर (जैसे NVIDIA/OpenRouter) # को रिक्वेस्ट भेजेंगे। अभी के लिए यह एक डमी रिस्पॉन्स है। # --------------------------------------------------------- # *उदाहरण:* provider_response = requests.post(NVIDIA_URL, headers=..., json=...) # response_data = provider_response.json() # डमी रिस्पॉन्स (इसे अपने असली प्रोवाइडर के रिस्पॉन्स से बदल दें) response_data = { "id": f"chatcmpl-{int(time.time())}", "object": "chat.completion", "created": int(time.time()), "model": model_name, "choices": [{ "index": 0, "message": {"role": "assistant", "content": "यह Vedika AI की तरफ से जनरेटेड रिस्पॉन्स है।"}, "finish_reason": "stop" }], "usage": { "prompt_tokens": 10, "completion_tokens": 25, "total_tokens": 35 # असली API से मिलने वाला टोकन काउंट } } # 3. टोकन काउंट निकालना tokens_used = response_data.get("usage", {}).get("total_tokens", 0) # 4. GAS को अपडेट करने के लिए बैकग्राउंड टास्क ट्रिगर करना update_gas_usage(user_api_key, model_name, tokens_used) # 5. यूज़र को तुरंत रिस्पॉन्स भेजना return jsonify(response_data), 200 if __name__ == '__main__': # Hugging Face Spaces डिफ़ॉल्ट रूप से 7860 पोर्ट का उपयोग करता है app.run(host='0.0.0.0', port=7860)