Spaces:
Sleeping
Sleeping
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() |