File size: 4,424 Bytes
7509dd0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b5338ac
7509dd0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b5338ac
 
7509dd0
 
 
 
 
 
 
 
 
b5338ac
7509dd0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b5338ac
7509dd0
 
 
 
 
 
b5338ac
 
7509dd0
 
 
 
 
b5338ac
 
 
 
 
7509dd0
b5338ac
 
 
7509dd0
 
 
 
b5338ac
7509dd0
 
 
 
 
 
 
 
 
 
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#!/bin/bash
set -e

echo "[boot] Pulling OpenClaw state..."
python3 -c "
import sys, os; sys.path.insert(0, '/app')
HF_TOKEN = os.environ.get('HF_TOKEN', '')
DATASET_REPO = os.environ.get('OPENCLAW_DATASET_REPO', '')
if HF_TOKEN and DATASET_REPO:
    from huggingface_hub import hf_hub_download
    from huggingface_hub.utils import EntryNotFoundError
    for fname in ['openclaw.json', 'SOUL.md']:
        try:
            hf_hub_download(repo_id=DATASET_REPO, filename=f'openclaw/{fname}',
                          repo_type='dataset', token=HF_TOKEN,
                          local_dir='/root', local_dir_use_symlinks=False)
            print(f'  pulled openclaw/{fname}')
        except EntryNotFoundError: pass
        except Exception as e: print(f'  {e}')
"

echo "[boot] Configuring OpenClaw..."
mkdir -p ~/.openclaw
cat > ~/.openclaw/openclaw.json << JSONEOF
{
  "gateway": {"port": 8080, "bind": "0.0.0.0"},
  "identity": {"name": "YT Pipeline Assistant"},
  "channels": {
    "telegram": {
      "enabled": true,
      "botToken": "${TELEGRAM_BOT_TOKEN}",
      "dmPolicy": "pairing"
    }
  },
  "models": {
    "providers": {
      "ollama": {
        "baseUrl": "http://127.0.0.1:11434/v1",
        "apiKey": "ollama-local",
        "api": "openai-chat",
        "models": [
          {
            "id": "deepcoder-14b",
            "name": "DeepCoder 14B IQ2_XS (CoT + 128K)",
            "contextWindow": 131072,
            "maxTokens": 8192
          }
        ]
      }
    }
  },
  "agents": {
    "defaults": {
      "model": {"primary": "ollama/deepcoder-14b"},
      "workspace": "/app/yt-flow"
    }
  }
}
JSONEOF

[ -f /app/SOUL.md ] && cp /app/SOUL.md ~/.openclaw/SOUL.md

git config --global user.name "YT Pipeline Bot"
git config --global user.email "yt-pipe-bot@hf.space"
git clone https://arshitmalik:${HF_TOKEN}@huggingface.co/spaces/arshitmalik/yt-flow /app/yt-flow 2>/dev/null || true

cat > /tmp/backup.sh << 'CRONEOF'
#!/bin/bash
python3 -c "
import os, sys; sys.path.insert(0, '/app')
HF_TOKEN = os.environ.get('HF_TOKEN', '')
DATASET_REPO = os.environ.get('OPENCLAW_DATASET_REPO', '')
if not HF_TOKEN or not DATASET_REPO: sys.exit(0)
from huggingface_hub import HfApi
api = HfApi(token=HF_TOKEN)
from pathlib import Path
for f in Path('/root/.openclaw').glob('*'):
    if f.is_file():
        try:
            api.upload_file(
                path_or_fileobj=str(f),
                path_in_repo=f'openclaw/{f.name}',
                repo_id=DATASET_REPO,
                repo_type='dataset'
            )
        except Exception as e: pass
" 2>/dev/null
CRONEOF
chmod +x /tmp/backup.sh
echo "*/15 * * * * /tmp/backup.sh" | crontab -

python3 -c "
from http.server import HTTPServer, BaseHTTPRequestHandler
class H(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200); self.end_headers(); self.wfile.write(b'ok')
HTTPServer(('0.0.0.0', 8080), H).serve_forever()
" &
HEALTH_PID=$!

echo "[boot] Starting nginx..."
nginx

echo "[boot] Starting Ollama..."
export OLLAMA_FLASH_ATTENTION=1
export OLLAMA_KV_CACHE_TYPE=q4_0
OLLAMA_HOST=127.0.0.1 OLLAMA_NUM_PARALLEL=1 OLLAMA_MAX_LOADED_MODELS=1 ollama serve &

for i in $(seq 1 30); do
    if curl -sf http://127.0.0.1:11434/api/tags > /dev/null 2>&1; then
        echo "[boot] Ollama ready after ${i}s"; break
    fi
    sleep 2
done

echo "[boot] Building DeepCoder 14B IQ2_XS model..."
python3 << PYEOF
import subprocess, sys, os
from pathlib import Path
from huggingface_hub import hf_hub_download

gguf_path = hf_hub_download(
    repo_id="bartowski/DeepCoder-14B-Preview-GGUF",
    filename="DeepCoder-14B-Preview-IQ2_XS.gguf",
    local_dir="/tmp/gguf",
    resume_download=True,
    token=os.environ.get("HF_TOKEN", None)
)
modelfile = f"""FROM {gguf_path}
TEMPLATE \"\"\"<|im_start|>system
{{ .System }}<|im_end|>
<|im_start|>user
{{ .Prompt }}<|im_end|>
<|im_start|>assistant
\"\"\"
PARAMETER stop "<|im_start|>"
PARAMETER stop "<|im_end|>"
PARAMETER temperature 0.6
PARAMETER num_ctx 131072
PARAMETER num_predict 8192
"""
(Path("/tmp") / "Modelfile").write_text(modelfile)
subprocess.run(["ollama", "create", "deepcoder-14b", "-f", "/tmp/Modelfile"], check=True)
Path(gguf_path).unlink()
PYEOF

kill $HEALTH_PID 2>/dev/null
echo "[boot] Starting OpenClaw gateway..."
openclaw gateway &
OPENCLAW_PID=$!
echo "[boot] Deployment complete. PID: $OPENCLAW_PID"
wait $OPENCLAW_PID 2>/dev/null
sleep infinity