File size: 4,732 Bytes
fc115d5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# Deploy Log β€” HF Dev Space (Chen4700/drl-trading-bot-dev)

**Date:** 2026-03-19
**Goal:** Switch HF Space from Docker (full trading stack) to Streamlit SDK (client-only UI)

---

## What Was Done

### 1. README.md frontmatter updated
Changed from Docker SDK to Streamlit SDK:
```yaml
# Before
sdk: docker
app_port: 7860

# After
sdk: streamlit
sdk_version: 1.42.0
app_file: src/ui/app.py
```

### 2. Created requirements-hf.txt
New lightweight requirements file for HF UI-only deployment:
- `streamlit>=1.42.0`
- `streamlit-lightweight-charts>=0.1.0`
- `pandas`, `numpy`, `requests`, `plotly`
- `python-dotenv`, `pymongo`, `dnspython`, `certifi`

**Why pymongo is needed:** `src/data/storage.py` has a bare `import pymongo` at the top level (not guarded). The app falls back to `JsonFileStorage` if `STORAGE_TYPE` is not set to `mongo`, but the import must succeed.

### 3. Created `hf-deploy` branch
- `main` stays untouched (full requirements for local dev)
- `hf-deploy` branch replaces `requirements.txt` with lightweight HF version
- Force-pushed `hf-deploy β†’ main` on `huggingface` remote

### 4. Build Result
- Build completed in ~21 seconds (pip install phase)
- All 11 lightweight deps installed cleanly
- No errors in build log

### 5. Runtime Result
- Stage: **RUNNING**
- SDK: **streamlit** (confirmed via HF API)
- Streamlit startup confirmed: "You can now view your Streamlit app in your browser."

---

## API Tunnel Status

**Tunnel URL:** `https://advertise-refined-doom-bicycle.trycloudflare.com`
**Test:** `curl -s .../api/ping`
**Result:** `{"ok":true,"timestamp":"2026-03-19T13:21:45.580803"}` βœ“

The HF Space needs `API_SERVER_URL` set to this tunnel URL as a HF Space variable.
**Check:** Go to the dev space Settings β†’ Variables and verify `API_SERVER_URL = https://advertise-refined-doom-bicycle.trycloudflare.com`

---

## Known Issues / Notes

1. **Cloudflare Tunnel is ephemeral** β€” The tunnel URL changes every time `cloudflared tunnel` is restarted. When that happens, update `API_SERVER_URL` in the HF Space variables.

2. **storage.py import** β€” `import pymongo` is at module level in `src/data/storage.py`. Must be in requirements. If the space should truly be API-only with no local storage, this import can be guarded later.

3. **LFS files** β€” The HF space still contains model `.zip`/`.pkl` files (883 MB via Git LFS). These aren't needed for a client-only space. To save space, consider adding them to `.gitattributes` as not-LFS on the deploy branch, or using `.hfignore`.

4. **Production space** β€” NOT touched. Only `Chen4700/drl-trading-bot-dev` was modified.

---

## Git State

- Branch `hf-deploy` pushed to `huggingface` remote as `main` (force push)
- `origin` (GitHub) `main` branch unchanged
- Commit: `3857657` β€” "Deploy: Switch HF Space to Streamlit SDK (client-only)"

---

# Session 2 β€” 2026-03-19

**Goal:** Fix testnet `/api/testnet/status` hang + push to HF dev space

## Fixes Applied

### 1. BinanceConnector timeout (`src/api/binance.py`)
- Added `'timeout': 10000` (10s) to ccxt config β€” prevents indefinite hangs on slow/blocked proxy
- Added `'fetchMarkets': False` and `'loadMarketsAlways': False` β€” disables ccxt's lazy market-loading which could block on testnet's limited exchange info

### 2. Load dotenv in API server (`src/ui/api_server.py`)
- Added `load_dotenv()` at module startup β€” ensures `.env` vars (incl. `BINANCE_TESTNET_PROXY_URL`) are available for local dev

### 3. Testnet symbol whitelist (`src/ui/api_server.py`)
- Binance spot testnet only supports ~10 pairs (BTC, ETH, BNB, LTC, TRX, XRP, SOL, ADA, DOGE vs USDT)
- When iterating wallet balances, skip ticker fetch for currencies not in this whitelist
- Fixes "binance Invalid symbol" errors that accumulated and made the endpoint appear to hang

## Build Result
- Build logs: CACHED (all deps unchanged, only app files copied) β€” completed in ~7s
- Streamlit confirmed running: "You can now view your Streamlit app in your browser."
- Commit: `75e6612`

## Verification Results
- **HF Space stage:** PAUSED β€” flagged as abusive by HF moderation (not a code issue)
  - Space must be manually unpaused at huggingface.co/spaces/Chen4700/drl-trading-bot-dev
- **Cloudflare tunnel:** DOWN (error 1033) β€” `cloudflared` is not running locally
  - Restart tunnel: `cloudflared tunnel --url http://localhost:5001`
  - Update `API_SERVER_URL` HF Space variable after restart
- **Integration tests:** **22/22 PASSED** (71s) β€” all endpoints, testnet structure, app.py API migration verified

## Git State
- Branch `hf-deploy` (commit `75e6612`) force-pushed to `huggingface` remote as `main`
- `origin` (GitHub) `main` branch unchanged β€” fixes remain on `hf-deploy` only