ollama-haskell-0.2.0.0: Haskell client for ollama.
Copyright(c) 2025 Tushar Adhatrao
LicenseMIT
MaintainerTushar Adhatrao <[email protected]>
Stabilityexperimental
Safe HaskellNone
LanguageHaskell2010

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

Core Types

data JsonType Source #

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

Instances details
ToJSON JsonType Source # 
Instance details

Defined in Data.Ollama.Common.SchemaBuilder

Generic JsonType Source # 
Instance details

Defined in Data.Ollama.Common.SchemaBuilder

Associated Types

type Rep JsonType 
Instance details

Defined in Data.Ollama.Common.SchemaBuilder

type Rep JsonType = D1 ('MetaData "JsonType" "Data.Ollama.Common.SchemaBuilder" "ollama-haskell-0.2.0.0-FoTQnIMi8UeBjcOZ65CLdd" 'False) ((C1 ('MetaCons "JString" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "JNumber" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "JInteger" 'PrefixI 'False) (U1 :: Type -> Type))) :+: ((C1 ('MetaCons "JBoolean" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "JNull" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "JArray" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 JsonType)) :+: C1 ('MetaCons "JObject" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Schema)))))

Methods

from :: JsonType -> Rep JsonType x #

to :: Rep JsonType x -> JsonType #

Show JsonType Source # 
Instance details

Defined in Data.Ollama.Common.SchemaBuilder

Eq JsonType Source # 
Instance details

Defined in Data.Ollama.Common.SchemaBuilder

type Rep JsonType Source # 
Instance details

Defined in Data.Ollama.Common.SchemaBuilder

type Rep JsonType = D1 ('MetaData "JsonType" "Data.Ollama.Common.SchemaBuilder" "ollama-haskell-0.2.0.0-FoTQnIMi8UeBjcOZ65CLdd" 'False) ((C1 ('MetaCons "JString" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "JNumber" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "JInteger" 'PrefixI 'False) (U1 :: Type -> Type))) :+: ((C1 ('MetaCons "JBoolean" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "JNull" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "JArray" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 JsonType)) :+: C1 ('MetaCons "JObject" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Schema)))))

newtype Property Source #

A named property with a given type (supports nested values).

Constructors

Property JsonType 

Instances

Instances details
ToJSON Property Source # 
Instance details

Defined in Data.Ollama.Common.SchemaBuilder

Generic Property Source # 
Instance details

Defined in Data.Ollama.Common.SchemaBuilder

Associated Types

type Rep Property 
Instance details

Defined in Data.Ollama.Common.SchemaBuilder

type Rep Property = D1 ('MetaData "Property" "Data.Ollama.Common.SchemaBuilder" "ollama-haskell-0.2.0.0-FoTQnIMi8UeBjcOZ65CLdd" 'True) (C1 ('MetaCons "Property" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 JsonType)))

Methods

from :: Property -> Rep Property x #

to :: Rep Property x -> Property #

Show Property Source # 
Instance details

Defined in Data.Ollama.Common.SchemaBuilder

Eq Property Source # 
Instance details

Defined in Data.Ollama.Common.SchemaBuilder

type Rep Property Source # 
Instance details

Defined in Data.Ollama.Common.SchemaBuilder

type Rep Property = D1 ('MetaData "Property" "Data.Ollama.Common.SchemaBuilder" "ollama-haskell-0.2.0.0-FoTQnIMi8UeBjcOZ65CLdd" 'True) (C1 ('MetaCons "Property" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 JsonType)))

data Schema Source #

Complete schema representation.

Since: 0.2.0.0

Instances

Instances details
ToJSON Schema Source # 
Instance details

Defined in Data.Ollama.Common.SchemaBuilder

Generic Schema Source # 
Instance details

Defined in Data.Ollama.Common.SchemaBuilder

Associated Types

type Rep Schema 
Instance details

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])))

Methods

from :: Schema -> Rep Schema x #

to :: Rep Schema x -> Schema #

Show Schema Source # 
Instance details

Defined in Data.Ollama.Common.SchemaBuilder

Eq Schema Source # 
Instance details

Defined in Data.Ollama.Common.SchemaBuilder

Methods

(==) :: Schema -> Schema -> Bool #

(/=) :: Schema -> Schema -> Bool #

type Rep Schema Source # 
Instance details

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

objectOf :: SchemaBuilder -> JsonType Source #

Wrap a SchemaBuilder as a nested object type.

arrayOf :: JsonType -> JsonType Source #

Create an array of a given JSON type.

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.