flare / spark_startup.py
ciyidogan's picture
Update spark_startup.py
a08db6a verified
raw
history blame
3.53 kB
"""
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, Optional
from utils import log
from config_provider import ConfigProvider, ProjectConfig, VersionConfig
import os
cfg = ConfigProvider.get()
def _get_spark_token() -> Optional[str]:
"""Get Spark token based on work_mode"""
if cfg.global_config.is_cloud_mode():
# Cloud mode - use HuggingFace Secrets
token = os.getenv("SPARK_TOKEN")
if not token:
log("❌ SPARK_TOKEN not found in HuggingFace Secrets!")
return token
else:
# On-premise mode - use .env file
from dotenv import load_dotenv
load_dotenv()
return os.getenv("SPARK_TOKEN")
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():
# Fresh config al
from config_provider import ConfigProvider
cfg = ConfigProvider.get()
# GPT mode kontrolü
if cfg.global_config.is_gpt_mode():
log("🤖 GPT mode detected, skipping Spark startup notification")
return
spark_base = str(cfg.global_config.spark_endpoint).rstrip("/")
spark_token = _get_spark_token()
if not spark_token:
log("⚠️ SPARK_TOKEN not configured. Skipping Spark startup notification.")
return
enabled_projects = [p for p in cfg.projects if p.enabled]
if not enabled_projects:
log("ℹ️ No enabled projects found for startup notification.")
return
for p in enabled_projects:
if not p.enabled:
continue
v = _select_live_version(p)
if not v:
log(f"⚠️ No published version found for project '{p.name}', skipping startup.")
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,
}
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():
# GPT mode'da thread başlatmaya gerek yok
if cfg.global_config.is_gpt_mode():
log("🤖 GPT mode - Spark startup thread not started")
return
threading.Thread(target=notify_startup, daemon=True).start()