Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- # api.py - Fixed API Calls berdasarkan CupidHelper
- import time
- import requests
- import random
- from datetime import datetime
- class APIManager:
- def __init__(self):
- self.apis = {
- "groq": {
- "name": "Groq",
- "key": "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",
- "url": "https://api.groq.com/openai/v1/chat/completions",
- "model": "llama-3.1-8b-instant", # 🆕 Model yang betul
- "active": True,
- "last_used": None
- },
- "deepseek": {
- "name": "DeepSeek",
- "key": "sk-018cc05d3a574de68947e669673fdf65",
- "url": "https://api.deepseek.com/chat/completions", # 🆕 URL yang betul
- "model": "deepseek-chat",
- "active": True,
- "last_used": None
- },
- "gemini": {
- "name": "Gemini",
- "key": "AIzaSyDVoBSniv6CtvNZDPxvPNRPfRXWvj3304M",
- "url": "https://generativelanguage.googleapis.com/v1/models/gemini-2.0-flash:generateContent", # 🆕 URL yang betul
- "active": True,
- "last_used": None
- }
- }
- self.request_history = []
- self.fallback_order = ["groq", "deepseek", "gemini"] # 🆕 Order berdasarkan CupidHelper
- def get_ai_response(self, prompt, bot_name="www", max_retries=2):
- """Get AI response dengan fallback - FIXED"""
- print(f"🤖 [{bot_name}] Requesting AI response...")
- for attempt in range(max_retries):
- for api_name in self.fallback_order:
- if self.apis[api_name]["active"]:
- try:
- response = self._call_api(api_name, prompt)
- if response and len(response.strip()) > 3:
- return response
- except Exception as e:
- print(f"❌ {api_name} failed: {e}")
- self.apis[api_name]["active"] = False
- if attempt < max_retries - 1:
- print(f"🔄 Attempt {attempt + 1} failed, retrying...")
- time.sleep(1)
- return "Maaf, semua API sedang sibuk. Cuba sebentar lagi."
- def _call_api(self, api_name, prompt):
- """Call specific API - FIXED berdasarkan CupidHelper"""
- api_config = self.apis[api_name]
- try:
- if api_name == "groq":
- return self._call_groq(prompt, api_config)
- elif api_name == "deepseek":
- return self._call_deepseek(prompt, api_config)
- elif api_name == "gemini":
- return self._call_gemini(prompt, api_config)
- except Exception as e:
- print(f"❌ {api_name} error: {e}")
- raise
- def _call_groq(self, prompt, config):
- """Call Groq API - FIXED"""
- headers = {
- "Authorization": f"Bearer {config['key']}",
- "Content-Type": "application/json"
- }
- data = {
- "model": config["model"], # 🆕 Gunakan model yang betul
- "messages": [
- {
- "role": "user",
- "content": prompt
- }
- ],
- "temperature": 0.7,
- "max_tokens": 150
- }
- response = requests.post(config["url"], headers=headers, json=data, timeout=10)
- if response.status_code != 200:
- raise Exception(f"HTTP {response.status_code}: {response.text}")
- result = response.json()
- content = result["choices"][0]["message"]["content"].strip()
- config["last_used"] = time.time()
- self._log_request("groq", True, len(content))
- return self._trim_response(content)
- def _call_deepseek(self, prompt, config):
- """Call DeepSeek API - FIXED"""
- headers = {
- "Authorization": f"Bearer {config['key']}",
- "Content-Type": "application/json"
- }
- data = {
- "model": config["model"],
- "messages": [
- {
- "role": "user",
- "content": prompt
- }
- ],
- "temperature": 0.7,
- "max_tokens": 150
- }
- response = requests.post(config["url"], headers=headers, json=data, timeout=10)
- if response.status_code != 200:
- raise Exception(f"HTTP {response.status_code}: {response.text}")
- result = response.json()
- content = result["choices"][0]["message"]["content"].strip()
- config["last_used"] = time.time()
- self._log_request("deepseek", True, len(content))
- return self._trim_response(content)
- def _call_gemini(self, prompt, config):
- """Call Gemini API - FIXED"""
- url = f"{config['url']}?key={config['key']}"
- data = {
- "contents": [
- {
- "parts": [
- {"text": prompt}
- ]
- }
- ],
- "generationConfig": {
- "maxOutputTokens": 150,
- "temperature": 0.7
- }
- }
- response = requests.post(url, json=data, timeout=10)
- if response.status_code != 200:
- raise Exception(f"HTTP {response.status_code}: {response.text}")
- result = response.json()
- content = result["candidates"][0]["content"]["parts"][0]["text"].strip()
- config["last_used"] = time.time()
- self._log_request("gemini", True, len(content))
- return self._trim_response(content)
- def _trim_response(self, text, max_length=200):
- """Trim response to max length"""
- if len(text) > max_length:
- text = text[:max_length-3] + "..."
- return text
- def _log_request(self, api_name, success, response_length):
- """Log API requests"""
- log_entry = {
- "timestamp": datetime.now(),
- "api": api_name,
- "success": success,
- "response_length": response_length
- }
- self.request_history.append(log_entry)
- if len(self.request_history) > 50:
- self.request_history.pop(0)
- def get_api_status(self):
- """Get status of all APIs"""
- status = {}
- for api_name, config in self.apis.items():
- status[api_name] = {
- "active": config["active"],
- "last_used": config["last_used"],
- "requests_count": len([r for r in self.request_history if r["api"] == api_name])
- }
- return status
- # Global instance
- api_manager = APIManager()
Advertisement
Add Comment
Please, Sign In to add comment