File size: 3,936 Bytes
bf75e36
dbe86dc
bf75e36
dbe86dc
c74e6a3
7335d83
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7d76935
 
 
ad3cf41
 
7d76935
 
 
 
ad3cf41
 
7d76935
7335d83
6956a8c
7335d83
6956a8c
7335d83
 
 
5e3379b
7335d83
6956a8c
7335d83
fd6a777
5df9ce0
ad3cf41
9032410
3123805
fd6a777
7335d83
fd6a777
 
9032410
 
99e9daf
05f293d
fd6a777
 
05f293d
ba46af2
d345020
7335d83
 
f72e33a
ad3cf41
7d6f75f
ad3cf41
d8e3866
9032410
ad3cf41
6956a8c
7335d83
ad3cf41
9032410
 
 
 
 
ad3cf41
cdac148
9032410
7d6f75f
ad3cf41
d345020
9032410
05f293d
99e9daf
05f293d
 
9032410
344e851
9032410
344e851
99e9daf
9032410
 
399b998
33441e9
 
 
 
 
 
ad3cf41
 
 
 
 
 
bf75e36
05f293d
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
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)