From 0166ef4e09546cd498fc5ce56a8af7ea4278954b Mon Sep 17 00:00:00 2001 From: Paul Markus Date: Tue, 24 Oct 2023 18:39:21 +0900 Subject: [PATCH 1/4] minor modification to move the top_k param to the environment variables for convenience. --- .env.example | 1 + dataherald/sql_generator/generates_nl_answer.py | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.env.example b/.env.example index aa3f8ba7..89594338 100644 --- a/.env.example +++ b/.env.example @@ -5,6 +5,7 @@ LLM_MODEL = 'gpt-4' #the openAI llm model that you want to use for evaluation an AGENT_LLM_MODEL = 'gpt-4-32k' # the llm model that you want to use for the agent, it should have a lrage context window. possible values: gpt-4-32k, gpt-3.5-turbo-16k DH_ENGINE_TIMEOUT = #timeout in seconds for the engine to return a response +MAX_QUERY_RETURN_ROWS = #maximum number of rows that the engine will return for a query. Defauls to 50 #Encryption key for storing DB connection data in Mongo ENCRYPT_KEY = diff --git a/dataherald/sql_generator/generates_nl_answer.py b/dataherald/sql_generator/generates_nl_answer.py index 8fd503a8..45ab1069 100644 --- a/dataherald/sql_generator/generates_nl_answer.py +++ b/dataherald/sql_generator/generates_nl_answer.py @@ -46,7 +46,8 @@ def execute(self, query_response: Response) -> Response: ) database = SQLDatabase.get_sql_engine(database_connection) query_response = create_sql_query_status( - database, query_response.sql_query, query_response, top_k=50 + database, query_response.sql_query, query_response, top_k=os.getenv( + "MAX_QUERY_RETURN_ROWS", "50") ) system_message_prompt = SystemMessagePromptTemplate.from_template( SYSTEM_TEMPLATE From 3c400c8fe1c1fbba3a58c406e0552d537e7d0f34 Mon Sep 17 00:00:00 2001 From: Paul Markus Date: Wed, 25 Oct 2023 09:31:34 +0900 Subject: [PATCH 2/4] renamed MAX_QUERY_RETURN_ROWS -> UPPER_LIMIT_QUERY_RETURN_ROWS to make it easier to understand --- .env.example | 2 +- dataherald/sql_generator/dataherald_sqlagent.py | 2 +- dataherald/sql_generator/generates_nl_answer.py | 2 +- docs/envars.rst | 2 ++ 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.env.example b/.env.example index 89594338..0f83b133 100644 --- a/.env.example +++ b/.env.example @@ -5,7 +5,7 @@ LLM_MODEL = 'gpt-4' #the openAI llm model that you want to use for evaluation an AGENT_LLM_MODEL = 'gpt-4-32k' # the llm model that you want to use for the agent, it should have a lrage context window. possible values: gpt-4-32k, gpt-3.5-turbo-16k DH_ENGINE_TIMEOUT = #timeout in seconds for the engine to return a response -MAX_QUERY_RETURN_ROWS = #maximum number of rows that the engine will return for a query. Defauls to 50 +UPPER_LIMIT_QUERY_RETURN_ROWS = #The upper limit on number of rows returned from the query engine (equivalent to using LIMIT N in PostgreSQL/MySQL/SQlite). Defauls to 50 #Encryption key for storing DB connection data in Mongo ENCRYPT_KEY = diff --git a/dataherald/sql_generator/dataherald_sqlagent.py b/dataherald/sql_generator/dataherald_sqlagent.py index 5296a442..651e152b 100644 --- a/dataherald/sql_generator/dataherald_sqlagent.py +++ b/dataherald/sql_generator/dataherald_sqlagent.py @@ -44,7 +44,7 @@ logger = logging.getLogger(__name__) -TOP_K = 50 +TOP_K = os.getenv("UPPER_LIMIT_QUERY_RETURN_ROWS", "50") AGENT_PREFIX = """You are an agent designed to interact with a SQL database. Given an input question, create a syntactically correct {dialect} query to run, then look at the results of the query and return the answer. You have access to tools for interacting with the database. diff --git a/dataherald/sql_generator/generates_nl_answer.py b/dataherald/sql_generator/generates_nl_answer.py index 45ab1069..7d12a325 100644 --- a/dataherald/sql_generator/generates_nl_answer.py +++ b/dataherald/sql_generator/generates_nl_answer.py @@ -47,7 +47,7 @@ def execute(self, query_response: Response) -> Response: database = SQLDatabase.get_sql_engine(database_connection) query_response = create_sql_query_status( database, query_response.sql_query, query_response, top_k=os.getenv( - "MAX_QUERY_RETURN_ROWS", "50") + "UPPER_LIMIT_QUERY_RETURN_ROWS", "50") ) system_message_prompt = SystemMessagePromptTemplate.from_template( SYSTEM_TEMPLATE diff --git a/docs/envars.rst b/docs/envars.rst index f15c519f..1f094a5b 100644 --- a/docs/envars.rst +++ b/docs/envars.rst @@ -36,6 +36,7 @@ provided in the .env.example file with the default values. S3_AWS_SECRET_ACCESS_KEY = DH_ENGINE_TIMEOUT = + UPPER_LIMIT_QUERY_RETURN_ROWS = .. csv-table:: @@ -63,3 +64,4 @@ provided in the .env.example file with the default values. "S3_AWS_ACCESS_KEY_ID", "The key used to access credential files if saved to S3", "None", "No" "S3_AWS_SECRET_ACCESS_KEY", "The key used to access credential files if saved to S3", "None", "No" "DH_ENGINE_TIMEOUT", "This is used to set the max seconds the process will wait for the response to be generate. If the specified time limit is exceeded, it will trigger an exception", "None", "No" + "UPPER_LIMIT_QUERY_RETURN_ROWS", "The upper limit on number of rows returned from the query engine (equivalent to using LIMIT N in PostgreSQL/MySQL/SQlite).", "50", "No" From 0f3115ae861dd42c4e330d3d8717d9b948a68503 Mon Sep 17 00:00:00 2001 From: Paul Markus Date: Wed, 25 Oct 2023 09:32:06 +0900 Subject: [PATCH 3/4] updated docs to match env var change --- docs/envars.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/envars.rst b/docs/envars.rst index 1f094a5b..80f8b2d5 100644 --- a/docs/envars.rst +++ b/docs/envars.rst @@ -64,4 +64,4 @@ provided in the .env.example file with the default values. "S3_AWS_ACCESS_KEY_ID", "The key used to access credential files if saved to S3", "None", "No" "S3_AWS_SECRET_ACCESS_KEY", "The key used to access credential files if saved to S3", "None", "No" "DH_ENGINE_TIMEOUT", "This is used to set the max seconds the process will wait for the response to be generate. If the specified time limit is exceeded, it will trigger an exception", "None", "No" - "UPPER_LIMIT_QUERY_RETURN_ROWS", "The upper limit on number of rows returned from the query engine (equivalent to using LIMIT N in PostgreSQL/MySQL/SQlite).", "50", "No" + "UPPER_LIMIT_QUERY_RETURN_ROWS", "The upper limit on number of rows returned from the query engine (equivalent to using LIMIT N in PostgreSQL/MySQL/SQlite).", "None", "No" From 7fee15f65474a349aa47c8ceab839c9e918fba9b Mon Sep 17 00:00:00 2001 From: Paul Markus Date: Wed, 25 Oct 2023 15:49:39 +0900 Subject: [PATCH 4/4] os.getenv returns a 'str' type so it's necessary to cast to int --- dataherald/sql_generator/dataherald_sqlagent.py | 2 +- dataherald/sql_generator/generates_nl_answer.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/dataherald/sql_generator/dataherald_sqlagent.py b/dataherald/sql_generator/dataherald_sqlagent.py index 651e152b..7f3661da 100644 --- a/dataherald/sql_generator/dataherald_sqlagent.py +++ b/dataherald/sql_generator/dataherald_sqlagent.py @@ -44,7 +44,7 @@ logger = logging.getLogger(__name__) -TOP_K = os.getenv("UPPER_LIMIT_QUERY_RETURN_ROWS", "50") +TOP_K = int(os.getenv("UPPER_LIMIT_QUERY_RETURN_ROWS", "50")) AGENT_PREFIX = """You are an agent designed to interact with a SQL database. Given an input question, create a syntactically correct {dialect} query to run, then look at the results of the query and return the answer. You have access to tools for interacting with the database. diff --git a/dataherald/sql_generator/generates_nl_answer.py b/dataherald/sql_generator/generates_nl_answer.py index 7d12a325..54720cb0 100644 --- a/dataherald/sql_generator/generates_nl_answer.py +++ b/dataherald/sql_generator/generates_nl_answer.py @@ -46,8 +46,7 @@ def execute(self, query_response: Response) -> Response: ) database = SQLDatabase.get_sql_engine(database_connection) query_response = create_sql_query_status( - database, query_response.sql_query, query_response, top_k=os.getenv( - "UPPER_LIMIT_QUERY_RETURN_ROWS", "50") + database, query_response.sql_query, query_response, top_k=int(os.getenv("UPPER_LIMIT_QUERY_RETURN_ROWS", "50")) ) system_message_prompt = SystemMessagePromptTemplate.from_template( SYSTEM_TEMPLATE