Spaces:
Sleeping
Sleeping
File size: 4,545 Bytes
12654ba 78b9b84 12654ba b830cee 12654ba c34676c efdd6c6 12654ba 7e8476d 12654ba 0a4de8f 12654ba a77a669 c34676c a77a669 12654ba efdd6c6 e7058ea 3644676 e7058ea efdd6c6 12654ba e7058ea 12654ba a77a669 4313ed0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# ===========================================
# !-----app.py
# ===========================================
import json
import asyncio
import os
import re
import requests
from dotenv import load_dotenv
import chainlit as cl
from langchain import hub
from langchain_openai import OpenAI
from langchain.chains import LLMChain
from langchain_core.prompts import PromptTemplate
from langchain.memory.buffer import ConversationBufferMemory
load_dotenv()
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
auth_token = os.environ.get("DAYSOFF_API_TOKEN")
API_URL = "https://aivisions.no/data/daysoff/api/v1/booking/"
# You help users retrieve booking information associated with their booking IDs.Provide a conversational answer.
daysoff_assistant_template = """
You are a customer support assistant for Daysoff kundeservice and help users retrieve booking information associated with their booking IDs.
By default, you respond in Norwegian language.
You should always keep in mind the professionalism and warmth of a real human female customer support representative when you provide users with their
the reqyested booking information in a conversational answer.
Chat History: {chat_history}
Question: {question}
Answer:
"""
daysoff_assistant_prompt = PromptTemplate(
input_variables=["chat_history", "question"],
template=daysoff_assistant_template,
)
# -- async wrapper for requests.post
async def async_post_request(url, headers, data):
return await asyncio.to_thread(requests.post, url, headers=headers, json=data)
@cl.on_chat_start
def setup_multiple_chains():
llm = OpenAI(
model="gpt-3.5-turbo-instruct", # gpt-3.5-turbo-instruct
temperature=0.7,
openai_api_key=OPENAI_API_KEY,
max_tokens=2048,
top_p=0.9,
frequency_penalty=0.1,
presence_penalty=0.1,
)
conversation_memory = ConversationBufferMemory(
memory_key="chat_history",
#input_key="question", # ?
#output_key="text", # ?
max_len=30,
return_messages=True
)
llm_chain = LLMChain(
llm=llm,
prompt=daysoff_assistant_prompt,
memory=conversation_memory,
)
cl.user_session.set("llm_chain", llm_chain)
@cl.on_message
async def handle_message(message: cl.Message):
user_message = message.content
llm_chain = cl.user_session.get("llm_chain")
booking_pattern = r'\b[A-Z]{6}\d{6}\b'
match = re.search(booking_pattern, user_message)
if match:
bestillingskode = match.group()
headers = {
"Authorization": auth_token,
"Content-Type": "application/json"
}
payload = {"booking_id": bestillingskode}
try:
response = await async_post_request(API_URL, headers, payload)
response.raise_for_status()
booking_data = response.json()
if "booking_id" in booking_data:
table = (
"| Field | Info |\n"
"|:-----------|:---------------------|\n"
f"| Booking ID | {booking_data.get('booking_id', 'N/A')} |\n"
f"| Full Name | {booking_data.get('full_name', 'N/A')} |\n"
f"| Amount | {booking_data.get('amount', 0)} kr |\n"
f"| Check-in | {booking_data.get('checkin', 'N/A')} |\n"
f"| Check-out | {booking_data.get('checkout', 'N/A')} |\n"
f"| Address | {booking_data.get('address', 'N/A')} |\n"
f"| User ID | {booking_data.get('user_id', 0)} |\n"
f"| Info Text | {booking_data.get('infotext', 'N/A')} |\n"
f"| Included | {booking_data.get('included', 'N/A')} |"
)
await cl.Message(content=table).send()
else:
await cl.Message(content="Booking not found or invalid response.").send()
except requests.exceptions.RequestException as e:
await cl.Message(content=f"Request failed: {str(e)}").send()
else:
try:
response = await llm_chain.ainvoke({
"question": user_message,
"chat_history": ""
}, callbacks=[cl.AsyncLangchainCallbackHandler()])
await cl.Message(content=response["text"]).send()
except Exception as e:
await cl.Message(content=f"Error: {str(e)}").send()
|