claude_caching / app.py
formix
*
8d4949b
raw
history blame contribute delete
No virus
3.17 kB
import gradio as gr
import anthropic
from anthropic.types import ContentBlock
from time import time
def claude_conversation(message, history, api_key, uploaded_file):
if not api_key:
return "Please enter your Anthropic API key."
if uploaded_file is None:
return "Please upload a text document."
client = anthropic.Anthropic(api_key=api_key)
# Read the uploaded file content
try:
if hasattr(uploaded_file, 'read'):
text = uploaded_file.read().decode('utf-8')
else:
# If it's already a string (filename), we need to open and read the file
with open(uploaded_file, 'r') as file:
text = file.read()
except Exception as e:
return f"Error reading file: {str(e)}"
# Prepare the conversation history
messages = []
for human, assistant in history:
if human.strip(): # Only add non-empty human messages
messages.append({"role": "user", "content": human})
if assistant.strip(): # Only add non-empty assistant messages
messages.append({"role": "assistant", "content": assistant})
# Add the new message if it's not empty
if message.strip():
messages.append({"role": "user", "content": message})
else:
return "Please enter a non-empty message."
try:
# Make the API call
start = time()
response = client.beta.prompt_caching.messages.create(
model="claude-3-5-sonnet-20240620",
max_tokens=1024,
system=[
{
"type": "text",
"text": "You are an AI assistant tasked with analyzing legal documents."
},
{
"type": "text",
"text": f"Document content:\n\n{text}",
"cache_control": {"type": "ephemeral"}
}
],
messages=messages
)
end = time()
print(f"Elapsed time: {end - start} seconds")
print (response)
return response.content[0].text
except anthropic.APIError as e:
return f"An error occurred: {str(e)}"
# Create the Gradio interface
with gr.Blocks() as demo:
gr.Markdown("# Claude Prompt Caching Demo")
gr.Markdown("Upload a lengthy document and ask questions about it.")
api_key_input = gr.Textbox(label="Enter your Anthropic API key", type="password")
file_upload = gr.File(label="Upload text document", file_types=[".txt"])
chatbot = gr.Chatbot()
msg = gr.Textbox()
submit_button = gr.Button("Submit")
clear = gr.ClearButton([msg, chatbot])
def respond(message, chat_history, api_key, uploaded_file):
bot_message = claude_conversation(message, chat_history, api_key, uploaded_file)
chat_history.append((message, bot_message))
return "", chat_history
submit_button.click(respond, inputs=[msg, chatbot, api_key_input, file_upload], outputs=[msg, chatbot])
msg.submit(respond, inputs=[msg, chatbot, api_key_input, file_upload], outputs=[msg, chatbot])
# Launch the app
demo.launch()