Overview
The core of generating agent action and environment observation lies in the agenerate function, which is versatile by taking the output_parser as an argument and returning the output in the desired format.
Structured output is used to return the output in a structured format, such as a dictionary or a Pydantic object. Currently, the structured output is only supported for the models below:
gpt-4o-mini-2024-07-18and latergpt-4o-2024-08-06and later
The bad_output_process_model is used to process the bad output. DEFAULT_BAD_OUTPUT_PROCESS_MODEL is set to be gpt-4o-mini (At the publication time of Sotopia, we used gpt-3.5-turbo-0613. However this model has been taken off the shelf by OpenAI.).
The use_fixed_model_version is used to determine whether to use the fixed model version. If set to True, the model version will be fixed to the version that was used in Sotopia paper. If set to False, the model version will be the latest version available.
Warning: As some fixed model versions might not be available in the OpenAI API, setting use_fixed_model_version = True might result in an error.
Here is an example of how to use the agenerate function:
Generate the first N prime numbers
from sotopia.generation_utils.generate import ListOfIntOutputParser, agenerate
async def generate_first_N_prime_numbers(n: int) -> list[int]:
return await agenerate(
model_name="gpt-4o",
template="Generate the first {n} prime numbers.",
input_values={"n": str(n)},
output_parser=ListOfIntOutputParser(n),
)The input to agenerate are the following:
model_name: The name of the model to use.template: The template to use. You can use{}to add the input variables.input_values: The input values to the template. The keys should be the same as the variables in the template.output_parser: The output parser to use. The output parser should be a subclass ofBaseOutputParser.
In this example, we generate a list of the first n prime numbers with the gpt-4o model. The ListOfIntOutputParser is used to parse the output into a list of integers.
Using custom models
Apart from using api endpoints from LLM providers like OpenAI, Together AI, Azure, etc., you can also use custom model with OpenAI compatible endpoints.
You will need to set the model name to custom/<model_name>@url, and CUSTOM_API_KEY to the API key of the custom model.
For example, if you want to use the llama3.2 model for an agent from Meta (opens in a new tab), and you host the model on LiteLLM (opens in a new tab) proxy server (e.g., Proxy running on http://0.0.0.0:4000). Then you can set the model name to model_name="custom/llama3.2:1b@http:0.0.0.0:4000"
to call the model in the LLMAgent.
For more information, check out examples/generation_api/custom_model.py.