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()