CodetteVision / app.py
Raiff1982's picture
Update app.py
919ef54 verified
raw
history blame
4.18 kB
import gradio as gr
import numpy as np
import tempfile
import imageio
import torch
from transformers import pipeline
from diffusers import DiffusionPipeline
# ---------- Settings ----------
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 Optional Models ----------
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 Load Error]: {e}")
image_generator = None
image_enabled = False
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 Load Error]: {e}")
video_pipeline = None
video_enabled = False
# ---------- Core Logic ----------
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] = []
return "🧠 Codette signing off... Session reset.", None, None
# Load text model if not cached
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:
return f"[Text model error]: {e}", None, None
generator = text_model_cache[model_name]
try:
output = generator(prompt, max_length=100, do_sample=True, num_return_sequences=1)
response = output[0]['generated_text'].strip()
except Exception as e:
response = f"[Text generation error]: {e}"
chat_memory[session_id].append(f"πŸ–‹οΈ You > {prompt}")
chat_memory[session_id].append(f"🧠 Codette > {response}")
chat_log = "\n".join(chat_memory[session_id][-10:])
img = None
if generate_image and image_enabled:
try:
img = image_generator(prompt).images[0]
except Exception as e:
chat_log += f"\n[Image error]: {e}"
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:
chat_log += f"\n[Video error]: {e}"
return chat_log, img, vid
# ---------- Gradio App ----------
with gr.Blocks(title="Codette Terminal (Hugging Face Edition)") as demo:
gr.Markdown("## 🧬 Codette Terminal\nA text + image + video AI powered by Hugging Face + Gradio. Type `'exit'` to reset the session.")
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]
)
if __name__ == "__main__":
demo.launch()