CodetteVision / app.py
Raiff1982's picture
Update app.py
edee20e verified
raw
history blame
5.81 kB
import gradio as gr
import tempfile
import imageio
import torch
import time
from transformers import pipeline
from diffusers import DiffusionPipeline
user_input.submit(
codette_terminal_limited, # <== use your chosen function name here
inputs=[user_input, model_dropdown, generate_image_toggle, generate_video_toggle, session_id, batch_size_slider, video_steps_slider, fps_slider],
outputs=[output_text, output_image, output_video]
)
# ---------- 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",
safety_checker=None,
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",
safety_checker=None,
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, batch_size, video_steps, fps):
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
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
time.sleep(0.01)
# Finalize chat memory
chat_memory[session_id].append(f"πŸ–‹οΈ You > {prompt}")
chat_memory[session_id].append(f"🧠 Codette > {output}")
imgs = None
if generate_image and image_enabled:
try:
result = image_generator(prompt, num_images_per_prompt=batch_size)
imgs = result.images
except Exception as e:
response_so_far += f"\n[Image error]: {e}"
vid = None
if generate_video and video_enabled:
try:
result = video_pipeline(prompt, num_inference_steps=video_steps)
frames = result.frames
temp_video_path = tempfile.NamedTemporaryFile(suffix=".mp4", delete=False).name
imageio.mimsave(temp_video_path, frames, fps=fps)
vid = temp_video_path
except Exception as e:
response_so_far += f"\n[Video error]: {e}"
yield "\n".join(chat_memory[session_id][-10:]), imgs, vid
# ---------- Gradio UI ----------
with gr.Blocks(title="🧬 Codette Terminal – Streamed AI Chat") as demo:
gr.Markdown("## 🧬 Codette Terminal (Chat + Image + Video + Batch + NSFW OK)")
gr.Markdown("Type a prompt, select your model, and configure generation options. Type `'exit'` to reset.")
with gr.Row():
session_id = gr.Textbox(value="session_default", visible=False)
model_dropdown = gr.Dropdown(choices=list(AVAILABLE_MODELS.keys()), value="GPT-2 (small, fast)", label="Language Model")
with gr.Row():
generate_image_toggle = gr.Checkbox(label="Generate Image(s)?", value=False, interactive=image_enabled)
generate_video_toggle = gr.Checkbox(label="Generate Video?", value=False, interactive=video_enabled)
with gr.Row():
batch_size_slider = gr.Slider(label="Number of Images", minimum=1, maximum=4, step=1, value=1)
video_steps_slider = gr.Slider(label="Video Inference Steps", minimum=10, maximum=100, step=10, value=50)
fps_slider = gr.Slider(label="Video FPS", minimum=4, maximum=24, step=2, value=8)
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.Gallery(label="Generated Image(s)", columns=2)
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, batch_size_slider, video_steps_slider, fps_slider
],
outputs=[output_text, output_image, output_video]
)
# ---------- Launch ----------
if __name__ == "__main__":
demo.launch()