| Copyright | (c) 2025 Tushar Adhatrao |
|---|---|
| License | MIT |
| Maintainer | Tushar Adhatrao <tusharadhatrao@gmail.com> |
| Stability | experimental |
| Safe Haskell | None |
| Language | Haskell2010 |
Data.Ollama.Common.SchemaBuilder
Description
Overview
This module defines a simple schema builder DSL for programmatically constructing JSON Schemas compatible with the structured output features in the Ollama API.
It supports nested objects, arrays, required fields, and custom types, and provides infix operators for a fluent and expressive syntax.
Example
import Data.Ollama.Common.SchemaBuilder
let schema =
emptyObject
|+ ("name", JString)
|+ ("age", JInteger)
|++ ("address", buildSchema $
emptyObject
|+ ("city", JString)
|+ ("zip", JInteger)
|! "city"
)
|!! ["name", "age"]
& buildSchema
printSchema schema
Synopsis
- data JsonType
- newtype Property = Property JsonType
- data Schema = Schema {}
- emptyObject :: SchemaBuilder
- addProperty :: Text -> JsonType -> SchemaBuilder -> SchemaBuilder
- addObjectProperty :: Text -> Schema -> SchemaBuilder -> SchemaBuilder
- requireField :: Text -> SchemaBuilder -> SchemaBuilder
- requireFields :: [Text] -> SchemaBuilder -> SchemaBuilder
- buildSchema :: SchemaBuilder -> Schema
- objectOf :: SchemaBuilder -> JsonType
- arrayOf :: JsonType -> JsonType
- toOllamaFormat :: Schema -> Value
- printSchema :: Schema -> IO ()
- (|+) :: SchemaBuilder -> (Text, JsonType) -> SchemaBuilder
- (|++) :: SchemaBuilder -> (Text, Schema) -> SchemaBuilder
- (|!) :: SchemaBuilder -> Text -> SchemaBuilder
- (|!!) :: SchemaBuilder -> [Text] -> SchemaBuilder
Core Types
Supported JSON types for schema generation.
Constructors
| JString | |
| JNumber | |
| JInteger | |
| JBoolean | |
| JNull | |
| JArray JsonType | Array of a specific type |
| JObject Schema | Nested object schema |
Instances
A named property with a given type (supports nested values).
Complete schema representation.
Since: 0.2.0.0
Constructors
| Schema | |
Fields
| |
Instances
| ToJSON Schema Source # | |||||
| Generic Schema Source # | |||||
Defined in Data.Ollama.Common.SchemaBuilder Associated Types
| |||||
| Show Schema Source # | |||||
| Eq Schema Source # | |||||
| type Rep Schema Source # | |||||
Defined in Data.Ollama.Common.SchemaBuilder type Rep Schema = D1 ('MetaData "Schema" "Data.Ollama.Common.SchemaBuilder" "ollama-haskell-0.2.0.0-J0UKzHAyP8eLXolo5NNMUa" 'False) (C1 ('MetaCons "Schema" 'PrefixI 'True) (S1 ('MetaSel ('Just "schemaProperties") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Map Text Property)) :*: S1 ('MetaSel ('Just "schemaRequired") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Text]))) | |||||
Schema Construction
emptyObject :: SchemaBuilder Source #
Create an empty schema object.
addProperty :: Text -> JsonType -> SchemaBuilder -> SchemaBuilder Source #
Add a simple field with a given name and type.
addObjectProperty :: Text -> Schema -> SchemaBuilder -> SchemaBuilder Source #
Add a nested object field with its own schema.
requireField :: Text -> SchemaBuilder -> SchemaBuilder Source #
Mark a field as required.
requireFields :: [Text] -> SchemaBuilder -> SchemaBuilder Source #
Mark multiple fields as required.
buildSchema :: SchemaBuilder -> Schema Source #
Finalize the schema from a builder.
Schema Utilities
toOllamaFormat :: Schema -> Value Source #
Convert schema into a JSON Value suitable for API submission.
printSchema :: Schema -> IO () Source #
Pretty print a schema as formatted JSON.
Infix Schema DSL
(|+) :: SchemaBuilder -> (Text, JsonType) -> SchemaBuilder infixl 7 Source #
Infix alias for addProperty.
(|++) :: SchemaBuilder -> (Text, Schema) -> SchemaBuilder infixl 7 Source #
Infix alias for addObjectProperty.
(|!) :: SchemaBuilder -> Text -> SchemaBuilder infixl 6 Source #
Infix alias for requireField.
(|!!) :: SchemaBuilder -> [Text] -> SchemaBuilder infixl 6 Source #
Infix alias for requireFields.