File size: 3,938 Bytes
fa9a583
 
 
 
 
 
 
 
 
 
cd5e862
fa9a583
cd5e862
fa9a583
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# Transcript_comparison.py
# Description: Gradio UI tab for comparing transcripts
#
# Imports
import logging

#
# External Imports
import gradio as gr

from App_Function_Libraries.DB.DB_Manager import get_transcripts
from App_Function_Libraries.Gradio_UI.Gradio_Shared import browse_items
from App_Function_Libraries.Utils.Utils import format_transcription


#
# Local Imports

def get_transcript_options(media_id):
    transcripts = get_transcripts(media_id)
    return [f"{t[0]}: {t[1]} ({t[3]})" for t in transcripts]


def update_transcript_options(media_id):
    options = get_transcript_options(media_id)
    return gr.update(choices=options), gr.update(choices=options)

def compare_transcripts(media_id, transcript1_id, transcript2_id):
    try:
        transcripts = get_transcripts(media_id)
        transcript1 = next((t for t in transcripts if t[0] == int(transcript1_id)), None)
        transcript2 = next((t for t in transcripts if t[0] == int(transcript2_id)), None)

        if not transcript1 or not transcript2:
            return "One or both selected transcripts not found."

        comparison = f"Transcript 1 (Model: {transcript1[1]}, Created: {transcript1[3]}):\n\n"
        comparison += format_transcription(transcript1[2])
        comparison += f"\n\nTranscript 2 (Model: {transcript2[1]}, Created: {transcript2[3]}):\n\n"
        comparison += format_transcription(transcript2[2])

        return comparison
    except Exception as e:
        logging.error(f"Error in compare_transcripts: {str(e)}")
        return f"Error comparing transcripts: {str(e)}"


def create_compare_transcripts_tab():
    with gr.TabItem("Compare Transcripts"):
        gr.Markdown("# Compare Transcripts")

        with gr.Row():
            search_query_input = gr.Textbox(label="Search Query", placeholder="Enter your search query here...")
            search_type_input = gr.Radio(choices=["Title", "URL", "Keyword", "Content"], value="Title", label="Search By")
            search_button = gr.Button("Search")

        with gr.Row():
            media_id_output = gr.Dropdown(label="Select Media Item", choices=[], interactive=True)
            media_mapping = gr.State({})

        media_id_input = gr.Number(label="Media ID", visible=False)
        transcript1_dropdown = gr.Dropdown(label="Transcript 1")
        transcript2_dropdown = gr.Dropdown(label="Transcript 2")
        compare_button = gr.Button("Compare Transcripts")
        comparison_output = gr.Textbox(label="Comparison Result", lines=20)

        def update_media_dropdown(search_query, search_type):
            results = browse_items(search_query, search_type)
            item_options = [f"{item[1]} ({item[2]})" for item in results]
            new_item_mapping = {f"{item[1]} ({item[2]})": item[0] for item in results}
            return gr.update(choices=item_options), new_item_mapping

        search_button.click(
            fn=update_media_dropdown,
            inputs=[search_query_input, search_type_input],
            outputs=[media_id_output, media_mapping]
        )

        def load_selected_media_id(selected_media, media_mapping):
            if selected_media and media_mapping and selected_media in media_mapping:
                media_id = media_mapping[selected_media]
                return media_id
            return None

        media_id_output.change(
            fn=load_selected_media_id,
            inputs=[media_id_output, media_mapping],
            outputs=[media_id_input]
        )

        media_id_input.change(update_transcript_options, inputs=[media_id_input],
                              outputs=[transcript1_dropdown, transcript2_dropdown])
        compare_button.click(compare_transcripts, inputs=[media_id_input, transcript1_dropdown, transcript2_dropdown],
                             outputs=[comparison_output])