ciyidogan commited on
Commit
0da1272
·
verified ·
1 Parent(s): 05f1c1c

Update spark_startup.py

Browse files
Files changed (1) hide show
  1. spark_startup.py +60 -57
spark_startup.py CHANGED
@@ -1,29 +1,15 @@
1
  """
2
- Flare – Spark startup notifier
3
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
- Projeler açılırken Spark'a /startup çağrısı yapar.
5
  """
6
 
7
  from __future__ import annotations
8
- import threading, requests
9
- from typing import Dict, Any, Optional
10
  from utils import log
11
  from config_provider import ConfigProvider, ProjectConfig, VersionConfig
12
- import os
13
-
14
- def _get_spark_token() -> Optional[str]:
15
- """Get Spark token based on work_mode"""
16
- if cfg.global_config.is_cloud_mode():
17
- # Cloud mode - use HuggingFace Secrets
18
- token = os.getenv("SPARK_TOKEN")
19
- if not token:
20
- log("❌ SPARK_TOKEN not found in HuggingFace Secrets!")
21
- return token
22
- else:
23
- # On-premise mode - use .env file
24
- from dotenv import load_dotenv
25
- load_dotenv()
26
- return os.getenv("SPARK_TOKEN")
27
 
28
  def _select_live_version(p: ProjectConfig) -> VersionConfig | None:
29
  """Yayınlanmış en güncel versiyonu getir."""
@@ -31,44 +17,67 @@ def _select_live_version(p: ProjectConfig) -> VersionConfig | None:
31
  return max(published, key=lambda v: v.id) if published else None
32
 
33
  def notify_startup():
34
- # Fresh config al
35
- from config_provider import ConfigProvider
36
  cfg = ConfigProvider.get()
37
-
38
- # GPT mode kontrolü
39
- if cfg.global_config.is_gpt_mode():
40
- log("🤖 GPT mode detected, skipping Spark startup notification")
 
41
  return
42
-
43
- spark_base = str(cfg.global_config.spark_endpoint).rstrip("/")
44
- spark_token = _get_spark_token()
45
 
46
- if not spark_token:
47
- log("⚠️ SPARK_TOKEN not configured. Skipping Spark startup notification.")
 
48
  return
49
-
50
- enabled_projects = [p for p in cfg.projects if p.enabled]
51
 
52
- if not enabled_projects:
53
- log("ℹ️ No enabled projects found for startup notification.")
 
54
  return
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
 
56
- for p in enabled_projects:
57
  if not p.enabled:
58
  continue
59
-
60
  v = _select_live_version(p)
61
  if not v:
62
- log(f"⚠️ No published version found for project '{p.name}', skipping startup.")
63
  continue
64
-
65
- plain = cfg.global_config.get_plain_token()
66
- log(f"🔑 Cloud-token starts with {plain[:6]}… (len={len(plain)})")
67
 
 
 
 
 
 
68
  body: Dict[str, Any] = {
69
- # ----- zorunlu alanlar -----
70
- "work_mode": cfg.global_config.work_mode,
71
- "cloud_token": plain,
72
  "project_name": p.name,
73
  "project_version": v.id,
74
  "repo_id": v.llm.repo_id,
@@ -78,26 +87,20 @@ def notify_startup():
78
  }
79
 
80
  headers = {
81
- "Authorization": f"Bearer {spark_token}",
82
  "Content-Type": "application/json"
83
  }
84
-
85
  try:
86
- log(f"🚀 Notifying Spark /startup for project '{p.name}' …")
87
  r = requests.post(f"{spark_base}/startup", json=body, headers=headers, timeout=10)
88
  if r.status_code >= 400:
89
- log(f"❌ Spark responded {r.status_code}: {r.text}")
90
  r.raise_for_status()
91
- log(f"✅ Spark acknowledged startup ({r.status_code})")
92
  except Exception as e:
93
- log(f"⚠️ Spark startup failed: {e}")
94
 
95
  def run_in_thread():
96
- cfg = ConfigProvider.get()
97
-
98
- # GPT mode'da thread başlatmaya gerek yok
99
- if cfg.global_config.is_gpt_mode():
100
- log("🤖 GPT mode - Spark startup thread not started")
101
- return
102
-
103
- threading.Thread(target=notify_startup, daemon=True).start()
 
