MWAgent / app.py
yunuseduran's picture
Upload 6 files
a9209e8 verified
import os
import gradio as gr
from datetime import datetime
from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from audio_processor import AudioProcessor
import config
class NewsApp:
def __init__(self):
self.processor = AudioProcessor()
def process_audio_file(self, audio_file, content_type="news", language="tr"):
"""Process audio file and generate content"""
try:
if audio_file is None:
return "Lütfen bir ses dosyası yükleyin.", None
# Print debug information
print(f"Received audio file: {audio_file}")
# Create temporary file to save the uploaded content
temp_dir = "temp_audio"
os.makedirs(temp_dir, exist_ok=True)
# Generate a unique filename
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
temp_audio_path = os.path.join(temp_dir, f"temp_audio_{timestamp}.m4a")
# Save the uploaded file
with open(temp_audio_path, "wb") as f:
f.write(audio_file)
print(f"Saved temporary file to: {temp_audio_path}")
# Process audio and generate content
results = self.processor.process_audio(
audio_path=temp_audio_path,
language=language,
content_type=content_type,
generate_content=True
)
if not results.get("generated_content"):
return "İçerik oluşturulamadı. Lütfen ses kaydını kontrol edin.", None
# Create Word document
doc = Document()
# Add title
title = doc.add_heading(results["generated_content"]["title"], 0)
title.alignment = WD_ALIGN_PARAGRAPH.CENTER
# Add date
date_paragraph = doc.add_paragraph()
date_paragraph.alignment = WD_ALIGN_PARAGRAPH.RIGHT
date_run = date_paragraph.add_run(f"Tarih: {results['date']}")
date_run.font.size = Pt(10)
date_run.font.color.rgb = RGBColor(128, 128, 128)
# Add separator
doc.add_paragraph("").add_run("_" * 50)
# Add content
content_lines = results["generated_content"]["content"].split('\n')
current_paragraph = None
for line in content_lines:
if line.strip():
if line.startswith('#'): # Handle headers
level = line.count('#')
text = line.strip('#').strip()
doc.add_heading(text, level)
else:
if current_paragraph is None or line.startswith('*'):
current_paragraph = doc.add_paragraph()
current_paragraph.add_run(line)
else:
current_paragraph = None
# Save document
output_dir = "data/output"
os.makedirs(output_dir, exist_ok=True)
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
doc_path = os.path.join(output_dir, f"haber_{timestamp}.docx")
doc.save(doc_path)
# Return success message and document path
return f"İçerik başarıyla oluşturuldu!", doc_path
except Exception as e:
return f"Hata oluştu: {str(e)}", None
def create_ui():
"""Create Gradio interface"""
app = NewsApp()
with gr.Blocks(title="Ses Dosyasından Haber Oluşturma", theme=gr.themes.Soft()) as interface:
gr.Markdown("""
# 🎙️ Ses Dosyasından Haber/Blog Oluşturma
Ses kaydınızı yükleyin, yapay zeka destekli sistemimiz sizin için profesyonel bir haber metni veya blog yazısı oluştursun.
### Nasıl Kullanılır:
1. Ses dosyanızı yükleyin (.mp3, .m4a, .wav formatları desteklenir)
2. İçerik tipini seçin (Haber/Blog)
3. Dili seçin
4. "Oluştur" butonuna tıklayın
5. Oluşturulan Word belgesini indirin
### Önemli Notlar:
- Desteklenen ses formatları: MP3, M4A, WAV
- Maksimum dosya boyutu: 25MB
- İşlem süresi dosya boyutuna göre değişebilir
- Türkçe ve İngilizce dilleri desteklenmektedir
""")
with gr.Row():
with gr.Column():
audio_input = gr.File(
label="Ses Dosyası",
file_types=[".mp3", ".m4a", ".wav"],
type="binary"
)
content_type = gr.Radio(
choices=["news", "blog"],
value="news",
label="İçerik Tipi",
info="Oluşturulacak içeriğin türünü seçin"
)
language = gr.Radio(
choices=["tr", "en"],
value="tr",
label="Dil",
info="İçeriğin dilini seçin"
)
submit_btn = gr.Button("Oluştur", variant="primary")
with gr.Column():
output_message = gr.Textbox(
label="Durum",
interactive=False
)
output_file = gr.File(
label="Oluşturulan Dosya",
interactive=False
)
submit_btn.click(
fn=app.process_audio_file,
inputs=[audio_input, content_type, language],
outputs=[output_message, output_file]
)
return interface
if __name__ == "__main__":
demo = create_ui()
demo.launch()