Liking cljdoc? Tell your friends :D

DSCloj

A Clojure library inspired by DSPy, providing a declarative approach to building and optimizing language model pipelines.

DSCloj leverages litellm-clj to provide a unified interface for working with various LLM providers while bringing DSPy's powerful programming model to the Clojure ecosystem.

Clojars Project cljdoc badge Lint Status Test Status

Introduction

DSCloj brings the power of declarative LLM programming to Clojure. Inspired by Stanford's DSPy framework.

Quickstart Guide

Installation

Add DSCloj to your deps.edn:

{:deps {io.unravel/dscloj {:mvn/version "0.1.0"}}}

Basic Usage

DSCloj works by defining modules - declarative specifications of LLM tasks with typed inputs and outputs.

(require '[dscloj.core :as dscloj])

;; 1. Define a module
(def qa-module
  {:inputs [{:name :question
             :type "str"
             :description "The question to answer"}]
   :outputs [{:name :answer
              :type "str"
              :description "The answer to the question"}]
   :instructions "Provide concise and accurate answers."})

;; 2. Use the module with predict
(def result (dscloj/predict qa-module 
                            {:question "What is the capital of France?"}
                            {:model "gpt-4"
                             :api-key (System/getenv "OPENAI_API_KEY")}))

;; 3. Access the structured output
(:answer result)
;; => "Paris"

Key Concepts

Modules are maps with:

  • :inputs - Vector of input field definitions
  • :outputs - Vector of output field definitions
  • :instructions - Optional string describing the task instructions, rules, and examples

Fields are maps with:

  • :name - Keyword identifier
  • :type - String type ("str", "int", "float", "bool")
  • :description - Human-readable description

The predict function:

  1. Generates a prompt from the module specification
  2. Injects your input values
  3. Calls the LLM
  4. Parses and type-converts the output

More Examples

See the examples/ directory for:

  • Simple Q&A modules
  • Financial comparison with instructions and rules
  • Translation with custom LLM options
  • Multiple output types (bool, float, str)
  • Inspecting generated prompts

Supported LLM Providers

DSCloj uses litellm-clj and supports:

  • OpenAI (GPT-3.5, GPT-4)
  • Anthropic (Claude)
  • Google (PaLM, Gemini)
  • Azure OpenAI
  • And many more...

License

This project is licensed under the MIT License - see the LICENSE file for details.


Acknowledgments

  • LiteLLM - The original Python library that inspired this port

Can you improve this documentation?Edit on GitHub

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
Move to previous article
Move to next article
Ctrl+/Jump to the search field
× close