Spaces:
Runtime error
Runtime error
| from __future__ import annotations | |
| import os | |
| from dataclasses import dataclass | |
| from pathlib import Path | |
| from .hf_env_files import resolve_json_or_path | |
| class Settings: | |
| # Repo paths | |
| repo_root: Path | |
| backend_dir: Path | |
| worker_dir: Path | |
| # Gmail | |
| credentials_path: Path | |
| token_path: Path | |
| label_incoming: str | |
| label_known: str | |
| label_unknown: str | |
| label_train: str | |
| # Notification | |
| notify_to_email: str | |
| notify_from_email: str | |
| # Trainer | |
| trainer_base_url: str | |
| # OpenAI | |
| openai_api_key: str | |
| openai_model: str | |
| # Worker behavior | |
| poll_seconds: int | |
| max_messages_per_poll: int | |
| render_pages: int | |
| render_dpi: int | |
| def load_settings(repo_root: Path) -> Settings: | |
| backend_dir = repo_root / "backend" | |
| worker_dir = backend_dir / "worker" | |
| # IMPORTANT: use the SAME env var you actually store in backend/.env | |
| # Your file shows OPENAI_API_KEY_TEST=... | |
| openai_api_key = os.environ.get("OPENAI_API_KEY_TEST", "").strip() | |
| if not openai_api_key: | |
| raise RuntimeError("Missing OPENAI_API_KEY_TEST env var in backend/.env") | |
| notify_to = os.environ.get("PDF_PIPELINE_NOTIFY_TO", "").strip() | |
| if not notify_to: | |
| raise RuntimeError("Missing PDF_PIPELINE_NOTIFY_TO env var") | |
| notify_from = os.environ.get("PDF_PIPELINE_NOTIFY_FROM", "").strip() | |
| if not notify_from: | |
| raise RuntimeError("Missing PDF_PIPELINE_NOTIFY_FROM env var") | |
| trainer_base_url = os.environ.get("PDF_TRAINER_BASE_URL", "http://localhost:5173").strip() | |
| if not trainer_base_url: | |
| raise RuntimeError("Missing PDF_TRAINER_BASE_URL env var") | |
| return Settings( | |
| repo_root=repo_root, | |
| backend_dir=backend_dir, | |
| worker_dir=worker_dir, | |
| credentials_path=resolve_json_or_path("GMAIL_CREDENTIALS_JSON", backend_dir / "credentials.json", Path("/tmp/credentials.json")), | |
| token_path=resolve_json_or_path("GMAIL_TOKEN_JSON", backend_dir / "token.json", Path("/tmp/token.json")), | |
| label_incoming=os.environ.get("PDF_PIPELINE_LABEL_INCOMING", "PDF_PIPELINE/INCOMING"), | |
| label_known=os.environ.get("PDF_PIPELINE_LABEL_KNOWN", "PDF_PIPELINE/KNOWN"), | |
| label_unknown=os.environ.get("PDF_PIPELINE_LABEL_UNKNOWN", "PDF_PIPELINE/UNKNOWN"), | |
| label_train=os.environ.get("PDF_PIPELINE_LABEL_TRAIN", "PDF_PIPELINE/TRAIN"), | |
| notify_to_email=notify_to, | |
| notify_from_email=notify_from, | |
| trainer_base_url=trainer_base_url, | |
| openai_api_key=openai_api_key, | |
| openai_model=os.environ.get("OPENAI_MODEL", "gpt-4.1-mini"), | |
| poll_seconds=int(os.environ.get("PDF_PIPELINE_POLL_SECONDS", "20")), | |
| max_messages_per_poll=int(os.environ.get("PDF_PIPELINE_MAX_PER_POLL", "5")), | |
| render_pages=int(os.environ.get("PDF_PIPELINE_RENDER_PAGES", "2")), | |
| render_dpi=int(os.environ.get("PDF_PIPELINE_RENDER_DPI", "200")), | |
| ) |