File size: 4,006 Bytes
3dfde99
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import logging
import gradio as gr
import os
import zipfile
import pydub
import datetime

import openai
import jwt

from summarizer import count_tokens,main_summarizer_action_items,main_summarizer_meet
from decouple import config

DEBUG = True
API_KEY = config('API_KEY')
model_id = 'whisper-1'
SECRET_KEY = "$§%§$secret"

# Set the summarization parameters
# Set the maximum chunk size and tokens per chunk
max_chunk_size = 2000
max_tokens_per_chunk = 500
temperature = 0.7
top_p = 0.5
frequency_penalty = 0.5
temp_dir = os.path.join(os.path.dirname(__file__), 'temp')

title = description = article = "Meeting Summariser ⚡️ "

logger = logging.getLogger("Summariser")
logger.setLevel(logging.INFO)
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
formatter = logging.Formatter("%(asctime)s;%(levelname)s;%(message)s", "%Y-%m-%d %H:%M:%S")
ch.setFormatter(formatter)
logger.addHandler(ch)

def authentication(username, password):
    if username == "admin" and password == "admin":
        return True


def transcribe_audio(audio_file_path, temp_folder_path):
    if DEBUG:
        return "This is a test transcription"
    
    max_size_bytes = 20 * 1024 * 1024  # 24 MB

    if os.path.getsize(audio_file_path) <= max_size_bytes:
        media_file = open(audio_file_path, 'rb')
        response = openai.Audio.transcribe(
            api_key=API_KEY,
            model=model_id,
            file=media_file
        )
        return response['text']
    else:
        sound = pydub.AudioSegment.from_file(audio_file_path, format="mp3")
        chunks = pydub.utils.make_chunks(sound, max_size_bytes)
        transcriptions = []
        for i, chunk in enumerate(chunks):
            print("chunk ", i)
            chunk_path = os.path.join(temp_folder_path, f"audio_chunk_{i}.mp3")
            chunk.export(chunk_path, format="mp3")
            response = openai.Audio.transcribe(api_key=API_KEY,model=model_id,file=open(chunk_path, 'rb'))
            transcriptions.append(response['text'])

        return ' '.join(transcriptions)

def download_files(transcription: str, summary: str):
    time_now = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
    # Create transcription file
    transcript_file_path = os.path.join(temp_dir, f'transcription_{time_now}.txt')
    with open(transcript_file_path, 'w') as f:
        f.write(transcription)
    # Create summary file
    summary_file_path = os.path.join(temp_dir, f'summary_{time_now}.txt')
    with open(summary_file_path, 'w') as f:
        f.write(summary)
    # Create zip file
    zip_file_path = os.path.join(temp_dir, 'download.zip')
    with zipfile.ZipFile(zip_file_path, 'w', zipfile.ZIP_DEFLATED) as zip_file:
        # Add transcription file to zip
        zip_file.write(transcript_file_path, 'transcription.txt')
        # Add summary file to zip
        zip_file.write(summary_file_path, 'summary.txt')
    return zip_file_path
    
def clean_trancript(text):
    return text

def main_meet_summarizer(audio_file):
    
    summary = ""
    transcript = ""
    action_items = ""
    
    print("Starting Transcription")
    transcript = transcribe_audio(audio_file,temp_dir)
    print(f"Starting Summarization | {count_tokens(transcript)}")
    cleaned_transcript = clean_trancript(transcript)
    summary = main_summarizer_meet(cleaned_transcript, debug=DEBUG)
    action_items = main_summarizer_action_items(cleaned_transcript, debug=DEBUG)
    print("Finished Summarization")
    return summary,transcript,download_files(transcription = transcript, summary = (summary + action_items))


summarizer_interface = gr.Interface(
    fn=main_meet_summarizer,
    inputs=[gr.inputs.Audio(source='upload', type='filepath', label='Audio File')],
    outputs=[gr.outputs.Textbox(label='Summary'), gr.outputs.Textbox(label='Transcription'),gr.outputs.File(label="Download files here"),],
    title='Summarizer',
    description='Transcribe speech in an audio file & summarize it.',
)

summarizer_interface.launch(debug=True)