Skip to content

Structured Output

Genkit supports generating structured, type-safe outputs using Jackson annotations. This ensures the model’s response conforms to your Java types.

Use Jackson annotations to define your output schema:

public class MenuItem {
@JsonProperty(required = true)
@JsonPropertyDescription("The name of the menu item")
private String name;
@JsonProperty(required = true)
@JsonPropertyDescription("A detailed description")
private String description;
@JsonProperty(required = true)
@JsonPropertyDescription("Price in dollars")
private double price;
@JsonPropertyDescription("Preparation time in minutes")
private int prepTimeMinutes;
@JsonPropertyDescription("Dietary information (e.g., vegan, gluten-free)")
private List<String> dietaryInfo;
// getters/setters...
}
MenuItem item = genkit.generate(
GenerateOptions.<MenuItem>builder()
.model("openai/gpt-4o-mini")
.prompt("Suggest a fancy French menu item")
.outputClass(MenuItem.class)
.build()
);
System.out.println(item.getName()); // "Coq au Vin"
System.out.println(item.getPrice()); // 28.50
System.out.println(item.getDietaryInfo()); // ["gluten-free"]
genkit.defineFlow(
"generateMenuItem",
MenuItemRequest.class,
MenuItem.class,
(ctx, request) -> genkit.generate(
GenerateOptions.<MenuItem>builder()
.model("openai/gpt-4o-mini")
.prompt(request.getDescription())
.outputClass(MenuItem.class)
.build()
)
);
ExecutablePrompt<DishRequest> prompt = genkit.prompt("italian-dish", DishRequest.class);
MenuItem dish = prompt.generate(new DishRequest("Italian"), MenuItem.class);
Tool<RecipeRequest, MenuItem> recipeGen = genkit.defineTool(
"generateRecipe",
"Generates a recipe",
(ctx, request) -> new MenuItem(...),
RecipeRequest.class,
MenuItem.class
);

See the structured-output sample for complete examples.