from flask import Flask, request, jsonify import hmac, hashlib, secrets, time, os from openai import OpenAI from datetime import datetime, timedelta import logging logging.basicConfig(level=logging.INFO) app = Flask(__name__) # 🔑 Secret key for API authentication (Load from environment in production) SECRET_KEY = os.getenv("SECRET_KEY") GITHUB_TOKEN = os.getenv("GITHUB_TOKEN") SPECIAL_API_KEY = os.getenv("SPECIAL_API_KEY") ENDPOINT = os.getenv("ENDPOINT") SYSTEM_PROMPT = os.getenv("SYSTEM_PROMPT") client = OpenAI(base_url=ENDPOINT,api_key=GITHUB_TOKEN) # Track API statistics api_usage = {} # Stores {api_key: {"count": X, "reset_time": timestamp}} # ✅ Request Limit Configuration REQUEST_LIMIT = 10 # Max requests per day # Track API statistics request_count = 0 start_time = time.time() # Validate API Key def validate_api_key(api_key): parts = api_key.split("-") if len(parts) != 3 or parts[0] != "TrueSyncAI": return False random_part, received_signature = parts[1], parts[2] expected_signature = hmac.new(SECRET_KEY.encode(), random_part.encode(), hashlib.sha256).hexdigest()[:16] return expected_signature == received_signature def generate_response(query:str) -> str: try: model_name = "gpt-4o" response = client.chat.completions.create( messages=[{"role": "system","content": SYSTEM_PROMPT},{"role": "user","content": query}],temperature=0.7,max_tokens=4096,top_p=0.9,model=model_name,stream=False) return response.choices[0].message.content except: return "API Server is under maintenance. Please Try After Some Time Thank You for using TrueSyncAI Chat API. Have a great day." @app.route('/') def home(): return """ TrueSyncAI

Welcome to TrueSyncAI

TrueSyncAI Logo """ @app.route('/status', methods=['GET']) def status(): global request_count uptime_seconds = int(time.time() - start_time) # Convert uptime to days, hours, minutes, and seconds days = uptime_seconds // 86400 hours = (uptime_seconds % 86400) // 3600 minutes = (uptime_seconds % 3600) // 60 seconds = uptime_seconds % 60 uptime_str = f"{days} days, {hours} hours, {minutes} minutes and {seconds} seconds" return jsonify({ "status": "API is running", "total_requests": request_count, "uptime": uptime_str }) @app.route("/usage", methods=["GET"]) def usage(): api_key = request.args.get("api_key") if not api_key or not validate_api_key(api_key): return jsonify({"error": "Invalid API Key"}), 401 # Get usage data or return default values now = datetime.utcnow() user_data = api_usage.get(api_key, {"count": 0, "reset_time": now + timedelta(days=1)}) remaining_requests = max(0, REQUEST_LIMIT - user_data["count"]) reset_time = user_data["reset_time"].strftime("%Y-%m-%d %H:%M:%S UTC") return jsonify({ "api_key": api_key, "requests_used": user_data["count"], "remaining_requests": remaining_requests, "reset_time": reset_time }) # Generate API Key @app.route("/generate_api_key", methods=["POST"]) def generate_api_key(): random_part = secrets.token_hex(16) signature = hmac.new(SECRET_KEY.encode(), random_part.encode(), hashlib.sha256).hexdigest()[:16] api_key = f"TrueSyncAI-{random_part}-{signature}" return jsonify({"api_key": api_key}) # Chat Endpoint @app.route("/v1/chat/completions", methods=["POST"]) def chat(): global request_count data = request.json api_key = data.get("api_key") message = data.get("message", "").strip() logging.info(f"Request received: {data}\n") if not api_key or not validate_api_key(api_key): return jsonify({"error": "Invalid API Key"}), 401 if not message: return jsonify({"error": "Message cannot be empty"}), 400 # ✅ Apply Limit to the Specific API Key if api_key == SPECIAL_API_KEY: now = datetime.utcnow() user_data = api_usage.get(api_key, {"count": 0, "reset_time": now + timedelta(days=1)}) # Reset count if the reset time has passed if now >= user_data["reset_time"]: user_data = {"count": 0, "reset_time": now + timedelta(days=1)} # Block requests if limit exceeded if user_data["count"] >= REQUEST_LIMIT: return jsonify({"error": "Request limit reached. This is a testing API key for developers. The limit resets daily. Please wait or use a different key."}), 429 # Increase request count user_data["count"] += 1 api_usage[api_key] = user_data # Update storage # Basic AI response (Can integrate LLMs here) response = generate_response(message) request_count += 1 return jsonify({"response": response}) if __name__ == "__main__": app.run(host="0.0.0.0", port=7860) # Hugging Face Spaces default port