Class: RubyLLM::Agents::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_llm/agents/core/configuration.rb

Overview

Global configuration for RubyLLM::Agents

Provides centralized settings for agent behavior, dashboard authentication, caching, and observability thresholds.

Examples:

Basic configuration

RubyLLM::Agents.configure do |config|
  config.default_model = "gpt-4o"
  config.default_temperature = 0.7
  config.async_logging = true
end

Dashboard with HTTP Basic Auth

RubyLLM::Agents.configure do |config|
  config.basic_auth_username = ENV["AGENTS_USER"]
  config.basic_auth_password = ENV["AGENTS_PASS"]
end

Dashboard with custom authentication

RubyLLM::Agents.configure do |config|
  config.dashboard_parent_controller = "AdminController"
  config.dashboard_auth = ->(controller) { controller.current_user&.admin? }
end

See Also:

Constant Summary collapse

FORWARDED_RUBY_LLM_ATTRIBUTES =

API key and provider attributes forwarded to RubyLLM. These let users configure everything in one place through RubyLLM::Agents.configure instead of a separate RubyLLM.configure block.

%i[
  openai_api_key
  anthropic_api_key
  gemini_api_key
  deepseek_api_key
  openrouter_api_key
  bedrock_api_key
  bedrock_secret_key
  bedrock_session_token
  bedrock_region
  mistral_api_key
  perplexity_api_key
  xai_api_key
  gpustack_api_key
  inception_api_key
  openai_api_base
  openai_organization_id
  openai_project_id
  gemini_api_base
  gpustack_api_base
  ollama_api_base
  vertexai_project_id
  vertexai_location
  request_timeout
  max_retries
].freeze
SENSITIVE_ATTRIBUTES =

Attribute names that contain sensitive values (API keys, passwords)

(
  FORWARDED_RUBY_LLM_ATTRIBUTES.select { |a| a.to_s.match?(/api_key|secret_key|session_token/) } +
  %i[basic_auth_password elevenlabs_api_key]
).freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Initializes configuration with default values



669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
# File 'lib/ruby_llm/agents/core/configuration.rb', line 669

