Module: Boxcars

Defined in:
lib/boxcars.rb,
lib/boxcars/mcp.rb,
lib/boxcars/train.rb,
lib/boxcars/boxcar.rb,
lib/boxcars/engine.rb,
lib/boxcars/prompt.rb,
lib/boxcars/result.rb,
lib/boxcars/x_node.rb,
lib/boxcars/engines.rb,
lib/boxcars/version.rb,
lib/boxcars/ruby_repl.rb,
lib/boxcars/generation.rb,
lib/boxcars/mcp/client.rb,
lib/boxcars/agent_event.rb,
lib/boxcars/engine/groq.rb,
lib/boxcars/observation.rb,
lib/boxcars/agent_runner.rb,
lib/boxcars/conversation.rb,
lib/boxcars/vector_store.rb,
lib/boxcars/engine/cohere.rb,
lib/boxcars/engine/google.rb,
lib/boxcars/engine/ollama.rb,
lib/boxcars/engine/openai.rb,
lib/boxcars/observability.rb,
lib/boxcars/openai_client.rb,
lib/boxcars/vector_search.rb,
lib/boxcars/boxcar/swagger.rb,
lib/boxcars/conduct_result.rb,
lib/boxcars/boxcar/sql_base.rb,
lib/boxcars/boxcar/url_text.rb,
lib/boxcars/engine/cerebras.rb,
lib/boxcars/engine/together.rb,
lib/boxcars/mcp/tool_boxcar.rb,
lib/boxcars/train/xml_train.rb,
lib/boxcars/train/zero_shot.rb,
lib/boxcars/engine/anthropic.rb,
lib/boxcars/engine/gemini_ai.rb,
lib/boxcars/mcp/stdio_client.rb,
lib/boxcars/train/tool_train.rb,
lib/boxcars/boxcar/calculator.rb,
lib/boxcars/boxcar/sql_sequel.rb,
lib/boxcars/mcp/tool_registry.rb,
lib/boxcars/engine/gpt4all_eng.rb,
lib/boxcars/train/train_action.rb,
lib/boxcars/train/train_finish.rb,
lib/boxcars/conversation_prompt.rb,
lib/boxcars/engine/perplexityai.rb,
lib/boxcars/optional_dependency.rb,
lib/boxcars/train/station_agent.rb,
lib/boxcars/train/xml_zero_shot.rb,
lib/boxcars/boxcar/active_record.rb,
lib/boxcars/boxcar/engine_boxcar.rb,
lib/boxcars/boxcar/google_search.rb,
lib/boxcars/boxcar/vector_answer.rb,
lib/boxcars/engine/engine_result.rb,
lib/boxcars/observability_backend.rb,
lib/boxcars/vector_store/document.rb,
lib/boxcars/boxcar/ruby_calculator.rb,
lib/boxcars/boxcar/wikipedia_search.rb,
lib/boxcars/vector_store/split_text.rb,
lib/boxcars/boxcar/sql_active_record.rb,
lib/boxcars/boxcar/xml_engine_boxcar.rb,
lib/boxcars/engine/intelligence_base.rb,
lib/boxcars/boxcar/json_engine_boxcar.rb,
lib/boxcars/vector_store/hnswlib/search.rb,
lib/boxcars/engine/unified_observability.rb,
lib/boxcars/vector_store/pgvector/search.rb,
lib/boxcars/vector_store/in_memory/search.rb,
lib/boxcars/vector_store/embed_via_open_ai.rb,
lib/boxcars/vector_store/embed_via_tensorflow.rb,
lib/boxcars/vector_store/hnswlib/load_from_disk.rb,
lib/boxcars/observability_backends/multi_backend.rb,
lib/boxcars/vector_store/hnswlib/save_to_hnswlib.rb,
lib/boxcars/engine/openai_compatible_chat_helpers.rb,
lib/boxcars/vector_store/hnswlib/build_from_files.rb,
lib/boxcars/observability_backends/posthog_backend.rb,
lib/boxcars/vector_store/pgvector/build_from_array.rb,
lib/boxcars/vector_store/pgvector/build_from_files.rb,
lib/boxcars/vector_store/pgvector/save_to_database.rb,
lib/boxcars/vector_store/in_memory/build_from_array.rb,
lib/boxcars/vector_store/in_memory/build_from_files.rb

Overview

Boxcars is a framework for running a series of tools to get an answer to a question.

Defined Under Namespace

