Spaces:
Build error
Build error
| import gradio as gr | |
| import json | |
| from transformers import pipeline | |
| from gtts import gTTS | |
| import os | |
| import re | |
| # Load personas | |
| def load_personas(): | |
| personas = [] | |
| for i in range(1, 7): | |
| with open(f'personas/persona_{i}.json', 'r') as f: | |
| personas.append(json.load(f)) | |
| return personas | |
| personas = load_personas() | |
| # Use distilgpt2 for speed | |
| bot = pipeline("text-generation", model="distilgpt2") | |
| # Swear filter list | |
| BAD_WORDS = ["fuck", "shit", "bitch", "asshole"] | |
| def clean_response(text): | |
| pattern = re.compile(r"|".join(BAD_WORDS), re.IGNORECASE) | |
| return pattern.sub("[censored]", text) | |
| # Global state | |
| history = "" | |
| round_number = 0 | |
| # Debate function | |
| def next_round(topic, consensus_level): | |
| global round_number, history | |
| if round_number >= 6: | |
| return "Debate complete.", None, gr.Button(visible=False) | |
| persona = personas[round_number] | |
| # Adjust prompt based on consensus slider | |
| if consensus_level > 50: | |
| style = "Aim to find agreement and common ground." | |
| else: | |
| style = "Challenge previous points and offer a critical view." | |
| prompt = f"{persona['prompt_style']} {style}\n{history}\n{persona['name']}:" | |
| response = bot(prompt, max_length=50, do_sample=True)[0]['generated_text'] | |
| response_text = response[len(prompt):].strip().split("\n")[0] | |
| # Filter bad words | |
| response_text = clean_response(response_text) | |
| history += f"{persona['name']}: {response_text}\n" | |
| # Generate TTS | |
| tts = gTTS(response_text, lang='en') | |
| audio_file = f"temp_{round_number}.mp3" | |
| tts.save(audio_file) | |
| round_number += 1 | |
| if round_number >= 6: | |
| button_visibility = gr.Button(visible=False) | |
| else: | |
| button_visibility = gr.Button(visible=True) | |
| return f"Round {round_number}: {persona['name']} says:\n" + response_text, audio_file, button_visibility | |
| with gr.Blocks() as iface: | |
| gr.Markdown("# AI Persona Debate") | |
| topic = gr.Textbox(label="Enter Debate Question") | |
| consensus = gr.Slider(0, 100, value=50, label="Disagreement <-> Consensus") | |
| start_btn = gr.Button("Start Debate") | |
| output_text = gr.Textbox(label="Debate Response") | |
| output_audio = gr.Audio(label="Voice", autoplay=True) | |
| next_btn = gr.Button("Trigger Next Round", visible=False) | |
| def start_debate(user_topic, consensus_level): | |
| global history, round_number | |
| history = f"Debate Topic: {user_topic}\n" | |
| round_number = 0 | |
| return next_round(user_topic, consensus_level) | |
| start_btn.click(start_debate, inputs=[topic, consensus], outputs=[output_text, output_audio, next_btn]) | |
| next_btn.click(next_round, inputs=[topic, consensus], outputs=[output_text, output_audio, next_btn]) | |
| iface.launch() | |