File size: 2,510 Bytes
d7590e5
89a66cd
d7590e5
 
 
 
 
 
 
 
 
 
 
 
 
4594618
89a66cd
48243c1
4594618
48243c1
 
 
 
 
 
 
d7590e5
48243c1
 
 
 
 
 
 
 
d7590e5
89a66cd
48243c1
d7590e5
89a66cd
48243c1
 
89a66cd
 
 
 
 
 
 
 
 
 
 
d7590e5
48243c1
d7590e5
48243c1
 
 
 
 
 
4594618
48243c1
 
 
4594618
48243c1
d7590e5
 
48243c1
 
 
 
 
d7590e5
4594618
 
 
 
 
d7590e5
48243c1
 
 
d7590e5
 
 
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
import logging
from typing import Final, List, Union

import gradio as gr
from gradio import ChatMessage

from agent import BasicAgent

MAX_INPUT_CHARS: Final[int] = 4000

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

agent = BasicAgent()


def submit(user_message: str, history: List[Union[ChatMessage, dict]]):
    history = history or []

    logger.info(f"User Message: {user_message}")

    if not user_message:
        return history + [
            ChatMessage(role="user", content=user_message),
            ChatMessage(role="assistant", content="Input too short."),
        ], ""

    if len(user_message) > MAX_INPUT_CHARS:
        return history + [
            ChatMessage(role="user", content=user_message),
            ChatMessage(
                role="assistant",
                content=f"Input too long; please shorten to under {MAX_INPUT_CHARS} characters.",
            ),
        ], ""

    # Add user message to history
    history = history + [ChatMessage(role="user", content=user_message)]

    # Build prompt from last messages
    last_n = 6
    prompt_parts = []
    for msg in history[-last_n:]:
        # Handle both ChatMessage objects and dicts
        if isinstance(msg, dict):
            role = msg.get("role", "user")
            content = msg.get("content", "")
        else:
            role = msg.role
            content = msg.content

        prefix = "User:" if role == "user" else "Assistant:"
        prompt_parts.append(f"{prefix} {content}")

    prompt = "\n".join(prompt_parts) + "\nAssistant:"

    try:
        answer = agent(prompt)
        logger.info(f"Agent Response: {answer}")
    except Exception as e:
        logger.error(f"Agent error: {e}")
        answer = "Sorry, I encountered an error. Please try again."

    # Add agent response to history
    history = history + [ChatMessage(role="assistant", content=str(answer))]
    logger.info(f"Updated history: {history}")

    return history, ""


with gr.Blocks(title="BasicAgent Chat") as demo:
    chatbot = gr.Chatbot()
    message = gr.Textbox()
    clear_btn = gr.ClearButton([message, chatbot])
    submit_btn = gr.Button("Send")

    message.submit(
        submit,
        inputs=[message, chatbot],
        outputs=[chatbot, message],
    )

    submit_btn.click(submit, inputs=[message, chatbot], outputs=[chatbot, message])
    clear_btn.click(lambda: [], None, chatbot)


if __name__ == "__main__":
    demo.launch(server_name="0.0.0.0", server_port=7860)