Spaces:
Sleeping
Sleeping
Download database.py from bakulkrupuk2025/openclaw-neo-bot: direct link, hf CLI and curl.
- Browser
- Download file 2.63 kB
-
https://huggingface.co/spaces/bakulkrupuk2025/openclaw-neo-bot/resolve/main/database.py
- Command line
-
hf download hf://spaces/bakulkrupuk2025/openclaw-neo-bot/database.py
-
curl -L -o database.py https://huggingface.co/spaces/bakulkrupuk2025/openclaw-neo-bot/resolve/main/database.py
2.63 kB
| import os | |
| import httpx | |
| import asyncio | |
| SUPABASE_URL = os.environ.get("SUPABASE_URL", "") | |
| SUPABASE_KEY = os.environ.get("SUPABASE_KEY", "") | |
| HEADERS = { | |
| "apikey": SUPABASE_KEY, | |
| "Authorization": f"Bearer {SUPABASE_KEY}", | |
| "Content-Type": "application/json", | |
| "Prefer": "return=minimal" | |
| } | |
| async def insert(table: str, data: dict): | |
| """Insert data ke Supabase""" | |
| if not SUPABASE_URL or not SUPABASE_KEY: | |
| return False | |
| try: | |
| async with httpx.AsyncClient(timeout=10) as client: | |
| response = await client.post( | |
| f"{SUPABASE_URL}/rest/v1/{table}", | |
| headers=HEADERS, | |
| json=data | |
| ) | |
| return response.status_code in [200, 201] | |
| except Exception: | |
| return False | |
| async def fetch(table: str, limit: int = 50) -> list: | |
| """Fetch data dari Supabase""" | |
| if not SUPABASE_URL or not SUPABASE_KEY: | |
| return [] | |
| try: | |
| async with httpx.AsyncClient(timeout=10) as client: | |
| response = await client.get( | |
| f"{SUPABASE_URL}/rest/v1/{table}", | |
| headers={**HEADERS, "Prefer": "return=representation"}, | |
| params={"order": "created_at.desc", "limit": limit} | |
| ) | |
| if response.status_code == 200: | |
| return response.json() | |
| except Exception: | |
| pass | |
| return [] | |
| async def log_activity(action: str, details: str = ""): | |
| """Simpan activity log ke Supabase""" | |
| await insert("activity_log", {"action": action, "details": details}) | |
| async def log_chat(role: str, message: str, provider: str = ""): | |
| """Simpan chat history ke Supabase""" | |
| await insert("chat_history", {"role": role, "message": message, "provider": provider}) | |
| async def log_module_output(module_name: str, topic: str, output: str, provider: str = ""): | |
| """Simpan output modul ke Supabase""" | |
| await insert("module_output", { | |
| "module_name": module_name, | |
| "topic": topic, | |
| "output": output, | |
| "provider": provider | |
| }) | |
| async def keepalive_ping(): | |
| """Ping untuk keepalive log""" | |
| await insert("keepalive_log", {"status": "alive"}) | |
| async def start_keepalive(space_url: str = ""): | |
| """Auto ping setiap 5 menit biar Space tidak sleep""" | |
| while True: | |
| try: | |
| # Ping Supabase | |
| await keepalive_ping() | |
| # Ping HF Space sendiri | |
| if space_url: | |
| async with httpx.AsyncClient(timeout=10) as client: | |
| await client.get(space_url) | |
| except Exception: | |
| pass | |
| await asyncio.sleep(300) # setiap 5 menit |