def initialize
  @default_model = "gemini-2.0-flash"
  @default_temperature = 0.0
  @default_timeout = 60
  @cache_store = nil
  @async_logging = true
  @soft_purge_after = 30.days
  @hard_purge_after = 365.days
  @anomaly_cost_threshold = 5.00
  @anomaly_duration_threshold = 10_000
  @dashboard_auth = ->(_controller) { true }
  @dashboard_parent_controller = "ActionController::Base"
  @basic_auth_username = nil
  @basic_auth_password = nil
  @per_page = 25
  @recent_executions_limit = 10
  @job_retry_attempts = 3

  # Reliability defaults (all disabled by default for backward compatibility)
  @default_retries = {max: 0, backoff: :exponential, base: 0.4, max_delay: 3.0, on: []}
  @default_fallback_models = []
  @default_total_timeout = nil
  @default_retryable_patterns = {
    rate_limiting: ["rate limit", "rate_limit", "too many requests", "429", "quota"],
    server_errors: ["500", "502", "503", "504", "service unavailable",
      "internal server error", "bad gateway", "gateway timeout"],
    capacity: ["overloaded", "capacity"]
  }

  # Streaming, tools, and thinking defaults
  @default_streaming = false
  @default_tools = []
  @default_tool_timeout = nil
  @default_thinking = nil

  # Governance defaults
  @budgets = nil
  @on_alert = nil
  @persist_prompts = true
  @persist_responses = true

  # Multi-tenancy defaults (disabled for backward compatibility)
  @multi_tenancy_enabled = false
  @tenant_resolver = -> {}
  @tenant_config_resolver = nil

  # Messages summary defaults
  @persist_messages_summary = true
  @messages_summary_max_length = 500

  # Embedding defaults
  @default_embedding_model = "text-embedding-3-small"
  @default_embedding_dimensions = nil
  @default_embedding_batch_size = 100
  @track_embeddings = true

  # Transcription defaults
  @default_transcription_model = "whisper-1"
  @track_transcriptions = true
  @transcription_model_pricing = {}
  @default_transcription_cost = nil  # nil = no default, will trigger warning

  # Multi-source pricing defaults
  @pricing_cache_ttl = nil  # nil = use DataStore default (24h)
  @portkey_pricing_enabled = true
  @portkey_pricing_url = nil  # nil = use default
  @openrouter_pricing_enabled = true
  @openrouter_pricing_url = nil
  @helicone_pricing_enabled = true
  @helicone_pricing_url = nil
  @llmpricing_enabled = true
  @llmpricing_url = nil

  # TTS/Speech defaults
  @default_tts_provider = :openai
  @default_tts_model = "tts-1"
  @default_tts_voice = "nova"
  @track_speech = true

  # ElevenLabs defaults
  @elevenlabs_api_key = nil
  @elevenlabs_api_base = "https://api.elevenlabs.io"

  # TTS pricing defaults
  @tts_model_pricing = {}
  @default_tts_cost = nil

  # Execution/conversation agent tracking
  @track_executions = true
  @track_audio = true
  @track_cache_hits = true

  # Image Generation defaults
  @default_image_model = "gpt-image-1"
  @default_image_size = "1024x1024"
  @default_image_quality = "standard"
  @default_image_style = "vivid"
  @max_image_prompt_length = 4000
  @track_image_generation = true
  @image_model_aliases = {
    fast: "flux-schnell",
    quality: "gpt-image-1",
    cheap: "sdxl"
  }

  # Image Pricing defaults
  @litellm_pricing_url = nil  # Use default from Pricing module
  @litellm_pricing_cache_ttl = nil  # Use default (24 hours)
  @default_image_cost = nil  # User-configurable fallback cost per image
  @image_model_pricing = {}  # User-defined pricing overrides

  # Phase 2: Image Variation, Editing, Transformation, Upscaling defaults
  @default_variator_model = nil  # Falls back to default_image_model
  @default_editor_model = nil  # Falls back to default_image_model
  @default_transformer_model = "sdxl"  # SDXL is good for transformations
  @default_upscaler_model = "real-esrgan"  # Real-ESRGAN for upscaling
  @default_variation_strength = 0.5  # How different variations should be
  @default_transform_strength = 0.75  # How much to transform

  # Phase 3: Image Analysis and Background Removal defaults
  @default_analyzer_model = "gpt-4o"  # Vision model for analysis
  @default_analysis_type = :detailed  # Default analysis type
  @default_analyzer_max_tags = 10  # Max tags to extract
  @default_background_remover_model = "rembg"  # Default remover model
  @default_background_output_format = :png  # Output format for transparency

  # Directory structure defaults
  @root_directory = "agents"  # Root directory under app/
  @root_namespace = nil  # No namespace (top-level classes)

  # Custom middleware stack
  @middleware_stack = []

  # Tool tracking defaults
  @tool_result_max_length = 10_000

  # Audio data persistence (disabled by default — base64 audio can be large)
  @persist_audio_data = false

  # ElevenLabs dynamic pricing: base cost per 1K characters
  # Set to your plan's overage rate (e.g., 0.30 for Pro) to enable API-based pricing
  @elevenlabs_base_cost_per_1k = nil
  # ElevenLabs models cache TTL in seconds (6 hours)
  @elevenlabs_models_cache_ttl = 21_600

  # Knowledge defaults
  @knowledge_path = "app/agents/knowledge"
end

Instance Attribute Details

#anomaly_cost_thresholdObject

Attributes with validation (readers only, custom setters below)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 74

#anomaly_duration_thresholdObject

Attributes with validation (readers only, custom setters below)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 79

#async_loggingObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 48

#basic_auth_passwordObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 100

#basic_auth_usernameObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 95

#budgetsObject

Attributes with validation (readers only, custom setters below)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 175

#cache_storeActiveSupport::Cache::Store

Returns the configured cache store, falling back to Rails.cache

Examples:

Using a custom cache store

config.cache_store = ActiveSupport::Cache::MemoryStore.new

Returns:

  • (ActiveSupport::Cache::Store)

    The cache store instance



823
824
825
# File 'lib/ruby_llm/agents/core/configuration.rb', line 823

def cache_store
  @cache_store || Rails.cache
end

#dashboard_authObject

Attributes with validation (readers only, custom setters below)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 83

#dashboard_parent_controllerObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 90

#default_analysis_typeObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def default_analysis_type
  @default_analysis_type
end

#default_analyzer_max_tagsObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def default_analyzer_max_tags
  @default_analyzer_max_tags
end

#default_analyzer_modelObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def default_analyzer_model
  @default_analyzer_model
end

#default_background_output_formatObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def default_background_output_format
  @default_background_output_format
end

#default_background_remover_modelObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def default_background_remover_model
  @default_background_remover_model
end

