# ---------------------------------------------------for backend looks------------------------------------------------- #with open('/usr/local/lib/python3.10/site-packages/transformers/utils/chat_template_utils.py', 'r') as file: #content = file.read() #print("base.py:", content) # ------------------------------------------------------the end-------------------------------------------------------- # =========================================== # !-----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("CHAINLIT_AUTH_SECRET") # API endpoint API_URL = "https://aivisions.no/data/daysoff/api/v1/booking/" # LLM prompt template daysoff_assistant_template = """ #You are a customer support assistant (’kundeservice AI assistent’) for Daysoff. #By default, you respond in Norwegian language, using a warm, direct, and professional tone. Your expertise is exclusively in retrieving booking information for a given booking ID assistance related to to this. You do not provide information outside of this scope. If a question is not about this topic, respond with "Jeg driver faktisk kun med henvendelser omkring bestillingsinformasjon. Gjelder det andre henvendelser må du nok kontakte kundeservice på kundeservice@daysoff.no😊" """ 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", 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", 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: await cl.Message( content=f""" Booking Info: - Booking ID: {booking_data.get('booking_id', 'N/A')} - Full Name: {booking_data.get('full_name', 'N/A')} - Amount: {booking_data.get('amount', 0)} - Check-in: {booking_data.get('checkin', 'N/A')} - Check-out: {booking_data.get('checkout', 'N/A')} - Address: {booking_data.get('address', 'N/A')} - User ID: {booking_data.get('user_id', 0)} - Info Text: {booking_data.get('infotext', 'N/A')} - Included: {booking_data.get('included', 'N/A')} """ ).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: response = await llm_chain.ainvoke(user_message, callbacks=[cl.AsyncLangchainCallbackHandler()]) response_key = "output" if "output" in response else "text" await cl.Message(response.get(response_key, "")).send() return message.content