Spaces:
Sleeping
Sleeping
File size: 7,118 Bytes
8aef1c7 5141a9b fba050f fea091a e9ef7a4 fea091a 8aef1c7 5141a9b 6c95f03 e9ef7a4 fea091a e5bec3e e9ef7a4 32f428b e9ef7a4 32f428b e9ef7a4 32f428b 765d4ef 32f428b 9aa5cfd fea091a 5a141f8 765d4ef 5a141f8 765d4ef e9ef7a4 fea091a e9ef7a4 765d4ef e9ef7a4 5a141f8 765d4ef 5a141f8 765d4ef e9ef7a4 765d4ef e9ef7a4 765d4ef e9ef7a4 765d4ef 32f428b e9ef7a4 32f428b e9ef7a4 32f428b 9aa5cfd e9ef7a4 e5bec3e e9ef7a4 fea091a e9ef7a4 e5bec3e e9ef7a4 32f428b fea091a 32f428b e9ef7a4 32f428b fea091a e9ef7a4 fea091a 10d62a6 e9ef7a4 fea091a fba050f e9ef7a4 fea091a 10d62a6 fea091a fba050f 10d62a6 e9ef7a4 10d62a6 32f428b fea091a e9ef7a4 fea091a e9ef7a4 fea091a e9ef7a4 32f428b e9ef7a4 32f428b e9ef7a4 e5bec3e e9ef7a4 fea091a e5bec3e fea091a 32f428b | 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 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 | import sys
import os
import types
import logging
import subprocess
from pathlib import Path
import torch
from fastapi import FastAPI
from fastapi.responses import HTMLResponse
logging.basicConfig(level=logging.INFO, format="%(asctime)s | %(levelname)s | %(message)s")
logger = logging.getLogger(__name__)
# โโ 0. ุชุญุฏูุซ kagglehub (ู
ูู
ุฌุฏุงู!) โโโโโโโโโโโโโโโโโโโโโโโโ
try:
subprocess.check_call([
sys.executable, "-m", "pip", "install", "-q", "--upgrade", "kagglehub>=1.0.2"
])
logger.info("โ
kagglehub upgraded")
except Exception as e:
logger.warning(f"โ ๏ธ upgrade failed: {e}")
import kagglehub
# โโ 1. Kaggle Credentials โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
kaggle_username = os.environ.get("KAGGLE_USERNAME")
kaggle_key = os.environ.get("KAGGLE_KEY")
if kaggle_username and kaggle_key:
os.environ["KAGGLE_USERNAME"] = kaggle_username
os.environ["KAGGLE_KEY"] = kaggle_key
kaggle_dir = Path.home() / ".kaggle"
kaggle_dir.mkdir(parents=True, exist_ok=True)
kaggle_json = kaggle_dir / "kaggle.json"
kaggle_json.write_text(f'{{"username":"{kaggle_username}","key":"{kaggle_key}"}}')
os.chmod(kaggle_json, 0o600)
logger.info("โ
Kaggle credentials configured")
else:
logger.warning("โ ๏ธ KAGGLE_USERNAME/KAGGLE_KEY not set")
# โโ 2. ุชุญู
ูู ุงููู
ูุฐุฌ (ุงููุณุฎุฉ 3 + force_download) โโโโโโโโโโโ
model_path = None
try:
logger.info("โฌ๏ธ [Attempt 1] transformers/default/19 + force_download")
model_path = kagglehub.model_download(
"ruicompany/onyx-code-figma/transformers/default/19",
force_download=True
)
logger.info(f"โ
Success: {model_path}")
except Exception as e:
logger.error(f"โ Attempt 1 failed: {e}")
# ู
ุญุงููุฉ 2: keras/default/3 (ุงุญุชูุงุทู)
if not model_path:
try:
logger.info("โฌ๏ธ [Attempt 2] keras/default/19")
model_path = kagglehub.model_download(
"ruicompany/onyx-code-figma/keras/default/19",
force_download=True
)
logger.info(f"โ
Success: {model_path}")
except Exception as e:
logger.error(f"โ Attempt 2 failed: {e}")
# ู
ุญุงููุฉ 3: dataset_download (ุฃูุซุฑ ุงุณุชูุฑุงุฑุงู)
if not model_path:
try:
logger.info("โฌ๏ธ [Attempt 3] dataset_download")
model_path = kagglehub.dataset_download("ruicompany/onyx-code-figma")
logger.info(f"โ
Success: {model_path}")
except Exception as e:
logger.error(f"โ Attempt 3 failed: {e}")
# ู
ุญุงููุฉ 4: ู
ุณุงุฑ ู
ุญูู
if not model_path:
local_paths = [
"/app/model",
"./model",
"/kaggle/working/onyx-code-figma-bundle",
"./onyx-code-figma-bundle",
]
for p in local_paths:
if os.path.exists(p) and any(Path(p).rglob("*.safetensors")):
model_path = p
logger.info(f"โ
[Fallback] Local path: {p}")
break
if not model_path:
logger.error("๐จ All download attempts failed!")
model_path = None
# โโ 3. ูุญุต ุงูู
ููุงุช โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
if model_path:
logger.info("๐ Files in model path:")
for f in sorted(Path(model_path).rglob("*"))[:30]:
logger.info(f" {f.relative_to(model_path)}")
# โโ 4. ุงูุจุญุซ ุนู onyx_code.py โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
onyx_code_dir = None
if model_path:
for py_file in Path(model_path).rglob("onyx_code.py"):
onyx_code_dir = py_file.parent
logger.info(f"๐ Found onyx_code.py: {py_file}")
break
# โโ 5. Monkey-patch IPython โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
captured_html = []
class MockHTML:
def __init__(self, data=None, **kwargs):
self.data = data or ""
def mock_display(*objs, **kwargs):
for obj in objs:
if hasattr(obj, 'data') and isinstance(obj.data, str):
captured_html.append(obj.data)
elif isinstance(obj, str):
captured_html.append(obj)
ipython_pkg = types.ModuleType("IPython")
ipython_display = types.ModuleType("IPython.display")
ipython_display.HTML = MockHTML
ipython_display.display = mock_display
ipython_display.display_html = mock_display
ipython_display.clear_output = lambda *a, **k: None
ipython_display.Javascript = lambda *a, **k: MockHTML()
ipython_pkg.display = ipython_display
sys.modules["IPython"] = ipython_pkg
sys.modules["IPython.display"] = ipython_display
# โโ 6. ุงุณุชูุฑุงุฏ onyx_code โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
html_content = "<h2>โ ๏ธ Onyx Designer not loaded</h2>"
if onyx_code_dir:
sys.path.insert(0, str(onyx_code_dir))
try:
import onyx_code
logger.info("โ
onyx_code imported")
if hasattr(onyx_code, 'launch_designer'):
onyx_code.launch_designer()
html_content = captured_html[-1] if captured_html else html_content
logger.info(f"๐ HTML: {len(html_content)} chars")
except Exception as e:
logger.error(f"โ Error: {e}")
import traceback
logger.error(traceback.format_exc())
# โโ 7. ุชุญู
ูู Transformers Model โโโโโโโโโโโโโโโโโโโโโโโโโโโ
model = None
tokenizer = None
if model_path and any(Path(model_path).rglob("*.safetensors")):
try:
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(
load_in_8bit=True,
llm_int8_enable_fp32_cpu_offload=True,
)
model = AutoModelForCausalLM.from_pretrained(
model_path,
quantization_config=quantization_config,
device_map="auto",
max_memory={0: "0GB", "cpu": "6GB"},
offload_buffers=True,
offload_folder="offload",
offload_state_dict=True,
torch_dtype=torch.float32,
trust_remote_code=True,
)
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
logger.info("โ
Model loaded")
except Exception as e:
logger.error(f"โ Model load failed: {e}")
# โโ 8. FastAPI โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
app = FastAPI(title="Onyx Code Figma API")
@app.get("/", response_class=HTMLResponse)
def read_root():
return html_content
@app.get("/health")
def health_check():
return {
"model_loaded": model is not None,
"model_path": model_path,
"html_length": len(html_content),
}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=7860) |