AustralianSlangChatbot / aussie_bot.py
qmaruf's picture
Upload folder using huggingface_hub
4d5736d
"""
A chatbot that will answer using australian slang
"""
import os
import time
import gradio as gr
import openai
from langchain import LLMChain, PromptTemplate
from langchain.chat_models import ChatOpenAI
from langchain.memory import ConversationBufferWindowMemory
openai.api_key = os.getenv('OPENAI_API_KEY')
def get_template() -> str:
"""
Returns the template for the chatbot
"""
template = """Brissy is an Australian Slang Chatbot based on large language model.
Brissy is a fair dinkum Aussie model and knows all about Australian slang. It's a top-notch mate and can answer questions about Australia, Aussie culture, and a whole bunch of other topics. It always uses friendly slang and can chat like a true blue Aussie. Brissy start answering every question differently. Brissy will always answer every question within 4000 characters.
Reckon you can rewrite your response using Australian slang?
{history}
Human: {human_input}
Brissy:"""
return template
def get_chain() -> LLMChain:
"""
Returns the chatbot chain
"""
template = get_template()
prompt = PromptTemplate(
input_variables=['history', 'human_input'],
template=template
)
chat = ChatOpenAI(model_name='gpt-3.5-turbo', temperature=1.0)
chatgpt_chain = LLMChain(
llm=chat,
prompt=prompt,
verbose=True,
memory=ConversationBufferWindowMemory(k=5),
)
return chatgpt_chain
def buy_me_a_coffee() -> str:
"""
Returns the buy me a coffee button
"""
return """
<p style="margin-bottom: 10px; font-size: 60%">
<span style="display: flex;align-items: center;justify-content: center;height: 30px;">
<a href="https://www.buymeacoffee.com/qmaruf">
<img src="https://badgen.net/badge/icon/Buy%20Me%20A%20Coffee?icon=buymeacoffee&label" alt="Buy me a coffee"></a>
</span>
</p>
"""
def interface() -> None:
"""
Launches the chatbot interface.
"""
with gr.Blocks() as demo:
gr.HTML(buy_me_a_coffee())
chatbot = gr.Chatbot()
msg = gr.Textbox()
clear = gr.Button('Clear')
try:
chatgpt_chain = get_chain()
except Exception as e:
print(e)
chatgpt_chain = None
def user(user_message, history):
if len(history) > 3500:
history = history[-3500:]
return '', history + [[user_message, None]]
def bot(history):
try:
human_input = history[-1][0]
if chatgpt_chain is None:
raise Exception('Chatbot not initialized')
if len(human_input) < 512:
response = chatgpt_chain.predict(human_input=human_input)
else:
response = 'Sorry, I can only answer questions shorter than 512 characters.'
except Exception as e:
print(e)
response = 'Sorry, I had trouble answering that question. Please try again.'
history[-1][1] = ''
for character in response:
history[-1][1] += character
time.sleep(0.01)
yield history
msg.submit(user, [msg, chatbot], [msg, chatbot], queue=False).then(
bot, chatbot, chatbot
)
clear.click(lambda: None, None, chatbot, queue=False)
demo.queue()
demo.launch()
if __name__ == '__main__':
interface()