|
|
|
|
|
|
|
|
|
|
|
import gradio as gr |
|
|
import asyncio |
|
|
from backend import fintalk_discussion, export_to_pdf, generate_tts_files |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def run_fintalk(topic_text): |
|
|
if not topic_text or len(topic_text.strip()) < 10: |
|
|
return "Please provide a valid economic topic.", "", "", "", "", None, None |
|
|
|
|
|
result = fintalk_discussion(topic_text) |
|
|
result["topic"] = topic_text |
|
|
|
|
|
|
|
|
pdf_path = "FinTalk_Report.pdf" |
|
|
export_to_pdf(result, pdf_path) |
|
|
|
|
|
|
|
|
try: |
|
|
generate_tts_files(result) |
|
|
except Exception as e: |
|
|
print("TTS hatası:", e) |
|
|
|
|
|
return ( |
|
|
f"🧩 **Moderator:**\n{result['moderator_intro']}", |
|
|
f"💹 **Bullish Investor:**\n{result['bullish_view']}", |
|
|
f"📉 **Bearish Economist:**\n{result['bearish_view']}", |
|
|
f"🎙️ **Moderator Wrap-up:**\n{result['moderator_wrap']}", |
|
|
f"📊 **GPT Summary:**\n{result['summary']}", |
|
|
pdf_path, |
|
|
"moderator_intro.waw", |
|
|
"bullish_view.waw", |
|
|
"bearish_view.waw", |
|
|
"moderator_wrap.waw" |
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
with gr.Blocks(theme=gr.themes.Soft()) as demo: |
|
|
gr.Markdown( |
|
|
""" |
|
|
# 📊 **FinTalk — AI Economic Roundtable** |
|
|
Simulate a live discussion between two economists with opposing views, moderated by Selin. |
|
|
Enter an economic topic or news headline below and click **Start Discussion**. |
|
|
""" |
|
|
) |
|
|
|
|
|
with gr.Row(): |
|
|
with gr.Column(scale=1): |
|
|
topic_input = gr.Textbox( |
|
|
label="Enter an Economic Headline or News", |
|
|
placeholder="Example: The central bank raised interest rates by 200 basis points.", |
|
|
lines=4 |
|
|
) |
|
|
start_btn = gr.Button("🚀 Start Discussion") |
|
|
|
|
|
with gr.Column(scale=2): |
|
|
moderator_output = gr.Markdown(label="Moderator Intro") |
|
|
bullish_output = gr.Markdown(label="Bullish Investor") |
|
|
bearish_output = gr.Markdown(label="Bearish Economist") |
|
|
wrap_output = gr.Markdown(label="Moderator Wrap-up") |
|
|
summary_output = gr.Markdown(label="GPT Summary") |
|
|
|
|
|
pdf_file = gr.File(label="📄 Download PDF Report") |
|
|
|
|
|
with gr.Row(): |
|
|
mod_audio = gr.Audio(label="Moderator Voice", interactive=False) |
|
|
bull_audio = gr.Audio(label="Bullish Voice", interactive=False) |
|
|
bear_audio = gr.Audio(label="Bearish Voice", interactive=False) |
|
|
wrap_audio = gr.Audio(label="Moderator Wrap-up", interactive=False) |
|
|
|
|
|
start_btn.click( |
|
|
fn=run_fintalk, |
|
|
inputs=topic_input, |
|
|
outputs=[ |
|
|
moderator_output, |
|
|
bullish_output, |
|
|
bearish_output, |
|
|
wrap_output, |
|
|
summary_output, |
|
|
pdf_file, |
|
|
mod_audio, |
|
|
bull_audio, |
|
|
bear_audio, |
|
|
wrap_audio |
|
|
] |
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
demo.launch() |
|
|
|