File size: 1,707 Bytes
ced673d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
import gradio as gr
from mistralai.client import MistralClient
from mistralai.models.chat_completion import ChatMessage

api_key = os.environ["MISTRAL_API_KEY"]
model = "mistral-large-latest"

client = MistralClient(api_key=api_key)

header = r"""
<center>
    <h1>Mistral Chat</h1>
    <h2>
        This demo is for code reference, feel free to clone it and set your own Api key
    </h2>
    Get an Api Key: <a href='https://console.mistral.ai/api-keys'>Mistral Ai</a>
</center>
"""

footer = r"""
<center>
    <b>
        Demo for <a href='https://mistral.ai'>Mistral AI</a>
    </b>
</center>
"""

with gr.Blocks(title="Mistral Chat") as app:

    gr.HTML(header)

    with gr.Row(equal_height=True):
        with gr.Column():
            chatbot = gr.Chatbot()
            msg = gr.Textbox()
            clear = gr.Button("Clear")

            def user(user_message, history):
                return "", history + [[user_message, None]]

            def bot(history):
                
                messages = [
                    ChatMessage(role="user", content=history[-1][0])
                ]
                
                response = client.chat_stream(model=model, messages=messages)

                history[-1][1] = ""
                for chunk in response:
                    history[-1][1] += chunk.choices[0].delta.content
                    yield history

            msg.submit(user, [msg, chatbot], [msg, chatbot], queue=False).then(
                bot, chatbot, chatbot
            )
            clear.click(lambda: None, None, chatbot, queue=False)
    
    with gr.Row():
        gr.HTML(footer)
    
app.queue()
app.launch(share=False, debug=True, show_error=True)