Spaces:
Build error
Build error
| import os | |
| import platform | |
| import openai | |
| import chromadb | |
| import langchain | |
| from langchain.embeddings.openai import OpenAIEmbeddings | |
| from langchain.vectorstores import Chroma | |
| from langchain.text_splitter import TokenTextSplitter | |
| from langchain.llms import OpenAI | |
| from langchain.chat_models import ChatOpenAI | |
| from langchain.chains import ChatVectorDBChain | |
| from langchain.document_loaders import GutenbergLoader | |
| from langchain.embeddings import LlamaCppEmbeddings | |
| from langchain.llms import LlamaCpp | |
| from langchain.output_parsers import StructuredOutputParser, ResponseSchema | |
| from langchain.prompts import PromptTemplate, ChatPromptTemplate, HumanMessagePromptTemplate | |
| from langchain.llms import OpenAI | |
| from langchain.chains import LLMChain | |
| from langchain.chains import SimpleSequentialChain | |
| from langchain.output_parsers import PydanticOutputParser | |
| from pydantic import BaseModel, Field, validator | |
| from typing import List, Dict | |
| # class AnswerTemplate(BaseModel): | |
| # isComplete: bool = Field(description="Is the input complete?") | |
| # answer: str = Field(description="""If the answer to 'isComplete' is true leave this empty, else respond to user's last message in a cordial manner and then ask the user for the missing information. Just one question.""") | |
| class AnswerTemplate(BaseModel): | |
| # isComplete: bool = Field(description="Is the input complete?") | |
| answer: str = Field(description="Question that you asked") | |
| class Response_Agent(): | |
| def __init__(self): | |
| self.model_name = "gpt-4" | |
| self.model = OpenAI(model_name=self.model_name, temperature=0) | |
| self.output_parser = PydanticOutputParser(pydantic_object=AnswerTemplate) | |
| self.format_instructions = self.output_parser.get_format_instructions() | |
| # self.prompt = PromptTemplate( | |
| # template="""\ | |
| # ### Instruction | |
| # You are Trainline Mate an helpful assistant that plans tours for people at trainline.com. | |
| # As a smart itinerary planner with extensive knowledge of places around the | |
| # world, your task is to determine the user's travel destinations and any specific interests or preferences from | |
| # their message. | |
| # ### Your task | |
| # Is this input complete? If not, what is missing? | |
| # ### If something is missing then ask for the missing information. | |
| # Don't ask more then one question. | |
| # Ask just one of the following: | |
| # If 'type' is empty then ask the user what type of the trip are you planning and with whom are you travelling?; | |
| # If 'where' is empty then ask the user where is they going to travel to?; | |
| # If 'start_date' is empty then ask the user what is the start date?; | |
| # If 'end_date' is empty then ask the user what is the end date?; | |
| # If 'time_constrains' is empty then ask the user if is there any time constrains that should be considered?; | |
| # If 'preferences' is empty then ask the user if they have thought about any activities you want to do while you're there?; | |
| # If 'conditions' is empty then ask the user if they have any special medical condition?; | |
| # If 'dist_range' is empty then ask the user what is the distance range you prefer for your ativities? \n### Input: {input} | |
| # \n### Response: {format_instructions} | |
| # """, | |
| # input_variables=["input", "format_instructions"] | |
| # ) | |
| self.prompt = PromptTemplate( | |
| template="""\ | |
| ### Instruction | |
| You are Trainline Mate an helpful assistant that plans tours for people at trainline.com. | |
| As a smart itinerary planner with extensive knowledge of places around the | |
| world, your task is to determine the user's travel destinations and any specific interests or preferences from | |
| their message. | |
| ### Your task | |
| This input is a resume of what the user wants to do. From this you have to be able to retrieve all the following information: | |
| "Where is the trip to", "Start and end dates for the trip", "Is there any time constrain that you should be aware of", "activity preferences", | |
| "Is there any medical condition" and "Is there a maximum distance range in which the activities have to be". | |
| ### If something is missing then ask for the missing information. | |
| The user don't like give much information at once. So try to minimize the quantity of information that you ask for in your response. | |
| Ask at maximum for information for two of the questions. | |
| ### Input: {input} | |
| ### Response: {format_instructions} | |
| """, | |
| input_variables=["input", "format_instructions"] | |
| ) | |
| # Is this input complete? Does it have all the information mention before or is it missing something? If it's not complete, what is missing? | |
| def format_prompt(self, input): | |
| return self.prompt.format_prompt(input=input, format_instructions=self.format_instructions) | |
| # return self.prompt.format_prompt(input=input) | |
| def get_parsed_result(self, input): | |
| result= self.model(input.to_string()) | |
| parsed_result = self.output_parser.parse(result) | |
| return parsed_result.answer |