Spaces:
Running
on
Zero
Running
on
Zero
Update app.py
Browse files
app.py
CHANGED
|
@@ -6,6 +6,7 @@ import time
|
|
| 6 |
import asyncio
|
| 7 |
import tempfile
|
| 8 |
from threading import Thread
|
|
|
|
| 9 |
|
| 10 |
import gradio as gr
|
| 11 |
import spaces
|
|
@@ -36,6 +37,16 @@ def randomize_seed_fn(seed: int, randomize_seed: bool) -> int:
|
|
| 36 |
seed = random.randint(0, MAX_SEED)
|
| 37 |
return seed
|
| 38 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 39 |
class Model:
|
| 40 |
def __init__(self):
|
| 41 |
self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
|
|
@@ -117,7 +128,6 @@ MAX_INPUT_TOKEN_LENGTH = int(os.getenv("MAX_INPUT_TOKEN_LENGTH", "4096"))
|
|
| 117 |
|
| 118 |
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
|
| 119 |
|
| 120 |
-
# Load the text-only model and tokenizer (for pure text chat)
|
| 121 |
model_id = "prithivMLmods/FastThink-0.5B-Tiny"
|
| 122 |
tokenizer = AutoTokenizer.from_pretrained(model_id)
|
| 123 |
model = AutoModelForCausalLM.from_pretrained(
|
|
@@ -236,7 +246,6 @@ def generate_image_fn(
|
|
| 236 |
image_paths = [save_image(img) for img in images]
|
| 237 |
return image_paths, seed
|
| 238 |
|
| 239 |
-
|
| 240 |
@spaces.GPU(duration=120, enable_queue=True)
|
| 241 |
def generate_3d_fn(
|
| 242 |
prompt: str,
|
|
@@ -287,7 +296,13 @@ def generate(
|
|
| 287 |
num_steps=64,
|
| 288 |
randomize_seed=True,
|
| 289 |
)
|
| 290 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 291 |
return
|
| 292 |
|
| 293 |
# --- Image Generation branch ---
|
|
@@ -415,4 +430,4 @@ demo = gr.ChatInterface(
|
|
| 415 |
|
| 416 |
if __name__ == "__main__":
|
| 417 |
# To create a public link, set share=True in launch().
|
| 418 |
-
demo.queue(max_size=20).launch(share=True)
|
|
|
|
| 6 |
import asyncio
|
| 7 |
import tempfile
|
| 8 |
from threading import Thread
|
| 9 |
+
import base64
|
| 10 |
|
| 11 |
import gradio as gr
|
| 12 |
import spaces
|
|
|
|
| 37 |
seed = random.randint(0, MAX_SEED)
|
| 38 |
return seed
|
| 39 |
|
| 40 |
+
def glb_to_data_url(glb_path: str) -> str:
|
| 41 |
+
"""
|
| 42 |
+
Reads a GLB file from disk and returns a data URL with a base64 encoded representation.
|
| 43 |
+
This data URL can be used as the `src` for an HTML <model-viewer> tag.
|
| 44 |
+
"""
|
| 45 |
+
with open(glb_path, "rb") as f:
|
| 46 |
+
data = f.read()
|
| 47 |
+
b64_data = base64.b64encode(data).decode("utf-8")
|
| 48 |
+
return f"data:model/gltf-binary;base64,{b64_data}"
|
| 49 |
+
|
| 50 |
class Model:
|
| 51 |
def __init__(self):
|
| 52 |
self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
|
|
|
|
| 128 |
|
| 129 |
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
|
| 130 |
|
|
|
|
| 131 |
model_id = "prithivMLmods/FastThink-0.5B-Tiny"
|
| 132 |
tokenizer = AutoTokenizer.from_pretrained(model_id)
|
| 133 |
model = AutoModelForCausalLM.from_pretrained(
|
|
|
|
| 246 |
image_paths = [save_image(img) for img in images]
|
| 247 |
return image_paths, seed
|
| 248 |
|
|
|
|
| 249 |
@spaces.GPU(duration=120, enable_queue=True)
|
| 250 |
def generate_3d_fn(
|
| 251 |
prompt: str,
|
|
|
|
| 296 |
num_steps=64,
|
| 297 |
randomize_seed=True,
|
| 298 |
)
|
| 299 |
+
# Convert the GLB file to a base64 data URL and embed it in an HTML <model-viewer> tag.
|
| 300 |
+
data_url = glb_to_data_url(glb_path)
|
| 301 |
+
html_output = f'''
|
| 302 |
+
<model-viewer src="{data_url}" alt="3D Model" auto-rotate camera-controls style="width: 100%; height: 400px;"></model-viewer>
|
| 303 |
+
<script type="module" src="https://unpkg.com/@google/model-viewer/dist/model-viewer.min.js"></script>
|
| 304 |
+
'''
|
| 305 |
+
yield gr.HTML(html_output)
|
| 306 |
return
|
| 307 |
|
| 308 |
# --- Image Generation branch ---
|
|
|
|
| 430 |
|
| 431 |
if __name__ == "__main__":
|
| 432 |
# To create a public link, set share=True in launch().
|
| 433 |
+
demo.queue(max_size=20).launch(share=True)
|