Copyright | (c) 2025 Tushar Adhatrao |
---|---|
License | MIT |
Maintainer | Tushar Adhatrao <[email protected]> |
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-FoTQnIMi8UeBjcOZ65CLdd" '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
.