1
  """
2
+ Flare – LLM startup notifier
3
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
+ Projeler açılırken LLM provider'a startup çağrısı yapar.
5
  """
6
 
7
  from __future__ import annotations
8
+ import threading, requests, os
9
+ from typing import Dict, Any
10
  from utils import log
11
  from config_provider import ConfigProvider, ProjectConfig, VersionConfig
12
+ from llm_factory import LLMFactory
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
 
14
  def _select_live_version(p: ProjectConfig) -> VersionConfig | None:
15
  """Yayınlanmış en güncel versiyonu getir."""
 
17
  return max(published, key=lambda v: v.id) if published else None
18
 
19
  def notify_startup():
20
+ """Notify LLM provider about project startups"""
 
21
  cfg = ConfigProvider.get()
22
+
23
+ # Check if current provider needs startup notification
24
+ llm_config = cfg.global_config.llm_provider
25
+ if not llm_config:
26
+ log("⚠️ No LLM provider configured")
27
  return
 
 
 
28
 
29
+ provider_def = cfg.global_config.get_provider_config("llm", llm_config.name)
30
+ if not provider_def:
31
+ log(f"⚠️ Unknown LLM provider: {llm_config.name}")
32
  return
 
 
33
 
34
+ # Currently only Spark variants need startup
35
+ if llm_config.name not in ("spark", "spark_cloud", "spark_onpremise"):
36
+ log(f"ℹ️ {llm_config.name} doesn't require startup notification")
37
  return
38
+
39
+ # Check if provider requires repo info
40
+ if not provider_def.requires_repo_info:
41
+ log(f"ℹ️ {llm_config.name} doesn't require repo info for startup")
42
+ return
43
+
44
+ # Get endpoint and API key
45
+ endpoint = llm_config.endpoint
46
+ if not endpoint:
47
+ log("⚠️ No LLM endpoint configured for startup")
48
+ return
49
+
50
+ api_key = cfg.global_config.get_plain_api_key("llm")
51
+ if not api_key:
52
+ # Try environment
53
+ env_var = "SPARK_TOKEN"
54
+ if os.environ.get("SPACE_ID"):
55
+ api_key = os.environ.get(env_var)
56
+ else:
57
+ from dotenv import load_dotenv
58
+ load_dotenv()
59
+ api_key = os.getenv(env_var)
60
+
61
+ if not api_key:
62
+ log("⚠️ No API key available for startup")
63
+ return
64
+
65
+ spark_base = str(endpoint).rstrip("/")
66
 
67
+ for p in cfg.projects:
68
  if not p.enabled:
69
  continue
 
70
  v = _select_live_version(p)
71
  if not v:
 
72
  continue
 
 
 
73
 
74
+ # Check if version has LLM config (required for Spark)
75
+ if not v.llm:
76
+ log(f"⚠️ No LLM config in version {v.id} for project '{p.name}'")
77
+ continue
78
+
79
  body: Dict[str, Any] = {
80
+ # Required fields for Spark startup
 
 
81
  "project_name": p.name,
82
  "project_version": v.id,
83
  "repo_id": v.llm.repo_id,
 
87
  }
88
 
89
  headers = {
90
+ "Authorization": f"Bearer {api_key}",
91
  "Content-Type": "application/json"
92
  }
93
+
94
  try:
95
+ log(f"🚀 Notifying {llm_config.name} /startup for project '{p.name}' …")
96
  r = requests.post(f"{spark_base}/startup", json=body, headers=headers, timeout=10)
97
  if r.status_code >= 400:
98
+ log(f"❌ LLM provider responded {r.status_code}: {r.text}")
99
  r.raise_for_status()
100
+ log(f"✅ LLM provider acknowledged startup ({r.status_code})")
101
  except Exception as e:
102
+ log(f"⚠️ LLM startup failed: {e}")
103
 
104
  def run_in_thread():
105
+ """Run startup notification in background thread"""
106
+ threading.Thread(target=notify_startup, daemon=True).start()