File size: 1,504 Bytes
30feaee
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import cohere
import os

co = cohere.ClientV2(os.getenv("COHERE_API_KEY"))

def chat(message, history, system_prompt):
    messages = []
    if system_prompt:
        messages.append({"role": "system", "content": system_prompt})
    for item in history:
        messages.append({"role": item["role"], "content": item["content"]})
    messages.append({"role": "user", "content": message})

    stream = co.chat_stream(
        model="command-a-03-2025",
        messages=messages
    )

    response = ""
    for event in stream:
        if event.type == "content-delta":
            response += event.delta.message.content.text
            yield response


with gr.Blocks() as demo:
    gr.Markdown("## Chatbot Cohere (Gradio)")

    system_prompt = gr.Textbox(
        value="Tu es un assistant utile.",
        label="Prompt système"
    )

    chatbot = gr.Chatbot()
    msg = gr.Textbox(label="Message")

    def user_fn(message, history):
        return "", history + [{"role": "user", "content": message}]

    def bot_fn(history, system_prompt):
        message = history[-1]["content"]
        previous = history[:-1]
        history = history + [{"role": "assistant", "content": ""}]
        for chunk in chat(message, previous, system_prompt):
            history[-1]["content"] = chunk
            yield history

    msg.submit(user_fn, [msg, chatbot], [msg, chatbot], queue=False).then(
        bot_fn, [chatbot, system_prompt], chatbot
    )

demo.queue()
demo.launch()