TL_POC / agents /response_agent.py
diogovelho's picture
Duplicate from MinderaLabs/TL_GPT4
64aee40
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