File size: 2,363 Bytes
e3456a9
 
 
c152fec
e3456a9
 
c152fec
0831fe7
e3456a9
 
c152fec
88099db
e3456a9
 
 
 
 
0831fe7
e3456a9
c152fec
e3456a9
 
 
94f65ce
0831fe7
e3456a9
 
 
 
 
 
 
bde160e
 
 
e3456a9
0831fe7
 
bde160e
0831fe7
 
 
 
 
 
e3456a9
c152fec
df604d9
 
 
 
 
 
 
 
 
 
 
e3456a9
 
df604d9
0831fe7
 
 
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
"""
Flare – Spark startup notifier
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Projeler açılırken Spark’a /startup çağrısı yapar.
"""

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

cfg = ConfigProvider.get()


def _select_live_version(p: ProjectConfig) -> VersionConfig | None:
    """Yayınlanmış en güncel versiyonu getir."""
    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 = str(cfg.global_config.spark_endpoint).rstrip("/")

    for p in cfg.projects:
        if not p.enabled:
            continue
        v = _select_live_version(p)
        if not v:
            continue

        plain = cfg.global_config.get_plain_token()
        log(f"🔑 Cloud-token starts with {plain[:6]}… (len={len(plain)})")
        
        body: Dict[str, Any] = {
            # ----- zorunlu alanlar -----
            "work_mode": cfg.global_config.work_mode,
            "cloud_token": plain,
            "project_name": p.name,
            "project_version": v.id,
            "repo_id": v.llm.repo_id,
            "generation_config": v.llm.generation_config,
            "use_fine_tune": v.llm.use_fine_tune,
            "fine_tune_zip": v.llm.fine_tune_zip,
        }

        # Hugging Face token'ı ortam değişkeninden al
        spark_token = os.getenv("SPARK_TOKEN")
        if not spark_token:
            log("❌ SPARK_TOKEN environment variable is missing.")
            return
    
        headers = {
            "Authorization": f"Bearer {spark_token}",
            "Content-Type": "application/json"
        }
        
        try:
            log(f"🚀 Notifying Spark /startup for project '{p.name}' …")
            r = requests.post(f"{spark_base}/startup", json=body, headers=headers, timeout=10)
            if r.status_code >= 400:
                log(f"❌ Spark responded {r.status_code}: {r.text}")
                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()