Spaces:
Paused
Paused
File size: 5,197 Bytes
5a81b95 | 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 155 156 157 158 159 160 161 162 163 164 | #!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Simple HuggingFace deployment using git repository"""
import sys
import io
# Force UTF-8 encoding for Windows
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
from huggingface_hub import HfApi, login, create_repo
import os
from pathlib import Path
import tempfile
import shutil
# Configuration
HF_TOKEN = os.environ.get("HF_TOKEN")
SPACE_NAME = "Kraft102/widgetdc-cortex"
print("=" * 50)
print("HuggingFace Deployment Script")
print("=" * 50)
print(f"Target: {SPACE_NAME}\n")
# Step 1: Login
print("1️⃣ Logging in...")
os.environ['HF_TOKEN'] = HF_TOKEN
login(token=HF_TOKEN, add_to_git_credential=True)
api = HfApi()
print(" Logged in\n")
# Step 2: Create/verify Space
print("2️⃣ Creating Space...")
try:
create_repo(
repo_id=SPACE_NAME,
repo_type="space",
space_sdk="docker",
exist_ok=True,
token=HF_TOKEN
)
print(" Space ready\n")
except Exception as e:
print(f" Space exists (or error: {e})\n")
# Step 3: Create temp directory with files
print("3️⃣ Preparing files...")
temp_dir = Path(tempfile.mkdtemp())
print(f"Using temp dir: {temp_dir}")
try:
# Create structure
(temp_dir / "apps/backend").mkdir(parents=True)
(temp_dir / "packages/domain-types").mkdir(parents=True)
(temp_dir / "packages/mcp-types").mkdir(parents=True)
# Copy backend (only essential files)
print(" Copying backend...")
if Path("apps/backend/src").exists():
shutil.copytree("apps/backend/src", temp_dir / "apps/backend/src")
if Path("apps/backend/prisma").exists():
shutil.copytree("apps/backend/prisma", temp_dir / "apps/backend/prisma")
shutil.copy("apps/backend/package.json", temp_dir / "apps/backend/")
shutil.copy("apps/backend/tsconfig.json", temp_dir / "apps/backend/")
# Copy packages
print(" Copying packages...")
shutil.copytree("packages/domain-types/src", temp_dir / "packages/domain-types/src")
shutil.copy("packages/domain-types/package.json", temp_dir / "packages/domain-types/")
shutil.copy("packages/domain-types/tsconfig.json", temp_dir / "packages/domain-types/")
shutil.copytree("packages/mcp-types/src", temp_dir / "packages/mcp-types/src")
shutil.copy("packages/mcp-types/package.json", temp_dir / "packages/mcp-types/")
shutil.copy("packages/mcp-types/tsconfig.json", temp_dir / "packages/mcp-types/")
# Copy root files
print(" Copying root files...")
shutil.copy("package.json", temp_dir / "package.json")
if Path("tsconfig.json").exists():
shutil.copy("tsconfig.json", temp_dir / "tsconfig.json")
# Copy Dockerfile
print(" Copying Dockerfile...")
if Path("scripts/hf-backend.dockerfile").exists():
shutil.copy("scripts/hf-backend.dockerfile", temp_dir / "Dockerfile")
elif Path("Dockerfile").exists():
shutil.copy("Dockerfile", temp_dir / "Dockerfile")
# Create README
print(" Creating README...")
readme = """---
title: WidgeTDC Cortex
emoji: 🧠
colorFrom: blue
colorTo: purple
sdk: docker
app_port: 7860
hardware: t4-small
---
# WidgeTDC Cortex - Neural Backend
Enterprise AI backend with GPU-accelerated embeddings and MCP agents.
## Features
- GPU-accelerated embeddings via sentence-transformers
- MCP (Model Context Protocol) tool execution
- Real-time WebSocket communication
- Health monitoring at /health endpoint
"""
(temp_dir / "README.md").write_text(readme, encoding='utf-8')
print(f" Files prepared in {temp_dir}\n")
# List files
print(" Files to upload:")
for root, dirs, files in os.walk(temp_dir):
# Skip hidden dirs
dirs[:] = [d for d in dirs if not d.startswith('.')]
level = root.replace(str(temp_dir), '').count(os.sep)
indent = ' ' * 2 * level
print(f'{indent}{os.path.basename(root)}/')
subindent = ' ' * 2 * (level + 1)
for file in files[:5]: # Show max 5 files per dir
print(f'{subindent}{file}')
if len(files) > 5:
print(f'{subindent}... and {len(files) - 5} more files')
# Step 4: Upload
print(f"\n4️⃣ Uploading to {SPACE_NAME}...")
print("This may take 2-5 minutes...\n")
api.upload_folder(
folder_path=str(temp_dir),
repo_id=SPACE_NAME,
repo_type="space",
commit_message="Deploy WidgeTDC Backend",
token=HF_TOKEN
)
print("\n Upload complete!")
except Exception as e:
print(f"\n Error: {e}")
import traceback
traceback.print_exc()
raise
finally:
# Cleanup
if temp_dir.exists():
print(f"\n Cleaning up {temp_dir}...")
shutil.rmtree(temp_dir, ignore_errors=True)
# Success!
print("\n" + "=" * 50)
print(" DEPLOYMENT SUCCESSFUL!")
print(f"\n Space URL: https://huggingface.co/spaces/{SPACE_NAME}")
print(f" API URL: https://{SPACE_NAME.replace('/', '-')}.hf.space/")
print("\n Space will now build Docker image (5-10 minutes)")
print(" Add environment variables in Space Settings → Variables")
print("\n Done!")
|