Spaces:
Running
Running
import gradio as gr | |
import os | |
from bedrock_client import get_anthropic_client, claude_stream_response | |
# Create Claude client via the official SDK | |
client = get_anthropic_client() | |
# Streaming chat handler | |
async def chat(user_message, history): | |
messages = history.copy() | |
messages.append({"role": "user", "content": user_message}) | |
full_response = "" | |
def run_generator(): | |
for chunk in claude_stream_response(messages, client): | |
yield chunk | |
for chunk in run_generator(): | |
full_response += chunk | |
yield messages + [{"role": "assistant", "content": full_response}] | |
# Append full assistant response to history | |
messages.append({"role": "assistant", "content": full_response}) | |
yield messages | |
# Gradio UI | |
with gr.Blocks() as demo: | |
gr.Markdown("# 🤖 Claude v2.1 Chatbot via Amazon Bedrock (`anthropic[bedrock]`)") | |
chatbot = gr.Chatbot(label="Claude v2.1", type="messages") | |
msg = gr.Textbox(placeholder="Ask Claude anything...", show_label=False) | |
state = gr.State([]) # chat history | |
clear = gr.Button("🧹 Clear Chat") | |
def clear_chat(): | |
return [], [] | |
msg.submit(chat, [msg, state], chatbot, queue=True) | |
msg.submit(lambda: "", None, msg) # clear input | |
clear.click(clear_chat, None, [chatbot, state]) | |
demo.queue().launch() |