| from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline |
| from langchain import HuggingFaceHub |
| from langchain.llms.base import LLM |
| from langchain.memory import ConversationBufferMemory,ConversationBufferWindowMemory |
| from langchain.chains import LLMChain, ConversationChain |
| from langchain_community.llms.huggingface_pipeline import HuggingFacePipeline |
| from langchain_community.llms import HuggingFaceEndpoint |
| from langchain.prompts import PromptTemplate, ChatPromptTemplate |
| from langchain_core.prompts.chat import SystemMessagePromptTemplate, HumanMessagePromptTemplate |
| from huggingface_hub import InferenceClient |
| import os |
| import gradio as gr |
| import spaces |
|
|
| endpoint_url = "https://kp4xdy196cw81uf3.us-east-1.aws.endpoints.huggingface.cloud" |
| token = os.environ["API_TOKEN"] |
|
|
| llm = HuggingFaceEndpoint( |
| endpoint_url=f"{endpoint_url}", |
| huggingfacehub_api_token = f"{token}", |
| task = "text-generation", |
| max_new_tokens=128, |
| top_k=10, |
| top_p=0.95, |
| typical_p=0.95, |
| temperature=0.01, |
| repetition_penalty=1.03 |
| ) |
| |
|
|
| client = InferenceClient(endpoint_url, token=token) |
|
|
| gen_kwargs = dict( |
| max_new_tokens=128, |
| top_k=30, |
| top_p=0.95, |
| temperature=0.01, |
| repetition_penalty=1.02, |
| stop_sequences=["\nUser:", "<|endoftext|>", "</s>", "\nHuman:"], |
| ) |
|
|
|
|
| stream = client.text_generation(prompt, stream=True, details=True, **gen_kwargs) |
|
|
| def chat_template_prompt(): |
| template = """ |
| Do not repeat questions and do not generate answer for user/human.Do not repeat yourself and do not create/generate dialogues. |
| |
| Below is an instruction that describes a task. During the conversation you need to ask the user |
| the following questions to complete the hotel booking task. After each of the following questions you wait for the response by the user. |
| 1) Where would you like to stay and when? |
| 2) How many people are staying in the room? |
| 3) Do you prefer any ammenities like breakfast included or gym? |
| 4) What is your name, your email address and phone number? |
| If the user wants to book the room, you confirm the booking otherwise you respond with "Thank, you. Please let me know if there is |
| any other way to assist you?" |
| |
| {history} |
| |
| """ |
| |
| system_prompt = SystemMessagePromptTemplate.from_template(template) |
| human_prompt = HumanMessagePromptTemplate.from_template("""{input}""") |
| chat_prompt = ChatPromptTemplate.from_messages([system_prompt, human_prompt]) |
| return chat_prompt |
|
|
| def chain(): |
| |
| chat_prompt = chat_template_prompt() |
| memory = ConversationBufferWindowMemory(k=3) |
| llm_chain = LLMChain(llm=llm, memory = memory, prompt = chat_prompt) |
| memory.load_memory_variables({}) |
| return llm_chain |
|
|
| @spaces.GPU |
| def chat_output(message, history): |
| result = llm_chain.predict(input = message) |
| return result |
|
|
| with gr.Blocks() as demo: |
| llm_chain = chain() |
| |
| |
|
|
| demo.chatbot_interface = gr.ChatInterface( |
| fn=chat_output, |
| examples = ["Hello I would like to book a hotel room.", "Hello I want to stay in Nuremberg in 30th of May." ], |
| |
| title = "Hotel Booking Assistant Chat 🤗", |
| description = "I am your hotel booking assistant. Feel free to start chatting with me." |
| ) |
| demo.launch() |