Thang6822 commited on
Commit
febae40
Β·
1 Parent(s): d57df59

fix: patch timesfm proxies kwarg for huggingface_hub compat

Browse files
Files changed (2) hide show
  1. run.bat +54 -29
  2. scripts/patch_timesfm.py +56 -0
run.bat CHANGED
@@ -5,13 +5,15 @@ chcp 65001 >nul 2>&1
5
 
6
  echo.
7
  echo ╔══════════════════════════════════════════════════════╗
8
- echo β•‘ KRONOS AI TRADING TERMINAL β€” STARTUP β•‘
9
  echo β•‘ Powered by Google TimesFM 2.5 (200M params) β•‘
10
  echo β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
11
  echo.
12
 
13
- :: ── [1/4] Check virtual environment ─────────────────────────────────────────
14
- echo [1/4] Checking virtual environment...
 
 
15
  if not exist "venv\Scripts\python.exe" (
16
  echo [ERROR] Virtual environment not found.
17
  echo Run: python -m venv venv
@@ -20,54 +22,77 @@ if not exist "venv\Scripts\python.exe" (
20
  exit /b 1
21
  )
22
 
23
- :: ── [2/4] Activate venv ──────────────────────────────────────────────────────
24
- echo [2/4] Activating virtual environment...
25
- call venv\Scripts\activate
26
 
27
- :: ── [3/4] Ensure TimesFM is installed ───────────────────────────────────────
28
- echo [3/4] Checking TimesFM dependency...
29
- venv\Scripts\python.exe -c "import timesfm; timesfm.TimesFM_2p5_200M_torch" >nul 2>&1
 
 
 
 
 
30
  if %ERRORLEVEL% neq 0 (
31
- echo [INFO] TimesFM not found. Installing from local clone...
32
- if exist "libs\timesfm\pyproject.toml" (
 
 
 
 
 
 
 
 
 
 
 
33
  echo [INFO] Installing from libs\timesfm ...
34
- venv\Scripts\python.exe -m pip install -e "libs\timesfm[torch]" --quiet
35
- if %ERRORLEVEL% neq 0 (
36
- echo [ERROR] TimesFM install failed from libs\timesfm.
37
- pause
38
- exit /b 1
39
- )
40
  ) else (
41
  echo [INFO] Cloning TimesFM from GitHub...
42
- git clone --depth=1 https://github.com/google-research/timesfm.git libs\timesfm
43
  if %ERRORLEVEL% neq 0 (
44
  echo [ERROR] git clone failed. Check your internet connection.
45
  pause
46
  exit /b 1
47
  )
48
- echo [INFO] Installing TimesFM...
49
- venv\Scripts\python.exe -m pip install -e "libs\timesfm[torch]" --quiet
50
- if %ERRORLEVEL% neq 0 (
51
- echo [ERROR] TimesFM install failed.
52
- pause
53
- exit /b 1
54
- )
55
  )
56
  echo [OK] TimesFM installed successfully.
57
  ) else (
58
  echo [OK] TimesFM is ready.
59
  )
60
 
61
- :: ── [4/4] Launch server ──────────────────────────────────────────────────────
62
- echo [4/4] Launching Kronos AI Trading Terminal...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  echo.
64
  echo [INFO] Server will start at http://127.0.0.1:8000
65
  echo [INFO] Browser will open automatically in ~3 seconds.
66
- echo [INFO] TimesFM model downloads on FIRST forecast request (~800MB).
67
  echo [INFO] Press CTRL+C to stop the server.
68
  echo.
69
 
70
- python -m backend.launcher
71
 
72
  if %ERRORLEVEL% neq 0 (
73
  echo.
 
5
 
6
  echo.
7
  echo ╔══════════════════════════════════════════════════════╗
8
+ echo β•‘ KRONOS AI TRADING TERMINAL - STARTUP β•‘
9
  echo β•‘ Powered by Google TimesFM 2.5 (200M params) β•‘
10
  echo β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
11
  echo.
12
 
13
+ :: ─────────────────────────────────────────────────────────
14
+ :: [1/5] Check virtual environment
15
+ :: ─────────────────────────────────────────────────────────
16
+ echo [1/5] Checking virtual environment...
17
  if not exist "venv\Scripts\python.exe" (
18
  echo [ERROR] Virtual environment not found.
19
  echo Run: python -m venv venv
 
22
  exit /b 1
23
  )
24
 
25
+ :: Use EXPLICIT venv python path to avoid Python 3.13 global conflict
26
+ set VENV_PY="%~dp0venv\Scripts\python.exe"
 
27
 
28
+ :: ─────────────────────────────────────────────────────────
29
+ :: [2/5] Activate venv
30
+ :: ─────────────────────────────────────────────────────────
31
+ echo [2/5] Activating virtual environment...
32
+ call "%~dp0venv\Scripts\activate"
33
+
34
+ :: Verify correct Python is active
35
+ %VENV_PY% --version >nul 2>&1
36
  if %ERRORLEVEL% neq 0 (
37
+ echo [ERROR] Cannot run venv python.
38
+ pause
39
+ exit /b 1
40
+ )
41
+
42
+ :: ─────────────────────────────────────────────────────────
43
+ :: [3/5] Ensure TimesFM is installed in venv
44
+ :: ─────────────────────────────────────────────────────────
45
+ echo [3/5] Checking TimesFM dependency...
46
+ %VENV_PY% -c "import timesfm; timesfm.TimesFM_2p5_200M_torch" >nul 2>&1
47
+ if %ERRORLEVEL% neq 0 (
48
+ echo [INFO] TimesFM not found in venv. Installing...
49
+ if exist "%~dp0libs\timesfm\pyproject.toml" (
50
  echo [INFO] Installing from libs\timesfm ...
51
+ %VENV_PY% -m pip install -e "%~dp0libs\timesfm[torch]" --quiet
 
 
 
 
 
52
  ) else (
53
  echo [INFO] Cloning TimesFM from GitHub...
54
+ git clone --depth=1 https://github.com/google-research/timesfm.git "%~dp0libs\timesfm"
55
  if %ERRORLEVEL% neq 0 (
56
  echo [ERROR] git clone failed. Check your internet connection.
57
  pause
58
  exit /b 1
59
  )
60
+ %VENV_PY% -m pip install -e "%~dp0libs\timesfm[torch]" --quiet
61
+ )
62
+ if %ERRORLEVEL% neq 0 (
63
+ echo [ERROR] TimesFM install failed.
64
+ pause
65
+ exit /b 1
 
66
  )
67
  echo [OK] TimesFM installed successfully.
68
  ) else (
69
  echo [OK] TimesFM is ready.
70
  )
71
 
72
+ :: ─────────────────────────────────────────────────────────
73
+ :: [4/5] Patch huggingface_hub compatibility (proxies kwarg fix)
74
+ :: Applies to ANY timesfm install found in venv's site-packages
75
+ :: ─────────────────────────────────────────────────────────
76
+ echo [4/5] Applying huggingface_hub compatibility patch...
77
+ %VENV_PY% "%~dp0scripts\patch_timesfm.py" >nul 2>&1
78
+ if %ERRORLEVEL% equ 0 (
79
+ echo [OK] Patch applied.
80
+ ) else (
81
+ echo [WARN] Patch script not found or already applied - continuing.
82
+ )
83
+
84
+ :: ─────────────────────────────────────────────────────────
85
+ :: [5/5] Launch server using EXPLICIT venv python
86
+ :: ─────────────────────────────────────────────────────────
87
+ echo [5/5] Launching Kronos AI Trading Terminal...
88
  echo.
89
  echo [INFO] Server will start at http://127.0.0.1:8000
90
  echo [INFO] Browser will open automatically in ~3 seconds.
91
+ echo [INFO] TimesFM model loads from HuggingFace cache (~800MB first run).
92
  echo [INFO] Press CTRL+C to stop the server.
93
  echo.
94
 
95
+ %VENV_PY% -m backend.launcher
96
 
97
  if %ERRORLEVEL% neq 0 (
98
  echo.
scripts/patch_timesfm.py ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Auto-patch timesfm _from_pretrained to strip unknown kwargs (proxies, etc.)
3
+ that huggingface_hub >=0.30 passes but TimesFM.__init__ doesn't accept.
4
+
5
+ This script is safe to run multiple times (idempotent).
6
+ """
7
+ import importlib.util
8
+ import sys
9
+ from pathlib import Path
10
+
11
+ MARKER = "# huggingface_hub >=0.30 passes extra kwargs"
12
+ PATCH = '''\
13
+ # huggingface_hub >=0.30 passes extra kwargs (proxies, headers, etc.)
14
+ # that TimesFM.__init__ doesn't accept β€” strip them out.
15
+ _KNOWN_INIT_KWARGS = {"torch_compile", "config"}
16
+ model_kwargs = {k: v for k, v in model_kwargs.items() if k in _KNOWN_INIT_KWARGS}
17
+
18
+ '''
19
+ TARGET_LINE = " # Create an instance of the model wrapper class.\n"
20
+
21
+
22
+ def find_timesfm_torch_file() -> list[Path]:
23
+ """Find all timesfm_2p5_torch.py files accessible to the current Python."""
24
+ candidates = []
25
+ for sp in sys.path:
26
+ p = Path(sp) / "timesfm" / "timesfm_2p5" / "timesfm_2p5_torch.py"
27
+ if p.exists():
28
+ candidates.append(p)
29
+ return candidates
30
+
31
+
32
+ def patch_file(path: Path) -> str:
33
+ text = path.read_text(encoding="utf-8")
34
+
35
+ if MARKER in text:
36
+ return f"already patched: {path}"
37
+
38
+ if TARGET_LINE not in text:
39
+ return f"target line not found (different version?): {path}"
40
+
41
+ patched = text.replace(TARGET_LINE, PATCH + TARGET_LINE)
42
+ path.write_text(patched, encoding="utf-8")
43
+ return f"patched OK: {path}"
44
+
45
+
46
+ if __name__ == "__main__":
47
+ files = find_timesfm_torch_file()
48
+ if not files:
49
+ print("[patch_timesfm] No timesfm installation found in sys.path.")
50
+ sys.exit(1)
51
+
52
+ for f in files:
53
+ result = patch_file(f)
54
+ print(f"[patch_timesfm] {result}")
55
+
56
+ sys.exit(0)