Source code for check_user_input

from pathlib import Path
from lib.LLM.classes import OpenAI_model
import os
import sys
from lib.utils.helper_functions import get_input_reader
from lib.utils.xmlread import XMLReader

[docs] def check_input(session_dir: Path,input_reader: XMLReader): """" Check user input with session-specific paths and validate the setup. This function performs a comprehensive validation of the user's input configuration by checking directory structures, XML files, and user-defined Python code. It uses an LLM-based agent to analyze the inputs and generate a detailed report of any errors or warnings that need to be addressed before proceeding to parameter fitting. Args: session_dir (Path): Path to the session directory containing the user's input files and generated code input_reader (XMLReader): XMLReader instance that contains configuration information about directory names and file paths The function performs the following operations: 1. Creates necessary directories if they don't exist 2. Validates the user_input.xml file against the user_model.py code 3. Generates a detailed report of critical errors and warnings 4. Refines the validation report for better readability 5. Displays the final validation results to the terminal Returns: None: Results are written to output files and displayed in terminal """ print("Launching script to check user input") # check if necessary dirs exist in session_dir if not os.path.isdir(session_dir / input_reader.user_input_dirname): print(f"User input directory {session_dir / input_reader.user_input_dirname} does not exist, making it...") os.makedirs(session_dir / input_reader.user_input_dirname) if not os.path.isdir(session_dir / input_reader.generated_dirname): print(f"Generated directory {session_dir / input_reader.generated_dirname} does not exist, making it...") os.makedirs(session_dir / input_reader.generated_dirname) if not os.path.isdir(session_dir / input_reader.output_dirname / "inputs"): print(f"Output directory {session_dir / input_reader.output_dirname / 'inputs'} does not exist, making it...") os.makedirs(session_dir / input_reader.output_dirname / "inputs") session_path = Path(session_dir) path_to_input = session_path / input_reader.user_input_dirname / "user_input.xml" path_to_user_code = session_path / input_reader.generated_dirname / "user_model.py" path_to_output = session_path / input_reader.generated_dirname / "raw_user_input_check.txt" path_to_input_check_model_output = session_path / input_reader.generated_dirname / "raw_user_input_check.txt" reference_file_paths_check_model_output = [] path_to_output_check_model_output = session_path / input_reader.generated_dirname / "user_input_check.txt" # First check of user input if path_to_output.exists(): path_to_output.unlink() # check if output file exists, if so delete it if path_to_output_check_model_output.exists(): path_to_output_check_model_output.unlink() dev_instr_filename = Path(os.getcwd()) / Path("lib/LLM/user_file_check_instructions.txt") reference_file_paths = [] reference_file_paths.append(path_to_user_code) input_check_model = OpenAI_model( path_to_input, reference_file_paths, api_key_string="OPENAI_ENV_KEY", dev_instr_filename=dev_instr_filename, role="code_input_checker" ) print("Checking user inputs....") input_check_model.check_generated_files(path_to_output) print("Finished first check of user input") # refining the output of model # currently this is just a single iteration workflow # in the future this can be replaced by an agentic setup # check model output dev_instr_filename_check_output = Path(os.getcwd()) / Path("lib/LLM/model_output_check_inputcheck_instructions.txt") output_check_model = OpenAI_model( path_to_input_check_model_output, reference_file_paths_check_model_output, api_key_string="OPENAI_ENV_KEY", dev_instr_filename=dev_instr_filename_check_output, role="model_output_checker" ) print("Checking model report....") output_check_model.check_model_output_inputcheck(path_to_output_check_model_output) print("Finished checking model report") # print resulting file to terminal with open(path_to_output_check_model_output, "r") as file: print(file.read())
if __name__ == "__main__": api_key = os.environ.get("OPENAI_ENV_KEY") if not os.path.isdir("sessions"): raise ValueError("No sessions directory found. Please create a sessions directory and make a subdir structure as shown in the README.md file") sessions_root = Path("sessions") if len(sys.argv) == 2: session_dir = sessions_root / Path(sys.argv[1]) if not os.path.isdir(session_dir): raise ValueError(f"Session directory {session_dir} does not exist") else: session_dirs = [d for d in sessions_root.iterdir() if d.is_dir()] if not session_dirs: print("No session directories found in ./sessions.") sys.exit(1) # Sort by modification time, descending session_dirs.sort(key=lambda d: d.stat().st_mtime, reverse=True) session_dir = str(session_dirs[0]) print(f"No session_dir provided. Using most recent session: {session_dir}") # Pass the API key to check_input via environment or directly if needed input_file_path = session_dir / Path("inputs") / Path("user_input.xml") input_reader = get_input_reader(input_file_path) check_input(session_dir,input_reader)