File size: 3,796 Bytes
86b946a
 
9030e5b
bfaeb19
ac37763
bfaeb19
a6532a3
 
 
 
b453ff2
a6532a3
 
 
 
 
 
 
 
b453ff2
 
 
 
 
a6532a3
b453ff2
a6532a3
 
b453ff2
 
 
a6532a3
 
 
b453ff2
a6532a3
 
 
 
 
 
b453ff2
 
 
 
 
 
 
 
a6532a3
 
 
b453ff2
a6532a3
 
 
 
cab6a89
 
 
a6532a3
 
 
 
 
 
9030e5b
cab6a89
b453ff2
a6532a3
9030e5b
a6532a3
 
 
 
b453ff2
 
a6532a3
 
 
b453ff2
a6532a3
b453ff2
a6532a3
b453ff2
 
 
 
ac37763
 
 
 
b453ff2
ac37763
b453ff2
9030e5b
a6532a3
d06f4eb
883b37e
f845a0a
9030e5b
b453ff2
9030e5b
a197dc7
883b37e
b453ff2
 
 
 
 
9030e5b
b453ff2
e0d541d
b453ff2
 
ac37763
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
118
119
120
import streamlit as st
from gradio_client import Client
from st_audiorec import st_audiorec
from gtts import gTTS
from IPython.display import Audio, display

# Constants
TITLE = "AgriTure"
DESCRIPTION = """
----
This Project demonstrates a model fine-tuned by Achyuth. This Model is named as "AgriaTure". This Model helps the farmers and scientists to develop the art of agriculture and farming.
Hope this will be a Successful Project!!!
~Achyuth
----
"""

# 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 AgriaTure...', temperature=0.7, max_new_tokens=4096, Topp=0.5, Repetitionpenalty=1.2):
    with st.status("Starting client"):
        client = Client("https://huggingface-projects-llama-2-7b-chat.hf.space/")
        st.write("Requesting Audio Transcriber")
    with st.status("Requesting AgriTure v1"):
        st.write("Requesting API")
        response = client.predict(
            message,
            system_prompt,
            max_new_tokens,
            temperature,
            Topp,
            500,
            Repetitionpenalty,
            api_name="/chat"
        )
        st.write("Done")
        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 AgriTure 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 Given Audio โœ”")

    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)

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

    # Play the generated speech
    display(Audio(speech_file, autoplay=True))

    # 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
    display(Audio(speech_file, autoplay=True))

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