unity4ar commited on
Commit
50a467b
·
verified ·
1 Parent(s): a475083

Gate setup/llama subprocess paths behind provider check; allow zerogpu_transformers

Browse files
Files changed (1) hide show
  1. app.py +37 -1
app.py CHANGED
@@ -798,7 +798,7 @@ def api_update_settings(payload: dict[str, Any]) -> dict[str, Any]:
798
  updates["PHANTOM_GRID_LLAMACPP_GPU_LAYERS"] = gpu_layers
799
 
800
  provider = updates.get("PHANTOM_GRID_LLM_PROVIDER", load_settings().llm_provider)
801
- if provider not in {"minicpm_omni", "llama_cpp_server", "external_llama_cpp_server"}:
802
  raise HTTPException(status_code=400, detail="Choose a supported AI backend.")
803
  if provider == "llama_cpp_server":
804
  model_path = Path(updates.get("PHANTOM_GRID_LLAMACPP_MODEL_PATH") or str(load_settings().llamacpp_model_path or "")).expanduser()
@@ -858,6 +858,17 @@ def api_llama_action(action: str, payload: dict[str, Any]) -> dict[str, Any]:
858
  api_update_settings(payload)
859
  settings = load_settings()
860
  normalized = action.strip().lower()
 
 
 
 
 
 
 
 
 
 
 
861
  if settings.llm_provider == "external_llama_cpp_server" and normalized in {"start", "restart", "stop"}:
862
  llama_status, omni_status = _service_statuses(settings)
863
  return {
@@ -929,6 +940,24 @@ def api_omni_models() -> dict[str, Any]:
929
 
930
  def api_setup_status() -> dict[str, Any]:
931
  global _SETUP_PROCESS
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
932
  paths = _local_runtime_paths()
933
  scan = scan_minicpm_models(paths["models"])
934
  files_ready = (
@@ -983,6 +1012,10 @@ def api_setup_status() -> dict[str, Any]:
983
 
984
  def api_setup_start(payload: dict[str, Any] | None = None) -> dict[str, Any]:
985
  global _SETUP_PROCESS
 
 
 
 
986
  # Persist any picker choices before kicking off setup so the provisioner
987
  # and the launcher both see the chosen model/GPU/context.
988
  if payload:
@@ -1504,6 +1537,9 @@ def _llama_status(settings, health: dict[str, Any] | None = None) -> dict[str, A
1504
 
1505
  def _start_llama_process(settings) -> dict[str, Any]:
1506
  global _LLAMA_PROCESS
 
 
 
1507
  if _LLAMA_PROCESS is not None and _LLAMA_PROCESS.poll() is None:
1508
  return {"ok": True, "event": f"The selected AI backend is already managed as PID {_LLAMA_PROCESS.pid}."}
1509
  if settings.llm_provider == "external_llama_cpp_server":
 
798
  updates["PHANTOM_GRID_LLAMACPP_GPU_LAYERS"] = gpu_layers
799
 
800
  provider = updates.get("PHANTOM_GRID_LLM_PROVIDER", load_settings().llm_provider)
801
+ if provider not in {"minicpm_omni", "llama_cpp_server", "external_llama_cpp_server", "zerogpu_transformers"}:
802
  raise HTTPException(status_code=400, detail="Choose a supported AI backend.")
803
  if provider == "llama_cpp_server":
804
  model_path = Path(updates.get("PHANTOM_GRID_LLAMACPP_MODEL_PATH") or str(load_settings().llamacpp_model_path or "")).expanduser()
 
858
  api_update_settings(payload)
859
  settings = load_settings()
860
  normalized = action.strip().lower()
861
+ # ZeroGPU: no subprocess to start/stop/restart. Report status; ignore lifecycle verbs.
862
+ if settings.llm_provider == "zerogpu_transformers":
863
+ llama_status, omni_status = _service_statuses(settings)
864
+ event = "ZeroGPU backend runs in-process." if normalized in {"start", "restart", "stop"} else None
865
+ return {
866
+ "ok": True,
867
+ "event": event,
868
+ "llama": llama_status,
869
+ "omni": omni_status,
870
+ "settings": _settings_payload(settings),
871
+ }
872
  if settings.llm_provider == "external_llama_cpp_server" and normalized in {"start", "restart", "stop"}:
873
  llama_status, omni_status = _service_statuses(settings)
874
  return {
 
940
 
941
  def api_setup_status() -> dict[str, Any]:
942
  global _SETUP_PROCESS
943
+ # ZeroGPU provider: the model is loaded in-process by llm/zerogpu_backend.py
944
+ # at import. There is no local runtime to install, no subprocess to manage,
945
+ # and no cmake/llama-server dependency. Report ready so the UI's auto-poll
946
+ # doesn't fire /api/setup/start (which would spawn the cmake provisioner).
947
+ if load_settings().llm_provider == "zerogpu_transformers":
948
+ health = OmniClient(load_settings()).health()
949
+ ready = bool(health.get("ready"))
950
+ return {
951
+ "ok": True,
952
+ "state": "ready" if ready else "installing",
953
+ "stage": "ready" if ready else "service",
954
+ "message": "ZeroGPU model is ready." if ready else "ZeroGPU model is loading...",
955
+ "progress": 100 if ready else 80,
956
+ "files_ready": True,
957
+ "service_ready": ready,
958
+ "installing": False,
959
+ "updated_at": None,
960
+ }
961
  paths = _local_runtime_paths()
962
  scan = scan_minicpm_models(paths["models"])
963
  files_ready = (
 
1012
 
1013
  def api_setup_start(payload: dict[str, Any] | None = None) -> dict[str, Any]:
1014
  global _SETUP_PROCESS
1015
+ # ZeroGPU provider: nothing to install or launch — the in-process backend
1016
+ # was loaded at import. The setup-start request is a no-op.
1017
+ if load_settings().llm_provider == "zerogpu_transformers":
1018
+ return {**api_setup_status(), "event": "ZeroGPU runtime is in-process; no setup needed.", "ok": True}
1019
  # Persist any picker choices before kicking off setup so the provisioner
1020
  # and the launcher both see the chosen model/GPU/context.
1021
  if payload:
 
1537
 
1538
  def _start_llama_process(settings) -> dict[str, Any]:
1539
  global _LLAMA_PROCESS
1540
+ # The ZeroGPU backend is in-process — there is no subprocess to spawn.
1541
+ if settings.llm_provider == "zerogpu_transformers":
1542
+ return {"ok": True, "event": "ZeroGPU backend runs in-process; no llama subprocess is needed."}
1543
  if _LLAMA_PROCESS is not None and _LLAMA_PROCESS.poll() is None:
1544
  return {"ok": True, "event": f"The selected AI backend is already managed as PID {_LLAMA_PROCESS.pid}."}
1545
  if settings.llm_provider == "external_llama_cpp_server":