in agora/cerebral_api/src/llm.py [0:0]
def convert_question_query_sql(self, question: str, industry: str, role: str) -> str:
"""
Convert a natural language question to SQL query based on industry and role context.
Args:
question (str): The natural language question to convert
industry (str): The industry context
role (str): The user's role
Returns:
str: Generated SQL query or error message
"""
request_id = str(uuid.uuid4())
logger.info(f"[{request_id}] Starting SQL query conversion")
try:
logger.debug(f"[{request_id}] Input parameters:")
logger.debug(f"[{request_id}] Question: {question}")
logger.debug(f"[{request_id}] Industry: {industry}")
logger.debug(f"[{request_id}] Role: {role}")
logger.debug(f"[{request_id}] Database: {self.SQL_DATABASE}")
# Get and format prompt
start_time = time.time()
system_content = self.get_prompt('convert_question_query_sql', industry, role).format(
DATABASE_NAME=self.SQL_DATABASE
)
prompt_time = time.time() - start_time
if VERBOSE:
logger.debug(f"[{request_id}] Generated system content:")
logger.debug(f"[{request_id}] {system_content}")
logger.debug(f"[{request_id}] Prompt generation took: {prompt_time:.2f}s")
# Prepare conversation
conversation = [
{"role": "system", "content": system_content},
{"role": "user", "content": question}
]
# Make API request
logger.debug(f"[{request_id}] Sending request to OpenAI API")
start_time = time.time()
response = self.client.chat.completions.create(
model=self.CHATGPT_MODEL,
messages=conversation
)
api_time = time.time() - start_time
logger.debug(f"[{request_id}] API request completed in {api_time:.2f}s")
# Process response
raw_response = response.choices[0].message.content
cleaned_response = self.clean_string(raw_response)
if VERBOSE:
logger.debug(f"[{request_id}] Raw response: {raw_response}")
logger.debug(f"[{request_id}] Cleaned response: {cleaned_response}")
# Validate SQL query
if not cleaned_response.strip().lower().startswith(('select', 'with')):
logger.warning(f"[{request_id}] Generated query doesn't start with SELECT or WITH")
return "Error: Generated query appears invalid"
logger.info(f"[{request_id}] Successfully generated SQL query")
logger.info(f"[{request_id}] Total conversion time: {time.time() - start_time:.2f}s")
return cleaned_response
except Exception as e:
logger.error(f"[{request_id}] Error in convert_question_query_sql: {str(e)}")
if VERBOSE:
import traceback
logger.debug(f"[{request_id}] Full error traceback:")
logger.debug(traceback.format_exc())
return "Error generating SQL query. Please try again or rephrase your question."