#default_editor_modelObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def default_editor_model
  @default_editor_model
end

#default_embedding_batch_sizeObject

Attributes with custom setters (validation) — only readers here



# File 'lib/ruby_llm/agents/core/configuration.rb', line 272

#default_embedding_dimensionsObject

Attributes with custom setters (validation) — only readers here



# File 'lib/ruby_llm/agents/core/configuration.rb', line 264

#default_embedding_modelObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 257

#default_fallback_modelsObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 139

#default_image_costObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def default_image_cost
  @default_image_cost
end

#default_image_modelObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def default_image_model
  @default_image_model
end

#default_image_qualityObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def default_image_quality
  @default_image_quality
end

#default_image_sizeObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def default_image_size
  @default_image_size
end

#default_image_styleObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def default_image_style
  @default_image_style
end

#default_modelObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 32

#default_retriesObject

Attributes with validation (readers only, custom setters below)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 121

#default_retryable_patternsObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 128

#default_streamingObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 149

#default_temperatureObject

Attributes with validation (readers only, custom setters below)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 39

#default_thinkingObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 165

#default_timeoutObject

Attributes with validation (readers only, custom setters below)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 44

#default_tool_timeoutObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def default_tool_timeout
  @default_tool_timeout
end

#default_toolsObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 157

#default_total_timeoutObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 144

#default_transcription_costObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def default_transcription_cost
  @default_transcription_cost
end

#default_transcription_modelObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 286

#default_transform_strengthObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def default_transform_strength
  @default_transform_strength
end

#default_transformer_modelObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def default_transformer_model
  @default_transformer_model
end

#default_tts_costObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def default_tts_cost
  @default_tts_cost
end

#default_tts_modelObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 307

#default_tts_providerObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 300

#default_tts_voiceObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 314

#default_upscaler_modelObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def default_upscaler_model
  @default_upscaler_model
end

#default_variation_strengthObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def default_variation_strength
  @default_variation_strength
end

#default_variator_modelObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def default_variator_model
  @default_variator_model
end

#elevenlabs_api_baseObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def elevenlabs_api_base
  @elevenlabs_api_base
end

#elevenlabs_api_keyObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def elevenlabs_api_key
  @elevenlabs_api_key
end

#elevenlabs_base_cost_per_1kObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def elevenlabs_base_cost_per_1k
  @elevenlabs_base_cost_per_1k
end

#elevenlabs_models_cache_ttlObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def elevenlabs_models_cache_ttl
  @elevenlabs_models_cache_ttl
end

#hard_purge_afterObject

Attributes with validation (readers only, custom setters below)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 62

#helicone_pricing_enabledObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def helicone_pricing_enabled
  @helicone_pricing_enabled
end

#helicone_pricing_urlObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def helicone_pricing_url
  @helicone_pricing_url
end

#image_model_aliasesObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def image_model_aliases
  @image_model_aliases
end

#image_model_pricingObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def image_model_pricing
  @image_model_pricing
end

#job_retry_attemptsObject

Attributes with validation (readers only, custom setters below)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 112

#knowledge_pathObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def knowledge_path
  @knowledge_path
end

#litellm_pricing_cache_ttlObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def litellm_pricing_cache_ttl
  @litellm_pricing_cache_ttl
end

#litellm_pricing_urlObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def litellm_pricing_url
  @litellm_pricing_url
end

#llmpricing_enabledObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def llmpricing_enabled
  @llmpricing_enabled
end

#llmpricing_urlObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def llmpricing_url
  @llmpricing_url
end

#max_image_prompt_lengthObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def max_image_prompt_length
  @max_image_prompt_length
end

#messages_summary_max_lengthObject

Attributes with validation (readers only, custom setters below)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 252

#middleware_stackObject (readonly)

Attributes with custom setters (validation) — only readers here



393
394
395
# File 'lib/ruby_llm/agents/core/configuration.rb', line 393

def middleware_stack
  @middleware_stack
end

#multi_tenancy_enabledObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 211

#on_alertObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 187

#openrouter_pricing_enabledObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def openrouter_pricing_enabled
  @openrouter_pricing_enabled
end

#openrouter_pricing_urlObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def openrouter_pricing_url
  @openrouter_pricing_url
end

#per_pageObject

Attributes with validation (readers only, custom setters below)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 104

#persist_audio_dataObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def persist_audio_data
  @persist_audio_data
