def convert_question_query_sql()

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."