Sebbe33's picture
Update app.py
93f055c verified
import chainlit as cl
import os
import google.generativeai as genai
from dotenv import load_dotenv
from docling.document_converter import DocumentConverter
# Load environment variables
load_dotenv()
# Configure Gemini
GOOGLE_API_KEY = os.getenv("GEMINI_API_KEY")
if not GOOGLE_API_KEY:
raise ValueError("GEMINI_API_KEY not found in .env file")
genai.configure(api_key=GOOGLE_API_KEY)
model = genai.GenerativeModel('gemini-1.5-flash-latest')
converter = DocumentConverter()
@cl.on_chat_start
async def start_chat():
cl.user_session.set("document_content", "")
await cl.Message(
content="Hello! I'm a chatbot with document analysis capabilities. "
"Send me a URL starting with '/url' to analyze a document, "
"then ask questions about it. Example: `/url https://example.com/document.pdf`"
).send()
@cl.on_message
async def main(message: cl.Message):
user_message = message.content
# Handle URL input
if user_message.startswith("/url"):
try:
url = user_message[5:].strip()
msg = cl.Message(content=f"Processing document from {url}...")
await msg.send()
# Convert document
result = converter.convert(url)
document_content = result.document.export_to_markdown()
# Store in session
cl.user_session.set("document_content", document_content)
await cl.Message(
content=f"✅ Document loaded successfully! "
f"You can now ask questions about it."
).send()
return
except Exception as e:
await cl.Message(
content=f"❌ Error processing document: {str(e)}"
).send()
return
# Handle regular questions
document_content = cl.user_session.get("document_content")
if document_content:
# Combine document context with question
prompt = f"Document content:\n{document_content}\n\nQuestion: {user_message}\nAnswer:"
else:
prompt = user_message
# Generate response
response = model.generate_content(prompt)
# Send answer
await cl.Message(
content=response.text
).send()