Spaces:
Building
Building
Create spark_startup.py
Browse files- spark_startup.py +51 -0
spark_startup.py
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""
|
2 |
+
Flare – Spark startup notifier
|
3 |
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
4 |
+
App lifecyle içinde Spark servisine /startup çağrısı yapar.
|
5 |
+
"""
|
6 |
+
|
7 |
+
import threading
|
8 |
+
import time
|
9 |
+
from typing import Dict, Any
|
10 |
+
|
11 |
+
import requests
|
12 |
+
from utils import log
|
13 |
+
from config_provider import ConfigProvider, VersionConfig, ProjectConfig
|
14 |
+
|
15 |
+
cfg = ConfigProvider.get()
|
16 |
+
|
17 |
+
|
18 |
+
def _select_live_version(p: ProjectConfig) -> VersionConfig | None:
|
19 |
+
published = [v for v in p.versions if v.published]
|
20 |
+
if not published:
|
21 |
+
return None
|
22 |
+
return max(published, key=lambda v: v.id)
|
23 |
+
|
24 |
+
|
25 |
+
def notify_startup():
|
26 |
+
spark_url = cfg.global_config.spark_endpoint
|
27 |
+
for p in cfg.projects:
|
28 |
+
if not p.enabled:
|
29 |
+
continue
|
30 |
+
v = _select_live_version(p)
|
31 |
+
if not v:
|
32 |
+
continue
|
33 |
+
|
34 |
+
body: Dict[str, Any] = {
|
35 |
+
"project_name": p.name,
|
36 |
+
"version_id": v.id,
|
37 |
+
"general_prompt": v.general_prompt,
|
38 |
+
"llm": v.llm.model_dump(),
|
39 |
+
}
|
40 |
+
try:
|
41 |
+
log(f"🚀 Notifying Spark /startup for project '{p.name}' …")
|
42 |
+
r = requests.post(f"{spark_url}/startup", json=body, timeout=10)
|
43 |
+
r.raise_for_status()
|
44 |
+
log(f"✅ Spark acknowledged startup ({r.status_code})")
|
45 |
+
except Exception as e:
|
46 |
+
log(f"⚠️ Spark startup failed: {e}")
|
47 |
+
|
48 |
+
|
49 |
+
def run_in_thread():
|
50 |
+
t = threading.Thread(target=notify_startup, daemon=True)
|
51 |
+
t.start()
|