Spaces:
Sleeping
Sleeping
| from fastapi import FastAPI | |
| from pydantic import BaseModel | |
| from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline | |
| import torch, gradio as gr | |
| # --- Chargement du modèle --- | |
| MODEL_ID = "Gopu-poss/gopu-agent-2k-fdf" | |
| tokenizer = AutoTokenizer.from_pretrained(MODEL_ID) | |
| model = AutoModelForCausalLM.from_pretrained( | |
| MODEL_ID, | |
| torch_dtype=torch.float16, | |
| device_map="auto" | |
| ) | |
| # --- FastAPI --- | |
| app = FastAPI() | |
| class Input(BaseModel): | |
| input: str | |
| system_prompt: str | None = None | |
| def infer(data: Input): | |
| # Concatène prompt système + input utilisateur | |
| full_prompt = f"{data.system_prompt}\n{data.input}" if data.system_prompt else data.input | |
| inputs = tokenizer(full_prompt, return_tensors="pt").to(model.device) | |
| outputs = model.generate(**inputs, max_new_tokens=200, temperature=0.7, top_p=0.9) | |
| text = tokenizer.decode(outputs[0], skip_special_tokens=True) | |
| return {"generated_text": text} | |
| # --- Gradio multimodal --- | |
| # Pipeline de reconnaissance vocale (optionnel) | |
| try: | |
| asr = pipeline("automatic-speech-recognition", model="openai/whisper-small") | |
| except Exception: | |
| asr = None | |
| def gopu_chat(system_prompt, prompt, audio=None, image=None, video=None): | |
| # Si audio fourni → transcrire et remplacer le prompt | |
| if audio is not None and asr is not None: | |
| transcription = asr(audio)["text"] | |
| prompt = transcription | |
| # Construire le prompt complet | |
| full_prompt = f"{system_prompt}\n{prompt}" if system_prompt else prompt | |
| inputs = tokenizer(full_prompt, return_tensors="pt").to(model.device) | |
| outputs = model.generate(**inputs, max_new_tokens=200, temperature=0.7, top_p=0.9) | |
| return tokenizer.decode(outputs[0], skip_special_tokens=True) | |
| demo = gr.Interface( | |
| fn=gopu_chat, | |
| inputs=[ | |
| gr.Textbox(label="Prompt système (contexte)", placeholder="Ex: Tu es GopuOS, un agent exclusif..."), | |
| gr.Textbox(label="Texte utilisateur"), | |
| gr.Audio(label="Voix (optionnel)", type="filepath"), | |
| gr.Image(label="Image (optionnel)", type="filepath"), | |
| gr.Video(label="Vidéo (optionnel)") | |
| ], | |
| outputs="text", | |
| title="GopuOS Agentic Endpoint", | |
| description="Ajoute un prompt système, parle avec ta voix, ou envoie texte/image/vidéo." | |
| ) | |
| # Monter Gradio dans FastAPI | |
| app = gr.mount_gradio_app(app, demo, path="/gradio") | |