← Back to Docs

JIDO ACTION ALT PERSPECTIVE claude

Documentation for JIDO_ACTION_ALT_PERSPECTIVE_claude from the Ds ex repository.

DSPEx + Jido.Action Integration Analysis

Recommendation: Selective Adoption

Rather than wholesale adoption, I recommend taking specific patterns and concepts from Jido.Action that align with DSPEx’s goals.

What to Adopt from Jido.Action

1. Parameter Validation Pattern

# Current DSPEx approach
defmodule QASignature do
  use DSPEx.Signature, "question -> answer"
end

# Enhanced with Jido-style validation
defmodule EnhancedPredict do
  use DSPEx.Program,
    schema: [
      signature: [type: :atom, required: true],
      client: [type: :atom, required: true],
      temperature: [type: :float, default: 0.7],
      max_tokens: [type: :integer, default: 150]
    ]
  
  def run(params, context) do
    # Validated params come in
    {:ok, result}
  end
end

2. Error Handling Infrastructure

# Adopt Jido's structured error system
defmodule DSPEx.Error do
  use TypedStruct
  
  typedstruct do
    field(:type, error_type(), enforce: true)
    field(:message, String.t(), enforce: true)
    field(:details, map(), default: %{})
  end
  
  # DSPEx-specific error types
  def prediction_error(message, details \\ %{})
  def signature_error(message, details \\ %{})
  def teleprompter_error(message, details \\ %{})
end

3. Execution Framework

# Enhanced DSPEx.Exec inspired by Jido.Exec
defmodule DSPEx.Exec do
  def run(program, inputs, opts \\ []) do
    with {:ok, normalized_inputs} <- normalize_inputs(inputs),
         {:ok, validated_inputs} <- validate_inputs(program, normalized_inputs),
         {:ok, result} <- execute_with_telemetry(program, validated_inputs, opts),
         {:ok, validated_output} <- validate_outputs(program, result) do
      {:ok, result}
    end
  end
  
  def run_async(program, inputs, opts \\ []) do
    # Async execution similar to Jido
  end
end

4. Tool Integration

# DSPEx programs as AI tools
defmodule DSPEx.Tool do
  def to_tool(program) do
    %{
      name: program_name(program),
      description: program_description(program),
      parameters: signature_to_schema(program.signature),
      function: &execute_program(program, &1, &2)
    }
  end
end

What NOT to Adopt

1. Agent System

DSPEx doesn’t need Jido’s agent/state management - LLM programs are more functional

2. Workflow Orchestration

DSPEx has its own composition patterns (chaining, teleprompters)

3. Compensation Patterns

LLM operations don’t typically need rollback/compensation

Proposed DSPEx Enhancement

# Enhanced DSPEx.Program with Jido-inspired features
defmodule DSPEx.Program do
  defmacro __using__(opts) do
    quote do
      @behaviour DSPEx.Program
      
      # Schema validation like Jido.Action
      @schema unquote(Keyword.get(opts, :schema, []))
      @output_schema unquote(Keyword.get(opts, :output_schema, []))
      
      # Metadata like Jido.Action
      def name, do: unquote(Keyword.get(opts, :name))
      def description, do: unquote(Keyword.get(opts, :description))
      def version, do: unquote(Keyword.get(opts, :version, "1.0.0"))
      
      # Tool conversion
      def to_tool, do: DSPEx.Tool.to_tool(__MODULE__)
      
      # Validation functions
      def validate_params(params), do: validate_against_schema(params, @schema)
      def validate_output(output), do: validate_against_schema(output, @output_schema)
    end
  end
end

# Usage
defmodule MyLLMProgram do
  use DSPEx.Program,
    name: "question_answerer",
    description: "Answers questions using LLM",
    schema: [
      question: [type: :string, required: true],
      context: [type: :string, required: false],
      temperature: [type: :float, default: 0.7]
    ],
    output_schema: [
      answer: [type: :string, required: true],
      confidence: [type: :float, required: false]
    ]
  
  def run(params, context) do
    # LLM program logic
    {:ok, %{answer: "...", confidence: 0.9}}
  end
end

Benefits of This Approach

  1. Better Parameter Validation: NimbleOptions-based schemas
  2. Improved Error Handling: Structured errors with context
  3. Tool Integration: Easy conversion to AI tool format
  4. Telemetry: Rich observability like Jido
  5. Async Support: Non-blocking execution for long LLM calls

Keep DSPEx’s Core Identity

  • Signatures: Keep the signature system - it’s perfect for LLM I/O contracts
  • Teleprompters: This is DSPEx’s killer feature for LLM optimization
  • Client Management: LLM provider abstraction is crucial
  • Examples: Training data representation for few-shot learning

Implementation Strategy

  1. Phase 1: Adopt error handling and validation patterns
  2. Phase 2: Enhance execution framework with async support
  3. Phase 3: Add tool integration capabilities
  4. Phase 4: Improve telemetry and observability

This gives you the benefits of Jido’s execution patterns while preserving DSPEx’s unique LLM-focused capabilities.