end

#persist_messages_summaryObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 246

#persist_promptsObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 201

#persist_responsesObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 206

#portkey_pricing_enabledObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def portkey_pricing_enabled
  @portkey_pricing_enabled
end

#portkey_pricing_urlObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def portkey_pricing_url
  @portkey_pricing_url
end

#pricing_cache_ttlObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def pricing_cache_ttl
  @pricing_cache_ttl
end

#recent_executions_limitObject

Attributes with validation (readers only, custom setters below)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 108

#retention_periodActiveSupport::Duration?

Deprecated.

Use #hard_purge_after instead.

Deprecated alias for hard_purge_after.

Returns:

  • (ActiveSupport::Duration, nil)


# File 'lib/ruby_llm/agents/core/configuration.rb', line 68

#root_directoryObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 328

#root_namespaceObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 335

#soft_purge_afterObject

Attributes with validation (readers only, custom setters below)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 53

#tenant_config_resolverObject

Attributes with validation (readers only, custom setters below)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 228

#tenant_resolverObject

Attributes with validation (readers only, custom setters below)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 218

#tool_result_max_lengthObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 345

#track_audioObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def track_audio
  @track_audio
end

#track_cache_hitsObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def track_cache_hits
  @track_cache_hits
end

#track_embeddingsObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 279

#track_executionsObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def track_executions
  @track_executions
end

#track_image_generationObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def track_image_generation
  @track_image_generation
end

#track_speechObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 321

#track_transcriptionsObject

Attributes without validation (simple accessors)



# File 'lib/ruby_llm/agents/core/configuration.rb', line 293

#transcription_model_pricingObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def transcription_model_pricing
  @transcription_model_pricing
end

#tts_model_pricingObject

Attributes without validation (simple accessors)



397
398
399
# File 'lib/ruby_llm/agents/core/configuration.rb', line 397

def tts_model_pricing
  @tts_model_pricing
end

Instance Method Details

#all_autoload_pathsArray<String>

Returns all autoload paths for LLM components

Returns:

  • (Array<String>)

    List of paths relative to Rails.root



1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
# File 'lib/ruby_llm/agents/core/configuration.rb', line 1101

def all_autoload_paths
  root = root_directory || "agents"
  base = "app/#{root}"

  [
    base,
    "#{base}/images",
    "#{base}/audio",
    "#{base}/embedders",
    "#{base}/tools"
  ]
end

#all_retryable_patternsArray<String>

Returns all retryable patterns as a flat array

Returns:

  • (Array<String>)

    All patterns from all categories



844
845
846
# File 'lib/ruby_llm/agents/core/configuration.rb', line 844

def all_retryable_patterns
  default_retryable_patterns.values.flatten.uniq
end

#async_available?Boolean

Returns whether the async gem is available

Returns:

  • (Boolean)

    true if async gem is loaded



898
899
900
# File 'lib/ruby_llm/agents/core/configuration.rb', line 898

def async_available?
  defined?(::Async) && defined?(::Async::Semaphore)
end

#async_context?Boolean

Returns whether we’re currently inside an async context

Returns:

  • (Boolean)

    true if running in a fiber with async scheduler



905
906
907
908
909
910
911
# File 'lib/ruby_llm/agents/core/configuration.rb', line 905

def async_context?
  return false unless async_available?

  defined?(::Async::Task) && ::Async::Task.current?
rescue
  false
end

#budget_enforcementSymbol

Returns the budget enforcement mode

Returns:

  • (Symbol)

    :none, :soft, or :hard



837
838
839
# File 'lib/ruby_llm/agents/core/configuration.rb', line 837

def budget_enforcement
  budgets&.dig(:enforcement) || :none
end

#budgets_enabled?Boolean

Returns whether budgets are configured and enforcement is enabled

Returns:

  • (Boolean)

    true if budgets are configured with enforcement



830
831
832
# File 'lib/ruby_llm/agents/core/configuration.rb', line 830

def budgets_enabled?
  budgets.is_a?(Hash) && budgets[:enforcement] && budgets[:enforcement] != :none
end

#clear_middleware!self

Removes all custom middleware

Returns:

  • (self)

    For method chaining



864
865
866
867
# File 'lib/ruby_llm/agents/core/configuration.rb', line 864

def clear_middleware!
  @middleware_stack = []
  self
end

#current_tenant_idString?

Returns the current tenant ID from the resolver

Returns:

  • (String, nil)

    Current tenant identifier or nil



