File size: 1,421 Bytes
e3456a9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
50
51
52
"""
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()