ChatbotNotionDB / app.py
adriiita's picture
Update app.py
2af38a8 verified
import os
import gradio as gr
from groq import Groq
import requests
import re
groq_client = Groq(
api_key=os.environ.get("GROQ_API_KEY"),
)
NOTION_TOKEN = os.environ.get("NOTION_TOKEN")
NOTION_PAGE_ID = "4fc0a081f0a84257879d6f7638e368b9" # Replace with your actual page ID
def format_text_for_notion(text):
# Split the text into lines
lines = text.split('\n')
formatted_text = []
for line in lines:
# Check if the line is a bullet point
if line.strip().startswith('•') or line.strip().startswith('-'):
formatted_text.append({
"type": "bulleted_list_item",
"bulleted_list_item": {
"rich_text": [{"type": "text", "text": {"content": line.strip()[2:].strip()}}]
}
})
else:
# Check for bold text (assuming it's wrapped in ** or __)
bold_parts = re.split(r'(\*\*.*?\*\*|__.*?__)', line)
rich_text = []
for part in bold_parts:
if part.startswith('**') and part.endswith('**'):
rich_text.append({
"type": "text",
"text": {"content": part[2:-2]},
"annotations": {"bold": True}
})
elif part.startswith('__') and part.endswith('__'):
rich_text.append({
"type": "text",
"text": {"content": part[2:-2]},
"annotations": {"bold": True}
})
elif part:
rich_text.append({
"type": "text",
"text": {"content": part}
})
formatted_text.append({
"type": "paragraph",
"paragraph": {
"rich_text": rich_text
}
})
return formatted_text
def store_conversation(user_input, bot_response):
url = f"https://api.notion.com/v1/blocks/{NOTION_PAGE_ID}/children"
headers = {
"Authorization": f"Bearer {NOTION_TOKEN}",
"Content-Type": "application/json",
"Notion-Version": "2022-06-28"
}
formatted_bot_response = format_text_for_notion(bot_response)
data = {
"children": [
{
"object": "block",
"type": "paragraph",
"paragraph": {
"rich_text": [
{
"type": "text",
"text": {"content": "User: "},
"annotations": {"bold": True}
},
{
"type": "text",
"text": {"content": user_input},
"annotations": {"bold": True}
}
]
}
},
{
"object": "block",
"type": "paragraph",
"paragraph": {
"rich_text": [
{
"type": "text",
"text": {"content": "Bot: "},
"annotations": {"bold": True}
}
]
}
},
*formatted_bot_response
]
}
try:
response = requests.patch(url, headers=headers, json=data)
response.raise_for_status()
print("Conversation stored successfully")
except requests.exceptions.RequestException as e:
print(f"Error storing conversation: {str(e)}")
print(f"Response status code: {e.response.status_code}")
print(f"Response content: {e.response.content}")
print("Make sure the Notion page is shared with your integration and the page ID is correct.")
def chat_with_groq(user_input, additional_context=None):
chat_completion = groq_client.chat.completions.create(
messages=[
{
"role": "user",
"content": user_input,
}
],
model="llama-3.1-8b-instant",
)
bot_response = chat_completion.choices[0].message.content
store_conversation(user_input, bot_response)
return bot_response
demo = gr.ChatInterface(fn=chat_with_groq,
textbox=gr.Textbox(placeholder="Ask me any question"),
title="Hey NOPE", theme="Monochrome",
description="Welcome to the world of NOPE",
retry_btn=None,
undo_btn="Delete Previous",
clear_btn="Clear",)
if __name__ == "__main__":
print(f"Using Notion page ID: {NOTION_PAGE_ID}")
print("Make sure the Notion page is shared with your integration.")
demo.launch()