Upload app.py with huggingface_hub
Browse files
app.py
CHANGED
|
@@ -20,27 +20,52 @@ HUB_PATH = os.environ.get(
|
|
| 20 |
"training-runs/sft-chat-v1-context-mix-8b-20260803-080404",
|
| 21 |
)
|
| 22 |
SCRIPT_REPO = os.environ.get("SCRIPT_REPO", "ProjectScugnizz/scugnizz-llama-training")
|
|
|
|
|
|
|
|
|
|
| 23 |
SYSTEM = os.environ.get(
|
| 24 |
"SYSTEM_PROMPT",
|
| 25 |
"You are a helpful assistant. Answer clearly and correctly.",
|
| 26 |
)
|
| 27 |
|
| 28 |
-
|
| 29 |
-
|
| 30 |
_state = {"model": None, "tok": None, "dev": None, "error": None}
|
| 31 |
|
| 32 |
|
| 33 |
-
def
|
|
|
|
|
|
|
| 34 |
snapshot_download(
|
| 35 |
SCRIPT_REPO,
|
| 36 |
-
local_dir=str(
|
| 37 |
allow_patterns=["scugnizz-llama.py", "sft_data.py"],
|
| 38 |
)
|
| 39 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 40 |
spec = importlib.util.spec_from_file_location("scugnizz_train", path)
|
| 41 |
mod = importlib.util.module_from_spec(spec)
|
| 42 |
-
|
| 43 |
-
sys.path.insert(0, str(_CODE))
|
| 44 |
sys.modules["scugnizz_train"] = mod
|
| 45 |
spec.loader.exec_module(mod)
|
| 46 |
return mod
|
|
@@ -101,13 +126,7 @@ def load_model():
|
|
| 101 |
raise RuntimeError(_state["error"])
|
| 102 |
try:
|
| 103 |
mod = _load_train_module()
|
| 104 |
-
|
| 105 |
-
snapshot_download(
|
| 106 |
-
HUB_REPO,
|
| 107 |
-
local_dir=str(_MODEL),
|
| 108 |
-
allow_patterns=[f"{path}/*", f"{path}/tokenizer/*"],
|
| 109 |
-
)
|
| 110 |
-
model_dir = _MODEL / path
|
| 111 |
run_args = json.loads((model_dir / "args.json").read_text(encoding="utf-8"))
|
| 112 |
dev = "cuda" if torch.cuda.is_available() else "cpu"
|
| 113 |
tok = AutoTokenizer.from_pretrained(str(model_dir / "tokenizer"))
|
|
|
|
| 20 |
"training-runs/sft-chat-v1-context-mix-8b-20260803-080404",
|
| 21 |
)
|
| 22 |
SCRIPT_REPO = os.environ.get("SCRIPT_REPO", "ProjectScugnizz/scugnizz-llama-training")
|
| 23 |
+
# Space volumes: checkpoint subfolder → /models, trainer → /code
|
| 24 |
+
MODEL_MOUNT = Path(os.environ.get("MODEL_MOUNT", "/models"))
|
| 25 |
+
CODE_MOUNT = Path(os.environ.get("CODE_MOUNT", "/code"))
|
| 26 |
SYSTEM = os.environ.get(
|
| 27 |
"SYSTEM_PROMPT",
|
| 28 |
"You are a helpful assistant. Answer clearly and correctly.",
|
| 29 |
)
|
| 30 |
|
| 31 |
+
_CODE_FALLBACK = Path("/tmp/scugnizz-code")
|
| 32 |
+
_MODEL_FALLBACK = Path("/tmp/scugnizz-model")
|
| 33 |
_state = {"model": None, "tok": None, "dev": None, "error": None}
|
| 34 |
|
| 35 |
|
| 36 |
+
def _resolve_code_dir() -> Path:
|
| 37 |
+
if (CODE_MOUNT / "scugnizz-llama.py").is_file():
|
| 38 |
+
return CODE_MOUNT
|
| 39 |
snapshot_download(
|
| 40 |
SCRIPT_REPO,
|
| 41 |
+
local_dir=str(_CODE_FALLBACK),
|
| 42 |
allow_patterns=["scugnizz-llama.py", "sft_data.py"],
|
| 43 |
)
|
| 44 |
+
return _CODE_FALLBACK
|
| 45 |
+
|
| 46 |
+
|
| 47 |
+
def _resolve_model_dir() -> Path:
|
| 48 |
+
# Volume mounts either the checkpoint root (/models/model_final.pt) or full repo
|
| 49 |
+
if (MODEL_MOUNT / "model_final.pt").is_file():
|
| 50 |
+
return MODEL_MOUNT
|
| 51 |
+
nested = MODEL_MOUNT / HUB_PATH.strip("/")
|
| 52 |
+
if (nested / "model_final.pt").is_file():
|
| 53 |
+
return nested
|
| 54 |
+
path = HUB_PATH.strip("/")
|
| 55 |
+
snapshot_download(
|
| 56 |
+
HUB_REPO,
|
| 57 |
+
local_dir=str(_MODEL_FALLBACK),
|
| 58 |
+
allow_patterns=[f"{path}/*", f"{path}/tokenizer/*"],
|
| 59 |
+
)
|
| 60 |
+
return _MODEL_FALLBACK / path
|
| 61 |
+
|
| 62 |
+
|
| 63 |
+
def _load_train_module():
|
| 64 |
+
code = _resolve_code_dir()
|
| 65 |
+
path = code / "scugnizz-llama.py"
|
| 66 |
spec = importlib.util.spec_from_file_location("scugnizz_train", path)
|
| 67 |
mod = importlib.util.module_from_spec(spec)
|
| 68 |
+
sys.path.insert(0, str(code))
|
|
|
|
| 69 |
sys.modules["scugnizz_train"] = mod
|
| 70 |
spec.loader.exec_module(mod)
|
| 71 |
return mod
|
|
|
|
| 126 |
raise RuntimeError(_state["error"])
|
| 127 |
try:
|
| 128 |
mod = _load_train_module()
|
| 129 |
+
model_dir = _resolve_model_dir()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 130 |
run_args = json.loads((model_dir / "args.json").read_text(encoding="utf-8"))
|
| 131 |
dev = "cuda" if torch.cuda.is_available() else "cpu"
|
| 132 |
tok = AutoTokenizer.from_pretrained(str(model_dir / "tokenizer"))
|