Modules: MCP, ObservabilityBackend, OpenAIClient, OpenAICompatibleChatHelpers, OptionalDependency, UnifiedObservability, VectorStore Classes: ActiveRecord, AgentEvent, AgentRunner, Anthropic, ArgumentError, Boxcar, Calculator, Cerebras, Cohere, ConductResult, Configuration, ConfigurationError, Conversation, ConversationPrompt, Engine, EngineBoxcar, EngineResult, Engines, Error, GeminiAi, Generation, Google, GoogleSearch, Gpt4allEng, Groq, IntelligenceBase, JSONEngineBoxcar, KeyError, MultiBackend, Observability, Observation, Ollama, Openai, Perplexityai, PosthogBackend, Prompt, Result, RubyCalculator, RubyREPL, SQLActiveRecord, SQLBase, SQLSequel, SecurityError, StationAgent, Swagger, Together, ToolTrain, Train, TrainAction, TrainFinish, URLText, ValueError, VectorAnswer, VectorSearch, WikipediaSearch, XMLEngineBoxcar, XMLTrain, XMLZeroShot, XNode, XmlError, ZeroShot

Constant Summary collapse

VERSION =

The current version of the gem.

"0.10.9"
ToolCallingTrain =

Backwards-compatible alias for the initial v0.10 naming.

ToolTrain

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.configurationObject



167
168
169
# File 'lib/boxcars.rb', line 167

def self.configuration
  @configuration ||= Boxcars::Configuration.new
end

Class Method Details

.ask_userObject

return a proc that will ask the user for input



187
188
189
190
191
192
193
# File 'lib/boxcars.rb', line 187

def self.ask_user
  proc do |changes, _code|
    puts "This request will make #{changes} changes. Are you sure you want to run it? (y/[n])"
    answer = gets.chomp
    answer.downcase == 'y'
  end
end

.colorize(str, color, **options) ⇒ Object

simple colorization



259
260
261
262
263
264
265
266
267
268
# File 'lib/boxcars.rb', line 259

def self.colorize(str, color, **options)
  background = options[:background] || options[:bg] || false
  style = options[:style]
  offsets = %i[gray red green yellow blue magenta cyan white]
  styles = %i[normal bold dark italic underline xx xx underline xx strikethrough]
  start = background ? 40 : 30
  color_code = start + (offsets.index(color) || 8)
  style_code = styles.index(style) || 0
  "\e[#{style_code};#{color_code}m#{str}\e[0m"
end

.configure {|configuration| ... } ⇒ Object

Configure the gem.

Yields:



172
173
174
# File 'lib/boxcars.rb', line 172

def self.configure
  yield(configuration)
end

.debug(msg, color = nil) ⇒ Object

Logging system debug log



215
216
217
218
219
220
221
222
223
# File 'lib/boxcars.rb', line 215

def self.debug(msg, color = nil, **)
  msg = colorize(msg.to_s, color, **) if color
  log << msg
  if logger
    logger.debug(msg)
  else
    puts msg
  end
end

.engineObject

Return the default Engine class.



182
183
184
# File 'lib/boxcars.rb', line 182

def self.engine
  configuration.default_engine || Boxcars::Openai
end

.error(msg, color = nil) ⇒ Object

error log



248
249
250
251
252
253
254
255
256
# File 'lib/boxcars.rb', line 248

def self.error(msg, color = nil, **)
  msg = colorize(msg.to_s, color, **) if color
  log << msg
  if logger
    logger.error(msg)
  else
    puts msg
  end
end

.info(msg, color = nil) ⇒ Object

info log



226
227
228
229
230
231
232
233
234
# File 'lib/boxcars.rb', line 226

def self.info(msg, color = nil, **)
  msg = colorize(msg.to_s, color, **) if color
  log << msg
  if logger
    logger.info(msg)
  else
    puts msg
  end
end

.logObject

Keep a running log of log messages



201
202
203
204
# File 'lib/boxcars.rb', line 201

def self.log
  @log ||= []
  @log
end

.loggerObject

Return a logger, possibly if set.



196
197
198
# File 'lib/boxcars.rb', line 196

def self.logger
  Boxcars.configuration.logger
end

.take_logObject

Resets the log and return the old log



207
208
209
210
211
# File 'lib/boxcars.rb', line 207

def self.take_log
  logs = @log
  @log = []
  logs
end

.trainObject

Return the default Train class.



177
178
179
# File 'lib/boxcars.rb', line 177

def self.train
  configuration.default_train || Boxcars::ZeroShot
end

.warn(msg, color = nil) ⇒ Object

warn log



237
238
239
240
241
242
243
244
245
# File 'lib/boxcars.rb', line 237

def self.warn(msg, color = nil, **)
  msg = colorize(msg.to_s, color, **) if color
  log << msg
  if logger
    logger.warn(msg)
  else
    puts msg
  end
end