The library has functionality to process experiments and to run a pipeline which continually looks for new experiment jsonl files in the input folder. Everything starts with defining a pipeline data folder, e.g. "data" which contains:
└── data
└── input: contains the jsonl files with the experiments
└── output: contains the results of the experiments runs.
When an experiment is ran, a folder is created within the output folder with the experiment name
as defined in the jsonl file but removing the `.jsonl` extension.
The results and logs for the experiment are stored there
└── media: contains the media files for the experiments.
These files must be within folders of the same experiment name
as defined in the jsonl file but removing the `.jsonl` extension
For specifying API keys and other variables for the different APIs, you can use an .env
file. See the environment variables documentation for more details.
Once you have added the jsonl files to the input/
folder of the data folder, you can run the pipeline process using the prompto_run_pipeline
command in the terminal as follows:
prompto_run_pipeline --data-folder data
This initialises the process of continually checking the input folder for new experiments to process. If an experiment is found, it is processed and the results are stored in the output folder. The pipeline will continue to check for new experiments until the process is stopped.
If there are several experiments in the input folder, the pipeline will process the experiments in the order that the files were created/modified in the input folder (i.e. the oldest file will be processed first). This ordering is computed by using os.path.getctime
which on some systems (e.g. Unix) is the time of the last metadata change and for others (e.g. Windows) is the creation time of the path.
If you want to run a single experiment, you can use the prompto_run_experiment
command in the terminal as follows:
prompto_run_experiment --file path/to/experiment.jsonl --data-folder data
This will process the experiment defined in the jsonl file and store the results in the output folder. Note that the path to the file doesn't neceesarily have to be within the input/
folder of the data folder. In the case where it is not already in the input/
folder, it will get moved there before processing and the output will be saved in the output folder as usual.
When running the pipeline or an experiment, there are certain settings to define how to run the experiments. These can be set using the above command line interfaces via the following argument flags:
--data-folder
or-d
: the path to the data folder which contains the input, output and media folders for the experiments (by default,./data
)--env-file
or-e
: the path to the environment file which contains the API keys and other environment variables (by default,./.env
) (see the environment variables documentation for more details)--max-queries
or-mq
: the default maximum number of queries to send within a minute (i.e. the query rate limit) (by default,10
)--max-attempts
or-ma
: the maximum number of attempts to try querying the model before giving up (by default,5
)--parallel
or-p
: when the experiment files has different APIs to query, this flag allows the pipeline to send the queries to the different APIs in parallel (by default,False
)--max-queries-json
or-mqj
: this can be a path to another json file which contains the maximum number of queries to send within a minute for each API or group (by default,None
). In this json, the keys are API names (e.g. "openai", "gemini", etc.) or group names and the values can either be integers which represent the corresponding rate limit for the API or group, or they can be themselves another dictionary where keys are model names and values are integers representing the rate limit for that model. This is only used when the--parallel
flag is set. If the json file is not provided, the--max-queries
value is used for all APIs or groups.
More detailed information on parallel processing and examples can be found in the specifying rate limits documentation.
For example, to run the pipeline in pipline-data/
, with a maximum of 5 queries per minute, have a maximum of 3 attempts for each query, and to send calls to separate API endpoints in parallel, you can run:
prompto_run_pipeline --data-folder pipeline-data --max-queries 5 --max-attempts 3 --parallel
and similarly for running a single experiment:
prompto_run_experiment --file path/to/experiment.jsonl --data-folder pipeline-data --max-queries 5 --max-attempts 3 --parallel