add verbose mode
This commit is contained in:
parent
17f1b1f8c7
commit
33a016a89c
@ -217,7 +217,7 @@ def get_random_tables_and_samples(cursor, tables, num_tables=5, num_samples=5):
|
||||
|
||||
return sampled_data
|
||||
|
||||
def generate_questions(client, schema_context, sampled_data):
|
||||
def generate_questions(client, schema_context, sampled_data, verbose=False):
|
||||
"""Generates questions by calling the OpenAI API."""
|
||||
if not client:
|
||||
raise ValueError("OpenAI client not provided.")
|
||||
@ -229,6 +229,11 @@ def generate_questions(client, schema_context, sampled_data):
|
||||
sampled_data_str=sampled_data_str
|
||||
)
|
||||
|
||||
if verbose:
|
||||
print("\n--- Generation Prompt ---")
|
||||
print(prompt)
|
||||
print("-------------------------\n")
|
||||
|
||||
try:
|
||||
response = client.chat.completions.create(
|
||||
model=OPENAI_CONFIG["model"],
|
||||
@ -240,6 +245,10 @@ def generate_questions(client, schema_context, sampled_data):
|
||||
response_format={"type": "json_object"},
|
||||
)
|
||||
content = response.choices[0].message.content
|
||||
if verbose:
|
||||
print("\n--- GPT-4o Raw Generation Response ---")
|
||||
print(content)
|
||||
print("--------------------------------------\n")
|
||||
data = json.loads(content)
|
||||
|
||||
# The prompt asks for {"questions": [...]}, so we extract the list.
|
||||
@ -271,7 +280,7 @@ def load_existing_tasks(filepath):
|
||||
print(f"Warning: Could not read or parse {filepath}. Starting with an empty list.")
|
||||
return []
|
||||
|
||||
def evaluate_and_refine_tasks(tasks, client):
|
||||
def evaluate_and_refine_tasks(tasks, client, verbose=False):
|
||||
"""
|
||||
Uses an LLM to evaluate if a SQL result answers the question and refines the answer.
|
||||
"""
|
||||
@ -293,6 +302,11 @@ def evaluate_and_refine_tasks(tasks, client):
|
||||
|
||||
prompt = SEMANTIC_EVALUATION_PROMPT_TEMPLATE.format(task_data_json=task_data_json)
|
||||
|
||||
if verbose:
|
||||
print("\n--- Evaluation Prompt ---")
|
||||
print(prompt)
|
||||
print("-------------------------\n")
|
||||
|
||||
try:
|
||||
print(f" - Evaluating question: \"{task['question'][:80]}...\"")
|
||||
response = client.chat.completions.create(
|
||||
@ -305,6 +319,10 @@ def evaluate_and_refine_tasks(tasks, client):
|
||||
response_format={"type": "json_object"},
|
||||
)
|
||||
content = response.choices[0].message.content
|
||||
if verbose:
|
||||
print("\n--- GPT-4o Raw Evaluation Response ---")
|
||||
print(content)
|
||||
print("----------------------------------------\n")
|
||||
evaluation_result = json.loads(content)
|
||||
|
||||
if evaluation_result.get("can_answer") is True and "new_answer" in evaluation_result:
|
||||
@ -351,6 +369,11 @@ def main():
|
||||
default="generated_tasks.json",
|
||||
help="The file to save the generated tasks to (in JSON format)."
|
||||
)
|
||||
parser.add_argument(
|
||||
"-v", "--verbose",
|
||||
action="store_true",
|
||||
help="Enable verbose output, including prompts and raw LLM responses."
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
# Load existing tasks from the output file
|
||||
@ -389,10 +412,14 @@ def main():
|
||||
# Get random samples for this round
|
||||
print("Sampling data from 5 random tables...")
|
||||
sampled_data = get_random_tables_and_samples(cursor, core_tables, num_tables=5, num_samples=5)
|
||||
if args.verbose:
|
||||
print("\n--- Sampled Data ---")
|
||||
print(json.dumps(sampled_data, indent=2, default=str))
|
||||
print("--------------------\n")
|
||||
|
||||
# Generate questions
|
||||
print("Generating questions with GPT-4o...")
|
||||
generated_tasks = generate_questions(client, schema_context, sampled_data)
|
||||
generated_tasks = generate_questions(client, schema_context, sampled_data, verbose=args.verbose)
|
||||
|
||||
# Execute SQL for generated tasks
|
||||
tasks_for_evaluation = []
|
||||
@ -416,7 +443,7 @@ def main():
|
||||
print(f"Filtering task due to SQL error: {err} on SQL: {task['sql']}")
|
||||
|
||||
# Perform semantic evaluation and get validated tasks
|
||||
validated_tasks = evaluate_and_refine_tasks(tasks_for_evaluation, client)
|
||||
validated_tasks = evaluate_and_refine_tasks(tasks_for_evaluation, client, verbose=args.verbose)
|
||||
|
||||
# Append new tasks and save to file
|
||||
if validated_tasks:
|
||||
|
310131
random_sample/generated_tasks_5k.json
Normal file
310131
random_sample/generated_tasks_5k.json
Normal file
File diff suppressed because it is too large
Load Diff
382
random_sample/sample.json
Normal file
382
random_sample/sample.json
Normal file
@ -0,0 +1,382 @@
|
||||
[
|
||||
{
|
||||
"question": "What is the email address for the customer named Jane Doe?",
|
||||
"sql": "SELECT email FROM customer_entity WHERE firstname = 'Jane' AND lastname = 'Doe';",
|
||||
"answer": [
|
||||
"jane.doe@hotmail.com",
|
||||
"jane.doe@gmail.com"
|
||||
],
|
||||
"sql_execute_result": [
|
||||
[
|
||||
"jane.doe@hotmail.com"
|
||||
],
|
||||
[
|
||||
"jane.doe@gmail.com"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"question": "Find the total base grand total for orders with the status 'complete'.",
|
||||
"sql": "SELECT SUM(base_grand_total) FROM sales_order_grid WHERE status = 'complete';",
|
||||
"answer": [
|
||||
"20625.5000"
|
||||
],
|
||||
"sql_execute_result": [
|
||||
[
|
||||
"20625.5000"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"question": "What is the shipping address for order with increment_id '000000100'?",
|
||||
"sql": "SELECT shipping_address FROM sales_order_grid WHERE increment_id = '000000100';",
|
||||
"answer": [
|
||||
"789 W Olympic Blvd, Los Angeles, California, 90015"
|
||||
],
|
||||
"sql_execute_result": [
|
||||
[
|
||||
"789 W Olympic Blvd,Los Angeles,California,90015"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"question": "List all customer group codes available in the system.",
|
||||
"sql": "SELECT customer_group_code FROM customer_group;",
|
||||
"answer": [
|
||||
"NOT LOGGED IN",
|
||||
"General",
|
||||
"Wholesale",
|
||||
"Retailer"
|
||||
],
|
||||
"sql_execute_result": [
|
||||
[
|
||||
"NOT LOGGED IN"
|
||||
],
|
||||
[
|
||||
"General"
|
||||
],
|
||||
[
|
||||
"Wholesale"
|
||||
],
|
||||
[
|
||||
"Retailer"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"question": "How many orders have been placed by the customer with email 'michael.nguyen@yahoo.com'?",
|
||||
"sql": "SELECT COUNT(entity_id) FROM sales_order_grid WHERE customer_email = 'michael.nguyen@yahoo.com';",
|
||||
"answer": [
|
||||
"12"
|
||||
],
|
||||
"sql_execute_result": [
|
||||
[
|
||||
12
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"question": "What is the product description for the product with entity_id 1636?",
|
||||
"sql": "SELECT value FROM catalog_product_entity_text WHERE entity_id = 1636;",
|
||||
"answer": [
|
||||
"<p>Whatever your goals for the day's workout, the Celeste Sports Bra lets you do it in comfort and coolness, plus enhanced support and shaping. A power mesh back zone and moisture-wicking fabric ensure you stay dry.</p>\n<p>• Mint bra top. <br />• Seam-free interior molded cups<br />• Odor control. <br />• UV protection. <br />• Machine wash/dry.</p>"
|
||||
],
|
||||
"sql_execute_result": [
|
||||
[
|
||||
"<p>Whatever your goals for the day's workout, the Celeste Sports Bra lets you do it in comfort and coolness, plus enhanced support and shaping. A power mesh back zone and moisture-wicking fabric ensure you stay dry.</p>\n<p>• Mint bra top. <br />• Seam-free interior molded cups<br />• Odor control. <br />• UV protection. <br />• Machine wash/dry.</p>"
|
||||
],
|
||||
[
|
||||
"142,153"
|
||||
],
|
||||
[
|
||||
"130"
|
||||
],
|
||||
[
|
||||
"196"
|
||||
],
|
||||
[
|
||||
"204,208"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"question": "What is the billing name for the order with entity_id 229?",
|
||||
"sql": "SELECT billing_name FROM sales_order_grid WHERE entity_id = 229;",
|
||||
"answer": [
|
||||
"Sarah Miller"
|
||||
],
|
||||
"sql_execute_result": [
|
||||
[
|
||||
"Sarah Miller"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"question": "Find the store name where the order with increment_id '000000258' was placed.",
|
||||
"sql": "SELECT store_name FROM sales_order_grid WHERE increment_id = '000000258';",
|
||||
"answer": [
|
||||
"Main Website",
|
||||
"Main Website Store",
|
||||
"Default Store View"
|
||||
],
|
||||
"sql_execute_result": [
|
||||
[
|
||||
"Main Website\nMain Website Store\nDefault Store View"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"question": "What is the base currency code for the order placed by 'Bob Jones'?",
|
||||
"sql": "SELECT base_currency_code FROM sales_order_grid WHERE shipping_name = 'Bob Jones';",
|
||||
"answer": [
|
||||
"USD"
|
||||
],
|
||||
"sql_execute_result": [
|
||||
[
|
||||
"USD"
|
||||
],
|
||||
[
|
||||
"USD"
|
||||
],
|
||||
[
|
||||
"USD"
|
||||
],
|
||||
[
|
||||
"USD"
|
||||
],
|
||||
[
|
||||
"USD"
|
||||
],
|
||||
[
|
||||
"USD"
|
||||
],
|
||||
[
|
||||
"USD"
|
||||
],
|
||||
[
|
||||
"USD"
|
||||
],
|
||||
[
|
||||
"USD"
|
||||
],
|
||||
[
|
||||
"USD"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"question": "List the attribute values for the category with entity ID 3.",
|
||||
"sql": "SELECT value FROM catalog_category_entity_varchar WHERE entity_id = 3;",
|
||||
"answer": [
|
||||
"Gear",
|
||||
"PAGE",
|
||||
"gear"
|
||||
],
|
||||
"sql_execute_result": [
|
||||
[
|
||||
"Gear"
|
||||
],
|
||||
[
|
||||
"PAGE"
|
||||
],
|
||||
[
|
||||
"gear"
|
||||
],
|
||||
[
|
||||
"gear"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"question": "What is the tax amount for the product 'Iris Workout Top'?",
|
||||
"sql": "SELECT tax_amount FROM sales_invoice_item WHERE name = 'Iris Workout Top';",
|
||||
"answer": [
|
||||
"2.3900"
|
||||
],
|
||||
"sql_execute_result": [
|
||||
[
|
||||
"2.3900"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"question": "How many option values were found for attribute ID 144?",
|
||||
"sql": "SELECT value FROM eav_attribute_option_value WHERE option_id IN (SELECT option_id FROM eav_attribute_option WHERE attribute_id = 144);",
|
||||
"answer": [
|
||||
"20"
|
||||
],
|
||||
"sql_execute_result": [
|
||||
[
|
||||
"55 cm"
|
||||
],
|
||||
[
|
||||
"65 cm"
|
||||
],
|
||||
[
|
||||
"75 cm"
|
||||
],
|
||||
[
|
||||
"6 foot"
|
||||
],
|
||||
[
|
||||
"8 foot"
|
||||
],
|
||||
[
|
||||
"10 foot"
|
||||
],
|
||||
[
|
||||
"XS"
|
||||
],
|
||||
[
|
||||
"S"
|
||||
],
|
||||
[
|
||||
"M"
|
||||
],
|
||||
[
|
||||
"L"
|
||||
],
|
||||
[
|
||||
"XL"
|
||||
],
|
||||
[
|
||||
"28"
|
||||
],
|
||||
[
|
||||
"29"
|
||||
],
|
||||
[
|
||||
"30"
|
||||
],
|
||||
[
|
||||
"31"
|
||||
],
|
||||
[
|
||||
"32"
|
||||
],
|
||||
[
|
||||
"33"
|
||||
],
|
||||
[
|
||||
"34"
|
||||
],
|
||||
[
|
||||
"36"
|
||||
],
|
||||
[
|
||||
"38"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"question": "What is the base price for the product with SKU 'WS03-XS-Red'?",
|
||||
"sql": "SELECT base_price FROM sales_invoice_item WHERE sku = 'WS03-XS-Red';",
|
||||
"answer": [
|
||||
"29.0000"
|
||||
],
|
||||
"sql_execute_result": [
|
||||
[
|
||||
"29.0000"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"question": "How many sort orders are there for the attribute option with ID 152?",
|
||||
"sql": "SELECT sort_order FROM eav_attribute_option WHERE attribute_id = 152;",
|
||||
"answer": [
|
||||
"26"
|
||||
],
|
||||
"sql_execute_result": [
|
||||
[
|
||||
0
|
||||
],
|
||||
[
|
||||
1
|
||||
],
|
||||
[
|
||||
2
|
||||
],
|
||||
[
|
||||
3
|
||||
],
|
||||
[
|
||||
4
|
||||
],
|
||||
[
|
||||
5
|
||||
],
|
||||
[
|
||||
6
|
||||
],
|
||||
[
|
||||
7
|
||||
],
|
||||
[
|
||||
8
|
||||
],
|
||||
[
|
||||
9
|
||||
],
|
||||
[
|
||||
10
|
||||
],
|
||||
[
|
||||
11
|
||||
],
|
||||
[
|
||||
12
|
||||
],
|
||||
[
|
||||
13
|
||||
],
|
||||
[
|
||||
14
|
||||
],
|
||||
[
|
||||
15
|
||||
],
|
||||
[
|
||||
16
|
||||
],
|
||||
[
|
||||
17
|
||||
],
|
||||
[
|
||||
18
|
||||
],
|
||||
[
|
||||
19
|
||||
],
|
||||
[
|
||||
20
|
||||
],
|
||||
[
|
||||
21
|
||||
],
|
||||
[
|
||||
22
|
||||
],
|
||||
[
|
||||
23
|
||||
],
|
||||
[
|
||||
24
|
||||
],
|
||||
[
|
||||
25
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"question": "Retrieve the product ID for the category 'collections/performance-new'.",
|
||||
"sql": "SELECT entity_id FROM catalog_category_entity_varchar WHERE value = 'collections/performance-new';",
|
||||
"answer": [
|
||||
"39"
|
||||
],
|
||||
"sql_execute_result": [
|
||||
[
|
||||
39
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
Loading…
x
Reference in New Issue
Block a user