File size: 1,512 Bytes
e3456a9
 
 
c152fec
e3456a9
 
c152fec
 
e3456a9
 
c152fec
e3456a9
 
 
 
 
 
c152fec
e3456a9
 
 
c152fec
e3456a9
 
 
 
 
 
 
 
 
 
 
c152fec
e3456a9
 
c152fec
e3456a9
 
c152fec
e3456a9
 
 
 
 
 
 
c152fec
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
"""
Flare – Spark startup notifier
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Projeler açılırken Spark’a /startup çağrısı yapar.
"""

from __future__ import annotations
import threading, time, requests
from typing import Dict, Any
from utils import log
from config_provider import ConfigProvider, ProjectConfig, VersionConfig

cfg = ConfigProvider.get()


def _select_live_version(p: ProjectConfig) -> VersionConfig | None:
    published = [v for v in p.versions if v.published]
    return max(published, key=lambda v: v.id) if published else None


def notify_startup():
    spark_base = cfg.global_config.spark_endpoint.rstrip("/")  # ← 🟢 tek “/”
    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,
            "cloud_token": cfg.global_config.get_plain_token(),
            "llm": v.llm.model_dump(),
        }

        try:
            log(f"🚀 Notifying Spark /startup for project '{p.name}' …")
            r = requests.post(f"{spark_base}/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():
    threading.Thread(target=notify_startup, daemon=True).start()