com.rpl.agent-o-rama.langchain4j.json

JSON schema builders for LangChain4j structured outputs and tool specifications.

This namespace provides Clojure-friendly functions for building JSON schemas used throughout LangChain4j for structured outputs, tool parameter definitions, and response formatting. These schemas ensure models return data in predictable formats and enable type-safe tool calling.

any-of

(any-of elems)(any-of description elems)

Creates a JSON schema that accepts any of the provided schema types.

This is useful for union types where a field can be one of several different types or values.

Args:

  • elems - Collection of JsonSchema objects that are valid alternatives
  • description - Optional string description of the schema

Returns:

  • JsonAnyOfSchema - Schema that accepts any of the provided types

Example:

;; Field can be either string or number
(lj/any-of "ID can be string or number"
           [(lj/string "String identifier")
            (lj/number "Numeric identifier")])
;; Field can be any of several enum values
(lj/any-of [(lj/enum "Status" ["active" "inactive"])
            (lj/null)])

array

(array item-schema)(array description item-schema)

Creates a JSON schema for arrays with a specific item type.

Args:

  • item-schema - JsonSchema object defining the type of array elements
  • description - Optional string description of the array

Returns:

  • JsonArraySchema - Schema for arrays with the specified item type

Example:

;; Array of strings
(lj/array "List of tags" (lc4j/string "A tag"))
;; Array of objects
(lj/array "List of users"
          (lj/object {"name" (lc4j/string)
                     "age" (lc4j/int)}))

boolean

(boolean)(boolean description)

Creates a JSON schema for boolean values.

Args:

  • description - Optional string description of the boolean field

Returns:

  • JsonBooleanSchema - Schema for boolean values

Example:

(lj/boolean "Whether the feature is enabled")
(lj/boolean)  ; No description

enum

(enum vals)(enum description vals)

Creates a JSON schema for enumerated values.

Args:

  • vals - Collection of valid string values
  • description - Optional string description of the enum

Returns:

  • JsonEnumSchema - Schema that accepts only the specified values

Example:

;; Status field with specific values
(lj/enum "User status" ["active" "inactive" "pending"])
;; Priority levels
(lj/enum ["low" "medium" "high" "critical"])

int

(int)(int description)

Creates a JSON schema for integer values.

Args:

  • description - Optional string description of the integer field

Returns:

  • JsonIntegerSchema - Schema for integer values

Example:

(lj/int "Number of retries")
(lj/int)  ; No description

null

(null)

Creates a JSON schema for null values.

Returns:

  • JsonNullSchema - Schema that only accepts null

Example:

;; Optional field that can be null
(lj/any-of "Optional field"
           [(lj/string "String value")
            (lj/null)])

number

(number)(number description)

Creates a JSON schema for numeric values (integers and floats).

Args:

  • description - Optional string description of the number field

Returns:

  • JsonNumberSchema - Schema for numeric values

Example:

(lj/number "Price in dollars")
(lj/number)  ; No description

object

(object name->schema)(object options name->schema)

Creates a JSON schema for objects with defined properties.

This is the most commonly used schema type for structured data.

Args:

  • name->schema - Map from property names (strings) to their JsonSchema definitions
  • options - Optional configuration map or string description:
    • :description - String description of the object
    • :required - Collection of required property names
    • :definitions - Map of reusable schema definitions
    • :additional-properties? - Boolean, whether additional properties are allowed

Returns:

  • JsonObjectSchema - Schema for objects with the specified properties

Example:

;; Simple object
(lj/object {"name" (lj/string "User name")
            "age" (lj/int "User age")})
;; Complex object with options
(lj/object
  {:description "User profile with required fields"
   :required ["id" "name"]
   :additional-properties? false}
  {"id" (lj/string "Unique identifier")
   "name" (lj/string "Full name")
   "email" (lj/string "Email address")
   "preferences" (lj/object {"theme" (lj/enum ["light" "dark"])
                             "notifications" (lj/boolean)})})
;; With string description
(lj/object "Simple user object"
           {"id" (lj/string)
            "name" (lj/string)})

reference

(reference ref)

Creates a JSON schema reference to a definition.

References are used to avoid duplicating schema definitions and enable recursive schemas.

Args:

  • ref - String reference path (e.g., “#/$defs/User”)

Returns:

  • JsonReferenceSchema - Schema that references another definition

Example:

;; Reference to a definition
(lj/reference "#/$defs/User")
;; Self-reference for recursive structures
(lj/object {"value" (lj/string)
            "children" (lj/array (lj/reference "#")})

string

(string)(string description)

Creates a JSON schema for string values.

Args:

  • description - Optional string description of the string field

Returns:

  • JsonStringSchema - Schema for string values

Example:

(lj/string "User's full name")
(lj/string)  ; No description