Spaces:
Running on Zero
Running on Zero
| from __future__ import annotations | |
| import asyncio.base_events as base_events | |
| import os | |
| from pathlib import Path | |
| from typing import Any | |
| def patch_asyncio_cleanup_warning() -> None: | |
| """Keeps local Gradio teardown from surfacing a known invalid-fd warning.""" | |
| # Skip patching when this Python runtime does not expose the cleanup hook. | |
| original_del = getattr(base_events.BaseEventLoop, "__del__", None) | |
| if original_del is None or getattr(original_del, "_pocket_tutor_patched", False): | |
| return | |
| # Preserve normal cleanup while ignoring the harmless file descriptor case. | |
| def patched_del(self: Any) -> None: | |
| try: | |
| original_del(self) | |
| except ValueError as exc: | |
| if str(exc) != "Invalid file descriptor: -1": | |
| raise | |
| # Mark the patch so repeated imports stay idempotent. | |
| setattr(patched_del, "_pocket_tutor_patched", True) | |
| setattr(base_events.BaseEventLoop, "__del__", patched_del) | |
| def load_env() -> None: | |
| """Loads simple KEY=value pairs from a local .env file when present.""" | |
| # Search the project folder before the parent hackathon workspace. | |
| for path in [Path(".env"), Path("../.env")]: | |
| if path.is_file(): | |
| try: | |
| with open(path, encoding="utf-8") as f: | |
| for line in f: | |
| line = line.strip() | |
| if line and not line.startswith("#") and "=" in line: | |
| key, value = line.split("=", 1) | |
| os.environ.setdefault( | |
| key.strip(), value.strip().strip("'\"") | |
| ) | |
| break | |
| except Exception: | |
| pass | |
| # Load local secrets before model or Modal clients are used. | |
| load_env() | |