Spaces:
Paused
Paused
File size: 5,016 Bytes
15c06cc 0c5a382 919ef54 15c06cc 1149742 15c06cc 0c5a382 15c06cc 919ef54 1149742 0c5a382 1149742 919ef54 0c5a382 919ef54 1149742 0c5a382 1149742 0c5a382 1149742 919ef54 0c5a382 919ef54 1149742 0c5a382 1149742 0c5a382 1149742 0c5a382 1149742 0c5a382 919ef54 1149742 919ef54 1149742 919ef54 0c5a382 1149742 919ef54 1149742 919ef54 1149742 0c5a382 1149742 0c5a382 1149742 0c5a382 1149742 0c5a382 1149742 0c5a382 1149742 0c5a382 1149742 0c5a382 1149742 0c5a382 919ef54 0c5a382 919ef54 0c5a382 1149742 0c5a382 1149742 0c5a382 919ef54 |
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 |
import gradio as gr
import tempfile
import imageio
import torch
from transformers import pipeline
from diffusers import DiffusionPipeline
# ---------- Configuration ----------
AVAILABLE_MODELS = {
"GPT-2 (small, fast)": "gpt2",
"Falcon (TII UAE)": "tiiuae/falcon-7b-instruct",
"Mistral (OpenAccess)": "mistralai/Mistral-7B-v0.1"
}
device = "cuda" if torch.cuda.is_available() else "cpu"
text_model_cache = {}
chat_memory = {}
# ---------- Load Image Generator ----------
try:
image_generator = DiffusionPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
torch_dtype=torch.float16 if device == "cuda" else torch.float32
)
image_generator.to(device)
image_enabled = True
except Exception as e:
print(f"[Image Model Load Error]: {e}")
image_generator = None
image_enabled = False
# ---------- Load Video Generator ----------
try:
video_pipeline = DiffusionPipeline.from_pretrained(
"damo-vilab/text-to-video-ms-1.7b",
torch_dtype=torch.float16 if device == "cuda" else torch.float32
)
video_pipeline.to(device)
video_enabled = True
except Exception as e:
print(f"[Video Model Load Error]: {e}")
video_pipeline = None
video_enabled = False
# ---------- Streamed Response Generator ----------
def codette_terminal(prompt, model_name, generate_image, generate_video, session_id):
if session_id not in chat_memory:
chat_memory[session_id] = []
if prompt.lower() in ["exit", "quit"]:
chat_memory[session_id] = []
yield "π§ Codette signing off... Session reset.", None, None
return
# Load text model if not already loaded
if model_name not in text_model_cache:
try:
text_model_cache[model_name] = pipeline(
"text-generation",
model=AVAILABLE_MODELS[model_name],
device=0 if device == "cuda" else -1
)
except Exception as e:
yield f"[Text model error]: {e}", None, None
return
generator = text_model_cache[model_name]
# Generate response
try:
output = generator(prompt, max_length=100, do_sample=True, num_return_sequences=1)[0]['generated_text'].strip()
except Exception as e:
yield f"[Text generation error]: {e}", None, None
return
# Stream the output character by character
response_so_far = ""
for char in output:
response_so_far += char
temp_log = chat_memory[session_id][:]
temp_log.append(f"ποΈ You > {prompt}")
temp_log.append(f"π§ Codette > {response_so_far}")
yield "\n".join(temp_log[-10:]), None, None
import time
time.sleep(0.01)
# Finalize chat memory
chat_memory[session_id].append(f"ποΈ You > {prompt}")
chat_memory[session_id].append(f"π§ Codette > {output}")
# Image Generation
img = None
if generate_image and image_enabled:
try:
img = image_generator(prompt).images[0]
except Exception as e:
response_so_far += f"\n[Image error]: {e}"
# Video Generation
vid = None
if generate_video and video_enabled:
try:
video_frames = video_pipeline(prompt, num_inference_steps=50).frames
temp_video_path = tempfile.NamedTemporaryFile(suffix=".mp4", delete=False).name
imageio.mimsave(temp_video_path, video_frames, fps=8)
vid = temp_video_path
except Exception as e:
response_so_far += f"\n[Video error]: {e}"
yield "\n".join(chat_memory[session_id][-10:]), img, vid
# ---------- Gradio UI ----------
with gr.Blocks(title="𧬠Codette Terminal β Streamed AI Chat") as demo:
gr.Markdown("## 𧬠Codette Terminal (Chat + Image + Video)")
gr.Markdown("Type a prompt and select your model. Enable image or video generation if you like. Type `'exit'` to reset.")
session_id = gr.Textbox(value="session_default", visible=False)
model_dropdown = gr.Dropdown(choices=list(AVAILABLE_MODELS.keys()), value="GPT-2 (small, fast)", label="Choose a Language Model")
generate_image_toggle = gr.Checkbox(label="Also generate image?", value=False, interactive=image_enabled)
generate_video_toggle = gr.Checkbox(label="Also generate video?", value=False, interactive=video_enabled)
user_input = gr.Textbox(label="Your Prompt", placeholder="e.g. A robot dreaming on Mars", lines=1)
output_text = gr.Textbox(label="Codette Output", lines=15, interactive=False)
output_image = gr.Image(label="Generated Image")
output_video = gr.Video(label="Generated Video")
user_input.submit(
codette_terminal,
inputs=[user_input, model_dropdown, generate_image_toggle, generate_video_toggle, session_id],
outputs=[output_text, output_image, output_video],
concurrency_limit=1,
queue=True,
show_progress=True
)
# ---------- Launch ----------
if __name__ == "__main__":
demo.launch()
|