InvestChat / app.py
zabi8's picture
Update app.py
05f293d verified
Raw
History Blame Contribute Delete
3.94 kB
import gradio as gr
from huggingface_hub import InferenceClient
client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
example_questions_en = [
"What is a TFSA?",
"What are good long-term stocks?",
"How does compound interest work?",
"What is the difference between ETFs and stocks?",
"How do I start investing with a small budget?",
"What are dividend stocks and how do they work?",
"How do I diversify my portfolio?",
"What are the risks of investing in stocks?"
]
example_questions_fr = [
"Qu'est-ce qu'un CELI?",
"Quelles sont de bonnes actions à long terme?",
"Comment fonctionne l'intérêt composé?",
"Quelle est la différence entre les FNB et les actions?",
"Comment commencer à investir avec un petit budget?",
"Qu'est-ce qu'une action à dividendes et comment fonctionne-t-elle?",
"Comment diversifier mon portefeuille?",
"Quels sont les risques d'investir en bourse?"
]
def respond(message, history, language):
if history is None:
history = []
if language == "English":
system_prompt = (
"You are a financial assistant specializing in investment strategies. "
"Provide concise and direct answers to each question. "
"Keep answers short and simple, offering general information, not specific advice."
)
else:
system_prompt = (
"Vous êtes un assistant financier spécialisé dans les stratégies d'investissement. "
"Fournissez des réponses concises et directes à chaque question. "
"Gardez les réponses courtes et simples, en offrant des informations générales, pas des conseils spécifiques."
)
messages = [{"role": "system", "content": system_prompt}]
for user_msg, bot_reply in history:
if user_msg:
messages.append({"role": "user", "content": user_msg})
if bot_reply:
messages.append({"role": "assistant", "content": bot_reply})
messages.append({"role": "user", "content": message})
reply = client.chat_completion(
messages=messages,
max_tokens=256,
temperature=0.7,
top_p=0.95,
)
response = reply.choices[0].message.content
return response
def submit_message(message, history, language):
if not message.strip():
return history, ""
bot_response = respond(message, history, language)
history.append((message, bot_response))
return history, ""
def update_suggested_questions(language):
questions = example_questions_en if language == "English" else example_questions_fr
return gr.update(choices=questions)
def reset_chat():
return [], "", []
with gr.Blocks() as demo:
state = gr.State([])
with gr.Row():
chatbot = gr.Chatbot(height=450)
language_toggle = gr.Radio(
["English", "Français"],
label="Select Language / Sélectionner la langue",
value="English"
)
suggested_questions = gr.Dropdown(choices=example_questions_en, label="Suggested Questions")
user_input = gr.Textbox(label="Your Message", elem_id="user_input")
send_button = gr.Button("Send", elem_id="send_button")
new_chat_button = gr.Button("New Chat", elem_id="new_chat_button")
send_button.click(
fn=submit_message,
inputs=[user_input, state, language_toggle],
outputs=[chatbot, user_input],
queue=False
)
language_toggle.change(
fn=update_suggested_questions,
inputs=language_toggle,
outputs=suggested_questions
)
suggested_questions.change(
fn=lambda q: ([], q),
inputs=suggested_questions,
outputs=[state, user_input]
)
new_chat_button.click(
fn=reset_chat,
inputs=[],
outputs=[chatbot, user_input, state]
)
if __name__ == "__main__":
demo.launch(share=True)