File size: 4,503 Bytes
90712a8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5af6b15
90712a8
 
 
 
 
 
 
 
 
 
 
 
44be91e
90712a8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44be91e
90712a8
 
 
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
123
124
125
126
127
128
129
130
131
132
133
134
import gradio as gr
import requests
import time
import ast
import os

## Adding the Theme here ##

wordlift_theme = gr.themes.Soft(
    primary_hue=gr.themes.Color(
        c50="#007AFF",
        c100="rgba(0, 122, 255, 0.2)",
        c200="#007AFF",
        c300="rgba(0, 122, 255, 0.32)",
        c400="rgba(0, 122, 255, 0.32)",
        c500="rgba(0, 122, 255, 1.0)",
        c600="rgba(0, 122, 255, 1.0)",
        c700="rgba(0, 122, 255, 0.32)",
        c800="rgba(0, 122, 255, 0.32)",
        c900="#007AFF",
        c950="#007AFF",
    ),
    secondary_hue=gr.themes.Color(
        c50="#576b95",
        c100="#576b95",
        c200="#576b95",
        c300="#576b95",
        c400="#576b95",
        c500="#576b95",
        c600="#576b95",
        c700="#576b95",
        c800="#576b95",
        c900="#576b95",
        c950="#576b95",
    ),
    neutral_hue=gr.themes.Color(
        name="gray",
        c50="#f9fafb",
        c100="#f3f4f6",
        c200="#e5e7eb",
        c300="#d1d5db",
        c400="#B2B2B2",
        c500="#808080",
        c600="#636363",
        c700="#515151",
        c800="#393939",
        c900="#272727",
        c950="#171717",
    ),
    radius_size=gr.themes.sizes.radius_sm,
).set(
    button_primary_background_fill="#2196F3",
    button_primary_background_fill_dark="#2196F3",
    button_primary_background_fill_hover="#007AFF",
    button_primary_border_color="#2196F3",
    button_primary_border_color_dark="#2196F3",
    button_primary_text_color="#FFFFFF",
    button_primary_text_color_dark="#FFFFFF",
    button_secondary_background_fill="#F2F2F2",
    button_secondary_background_fill_dark="#2B2B2B",
    button_secondary_text_color="#393939",
    button_secondary_text_color_dark="#FFFFFF",
    # background_fill_primary="#F7F7F7",
    # background_fill_primary_dark="#1F1F1F",
    block_title_text_color="*primary_500",
    block_title_background_fill="*primary_100",
    input_background_fill="#F6F6F6",
)

# _________________________________________________________________#


def main():
    # Load CSS
    css_path = os.path.join(os.getcwd(), "assets", "custom.css")
    app = gr.Interface(fn=response, inputs=[msg, chatbot], outputs=[msg, chatbot], server_name="localhost")
    app.load_css(css_path)
    app.launch(share=True, inline=True)

def bot(user_message, history):
    # POST request to the API
    response = requests.post(
        'https://langchain-cd369f3121.wolf.jina.ai/ask',
        headers={'accept': 'application/json', 'Content-Type': 'application/json'},
        json={"input": user_message, "envs": {}}
    )
    # Extract the bot's response from the API response
    data_str = response.json()['result']

    # Print out the response status and content for debugging
    print("Response status:", response.status_code)
    print("Response content:", response.content)

    # Try to parse the response as a tuple
    try:
        data = ast.literal_eval(data_str)
        # Check if the parsed data is a tuple with sources
        if isinstance(data, tuple) and len(data) == 2:
            bot_message = data[0]
            sources = ', '.join(data[1])
            # Update the chat history with the bot's response and sources
            history.append([user_message, f"{bot_message}\n\nLearn more: {sources}"])
        else:
            raise ValueError  # Not a tuple with sources, treat it as a plain text message
    except (SyntaxError, ValueError):
        # The response is just a plain text message
        bot_message = data_str
        # Update the chat history with the bot's response
        history.append([user_message, bot_message])

    return history

#gr.Chatbot.postprocess = postprocess

with open("assets/custom.css", "r", encoding="utf-8") as f:
    customCSS = f.read()

with gr.Blocks(css=customCSS, theme=wordlift_theme) as demo:
    chatbot = gr.Chatbot(elem_id="chuanhu_chatbot").style(height="100%")
    msg = gr.Textbox(label=" 🪄", placeholder="Type a message to the bot and press enter").style(container=False)
    clear = gr.Button("🧹 Start fresh")

    response = msg.submit(bot, [msg, chatbot], [chatbot], queue=False)
    response.then(lambda: gr.update(interactive=True), None, [msg], queue=False)

    clear.click(lambda: None, None, chatbot, queue=False)

#demo = gr.Interface(fn=bot, inputs=msg, outputs=chatbot, theme="dark", title="WL-Chat", description="A chatbot to interact with WordLift's blog.")

demo.queue()
demo.launch(inline=True)

if __name__ == "__main__":
    main()