All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Return string from
sluginstead of symbol to fixModel.refresh!sorting crash (PR #6 by @noelblaschke)
- Fix streamed tool call accumulation: argument deltas no longer overwrite the tool name (PR #3 by @shllg)
- Fix gem packaging: correct file permissions from 600 to 644 (issue #2 by @myxoh)
- Move streaming unit tests to dedicated spec file
tool_choicesupport (auto,required,none, or specific function name)parallel_tool_callssupport (:many/:one) via RubyLLM'stool_prefs
- Compatibility with RubyLLM v1.13.0 (
tool_prefs:parameter incompleteandrender_payload) - Handle new pre-normalized schema format from
Chat.with_schema
- Batch API for processing many requests asynchronously at 50% lower cost
RubyLLM.batch(model:, provider:)factory methodBatch#addto queue requests with auto-generated or custom IDsBatch#create!to upload JSONL and create the batch in one callBatch#wait!to poll until completion with progress callbacksBatch#resultsreturns aHash<custom_id, Message>using the same parsing asChatBatch#errors,Batch#cancel!, and status helpers (completed?,in_progress?,failed?)- Resume from a previous session via
RubyLLM.batch(id: "batch_abc", provider: :openai_responses) RubyLLM.batchesto list existing batchesBatcheshelper module with JSONL builder, URL helpers, and result parsing
chat.with_params(transport: :websocket)integration with standardchat.askinterfaceWebSocket#callfor accepting pre-built payloads from the provider
- WebSocket responses now preserve token counts from
StreamAccumulator
- WebSocket mode for lower-latency agentic workflows with persistent
wss://connectionsRubyLLM::ResponsesAPI::WebSocketstandalone class- Streamed responses via
create_responsewith block - Automatic
previous_response_idchaining across turns warmupfor server-side model weight caching (generate: false)- Thread-safe with one-at-a-time response constraint
- Supports all existing helpers:
State,Compaction,Tools - Soft dependency on
websocket-client-simple(lazy require with clear error)
- Compatibility with RubyLLM v1.12.0 (
thinking:parameter inrender_payload)
- Shell tool support for executing commands in hosted or local terminal environments
- Auto-provisioned containers (
container_auto), reusable containers (container_reference), and local execution (local) - Container networking with domain allowlists and domain-scoped secrets
- Configurable memory limits (
1g,4g,16g,64g) BuiltInTools.shellhelper andparse_shell_call_resultsparser
- Auto-provisioned containers (
- Server-side compaction for multi-hour agent runs without hitting context limits
Compaction.compaction_params(compact_threshold:)helper- Pass via
chat.with_params(context_management: [{ type: 'compaction', compact_threshold: 200_000 }])
- Containers API for managing persistent execution environments
create_container,retrieve_container,delete_containerlist_container_files,retrieve_container_file,retrieve_container_file_content
- Apply Patch tool for structured diff-based file editing
BuiltInTools.apply_patchhelper andparse_apply_patch_resultsparser
- Legacy ActiveRecord support
- CI compatibility fixes
- Initial release of the RubyLLM Responses API provider
- Core chat completion support with Responses API format
- Streaming support with typed event handling
- Function calling (tool use) support
- Built-in tools support:
- Web Search (
web_search_preview) - Code Interpreter (
code_interpreter) - File Search (
file_search) - Image Generation (
image_generation) - MCP (Model Context Protocol) (
mcp) - Computer Use (
computer_use_preview)
- Web Search (
- Stateful conversation support via
previous_response_idandstore - Background mode for long-running tasks
- Response polling and cancellation
- Message extension to support
response_id - Model capabilities for GPT-4o, GPT-4.1, and O-series models
- Media handling for images, PDFs, and audio