AndyLiu66 FranckAbgrall HF Staff commited on
Commit
8e8d9cc
·
0 Parent(s):

Co-authored-by: FranckAbgrall <FranckAbgrall@users.noreply.huggingface.co>

Files changed (6) hide show
  1. .gitattributes +35 -0
  2. Dockerfile +20 -0
  3. README.md +19 -0
  4. requirements.txt +11 -0
  5. src/.streamlit/config.toml +6 -0
  6. src/app.py +78 -0
.gitattributes ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
Dockerfile ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.10.0-slim
2
+
3
+ WORKDIR /app
4
+
5
+ RUN apt-get update && apt-get install -y \
6
+ build-essential \
7
+ curl \
8
+ git \
9
+ && rm -rf /var/lib/apt/lists/*
10
+
11
+ COPY requirements.txt ./
12
+ COPY src/ ./src/
13
+
14
+ RUN pip3 install -r requirements.txt
15
+
16
+ EXPOSE 8501
17
+
18
+ HEALTHCHECK CMD curl --fail http://localhost:8501/_stcore/health
19
+
20
+ ENTRYPOINT ["streamlit", "run", "src/app.py", "--server.port=8501", "--server.address=0.0.0.0"]
README.md ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: AIO Platform
3
+ emoji: ⚡
4
+ colorFrom: red
5
+ colorTo: red
6
+ sdk: docker
7
+ app_port: 8501
8
+ tags:
9
+ - streamlit
10
+ pinned: false
11
+ short_description: Streamlit template space
12
+ ---
13
+
14
+ # Welcome to Streamlit!
15
+
16
+ Edit `/src/streamlit_app.py` to customize this app to your heart's desire. :heart:
17
+
18
+ If you have any questions, checkout our [documentation](https://docs.streamlit.io) and [community
19
+ forums](https://discuss.streamlit.io).
requirements.txt ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ numpy==2.2.6
2
+ numba==0.61.2
3
+ streamlit==1.58.0
4
+ pandas==2.2.3
5
+ requests==2.32.3
6
+ huggingface_hub==0.33.2
7
+ cryptography==43.0.1
8
+ yfinance==0.2.52
9
+ scipy==1.15.3
10
+ pandas_market_calendars==5.4.0
11
+ openpyxl==3.1.5
src/.streamlit/config.toml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ # 設定 App 預設外觀為深色主題。使用者首次進入時會直接顯示深色模式;
2
+ # 若使用者自己在右上角選單(⋮ → Settings → Theme)切換成淺色,
3
+ # 該選擇只存在瀏覽器當次 session,不會覆寫這個預設值。
4
+
5
+ [theme]
6
+ base = "dark"
src/app.py ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import runpy
3
+ import shutil
4
+ import sys
5
+ import traceback
6
+ from pathlib import Path
7
+ from typing import Optional
8
+
9
+ CODE_FILES = ["app.py", "engine.py", "engine_hedge.py", "mtm.py"]
10
+ CODE_DIR = Path("_code")
11
+ CODE_PREFIX = "code"
12
+
13
+
14
+ def _secret_or_env(key: str, default=None):
15
+ try:
16
+ import streamlit as st
17
+ try:
18
+ val = st.secrets.get(key)
19
+ except Exception:
20
+ val = None
21
+ except Exception:
22
+ val = None
23
+ if val is None:
24
+ val = os.environ.get(key)
25
+ return val if val is not None else default
26
+
27
+
28
+ def _place(src: Path, dst: Path) -> None:
29
+ tmp = dst.with_suffix(dst.suffix + ".tmp")
30
+ shutil.copyfile(src, tmp)
31
+ os.replace(tmp, dst)
32
+
33
+
34
+ def _ensure_code() -> Optional[str]:
35
+ """把程式檔備妥於 _code/。成功回傳 None,失敗回傳錯誤訊息。"""
36
+ CODE_DIR.mkdir(exist_ok=True)
37
+ if all((CODE_DIR / f).exists() for f in CODE_FILES):
38
+ return None
39
+
40
+ local_src = os.environ.get("CODE_LOCAL_DIR")
41
+ if local_src:
42
+ for f in CODE_FILES:
43
+ _place(Path(local_src) / f, CODE_DIR / f)
44
+ return None
45
+
46
+ repo = _secret_or_env("HF_DATASET_REPO")
47
+ token = _secret_or_env("HF_TOKEN")
48
+ branch = _secret_or_env("HF_BRANCH", "main")
49
+ if not (repo and token):
50
+ return "尚未設定 HF_DATASET_REPO / HF_TOKEN(Streamlit Secrets 或環境變數)。"
51
+ try:
52
+ from huggingface_hub import hf_hub_download
53
+ for f in CODE_FILES:
54
+ cached = hf_hub_download(
55
+ repo_id=repo,
56
+ filename=f"{CODE_PREFIX}/{f}",
57
+ repo_type="dataset",
58
+ revision=branch,
59
+ token=token,
60
+ )
61
+ _place(Path(cached), CODE_DIR / f)
62
+ return None
63
+ except Exception:
64
+ traceback.print_exc()
65
+ return "程式碼載入失敗,請確認私有 dataset 的 code/ 資料夾與 Secrets 設定後重試。"
66
+
67
+
68
+ _err = _ensure_code()
69
+ if _err is not None:
70
+ import streamlit as st
71
+ st.error(_err)
72
+ st.stop()
73
+
74
+ _code_path = str(CODE_DIR.resolve())
75
+ if _code_path not in sys.path:
76
+ sys.path.insert(0, _code_path)
77
+
78
+ runpy.run_path(str(CODE_DIR / "app.py"), run_name="__main__")