File size: 5,053 Bytes
15fc611
78e2d06
93cf2fd
 
78e2d06
93cf2fd
 
 
78e2d06
aba8ba9
e30edef
78e2d06
78c334f
df44802
93cf2fd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36f02d2
93cf2fd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78e2d06
 
 
 
ce9a8c3
b2a615a
78e2d06
 
951feec
78e2d06
 
 
 
 
 
 
 
 
 
 
 
e30edef
af891d0
129f965
98f29e9
78e2d06
8af3424
78e2d06
21056ba
 
30af5b2
91de607
36f02d2
fd67f34
98f29e9
78e2d06
21056ba
6f74a68
38e745a
35fcfc0
91de607
36f02d2
35fcfc0
21056ba
7b72dca
d71656a
5518760
d71656a
8ad7151
93cf2fd
 
 
7aa87d8
a5bf1be
93cf2fd
 
 
 
 
 
af891d0
93cf2fd
 
 
 
 
 
ddfbd9a
93cf2fd
 
 
 
 
 
 
 
 
 
 
8ad7151
93cf2fd
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
import os
import openai
import torch 

import gradio as gr
import pytube as pt
from transformers import pipeline
from huggingface_hub import model_info

openai.api_key = os.getenv('OPEN_AI_KEY')
hf_t_key = ('HF_TOKEN_KEY')

MODEL_NAME = "openai/whisper-small" 
lang = "en"

device = 0 if torch.cuda.is_available() else "cpu"
pipe = pipeline(
    task="automatic-speech-recognition",
    model=MODEL_NAME,
    chunk_length_s=30,
    device=device,
)

pipe.model.config.forced_decoder_ids = pipe.tokenizer.get_decoder_prompt_ids(language=lang, task="transcribe")

def transcribe(microphone, file_upload):
    warn_output = ""
    if (microphone is not None) and (file_upload is not None):
        warn_output = (
            "WARNING: You've uploaded a recorded audio file . "
            "The recorded file from the microphone uploaded, transcribed and immediately discarded.\n"
        )

    elif (microphone is None) and (file_upload is None):
        return "ERROR: You have to either use the microphone or upload an audio file"

    file = microphone if microphone is not None else file_upload

    text = pipe(file)["text"]

    return warn_output + text


def _return_yt_html_embed(yt_url):
    video_id = yt_url.split("?v=")[-1]
    HTML_str = (
        f'<center> <iframe width="500" height="320" src="https://www.youtube.com/embed/{video_id}"> </iframe>'
        " </center>"
    )
    return HTML_str


def yt_transcribe(yt_url):
    yt = pt.YouTube(yt_url)
    html_embed_str = _return_yt_html_embed(yt_url)
    stream = yt.streams.filter(only_audio=True)[0]
    stream.download(filename="audio.mp3")

    text = pipe("audio.mp3")["text"]

    return html_embed_str, text


def predict(message, history):
    history_openai_format = []
    for human, assistant in history:
        history_openai_format.append({"role": "user", "content": human })
        history_openai_format.append({"role": "assistant", "content": assistant})
    history_openai_format.append({"role": "user", "content": message})

    response = openai.ChatCompletion.create(
        model='ft:gpt-3.5-turbo-1106:2292030-peach-tech::8cxzbHH4',
        messages= history_openai_format,
        temperature=1.0,
        stream=True
    )

    partial_message = ""
    for chunk in response:
        if len(chunk['choices'][0]['delta']) != 0:
            partial_message = partial_message + chunk['choices'][0]['delta']['content']
            yield partial_message

A1 = gr.ChatInterface(predict,
                title="COLLEAGUE",
                description="Your AI Productivity Assistant Suite that Chats, Writes, Transcribes, and Creates, Built By Peach State Innovation and Technology. Select The Corresponding Tab For Tool Accessibility",
                textbox=gr.Textbox(placeholder="Enter your question/prompt here..."),
                theme= gr.themes.Glass(primary_hue="neutral", neutral_hue="slate"),
                retry_btn=None,
                clear_btn="Clear Conversation")


A3 = gr.load(
             "models/Salesforce/blip-image-captioning-large",
              title=" ",
              description="Take a Photo or an Existing Image, Upload It, I'll Give You Its Description",
              outputs=[gr.Textbox(label="I see...")],
              theme= gr.themes.Glass(primary_hue="neutral", neutral_hue="slate"))

A4 = gr.load(
             "models/stabilityai/stable-diffusion-xl-base-1.0",
              inputs=[gr.Textbox(label="Enter Your Image Description")],
              outputs=[gr.Image(label="Image")],
              title=" ",
              description="Bring Your Imagination Into Existence And Create Unique Images With COLLEAGUE, Powered With Stable Diffusion",
              allow_flagging="never", 
              examples=["A gigantic celtic leprechaun wandering the streets of downtown Atlanta","A child eating pizza in a Brazilian favela"])

A5 = gr.load("models/google/gemma-7b",
              title=" ",
              description="Writer's block? Enter your words or sentences and let COLLEAGUE assist you")

mf_transcribe = gr.Interface(
    fn=transcribe,
    inputs=[
        gr.Microphone(type="filepath"),
        gr.Audio(type="filepath"),
    ],
    outputs="text",
    layout="horizontal",
    theme="huggingface",
    title=" ",
    description=(
        "Transcribe real-time speech and audio files of any length at the click of a button."
    ),
    allow_flagging="never",
)

yt_transcribe = gr.Interface(
    fn=yt_transcribe,
    inputs=[gr.Textbox(lines=1, placeholder="Paste your YouTube video URL/web address here", label="YouTube Video URL")],
    outputs=["html", "text"],
    layout="horizontal",
    theme="huggingface",
    title=" ",
    description=(
        "Transcribe YouTube videos at the click of a button."
      
    ),
    allow_flagging="never",
)

clp = gr.TabbedInterface([A1, A5, mf_transcribe, yt_transcribe, A3, A4], ["Chat", "Write", "Transcribe", "Transcribe YouTube Videos", "Describe", "Create"], theme= gr.themes.Glass(primary_hue="neutral", neutral_hue="slate"))
clp.queue().launch()