879
880
881
882
883
# File 'lib/ruby_llm/agents/core/configuration.rb', line 879

def current_tenant_id
  return nil unless multi_tenancy_enabled?

  tenant_resolver&.call
end

#inspectString

Returns a concise string representation for debugging

Returns:

  • (String)

    Summary of key configuration values



888
889
890
891
892
893
# File 'lib/ruby_llm/agents/core/configuration.rb', line 888

def inspect
  "#<#{self.class} model=#{default_model.inspect} temperature=#{default_temperature} " \
    "timeout=#{default_timeout} streaming=#{default_streaming} " \
    "multi_tenancy=#{multi_tenancy_enabled} async_logging=#{async_logging} " \
    "track_executions=#{track_executions}>"
end

#multi_tenancy_enabled?Boolean

Returns whether multi-tenancy is enabled

Returns:

  • (Boolean)

    true if multi-tenancy is enabled



872
873
874
# File 'lib/ruby_llm/agents/core/configuration.rb', line 872

def multi_tenancy_enabled?
  @multi_tenancy_enabled == true
end

#namespace_for(category = nil) ⇒ String?

Returns the full namespace for a given category

Examples:

With root_namespace = “AI”

namespace_for(:embedders) #=> "AI::Embedders"
namespace_for(nil)        #=> "AI"

With no namespace (root_namespace = nil)

namespace_for(:embedders) #=> "Embedders"
namespace_for(nil)        #=> nil

Parameters:

  • category (Symbol, String, nil) (defaults to: nil)

    Category (e.g., :embedders, :images, or nil for root)

Returns:

  • (String, nil)

    Full namespace string, or nil if no namespace configured



923
924
925
926
927
928
929
930
931
# File 'lib/ruby_llm/agents/core/configuration.rb', line 923

def namespace_for(category = nil)
  category_namespace = category&.to_s&.camelize

  if root_namespace.present?
    category_namespace ? "#{root_namespace}::#{category_namespace}" : root_namespace
  else
    category_namespace
  end
end

#path_for(category, type = nil) ⇒ String

Returns the full path under app/ for a given category and type

Examples:

With root_directory = “llm”

path_for(:image, "generators") #=> "app/llm/image/generators"
path_for(nil, "agents")        #=> "app/llm/agents"

With root_directory = “agents” (default)

path_for(:images)              #=> "app/agents/images"
path_for(nil, "tools")         #=> "app/agents/tools"

Parameters:

  • category (Symbol, nil)

    Category (:audio, :image, :text, or nil)

  • type (String) (defaults to: nil)

    Component type (e.g., “agents”, “speakers”, “generators”)

Returns:

  • (String)

    Full path relative to Rails.root



944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
# File 'lib/ruby_llm/agents/core/configuration.rb', line 944

def path_for(category, type = nil)
  root = root_directory || "agents"
  base = "app/#{root}"

  category_path = case category
  when :images then "images"
  when :audio then "audio"
  when :embedders then "embedders"
  when :text then "text"
  when :image then "image"
  end

  if category_path && type
    "#{base}/#{category_path}/#{type}"
  elsif category_path
    "#{base}/#{category_path}"
  elsif type
    "#{base}/#{type}"
  else
    base
  end
end

#to_h(include_sensitive: false) ⇒ Hash

Returns all configuration as a hash grouped by category

Useful for debugging in the Rails console. Sensitive values (API keys, passwords) are hidden by default.

Examples:

RubyLLM::Agents.configuration.to_h
RubyLLM::Agents.configuration.to_h(include_sensitive: true)

Parameters:

  • include_sensitive (Boolean) (defaults to: false)

    Whether to include API keys and passwords

Returns:

  • (Hash)

    Configuration grouped by category



983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
# File 'lib/ruby_llm/agents/core/configuration.rb', line 983

