Spaces:
No application file
No application file
import chainlit as cl | |
import httpx | |
import json # noqa | |
from typing import Dict | |
from dotenv import load_dotenv | |
import uuid | |
import logging | |
logging.basicConfig( | |
level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s" | |
) | |
logger = logging.getLogger(__name__) | |
load_dotenv() | |
API_ENDPOINT = "https://artisan-chatbot.onrender.com/chat" | |
class ChatAPI: | |
def __init__(self): | |
self.client = httpx.AsyncClient( | |
headers={"Content-Type": "application/json"}, | |
timeout=30.0, | |
) | |
async def send_message(self, message: str, session_id: str) -> Dict: | |
try: | |
response = await self.client.post( | |
API_ENDPOINT, json={"message": message, "session_id": session_id} | |
) | |
response.raise_for_status() | |
return response.json() | |
except httpx.HTTPError as e: | |
raise Exception(f"HTTP error occurred: {str(e)}") | |
except Exception as e: | |
raise Exception(f"Error sending message: {str(e)}") | |
chat_api = ChatAPI() | |
async def set_starters(): | |
return [ | |
cl.Starter( | |
label="Can Ava access my CRM?", | |
message="Can Ava access my CRM?", | |
), | |
cl.Starter( | |
label="Ava, the Top-Rated AI SDR on the market", | |
message="How can Ava help in automating my SDR workflows in my sales pipelines or my outbound demand generation process?", | |
), | |
cl.Starter( | |
label="Create a Campaign", | |
message="How can Artisan help in creating a campaign to engage potential leads effectively?", | |
), | |
cl.Starter( | |
label="Generate Sample Email", | |
message="Explain the 'Generate Sample Email feature and how to use it via the Artisan Platform.", | |
), | |
] | |
# @cl.on_chat_start | |
# async def start(): | |
# """ | |
# Initializes the chat session. | |
# """ | |
# await cl.Message( | |
# content="π Hello! I'm your Artisan AI Support Assistant. How can I help you today?", | |
# ).send() | |
async def main(message: cl.Message): | |
""" | |
Handles incoming chat messages. | |
""" | |
session_id = cl.user_session.get("id") | |
if not session_id: | |
session_id = str(uuid.uuid4()) | |
cl.user_session.set("id", session_id) | |
try: | |
response = await chat_api.send_message( | |
message=message.content, session_id=session_id | |
) | |
logger.info(f"API Response: {response}") | |
# Update the message with the API response | |
llm_response = response.get("response", "No response received.") | |
await cl.Message(content=llm_response).send() | |
# If source references are available, append them as additional elements | |
# metadata = response.get("metadata", {}) | |
# if "sources" in metadata: | |
# sources = metadata["sources"] | |
# elements = [ | |
# cl.Text(name=f"Source {i+1}", content=source) | |
# for i, source in enumerate(sources) | |
# ] | |
# await msg.update(elements=elements) | |
except Exception as e: | |
error_msg = f"Error: {str(e)}" | |
msg = cl.Message(content=error_msg) | |
await msg.update() | |
await cl.ErrorMessage(content=error_msg).send() | |