ellmer
Call LLM APIs from R
ellmer stopped being a chat wrapper and started shipping the parts production LLM code needs
◆Recent moves
- 29d ago
ellmer 0.4.2
Production-hygiene work in the same vein as the last few releases: finish_reason exposes why the model stopped, chat() warns and chat_structured() errors when a response is truncated or filtered, set_model() allows switching models mid-chat, and batch_chat() reaches Gemini and Groq. Default models roll forward to the current Claude Sonnet generation across the Anthropic, Bedrock and Databricks entry points.
View source ↗ - 3mo ago
ellmer emits OpenTelemetry traces for every chat and tool call
⚡ SPARKThe release that makes R LLM code observable by the same tooling as everything else in a production stack. Chat and tool invocations become spans following the gen_ai conventions, nesting httr2's HTTP spans underneath.
View source ↗ - 9mo ago
ellmer 0.4.0 adds provider-native web search and stops storing API keys
⚡ SPARKThe release where ellmer picks up agentic capability and rewrites how secrets are handled. Built-in web search and fetch tools arrive for Claude, Gemini and OpenAI, credentials become a function rather than a stored string, and parallel_chat()/batch_chat() leave experimental status.
View source ↗ - 11mo ago
ellmer 0.3.2
Consistency work across the provider list: nine more chat_*() functions accept a params() object, chat() becomes compatible with most of them, and chat_azure_openai() renames deployment_id to model to match everyone else. Small, but it is the normalization that made the later provider-agnostic features possible.
View source ↗ - 11mo ago
ellmer 0.3.1
Provider fixes rather than features — GitHub models move to the models.github.ai endpoint, Vertex authentication scope and global location are corrected, and base URLs are read from environment variables. contents_record()/contents_replay() also learn to round-trip custom Turn and Content subclasses, which matters for anyone extending ellmer.
View source ↗ - 1y ago
ellmer 0.3.0 adds a universal chat() and rewrites tool specification
An ergonomics release with breaking edges. chat("anthropic") or chat("openai/gpt-4.1-nano") reaches any provider from a single string, and tool() moves to an explicit name/description/arguments form that returns a callable function. The maintainer's own notes acknowledge the migration pain and ship an LLM conversion prompt in ?tool to soften it.
View source ↗