File size: 4,644 Bytes
86b946a
 
9030e5b
bfaeb19
a8498c0
bfaeb19
a6532a3
be3e24b
 
a6532a3
6d8c079
 
fdc0420
1559379
fdc0420
 
6d8c079
a6532a3
a8f2e67
a6532a3
b453ff2
 
 
 
 
a6532a3
b453ff2
a6532a3
 
b453ff2
 
 
a6532a3
 
 
a5a7a91
46cf1cd
dc92339
e20f46f
 
 
a6532a3
b453ff2
 
 
 
 
 
 
 
a6532a3
e20f46f
a6532a3
b453ff2
a6532a3
 
 
 
cab6a89
 
 
a6532a3
 
 
 
 
e20f46f
9030e5b
cab6a89
b453ff2
e20f46f
9030e5b
a6532a3
 
 
e20f46f
b453ff2
5cfdee0
a6532a3
 
 
b453ff2
a6532a3
d955865
a6532a3
b453ff2
 
 
 
 
a8498c0
b453ff2
9030e5b
a6532a3
d06f4eb
883b37e
f845a0a
9030e5b
d955865
9030e5b
a197dc7
883b37e
b453ff2
 
 
 
 
9030e5b
d955865
e0d541d
b453ff2
 
a8498c0
b453ff2
9030e5b
3405778
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
import streamlit as st
from gradio_client import Client
from st_audiorec import st_audiorec
from gtts import gTTS
import os

# Constants
TITLE = "๐—™๐—น๐—ฎ๐˜„๐—น๐—ฒ๐˜€๐˜€๐—”๐—œ"
DESCRIPTION = """"""

# Sidebar
with st.sidebar:
    temperatureSide = st.slider("Temperature", min_value=0.0, max_value=1.0, value=0.9, step=0.05)
    max_new_tokensSide = st.slider("Max Tokens", min_value=0.0, max_value=4096.0, value=512.0, step=64.0)
    ToppSide = st.slider("Top-P (Nucleus Sampling", min_value=0.0, max_value=1.0, value=0.6, step=0.05)
    RepetitionpenaltySide = st.slider("Repetetion Penalty", min_value=0.0, max_value=2.0, value=1.2, step=0.05)

# Initialize client
whisper_client = Client("https://sanchit-gandhi-whisper-large-v2.hf.space/")

# Function to convert text to speech using gTTS
def text_to_speech(text, lang='en'):
    tts = gTTS(text=text, lang=lang, slow=False)
    tts.save("response.mp3")
    return "response.mp3"

# Function to transcribe audio
def transcribe(wav_path):
    return whisper_client.predict(
        wav_path,
        "transcribe",
        api_name="/predict"
    )

# Prediction function
def predict(message, system_prompt='Your name is FlawlessAI. You are developed by Achyuth. Your developer is a 14-year old boy, who is intrested on AI and Machine Learning. Dont talk about your developers age, until the user asks for your developers age. You need to give the user a long and big text as output with useful information. When the user asks you for information, never exclaim the words, and directly come to point and answer to the user. You need to provide short text-answers, meaningful answers and directly to the point. Never miscalculate the calculations. You need to check and verify the answer and then provide to user, the correct answer. You need to provide accurate and correct information. If the user conveys with you in any language, you also should convey in the same language', temperature=0.7, max_new_tokens=2048, Topp=0.5, Repetitionpenalty=1.2):
    with st.status("sแด›แด€ส€แด›ษชษดษข แด„สŸษชแด‡ษดแด›..."):
        client = Client("https://huggingface-projects-llama-2-13b-chat.hf.space/")
        st.write("Requesting audio transcriber...")
    with st.status("Requesting Flawless-LLM..."):
        st.write("Requesting API...")
        response = client.predict(
            message,
            system_prompt,
            max_new_tokens,
            temperature,
            Topp,
            500,
            Repetitionpenalty,
            api_name="/chat"
        )
        st.write("Success โœ…")
        return response

# Streamlit UI
st.title(TITLE)
st.write(DESCRIPTION)

if "messages" not in st.session_state:
    st.session_state.messages = []

# Display chat messages from history on app rerun
for message in st.session_state.messages:
    with st.chat_message(message["role"], avatar=("๐Ÿง‘โ€๐Ÿ’ป" if message["role"] == 'human' else '๐Ÿฆ™')):
        st.markdown(message["content"])

textinput = st.chat_input("Ask FlawlessAI anything...")
wav_audio_data = st_audiorec()

if wav_audio_data is not None:
    with st.status("Transcribing audio..."):
        # save audio
        with open("audio.wav", "wb") as f:
            f.write(wav_audio_data)
        prompt = transcribe("audio.wav")
        st.write("Transcribed audio successfully โœ…")

    st.chat_message("human", avatar="๐Ÿ˜Ž").markdown(prompt)
    st.session_state.messages.append({"role": "human", "content": prompt})

    # transcribe audio
    response = predict(message=prompt)

    with st.chat_message("assistant", avatar='๐Ÿ”ฅ'):
        st.markdown(response)

    # Convert AI response to speech
    speech_file = text_to_speech(response)

    # Play the generated speech
    st.audio(speech_file, format="audio/mp3")

    # Add assistant response to chat history
    st.session_state.messages.append({"role": "assistant", "content": response})

# React to user input
if prompt := textinput:
    # Display user message in chat message container
    st.chat_message("human", avatar="๐Ÿ”ฅ").markdown(prompt)
    # Add user message to chat history
    st.session_state.messages.append({"role": "human", "content": prompt})

    response = predict(message=prompt)

    # Convert AI response to speech
    speech_file = text_to_speech(response)

    # Display assistant response in chat message container
    with st.chat_message("assistant", avatar='๐Ÿ”ฅ'):
        st.markdown(response)

    # Play the generated speech
    st.audio(speech_file, format="audio/mp3")

    # Add assistant response to chat history
    st.session_state.messages.append({"role": "assistant", "content": response})