def to_h(include_sensitive: false)
  {
    model: {
      default_model: default_model,
      default_temperature: default_temperature,
      default_timeout: default_timeout,
      default_streaming: default_streaming,
      default_thinking: default_thinking
    },
    reliability: {
      default_retries: default_retries,
      default_fallback_models: default_fallback_models,
      default_total_timeout: default_total_timeout,
      default_retryable_patterns: default_retryable_patterns
    },
    governance: {
      budgets: budgets,
      on_alert: on_alert&.class&.name,
      persist_prompts: persist_prompts,
      persist_responses: persist_responses,
      persist_messages_summary: persist_messages_summary,
      messages_summary_max_length: messages_summary_max_length
    },
    multi_tenancy: {
      enabled: multi_tenancy_enabled,
      tenant_resolver: tenant_resolver&.class&.name,
      tenant_config_resolver: tenant_config_resolver&.class&.name
    },
    dashboard: {
      per_page: per_page,
      recent_executions_limit: recent_executions_limit,
      dashboard_parent_controller: dashboard_parent_controller,
      basic_auth_username: basic_auth_username,
      dashboard_auth: dashboard_auth&.class&.name
    },
    logging: {
      async_logging: async_logging,
      soft_purge_after: soft_purge_after,
      hard_purge_after: hard_purge_after,
      job_retry_attempts: job_retry_attempts,
      track_executions: track_executions,
      track_cache_hits: track_cache_hits,
      track_audio: track_audio
    },
    anomaly: {
      anomaly_cost_threshold: anomaly_cost_threshold,
      anomaly_duration_threshold: anomaly_duration_threshold
    },
    tools: {
      default_tools: default_tools,
      tool_result_max_length: tool_result_max_length
    },
    embedding: {
      default_embedding_model: default_embedding_model,
      default_embedding_dimensions: default_embedding_dimensions,
      default_embedding_batch_size: default_embedding_batch_size,
      track_embeddings: track_embeddings
    },
    transcription: {
      default_transcription_model: default_transcription_model,
      track_transcriptions: track_transcriptions,
      transcription_model_pricing: transcription_model_pricing,
      default_transcription_cost: default_transcription_cost
    },
    speech: {
      default_tts_provider: default_tts_provider,
      default_tts_model: default_tts_model,
      default_tts_voice: default_tts_voice,
      track_speech: track_speech,
      tts_model_pricing: tts_model_pricing,
      default_tts_cost: default_tts_cost,
      persist_audio_data: persist_audio_data,
      elevenlabs_api_base: elevenlabs_api_base,
      elevenlabs_base_cost_per_1k: elevenlabs_base_cost_per_1k,
      elevenlabs_models_cache_ttl: elevenlabs_models_cache_ttl
    },
    image: {
      default_image_model: default_image_model,
      default_image_size: default_image_size,
      default_image_quality: default_image_quality,
      default_image_style: default_image_style,
      max_image_prompt_length: max_image_prompt_length,
      track_image_generation: track_image_generation,
      image_model_aliases: image_model_aliases,
      default_image_cost: default_image_cost,
      image_model_pricing: image_model_pricing,
      default_variator_model: default_variator_model,
      default_editor_model: default_editor_model,
      default_transformer_model: default_transformer_model,
      default_upscaler_model: default_upscaler_model,
      default_variation_strength: default_variation_strength,
      default_transform_strength: default_transform_strength,
      default_analyzer_model: default_analyzer_model,
      default_analysis_type: default_analysis_type,
      default_analyzer_max_tags: default_analyzer_max_tags,
      default_background_remover_model: default_background_remover_model,
      default_background_output_format: default_background_output_format
    },
    pricing: {
      pricing_cache_ttl: pricing_cache_ttl,
      portkey_pricing_enabled: portkey_pricing_enabled,
      openrouter_pricing_enabled: openrouter_pricing_enabled,
      helicone_pricing_enabled: helicone_pricing_enabled,
      llmpricing_enabled: llmpricing_enabled,
      litellm_pricing_url: litellm_pricing_url,
      litellm_pricing_cache_ttl: litellm_pricing_cache_ttl
    },
    directory: {
      root_directory: root_directory,
      root_namespace: root_namespace
    },
    api_keys: include_sensitive ? sensitive_api_keys : "(hidden, pass include_sensitive: true)"
  }
end

#use_middleware(middleware_class, before: nil, after: nil) ⇒ self

Registers a custom middleware class for all agents

Parameters:

  • middleware_class (Class)

    Must inherit from Pipeline::Middleware::Base

  • before (Class, nil) (defaults to: nil)

    Insert before this built-in middleware

  • after (Class, nil) (defaults to: nil)

    Insert after this built-in middleware

Returns:

  • (self)

    For method chaining

Raises:

  • (ArgumentError)

    If middleware_class is invalid



855
856
857
858
859
# File 'lib/ruby_llm/agents/core/configuration.rb', line 855

def use_middleware(middleware_class, before: nil, after: nil)
  validate_middleware_class!(middleware_class)
  @middleware_stack << {klass: middleware_class, before: before, after: after}
  self
end