Veda-Labs commited on
Commit
4061f96
·
verified ·
1 Parent(s): 395e872

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +117 -0
app.py ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import time
3
+ import requests
4
+ import threading
5
+ from flask import Flask, request, jsonify
6
+
7
+ app = Flask(__name__)
8
+
9
+ # आपका दिया गया Google Apps Script URL
10
+ GAS_URL = "https://script.google.com/macros/s/AKfycbwh2d9IZNpcLNbv8aJSSSI4RBTzuoZ5wi7TDHaBMX9BeOm7TjKxcjfaTEPLJi-q8AXyyQ/exec"
11
+
12
+ # बैकग्राउंड में GAS को अपडेट करने का फंक्शन (ताकि API रिस्पॉन्स फास्ट रहे)
13
+ def update_gas_usage(api_key, model, tokens_used):
14
+ def task():
15
+ try:
16
+ payload = {
17
+ "action": "log_usage",
18
+ "api_key": api_key,
19
+ "model": model,
20
+ "tokens_used": tokens_used,
21
+ "timestamp": int(time.time())
22
+ }
23
+ # GAS को डेटा भेजना (टोकन और रिक्वेस्ट अपडेट करने के लिए)
24
+ requests.post(GAS_URL, json=payload)
25
+ print(f"✅ GAS Updated: {tokens_used} tokens logged for {api_key}")
26
+ except Exception as e:
27
+ print(f"❌ Failed to update GAS: {e}")
28
+
29
+ threading.Thread(target=task).start()
30
+
31
+
32
+ @app.route('/', methods=['GET'])
33
+ def home():
34
+ return jsonify({"status": "Vedika AI API Gateway is Running!"}), 200
35
+
36
+
37
+ @app.route('/v1/models', methods=['GET'])
38
+ def get_models():
39
+ """GAS URL से मॉडल्स एक्सट्रैक्ट करके OpenAI फॉर्मेट में रिटर्न करना"""
40
+ try:
41
+ response = requests.get(GAS_URL)
42
+ data = response.json()
43
+
44
+ # मॉडल्स की लिस्ट निकालना (आपके GAS रिस्पॉन्स स्ट्रक्चर के अनुसार)
45
+ models_array = data if isinstance(data, list) else data.get("models", [])
46
+
47
+ openai_formatted_models = {
48
+ "object": "list",
49
+ "data": [
50
+ {
51
+ "id": model.get("id", model) if isinstance(model, dict) else model,
52
+ "object": "model",
53
+ "created": int(time.time()),
54
+ "owned_by": "Vedika AI",
55
+ "permission": [],
56
+ "root": model.get("id", model) if isinstance(model, dict) else model,
57
+ "parent": None
58
+ } for model in models_array
59
+ ]
60
+ }
61
+ return jsonify(openai_formatted_models), 200
62
+
63
+ except Exception as e:
64
+ return jsonify({"error": "Failed to fetch models from GAS"}), 500
65
+
66
+
67
+ @app.route('/v1/chat/completions', methods=['POST'])
68
+ def chat_completions():
69
+ """चैट रिक्वेस्ट हैंडल करना और टोकन अपडेट करना"""
70
+ # 1. API Key चेक करना
71
+ auth_header = request.headers.get("Authorization")
72
+ if not auth_header or not auth_header.startswith("Bearer "):
73
+ return jsonify({"error": {"message": "Unauthorized: Missing API Key", "type": "invalid_request_error"}}), 401
74
+
75
+ user_api_key = auth_header.split(" ")[1]
76
+ request_data = request.json
77
+ model_name = request_data.get("model", "Vedika-Flash")
78
+
79
+ # ---------------------------------------------------------
80
+ # 2. यहाँ आप अपने असली AI प्रोवाइडर (जैसे NVIDIA/OpenRouter)
81
+ # को रिक्वेस्ट भेजेंगे। अभी के लिए यह एक डमी रिस्पॉन्स है।
82
+ # ---------------------------------------------------------
83
+
84
+ # *उदाहरण:* provider_response = requests.post(NVIDIA_URL, headers=..., json=...)
85
+ # response_data = provider_response.json()
86
+
87
+ # डमी रिस्पॉन्स (इसे अपने असली प्रोवाइडर के रिस्पॉन्स से बदल दें)
88
+ response_data = {
89
+ "id": f"chatcmpl-{int(time.time())}",
90
+ "object": "chat.completion",
91
+ "created": int(time.time()),
92
+ "model": model_name,
93
+ "choices": [{
94
+ "index": 0,
95
+ "message": {"role": "assistant", "content": "यह Vedika AI की तरफ से जनरेटेड रिस्पॉन्स है।"},
96
+ "finish_reason": "stop"
97
+ }],
98
+ "usage": {
99
+ "prompt_tokens": 10,
100
+ "completion_tokens": 25,
101
+ "total_tokens": 35 # असली API से मिलने वाला टोकन काउंट
102
+ }
103
+ }
104
+
105
+ # 3. टोकन काउंट निकालना
106
+ tokens_used = response_data.get("usage", {}).get("total_tokens", 0)
107
+
108
+ # 4. GAS को अपडेट करने के लिए बैकग्राउंड टास्क ट्रिगर करना
109
+ update_gas_usage(user_api_key, model_name, tokens_used)
110
+
111
+ # 5. यूज़र को तुरंत रिस्पॉन्स भेजना
112
+ return jsonify(response_data), 200
113
+
114
+
115
+ if __name__ == '__main__':
116
+ # Hugging Face Spaces डिफ़ॉल्ट रूप से 7860 पोर्ट का उपयोग करता है
117
+ app.run(host='0.0.0.0', port=7860)