from langchain.chains.router import MultiPromptChain
from langchain.llms import OpenAI
from langchain.chains import ConversationChain
from langchain.prompts import PromptTemplate
from langchain.chains.router.llm_router import LLMRouterChain, RouterOutputParser
from langchain.chains.router.multi_prompt_prompt import MULTI_PROMPT_ROUTER_TEMPLATE
import streamlit as st
from langchain import OpenAI, SQLDatabase, SQLDatabaseChain
import io
query_template = “”"You are a Postgres SQL expert. Given an input question, first create a syntactically correct Postgres SQL query to run, then look at the results of the query and return the answer to the input question.
Unless the user specifies in the question a specific number of examples to obtain, query for at most [results] using the TOP clause as per Postgres SQL. You can order the results to return the most informative data in the database.
Never query for all columns from a table. You must query only the columns that are needed to answer the question. Wrap each column name in square brackets () to denote them as delimited identifiers.
Pay attention to use only the column names you can see in the tables below. Be careful to not query for columns that do not exist. Also, pay attention to which column is in which table.
Use the following format:
Answer: “Final answer here”
Question: {input}“”"
prompt_infos = [
{
“name”: “list”,
“description”: “Good for answering questions about query the data”,
“prompt_template”: query_template,
},
{
“name”: “query”,
“description”: “Good for answering math questions”,
“prompt_template”: math_template,
},
]
db = SQLDatabase.from_uri(
“OUR DB URI”,view_support=True)
llm = OpenAI(temperature=0, model=“text-davinci-003”, max_tokens=1000,
openai_api_key=“YOUR OWN API KEY”)
input = st.text_input("Query: ", key=“input”)
if input:
for p_info in prompt_infos:
name = p_info[“name”]
prompt_template = p_info[“prompt_template”]
prompt = PromptTemplate(template=prompt_template, input_variables=[“input”])
chain = SQLDatabaseChain(
llm=llm,
database=db,
prompt=prompt
destination_chains[name] = chain
default_chain = ConversationChain(llm=llm, output_key="text")
destinations = [f"{p['name']}: {p['description']}" for p in prompt_infos]
destinations_str = "\n".join(destinations)
router_template = MULTI_PROMPT_ROUTER_TEMPLATE.format(destinations=destinations_str)
router_prompt = PromptTemplate(
template=router_template,
input_variables=["input"],
output_parser=RouterOutputParser(),
)
router_chain = LLMRouterChain.from_llm(llm, router_prompt)
chain = MultiPromptChain(
router_chain=router_chain,
destination_chains=destination_chains,
default_chain=default_chain,
verbose=True)
st.write(chain.run(input))
Am Getting error as
ValidationError: 16 validation errors for MultiPromptChain destination_chains → list → database extra fields not permitted (type=value_error.extra) destination_chains → list → input_key extra fields not permitted (type=value_error.extra) destination_chains → list → llm_chain extra fields not permitted (type=value_error.extra) destination_chains → list → query_checker_prompt extra fields not permitted (type=value_error.extra) destination_chains → list → return_direct extra fields not permitted (type=value_error.extra) destination_chains → list → return_intermediate_steps extra fields not permitted (type=value_error.extra) destination_chains → list → top_k extra fields not permitted (type=value_error.extra) destination_chains → list → use_query_checker extra fields not permitted (type=value_error.extra) destination_chains → query → database extra fields not permitted (type=value_error.extra) destination_chains → query → input_key extra fields not permitted (type=value_error.extra) destination_chains → query → llm_chain extra fields not permitted (type=value_error.extra) destination_chains → query → query_checker_prompt extra fields not permitted (type=value_error.extra) destination_chains → query → return_direct extra fields not permitted (type=value_error.extra) destination_chains → query → return_intermediate_steps extra fields not permitted (type=value_error.extra) destination_chains → query → top_k extra fields not permitted (type=value_error.extra) destination_chains → query → use_query_checker extra fields not permitted (type=value_error.extra)
Did anyone get this type of error.If anyone find Solution,Please Share