Spaces:
Building
Building
""" | |
Flare – Spark startup notifier | |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
App lifecyle içinde Spark servisine /startup çağrısı yapar. | |
""" | |
import threading | |
import time | |
from typing import Dict, Any | |
import requests | |
from utils import log | |
from config_provider import ConfigProvider, VersionConfig, ProjectConfig | |
cfg = ConfigProvider.get() | |
def _select_live_version(p: ProjectConfig) -> VersionConfig | None: | |
published = [v for v in p.versions if v.published] | |
if not published: | |
return None | |
return max(published, key=lambda v: v.id) | |
def notify_startup(): | |
spark_url = cfg.global_config.spark_endpoint | |
for p in cfg.projects: | |
if not p.enabled: | |
continue | |
v = _select_live_version(p) | |
if not v: | |
continue | |
body: Dict[str, Any] = { | |
"project_name": p.name, | |
"version_id": v.id, | |
"general_prompt": v.general_prompt, | |
"llm": v.llm.model_dump(), | |
} | |
try: | |
log(f"🚀 Notifying Spark /startup for project '{p.name}' …") | |
r = requests.post(f"{spark_url}/startup", json=body, timeout=10) | |
r.raise_for_status() | |
log(f"✅ Spark acknowledged startup ({r.status_code})") | |
except Exception as e: | |
log(f"⚠️ Spark startup failed: {e}") | |
def run_in_thread(): | |
t = threading.Thread(target=notify_startup, daemon=True) | |
t.start() | |