Spaces:
Sleeping
Sleeping
dboa9 commited on
Commit ·
d68d4dc
1
Parent(s): 22a0d80
Update core code, compliance, ui, legal emails
Browse files- Dockerfile +5 -11
- app.py +17 -25
- requirements.txt +2 -2
- start.sh +6 -1
Dockerfile
CHANGED
|
@@ -31,23 +31,17 @@ RUN npm install -g openclaw@latest \
|
|
| 31 |
&& (command -v openclaw || true)
|
| 32 |
|
| 33 |
# Install Ollama AS ROOT - pinned version, force amd64
|
| 34 |
-
#
|
| 35 |
-
# Mark as OPTIONAL - app works without it via HF Inference API fallback
|
| 36 |
RUN echo "Downloading Ollama v0.15.2 (amd64)..." && \
|
| 37 |
curl -fSL --retry 3 --retry-delay 10 --max-time 300 \
|
| 38 |
"https://github.com/ollama/ollama/releases/download/v0.15.2/ollama-linux-amd64" \
|
| 39 |
-o /usr/local/bin/ollama && \
|
| 40 |
chmod +x /usr/local/bin/ollama && \
|
| 41 |
-
OLLAMA_SIZE=$(stat -c%s /usr/local/bin/ollama 2>/dev/null || echo 0) && \
|
| 42 |
echo "Ollama binary: $(file /usr/local/bin/ollama)" && \
|
| 43 |
-
echo "Size: $
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
else \
|
| 48 |
-
echo "OK: Ollama binary looks good"; \
|
| 49 |
-
fi \
|
| 50 |
-
|| echo "WARNING: Ollama download failed - will use HF Inference API only"
|
| 51 |
|
| 52 |
# Create HF-required user (uid 1000)
|
| 53 |
RUN useradd -m -u 1000 user
|
|
|
|
| 31 |
&& (command -v openclaw || true)
|
| 32 |
|
| 33 |
# Install Ollama AS ROOT - pinned version, force amd64
|
| 34 |
+
# REQUIRED - build fails if download fails or binary is corrupt
|
|
|
|
| 35 |
RUN echo "Downloading Ollama v0.15.2 (amd64)..." && \
|
| 36 |
curl -fSL --retry 3 --retry-delay 10 --max-time 300 \
|
| 37 |
"https://github.com/ollama/ollama/releases/download/v0.15.2/ollama-linux-amd64" \
|
| 38 |
-o /usr/local/bin/ollama && \
|
| 39 |
chmod +x /usr/local/bin/ollama && \
|
|
|
|
| 40 |
echo "Ollama binary: $(file /usr/local/bin/ollama)" && \
|
| 41 |
+
echo "Size: $(stat -c%s /usr/local/bin/ollama) bytes" && \
|
| 42 |
+
file /usr/local/bin/ollama | grep -q "ELF" || (echo "FATAL: Ollama binary is not ELF" && exit 1) && \
|
| 43 |
+
test $(stat -c%s /usr/local/bin/ollama) -gt 1000000 || (echo "FATAL: Ollama binary too small" && exit 1) && \
|
| 44 |
+
echo "OK: Ollama verified"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 45 |
|
| 46 |
# Create HF-required user (uid 1000)
|
| 47 |
RUN useradd -m -u 1000 user
|
app.py
CHANGED
|
@@ -160,7 +160,9 @@ def generate_with_ollama(model: str, prompt: str) -> Optional[str]:
|
|
| 160 |
|
| 161 |
|
| 162 |
def generate_with_hf_api(prompt: str, model: str = None) -> Optional[str]:
|
| 163 |
-
"""Generate text using HuggingFace Inference API (free, no GPU needed).
|
|
|
|
|
|
|
| 164 |
try:
|
| 165 |
from huggingface_hub import InferenceClient
|
| 166 |
|
|
@@ -169,40 +171,30 @@ def generate_with_hf_api(prompt: str, model: str = None) -> Optional[str]:
|
|
| 169 |
|
| 170 |
client = InferenceClient(token=token)
|
| 171 |
|
| 172 |
-
# Use
|
| 173 |
-
|
| 174 |
-
|
| 175 |
model=hf_model,
|
| 176 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 177 |
temperature=0.7,
|
| 178 |
-
do_sample=True,
|
| 179 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 180 |
|
| 181 |
-
|
| 182 |
-
return response.strip()
|
| 183 |
-
|
| 184 |
-
logger.warning("[HF_API] Empty response")
|
| 185 |
return None
|
| 186 |
|
| 187 |
except ImportError:
|
| 188 |
logger.error("[HF_API] huggingface_hub not installed")
|
| 189 |
return None
|
| 190 |
except Exception as e:
|
| 191 |
-
logger.warning(f"[HF_API]
|
| 192 |
-
# Try chat completion as fallback
|
| 193 |
-
try:
|
| 194 |
-
from huggingface_hub import InferenceClient
|
| 195 |
-
client = InferenceClient(token=HF_TOKEN if HF_TOKEN else None)
|
| 196 |
-
response = client.chat_completion(
|
| 197 |
-
model=model or HF_MODEL,
|
| 198 |
-
messages=[{"role": "user", "content": prompt}],
|
| 199 |
-
max_tokens=1024,
|
| 200 |
-
temperature=0.7,
|
| 201 |
-
)
|
| 202 |
-
if response and response.choices:
|
| 203 |
-
return response.choices[0].message.content.strip()
|
| 204 |
-
except Exception as e2:
|
| 205 |
-
logger.warning(f"[HF_API] Chat completion also failed: {e2}")
|
| 206 |
return None
|
| 207 |
|
| 208 |
|
|
|
|
| 160 |
|
| 161 |
|
| 162 |
def generate_with_hf_api(prompt: str, model: str = None) -> Optional[str]:
|
| 163 |
+
"""Generate text using HuggingFace Inference API (free, no GPU needed).
|
| 164 |
+
Uses chat_completion (conversational) — the only supported task for Qwen2.5-7B-Instruct.
|
| 165 |
+
"""
|
| 166 |
try:
|
| 167 |
from huggingface_hub import InferenceClient
|
| 168 |
|
|
|
|
| 171 |
|
| 172 |
client = InferenceClient(token=token)
|
| 173 |
|
| 174 |
+
# Use chat_completion — Qwen2.5-7B-Instruct is conversational only
|
| 175 |
+
# (text_generation fails: "Supported task: conversational")
|
| 176 |
+
response = client.chat_completion(
|
| 177 |
model=hf_model,
|
| 178 |
+
messages=[
|
| 179 |
+
{"role": "system", "content": "You are a helpful legal assistant."},
|
| 180 |
+
{"role": "user", "content": prompt},
|
| 181 |
+
],
|
| 182 |
+
max_tokens=1024,
|
| 183 |
temperature=0.7,
|
|
|
|
| 184 |
)
|
| 185 |
+
if response and response.choices:
|
| 186 |
+
text = response.choices[0].message.content
|
| 187 |
+
if text:
|
| 188 |
+
return text.strip()
|
| 189 |
|
| 190 |
+
logger.warning("[HF_API] Empty response from chat_completion")
|
|
|
|
|
|
|
|
|
|
| 191 |
return None
|
| 192 |
|
| 193 |
except ImportError:
|
| 194 |
logger.error("[HF_API] huggingface_hub not installed")
|
| 195 |
return None
|
| 196 |
except Exception as e:
|
| 197 |
+
logger.warning(f"[HF_API] chat_completion error: {e}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 198 |
return None
|
| 199 |
|
| 200 |
|
requirements.txt
CHANGED
|
@@ -3,6 +3,6 @@ fastapi>=0.104.0
|
|
| 3 |
uvicorn>=0.24.0
|
| 4 |
pydantic>=2.0.0
|
| 5 |
python-multipart>=0.0.6
|
| 6 |
-
huggingface_hub>=0.
|
| 7 |
requests>=2.31.0
|
| 8 |
-
httpx>=0.25.0
|
|
|
|
| 3 |
uvicorn>=0.24.0
|
| 4 |
pydantic>=2.0.0
|
| 5 |
python-multipart>=0.0.6
|
| 6 |
+
huggingface_hub>=0.25.0
|
| 7 |
requests>=2.31.0
|
| 8 |
+
httpx>=0.25.0
|
start.sh
CHANGED
|
@@ -5,10 +5,15 @@
|
|
| 5 |
# v6: Ollama is optional - HF Inference API provides fallback
|
| 6 |
|
| 7 |
echo "============================================================"
|
| 8 |
-
echo " Moltbot Hybrid Engine
|
| 9 |
echo "============================================================"
|
| 10 |
echo " Timestamp: $(date '+%Y-%m-%d %H:%M:%S')"
|
| 11 |
echo " User: $(whoami) | Home: $HOME"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
echo ""
|
| 13 |
|
| 14 |
# Optimize for HF Spaces Free tier (2 CPU, 16GB RAM)
|
|
|
|
| 5 |
# v6: Ollama is optional - HF Inference API provides fallback
|
| 6 |
|
| 7 |
echo "============================================================"
|
| 8 |
+
echo " Moltbot Hybrid Engine v7.1.0 - Starting..."
|
| 9 |
echo "============================================================"
|
| 10 |
echo " Timestamp: $(date '+%Y-%m-%d %H:%M:%S')"
|
| 11 |
echo " User: $(whoami) | Home: $HOME"
|
| 12 |
+
echo " BUILD_MARKER=2026-03-02-fix-hf-ollama-openclaw"
|
| 13 |
+
echo ""
|
| 14 |
+
echo "[DEBUG] Ollama check: $(command -v ollama 2>/dev/null || echo MISSING)"
|
| 15 |
+
echo "[DEBUG] /usr/local/bin/ollama: $(ls -lh /usr/local/bin/ollama 2>/dev/null || echo NOT_FOUND)"
|
| 16 |
+
echo "[DEBUG] Binary type: $(file /usr/local/bin/ollama 2>/dev/null || echo N/A)"
|
| 17 |
echo ""
|
| 18 |
|
| 19 |
# Optimize for HF Spaces Free tier (2 CPU, 16GB RAM)
|