Yermia's picture
First init
5da9a16
import gradio as gr
import torch
from utils.speech_processor import SpeechProcessor
from utils.text_processor import TextProcessor
from utils.output_generator import OutputGenerator
import tempfile
import os
# Initialize processors
speech_processor = SpeechProcessor()
text_processor = TextProcessor()
output_generator = OutputGenerator()
def process_meeting(audio_file, language="id", summary_ratio=0.3):
"""
Main pipeline untuk memproses audio meeting
"""
try:
# Step 1: Speech Processing
gr.Info("🎀 Memproses audio...")
transcript_with_speakers = speech_processor.process_audio(
audio_file,
language=language
)
# Step 2: Text Processing & Summarization
gr.Info("πŸ“ Membuat ringkasan...")
summary = text_processor.summarize_transcript(
transcript_with_speakers,
ratio=summary_ratio
)
# Step 3: Information Extraction
gr.Info("πŸ” Mengekstrak informasi penting...")
extracted_info = text_processor.extract_key_information(
transcript_with_speakers
)
# Step 4: Generate Output
gr.Info("πŸ“„ Membuat notulensi...")
outputs = output_generator.generate_all_formats(
transcript_with_speakers,
summary,
extracted_info
)
return (
outputs['markdown'],
outputs['json'],
outputs['transcript_table'],
outputs['action_items_table'],
outputs['decisions_table']
)
except Exception as e:
gr.Error(f"Error: {str(e)}")
return None, None, None, None, None
# Gradio Interface
with gr.Blocks(title="πŸ€– AI Meeting Minutes Generator") as demo:
gr.Markdown("""
# πŸ€– AI Meeting Minutes Generator
Upload audio rapat Anda dan dapatkan notulensi otomatis dengan:
- 🎯 Identifikasi pembicara
- πŸ“ Ringkasan otomatis
- βœ… Action items
- πŸ“Š Keputusan penting
""")
with gr.Row():
with gr.Column():
audio_input = gr.Audio(
label="Upload Audio Rapat",
type="filepath",
sources=["upload", "microphone"]
)
with gr.Row():
language = gr.Dropdown(
choices=[
("Indonesia", "id"),
("English", "en")
],
value="id",
label="Bahasa"
)
summary_ratio = gr.Slider(
minimum=0.1,
maximum=0.5,
value=0.3,
step=0.05,
label="Rasio Ringkasan"
)
process_btn = gr.Button("πŸš€ Proses Audio", variant="primary")
with gr.Row():
with gr.Column():
gr.Markdown("### πŸ“„ Notulensi (Markdown)")
markdown_output = gr.Textbox(
label="Preview Notulensi",
lines=20,
max_lines=30
)
json_download = gr.File(
label="πŸ“₯ Download JSON"
)
with gr.Row():
with gr.Column():
gr.Markdown("### πŸ“Š Transkrip Lengkap")
transcript_table = gr.Dataframe(
headers=["Waktu", "Pembicara", "Teks"],
label="Transkrip dengan Pembicara"
)
with gr.Row():
with gr.Column():
gr.Markdown("### βœ… Action Items")
action_items_table = gr.Dataframe(
headers=["Action Item", "Penanggung Jawab", "Timestamp"],
label="Daftar Action Items"
)
with gr.Column():
gr.Markdown("### πŸ“Œ Keputusan")
decisions_table = gr.Dataframe(
headers=["Keputusan", "Pembicara", "Timestamp"],
label="Daftar Keputusan"
)
# Process button action
process_btn.click(
fn=process_meeting,
inputs=[audio_input, language, summary_ratio],
outputs=[
markdown_output,
json_download,
transcript_table,
action_items_table,
decisions_table
]
)
# Examples
gr.Examples(
examples=[
["examples/meeting_sample_id.wav", "id", 0.3],
["examples/meeting_sample_en.wav", "en", 0.25]
],
inputs=[audio_input, language, summary_ratio]
)
if __name__ == "__main__":
demo.launch()