| Title: | Generic 'R' Agent Framework and 'BebeLM' 'CPU' Backend |
|---|---|
| Description: | Provides a backend-agnostic 'R' agent framework with 'S7'/'s7contract' interfaces for language-model providers, extensions, skills, prompt templates, frontend/TUI command catalogs, event streams, fuzzy file search, and append-only 'JSONL' session trees. It also includes a concrete native backend wrapping the pure-Rust 'BebeLM' 'CPU'-only inference library <https://github.com/maximecb/bebelm> and a native FFF fuzzy file finder <https://github.com/dmtrKovalenko/fff>. The native layer is structured as runtime-selected Rust backends so portable 'R' binaries can avoid build-host-specific SIMD assumptions while still using optimized backends when available. |
| Authors: | Sounkou Mahamane Toure [aut, cre], Maxime Chevalier-Boisvert [cph] (BebeLM upstream), Dmitriy Kovalenko [cph] (FFF fuzzy file finder), Hiroaki Yutani [cph] (savvy R/Rust interface) |
| Maintainer: | Sounkou Mahamane Toure <[email protected]> |
| License: | GPL (>= 3) |
| Version: | 0.2.0-0.1.0 |
| Built: | 2026-06-10 02:57:49 UTC |
| Source: | https://github.com/sounkou-bioinfo/Rbebelm |
A BebelAgent owns an independent token transcript and decode cache while
sharing the loaded model weights. This mirrors upstream bebelm::agent::Agent.
bebel_agent( model, greedy = FALSE, max_gen = NULL, max_context = NULL, max_think = NULL, temperature = NULL, top_k = NULL, repeat_penalty = NULL )bebel_agent( model, greedy = FALSE, max_gen = NULL, max_context = NULL, max_think = NULL, temperature = NULL, top_k = NULL, repeat_penalty = NULL )
model |
A |
greedy |
Use deterministic greedy decoding. |
max_gen, max_context, max_think
|
Optional generation limits. |
temperature, top_k, repeat_penalty
|
Optional sampling settings. |
A BebelAgent object.
Configure a BebeLM agent
bebel_agent_configure( agent, greedy = NULL, max_gen = NULL, max_context = NULL, max_think = NULL, temperature = NULL, top_k = NULL, repeat_penalty = NULL )bebel_agent_configure( agent, greedy = NULL, max_gen = NULL, max_context = NULL, max_think = NULL, temperature = NULL, top_k = NULL, repeat_penalty = NULL )
agent |
A |
greedy |
Use deterministic greedy decoding. |
max_gen, max_context, max_think
|
Optional generation limits. |
temperature, top_k, repeat_penalty
|
Optional sampling settings. |
Updated agent info.
Generate a raw continuation from a BebeLM agent transcript
bebel_agent_generate( agent, on_event = bebel_console_event(), check_interrupt = TRUE )bebel_agent_generate( agent, on_event = bebel_console_event(), check_interrupt = TRUE )
agent |
A |
on_event |
Event callback, named list of event-specific handlers, or
|
check_interrupt |
Check for Ctrl-C during prefill and before every decoded token. |
A classed generation result.
Inspect a BebeLM agent
bebel_agent_info(agent)bebel_agent_info(agent)
agent |
A |
Named list of state and configuration.
bebel_agent_loop() is the UI-independent controller inspired by Pi's
Agent/AgentSession versus InteractiveMode split. It owns lifecycle state,
queues, policy, hooks, and tool dispatch. Consoles, RPC handlers, and TUIs
should consume this loop rather than embedding agent business logic.
bebel_agent_loop( agent, tools = list(), context = new.env(parent = emptyenv()), policy = bebel_loop_policy(), hooks = list(), extensions = list(), session = TRUE, parse_tool_call = bebel_parse_tool_calls, on_event = NULL, check_interrupt = TRUE )bebel_agent_loop( agent, tools = list(), context = new.env(parent = emptyenv()), policy = bebel_loop_policy(), hooks = list(), extensions = list(), session = TRUE, parse_tool_call = bebel_parse_tool_calls, on_event = NULL, check_interrupt = TRUE )
agent |
An object implementing |
tools |
A list of |
context |
Private mutable context passed to tools and hooks. |
policy |
A |
hooks |
Optional named hooks. Loop hooks may observe |
extensions |
Optional list of |
session |
Session persistence setting. |
parse_tool_call |
Function converting tool-call text into one or more call records. |
on_event |
Optional event callback or handler list for model stream events. |
check_interrupt |
Check for Ctrl-C during generation. |
A bebelAgentLoop environment.
This is an Agent-first orchestration loop. It observes tool_call_end events,
parses tool calls, invokes matching R tools with private context, appends
tool results to the agent transcript, and continues generation.
bebel_agent_run( agent, tools = list(), context = new.env(parent = emptyenv()), hooks = list(), parse_tool_call = bebel_parse_tool_calls, max_steps = 4, on_event = NULL, check_interrupt = TRUE )bebel_agent_run( agent, tools = list(), context = new.env(parent = emptyenv()), hooks = list(), parse_tool_call = bebel_parse_tool_calls, max_steps = 4, on_event = NULL, check_interrupt = TRUE )
agent |
A |
tools |
A list of |
context |
Private run context passed to tools and hooks but not appended to the model transcript. |
hooks |
Optional named list of hooks: |
parse_tool_call |
Function converting tool-call content to either one |
max_steps |
Maximum assistant/tool iterations. |
on_event |
Optional event callback or handler list for model events. |
check_interrupt |
Check for Ctrl-C during generation. |
A bebelAgentRun list with turns, tool calls, and final agent info.
This is a small metadata layer on top of bebel_tool(). It keeps a
JSON-schema-like parameter specification next to the executable R function so
the same tool catalog can be used by the console agent and the RPC surface.
bebel_agent_tool(name, description, params = list(), fun)bebel_agent_tool(name, description, params = list(), fun)
name |
Tool name. |
description |
Short description shown to the model and clients. |
params |
Named list of parameter specifications. Each entry may contain
|
fun |
Function called as |
A bebelAgentTool object.
Describe an Rbebelm agent tool catalog
bebel_agent_tool_catalog(tools)bebel_agent_tool_catalog(tools)
tools |
A tool list accepted by |
A data frame with tool names and descriptions.
Append raw text to a BebeLM agent transcript
bebel_append(agent, text)bebel_append(agent, text)
agent |
A |
text |
Raw text to append. |
Invisibly returns agent.
Delegates ChatML system-turn rendering to upstream BebeLM. When tools are
supplied, their schemas are rendered in upstream's List of tools: [...]
system-block preamble before message.
bebel_append_system(agent, message, tools = NULL)bebel_append_system(agent, message, tools = NULL)
agent |
A |
message |
System instruction text. |
tools |
Optional list of |
Invisibly returns agent.
Render and append a system prompt to an agent backend
bebel_append_system_prompt( agent, provider, name = "system", data = list(), skill_provider = NULL, skills = character(), tools = NULL )bebel_append_system_prompt( agent, provider, name = "system", data = list(), skill_provider = NULL, skills = character(), tools = NULL )
agent |
Object implementing |
provider |
Object implementing |
name |
Prompt template name. |
data |
Template data. |
skill_provider |
Optional object implementing |
skills |
Character vector of skill names to append. |
tools |
Optional backend-native tool declarations. |
agent, invisibly.
Append token ids to a BebeLM agent transcript
bebel_append_tokens(agent, ids)bebel_append_tokens(agent, ids)
agent |
A |
ids |
Integer token ids. |
Invisibly returns agent.
Append a ChatML tool result turn to a BebeLM agent transcript
bebel_append_tool_result(agent, content)bebel_append_tool_result(agent, content)
agent |
A |
content |
Tool result content to append. |
Invisibly returns agent.
Append a ChatML user turn to a BebeLM agent transcript
bebel_append_user(agent, message)bebel_append_user(agent, message)
agent |
A |
message |
User message. |
Invisibly returns agent.
Generate and close an assistant ChatML turn from a BebeLM agent
bebel_assistant_turn( agent, on_event = bebel_console_event(), check_interrupt = TRUE )bebel_assistant_turn( agent, on_event = bebel_console_event(), check_interrupt = TRUE )
agent |
A |
on_event |
Event callback, named list of event-specific handlers, or
|
check_interrupt |
Check for Ctrl-C during prefill and before every decoded token. |
A classed generation result.
This low-level variant mirrors upstream BebeLM's tool driver stop semantics:
generation stops with stop == "tool_call" after <|tool_call_end|> so the
caller can execute the requested tool(s) and append one tool-result turn.
Most users should prefer bebel_agent_run().
bebel_assistant_turn_tool_stop( agent, on_event = bebel_console_event(), check_interrupt = TRUE )bebel_assistant_turn_tool_stop( agent, on_event = bebel_console_event(), check_interrupt = TRUE )
agent |
A |
on_event |
Event callback, named list of event-specific handlers, or
|
check_interrupt |
Check for Ctrl-C during prefill and before every decoded token. |
A bebelAssistantTurnResult list.
Append a system message to an agent backend
bebel_backend_append_system(agent, message, tools = NULL)bebel_backend_append_system(agent, message, tools = NULL)
agent |
An object implementing |
message |
System message text. |
tools |
Optional backend-native tool declarations. |
Append a tool result to an agent backend
bebel_backend_append_tool_result(agent, content)bebel_backend_append_tool_result(agent, content)
agent |
An object implementing |
content |
Tool result content. |
Append a user message to an agent backend
bebel_backend_append_user(agent, message)bebel_backend_append_user(agent, message)
agent |
An object implementing |
message |
User message text. |
Run one assistant turn on an agent backend
bebel_backend_assistant_turn( agent, on_event = NULL, check_interrupt = TRUE, stop_on_tool_call = FALSE )bebel_backend_assistant_turn( agent, on_event = NULL, check_interrupt = TRUE, stop_on_tool_call = FALSE )
agent |
An object implementing |
on_event |
Optional stream event callback. |
check_interrupt |
Check for Ctrl-C during generation. |
stop_on_tool_call |
Stop after a tool-call delimiter when supported. |
Clear an agent backend
bebel_backend_clear(agent)bebel_backend_clear(agent)
agent |
An object implementing |
Return agent backend information
bebel_backend_info(agent)bebel_backend_info(agent)
agent |
An object implementing |
Return agent backend transcript text
bebel_backend_transcript(agent)bebel_backend_transcript(agent)
agent |
An object implementing |
Generate a single ChatML assistant reply
bebel_chat( model, message, greedy = FALSE, on_event = bebel_console_event(), check_interrupt = TRUE, max_gen = NULL, max_context = NULL, max_think = NULL, temperature = NULL, top_k = NULL, repeat_penalty = NULL )bebel_chat( model, message, greedy = FALSE, on_event = bebel_console_event(), check_interrupt = TRUE, max_gen = NULL, max_context = NULL, max_think = NULL, temperature = NULL, top_k = NULL, repeat_penalty = NULL )
model |
A |
message |
User message. |
greedy |
Use deterministic greedy decoding. |
on_event |
Event callback, named list of event-specific handlers, or
|
check_interrupt |
Check for Ctrl-C during prefill and before every decoded token. |
max_gen, max_context, max_think
|
Optional generation limits. |
temperature, top_k, repeat_penalty
|
Optional sampling settings. |
Clears the conversation state while keeping the loaded model weights and the
agent's generation configuration. This is the helper form of agent$clear().
bebel_clear(agent)bebel_clear(agent)
agent |
A |
Updated agent info.
Returns an event handler suitable for on_event. Thinking blocks are printed
with <think> markers, text deltas are printed as they arrive, and done events
add a trailing newline.
bebel_console_event()bebel_console_event()
A function accepting one generation event list.
The default catalog is intentionally small. It exposes read-only file and R
session inspection tools plus optional R evaluation and plot rendering. These
are ordinary R functions and run in the current R process. Plot rendering is
device-backed: options(Rbebelm.graphics.device=) or the
RBEBELM_GRAPHICS_DEVICE environment variable may be "auto", "native",
"png", "jgd", or "devout-ascii".
bebel_default_r_tools( env = .GlobalEnv, cwd = getwd(), allow_eval = FALSE, max_chars = 4000L )bebel_default_r_tools( env = .GlobalEnv, cwd = getwd(), allow_eval = FALSE, max_chars = 4000L )
env |
Environment used by |
cwd |
Working directory for file and plot tools. |
allow_eval |
Whether to include the |
max_chars |
Maximum characters returned from a single tool. |
A named list of bebelAgentTool objects.
Decode BebeLM token ids
bebel_detokenize(model, ids)bebel_detokenize(model, ids)
model |
A |
ids |
Integer token ids. |
Decoded text.
bebel_event_handler() creates a single on_event callback from handlers for
individual event types. Current event types are returned by
bebel_event_types().
bebel_event_handler( start = NULL, thinking_start = NULL, thinking_delta = NULL, thinking_end = NULL, text_start = NULL, text_delta = NULL, text_end = NULL, tool_list_start = NULL, tool_list_delta = NULL, tool_list_end = NULL, tool_call_start = NULL, tool_call_delta = NULL, tool_call_end = NULL, done = NULL, default = NULL )bebel_event_handler( start = NULL, thinking_start = NULL, thinking_delta = NULL, thinking_end = NULL, text_start = NULL, text_delta = NULL, text_end = NULL, tool_list_start = NULL, tool_list_delta = NULL, tool_list_end = NULL, tool_call_start = NULL, tool_call_delta = NULL, tool_call_end = NULL, done = NULL, default = NULL )
start, thinking_start, thinking_delta, thinking_end, text_start, text_delta, text_end
|
Optional functions called for the corresponding stream event. |
tool_list_start, tool_list_delta, tool_list_end
|
Optional handlers for BebeLM tool-list delimiter blocks. |
tool_call_start, tool_call_delta, tool_call_end
|
Optional handlers for BebeLM tool-call delimiter blocks. |
done |
Function called for the final done event, or |
default |
Function called for events without a type-specific handler, or |
A function accepting one generation event list.
Return BebeLM stream event types.
bebel_event_types()bebel_event_types()
Extensions contribute tools, commands, hooks, and optional UI metadata to the
agent loop. They are registered into bebel_agent_loop() and are deliberately
UI-independent: the standalone tui/ Rust frontend can consume the same command/metadata catalog
without owning business logic.
bebel_extension( name, tools = list(), commands = list(), hooks = list(), skill_providers = list(), prompt_template_providers = list(), keybindings = list(), widgets = list(), metadata = list() )bebel_extension( name, tools = list(), commands = list(), hooks = list(), skill_providers = list(), prompt_template_providers = list(), keybindings = list(), widgets = list(), metadata = list() )
name |
Extension name. |
tools |
Optional list of |
commands |
Optional list of |
hooks |
Optional named hook list. |
skill_providers |
Optional named list of objects implementing |
prompt_template_providers |
Optional named list of objects implementing
|
keybindings |
Optional metadata for TUI consumers. |
widgets |
Optional metadata for TUI consumers. |
metadata |
Optional extension metadata. |
A bebelExtension object.
Return commands contributed by an extension
bebel_extension_commands(extension)bebel_extension_commands(extension)
extension |
An object implementing |
Return hooks contributed by an extension
bebel_extension_hooks(extension)bebel_extension_hooks(extension)
extension |
An object implementing |
Return an extension manifest
bebel_extension_manifest(extension)bebel_extension_manifest(extension)
extension |
An object implementing |
Return prompt-template providers contributed by an extension
bebel_extension_prompt_template_providers(extension)bebel_extension_prompt_template_providers(extension)
extension |
An object implementing |
Return skill providers contributed by an extension
bebel_extension_skill_providers(extension)bebel_extension_skill_providers(extension)
extension |
An object implementing |
Return tools contributed by an extension
bebel_extension_tools(extension)bebel_extension_tools(extension)
extension |
An object implementing |
bebel_file_finder() creates a persistent native FFF/fff-c-based file
index for a project directory. bebel_file_search() queries that index and
returns a data frame suitable for consoles, RPC clients, and the standalone
tui/ file picker.
bebel_file_finder( root = getwd(), frecency_db_path = "", history_db_path = "", enable_mmap_cache = FALSE, enable_content_indexing = FALSE, watch = FALSE, ai_mode = TRUE, wait_timeout_ms = 10000 ) bebel_file_search( finder = getwd(), query = "", current_file = "", max_threads = 0, offset = 0, limit = 50, combo_boost_score_multiplier = 100, min_combo_count = 3, wait_timeout_ms = 10000 )bebel_file_finder( root = getwd(), frecency_db_path = "", history_db_path = "", enable_mmap_cache = FALSE, enable_content_indexing = FALSE, watch = FALSE, ai_mode = TRUE, wait_timeout_ms = 10000 ) bebel_file_search( finder = getwd(), query = "", current_file = "", max_threads = 0, offset = 0, limit = 50, combo_boost_score_multiplier = 100, min_combo_count = 3, wait_timeout_ms = 10000 )
root |
Project directory to index. |
frecency_db_path |
Optional FFF frecency database path. Empty string disables frecency persistence. |
history_db_path |
Optional FFF query-history database path. Empty string disables query-history persistence. |
enable_mmap_cache |
Enable FFF mmap cache warmup. |
enable_content_indexing |
Enable FFF content indexing. |
watch |
Start FFF's filesystem watcher for live updates. |
ai_mode |
Use FFF's AI-agent mode. |
wait_timeout_ms |
Milliseconds to wait for initial indexing or query readiness. |
finder |
A |
query |
Fuzzy query string. |
current_file |
Optional currently focused file for FFF scoring. |
max_threads |
Maximum FFF search threads; |
offset |
Result offset for pagination. |
limit |
Maximum number of rows to return. |
combo_boost_score_multiplier |
FFF combo boost multiplier. |
min_combo_count |
Minimum combo count before boost. |
The FFF backend is native-only. In webR/wasm this API is present but creating a finder raises an explicit unsupported error so the rest of the package can still load.
A BebelFileFinder object.
Generate a raw continuation from a prompt
bebel_generate( model, prompt, greedy = FALSE, on_event = bebel_console_event(), check_interrupt = TRUE, max_gen = NULL, max_context = NULL, max_think = NULL, temperature = NULL, top_k = NULL, repeat_penalty = NULL )bebel_generate( model, prompt, greedy = FALSE, on_event = bebel_console_event(), check_interrupt = TRUE, max_gen = NULL, max_context = NULL, max_think = NULL, temperature = NULL, top_k = NULL, repeat_penalty = NULL )
model |
A |
prompt |
Prompt text. |
greedy |
Use deterministic greedy decoding. |
on_event |
Event callback, named list of event-specific handlers, or
|
check_interrupt |
Check for Ctrl-C during prefill and before every decoded token. |
max_gen, max_context, max_think
|
Optional generation limits. |
temperature, top_k, repeat_penalty
|
Optional sampling settings. |
A classed list with generated text, token ids, stop reason, and timing statistics.
Returns the full token transcript currently held by the agent. This is the
helper form of agent$history().
bebel_history(agent)bebel_history(agent)
agent |
A |
Integer token ids.
Start an interactive terminal chat loop. If x is a BebelModel, a new
BebelAgent is created. If x is a BebelAgent, its existing transcript and
caches are reused. Type /quit or /exit to leave the loop.
bebel_live_console( x, prompt = ">>> ", exit_commands = c("/quit", "/exit"), on_event = bebel_console_event(), check_interrupt = TRUE, greedy = FALSE, max_gen = NULL, max_context = NULL, max_think = NULL, temperature = NULL, top_k = NULL, repeat_penalty = NULL )bebel_live_console( x, prompt = ">>> ", exit_commands = c("/quit", "/exit"), on_event = bebel_console_event(), check_interrupt = TRUE, greedy = FALSE, max_gen = NULL, max_context = NULL, max_think = NULL, temperature = NULL, top_k = NULL, repeat_penalty = NULL )
x |
A |
prompt |
Prompt displayed before reading each user message. |
exit_commands |
Character vector of commands that exit the console. |
on_event |
Event handler used for assistant output. |
check_interrupt |
Check for Ctrl-C during generation. |
greedy |
Use deterministic greedy decoding. |
max_gen, max_context, max_think
|
Optional generation limits. |
temperature, top_k, repeat_penalty
|
Optional sampling settings. |
Invisibly returns the BebelAgent used by the console.
Cancel an agent loop
bebel_loop_cancel(loop)bebel_loop_cancel(loop)
loop |
A |
Invisibly returns loop.
Return a loop's frontend catalog
bebel_loop_catalog(loop)bebel_loop_catalog(loop)
loop |
A |
A list with tool, command, extension, skill-provider, and prompt-template-provider catalogs.
Clear queued steering and follow-up messages
bebel_loop_clear_queue(loop)bebel_loop_clear_queue(loop)
loop |
A |
A list containing cleared steering and followUp messages.
Commands are UI-independent loop actions. A TUI or console can render the
command catalog, but execution happens against the bebelAgentLoop.
bebel_loop_command(name, fun, description = NULL, usage = NULL)bebel_loop_command(name, fun, description = NULL, usage = NULL)
name |
Command name without a leading slash. |
fun |
Function called as |
description |
Optional human-readable description. |
usage |
Optional usage string. |
A bebelLoopCommand object.
Return a loop's command catalog
bebel_loop_command_catalog(loop)bebel_loop_command_catalog(loop)
loop |
A |
A data frame of commands.
Return agent-loop events
bebel_loop_events(loop, since = 0L)bebel_loop_events(loop, since = 0L)
loop |
A |
since |
Return events with sequence number greater than |
A list of event records.
Execute a loop command
bebel_loop_execute_command(loop, text)bebel_loop_execute_command(loop, text)
loop |
A |
text |
Command text such as |
TRUE if a command was handled, otherwise FALSE.
Return a loop's extension manifests
bebel_loop_extensions(loop)bebel_loop_extensions(loop)
loop |
A |
A list of extension manifests.
Follow-up messages mirror Pi's followUp() queue: they are delivered only
when the loop would otherwise stop because there are no tool calls or steering
messages left.
bebel_loop_follow_up(loop, message)bebel_loop_follow_up(loop, message)
loop |
A |
message |
Text to queue. |
Policies configure the UI-independent loop. The queue mode names mirror Pi's
core agent loop: queued steering/follow-up messages are drained either
"one-at-a-time" or "all".
bebel_loop_policy( max_steps = 8L, steering_mode = c("one-at-a-time", "all"), follow_up_mode = c("one-at-a-time", "all"), before_tool_call = NULL )bebel_loop_policy( max_steps = 8L, steering_mode = c("one-at-a-time", "all"), follow_up_mode = c("one-at-a-time", "all"), before_tool_call = NULL )
max_steps |
Maximum assistant/tool iterations per run. |
steering_mode |
How queued steering messages are drained. |
follow_up_mode |
How queued follow-up messages are drained. |
before_tool_call |
Optional function |
A bebelLoopPolicy object.
If the loop is idle, this appends the prompt and runs the loop. If the loop is
already active, streaming_behavior must be "steer" or "followUp", matching
Pi's prompt queue semantics.
bebel_loop_prompt(loop, text, streaming_behavior = NULL)bebel_loop_prompt(loop, text, streaming_behavior = NULL)
loop |
A |
text |
User prompt text. |
streaming_behavior |
|
A loop run result when idle, otherwise invisibly returns loop.
Adds one or more extension objects to an existing bebelAgentLoop, rebuilds
the loop's tool/command/provider/hook catalogs, and emits extension/catalog
events for frontends. This is normal R environment mutation, not a core
reload command.
bebel_loop_register_extension(loop, extensions, replace = FALSE)bebel_loop_register_extension(loop, extensions, replace = FALSE)
loop |
A |
extensions |
A |
replace |
Replace existing extensions with the same manifest name. |
Invisibly returns loop.
This optional SDK surface exposes a backend-agnostic bebel_agent_loop() over
a transport endpoint with GET /stream NDJSON events, POST /command typed
commands, and POST /rpc JSON-RPC compatibility. The endpoint may be local
HTTP, remote HTTP, or HTTPS/TLS when nanonext is configured with TLS.
External frontends such as the native rbebelm-tui binary call the loop
protocol and never assume the backend is a concrete BebelAgent.
bebel_loop_rpc_server(loop, url = "http://127.0.0.1:8080", tls = NULL)bebel_loop_rpc_server(loop, url = "http://127.0.0.1:8080", tls = NULL)
loop |
A |
url |
URL to listen on, e.g. |
tls |
Optional TLS configuration from |
A nanoServer object from nanonext.
Run an agent loop
bebel_loop_run(loop, prompt = NULL, max_steps = NULL)bebel_loop_run(loop, prompt = NULL, max_steps = NULL)
loop |
A |
prompt |
Optional user prompt to append before running. |
max_steps |
Optional per-call step cap. Defaults to |
A bebelAgentLoopRun / bebelAgentRun result.
Inspect agent-loop state
bebel_loop_state(loop)bebel_loop_state(loop)
loop |
A |
A list snapshot of loop state.
Steering messages mirror Pi's steer() queue: they are delivered after the
current assistant/tool turn and before the next model call.
bebel_loop_steer(loop, message)bebel_loop_steer(loop, message)
loop |
A |
message |
Text to queue. |
Invisibly returns loop.
Run one agent-loop assistant/tool step
bebel_loop_step(loop)bebel_loop_step(loop)
loop |
A |
A list with turn, tool_blocks, and done.
Removes an extension by manifest name, rebuilds contributed catalogs, and emits extension/catalog events for frontends.
bebel_loop_unregister_extension(loop, name, missing_ok = FALSE)bebel_loop_unregister_extension(loop, name, missing_ok = FALSE)
loop |
A |
name |
Extension manifest name. |
missing_ok |
If |
Load a BebeLM GGUF model
bebel_model_load(path, num_threads = NULL)bebel_model_load(path, num_threads = NULL)
path |
Path to the GGUF weights file. |
num_threads |
Optional Rayon global thread-pool size. This can only be set once per R process. |
A BebelModel object.
This compatibility wrapper returns the first call from bebel_parse_tool_calls().
Prefer bebel_parse_tool_calls() when multiple calls may be present.
bebel_parse_tool_call(content)bebel_parse_tool_call(content)
content |
Accumulated content between BebeLM tool-call delimiters. |
A list with name, arguments, and raw.
Delegates Pythonic BebeLM tool-call parsing ([name(arg='value')], including
multiple calls) to upstream BebeLM. JSON call objects and legacy name({...})
calls are parsed with imported package yyjsonr.
bebel_parse_tool_calls(content)bebel_parse_tool_calls(content)
content |
Accumulated content between BebeLM tool-call delimiters. |
A list of calls, each with name, arguments, and raw.
Prompt templates are backend-agnostic named text templates. Rendering is kept
deliberately small and portable: {{name}} placeholders are replaced by
values in data.
bebel_prompt_template( name, template, description = NULL, metadata = list(), path = NULL )bebel_prompt_template( name, template, description = NULL, metadata = list(), path = NULL )
name |
Template name. |
template |
Template text. |
description |
Optional description. |
metadata |
Optional metadata list. |
path |
Optional source path. |
An bebelPromptTemplate object.
List prompt templates
bebel_prompt_template_list(provider)bebel_prompt_template_list(provider)
provider |
A prompt-template provider. |
Create a prompt-template provider
bebel_prompt_template_provider( templates = list(), paths = character(), name = "default" )bebel_prompt_template_provider( templates = list(), paths = character(), name = "default" )
templates |
|
paths |
Template files or directories to scan. |
name |
Provider name. |
An bebelPromptTemplateProvider implementing BebelPromptTemplateProvider.
Render a prompt template
bebel_prompt_template_render(provider, name, data = list())bebel_prompt_template_render(provider, name, data = list())
provider |
A prompt-template provider. |
name |
Template name. |
data |
Template data. |
bebel_r_agent() is a higher-level layer inspired by R console agents. It
keeps one BebeLM agent, a private tool context, and a small R
tool catalog together so the same object can be driven by a console loop or
by the JSON-RPC server.
bebel_r_agent( model, system_prompt = NULL, tools = NULL, env = .GlobalEnv, cwd = getwd(), allow_eval = TRUE, prompt_detail = c("compact", "full"), greedy = FALSE, max_gen = 512, max_context = 4096, max_think = 64, temperature = 0.8, top_k = 50, repeat_penalty = 1.1 )bebel_r_agent( model, system_prompt = NULL, tools = NULL, env = .GlobalEnv, cwd = getwd(), allow_eval = TRUE, prompt_detail = c("compact", "full"), greedy = FALSE, max_gen = 512, max_context = 4096, max_think = 64, temperature = 0.8, top_k = 50, repeat_penalty = 1.1 )
model |
A |
system_prompt |
System prompt. |
tools |
Tool catalog. Defaults to |
env |
Environment exposed to R tools. |
cwd |
Working directory for file tools. |
allow_eval |
Whether to include |
prompt_detail |
Tool prompt detail. |
greedy, max_gen, max_context, max_think, temperature, top_k, repeat_penalty
|
Generation options passed to |
A bebelRAgent environment.
Clear an Rbebelm R agent session
bebel_r_agent_clear(session)bebel_r_agent_clear(session)
session |
A |
Invisibly returns session.
Start an interactive Rbebelm console agent
bebel_r_agent_console( session, prompt = "bebel> ", max_steps = 4L, show_stats = TRUE, blank_limit = 10L )bebel_r_agent_console( session, prompt = "bebel> ", max_steps = 4L, show_stats = TRUE, blank_limit = 10L )
session |
A |
prompt |
Prompt string. |
max_steps |
Maximum assistant/tool iterations per user prompt. |
show_stats |
Whether to print token/timing stats after each turn. |
blank_limit |
Number of consecutive blank inputs before exiting. Set to |
Invisibly returns session.
Create an agent loop from an R-native agent session
bebel_r_agent_loop( session, policy = bebel_loop_policy(), hooks = list(), extensions = list(), agent_session = TRUE, parse_tool_call = bebel_parse_tool_calls, on_event = NULL, check_interrupt = TRUE )bebel_r_agent_loop( session, policy = bebel_loop_policy(), hooks = list(), extensions = list(), agent_session = TRUE, parse_tool_call = bebel_parse_tool_calls, on_event = NULL, check_interrupt = TRUE )
session |
A |
policy |
A |
hooks |
Optional named hooks. Loop hooks may observe |
extensions |
Optional list of |
agent_session |
Session persistence setting passed to |
parse_tool_call |
Function converting tool-call text into one or more call records. |
on_event |
Optional event callback or handler list for model stream events. |
check_interrupt |
Check for Ctrl-C during generation. |
A bebelAgentLoop environment.
This optional SDK surface uses nanonext to expose the same bebelRAgent
object used by the console. JSON parsing/serialization uses imported yyjsonr.
It is intentionally small and not an OpenAI API:
clients call JSON-RPC methods such as turn, tools/list, and
session/transcript.
bebel_r_agent_rpc_server(session, url = "http://127.0.0.1:8080")bebel_r_agent_rpc_server(session, url = "http://127.0.0.1:8080")
session |
A |
url |
URL to listen on, e.g. |
A nanoServer object from nanonext.
Convenience wrapper for loading a model, creating a bebel_r_agent(), and
entering bebel_r_agent_console(). This keeps the loaded model object local
to the launcher while the agent tools, /r, and /rplot commands share env.
bebel_r_agent_start( weights = Sys.getenv("BEBELM_WEIGHTS_FILE", "LFM2.5-8B-A1B-Q4_K_M.gguf"), num_threads = as.numeric(Sys.getenv("BEBELM_NUM_THREADS", "2")), env = .GlobalEnv, cwd = getwd(), allow_eval = TRUE, greedy = TRUE, max_gen = as.numeric(Sys.getenv("BEBELM_AGENT_MAX_GEN", "256")), max_context = 4096, max_think = as.numeric(Sys.getenv("BEBELM_AGENT_MAX_THINK", "48")), temperature = 0.8, top_k = 50, repeat_penalty = 1.1, prompt = "bebel> ", max_steps = 4L, show_stats = TRUE, blank_limit = 10L, prompt_detail = c("compact", "full") )bebel_r_agent_start( weights = Sys.getenv("BEBELM_WEIGHTS_FILE", "LFM2.5-8B-A1B-Q4_K_M.gguf"), num_threads = as.numeric(Sys.getenv("BEBELM_NUM_THREADS", "2")), env = .GlobalEnv, cwd = getwd(), allow_eval = TRUE, greedy = TRUE, max_gen = as.numeric(Sys.getenv("BEBELM_AGENT_MAX_GEN", "256")), max_context = 4096, max_think = as.numeric(Sys.getenv("BEBELM_AGENT_MAX_THINK", "48")), temperature = 0.8, top_k = 50, repeat_penalty = 1.1, prompt = "bebel> ", max_steps = 4L, show_stats = TRUE, blank_limit = 10L, prompt_detail = c("compact", "full") )
weights |
GGUF weights file. Defaults to |
num_threads |
Optional Rayon thread count passed to |
env |
Environment shared by |
cwd |
Working directory for file tools and |
allow_eval |
Whether to include |
greedy, max_gen, max_context, max_think, temperature, top_k, repeat_penalty
|
Generation options passed to |
prompt |
Prompt string for |
max_steps |
Maximum assistant/tool iterations per user prompt. |
show_stats |
Whether to print token/timing stats after each turn. |
blank_limit |
Number of consecutive blank inputs before exiting the console. Set to |
prompt_detail |
Tool prompt detail passed to |
Invisibly returns the bebelRAgent session after the console exits.
Run one user turn through an Rbebelm R agent
bebel_r_agent_turn( session, prompt, max_steps = 4L, on_event = NULL, hooks = list(), check_interrupt = TRUE )bebel_r_agent_turn( session, prompt, max_steps = 4L, on_event = NULL, hooks = list(), check_interrupt = TRUE )
session |
A |
prompt |
User prompt. |
max_steps |
Maximum assistant/tool iterations. |
on_event |
Optional BebeLM event callback. |
hooks |
Optional hooks passed to |
check_interrupt |
Check for Ctrl-C during generation. |
A bebelRAgentTurn list.
Append or clear a label on a session entry
bebel_session_append_label(session, target_id, label = NULL)bebel_session_append_label(session, target_id, label = NULL)
session |
An |
target_id |
Entry id to label. |
label |
Label text, or |
Append a message entry to an agent session
bebel_session_append_message(session, role, content, message = NULL, ...)bebel_session_append_message(session, role, content, message = NULL, ...)
session |
An |
role |
Message role, e.g. |
content |
Message content. Strings or lists of content blocks are accepted. |
message |
Optional complete message object. If supplied, |
... |
Extra message fields such as |
The appended entry id.
Append model/thinking/compaction/branch metadata
bebel_session_append_model_change(session, provider, model_id) bebel_session_append_thinking_level_change(session, thinking_level) bebel_session_append_compaction( session, summary, first_kept_entry_id, tokens_before, details = NULL, from_hook = FALSE ) bebel_session_append_branch_summary( session, from_id, summary, details = NULL, from_hook = FALSE )bebel_session_append_model_change(session, provider, model_id) bebel_session_append_thinking_level_change(session, thinking_level) bebel_session_append_compaction( session, summary, first_kept_entry_id, tokens_before, details = NULL, from_hook = FALSE ) bebel_session_append_branch_summary( session, from_id, summary, details = NULL, from_hook = FALSE )
session |
An |
provider |
Provider id. |
model_id |
Model id. |
thinking_level |
Thinking/reasoning level. |
summary |
Summary text. |
first_kept_entry_id |
First entry kept after compaction. |
tokens_before |
Number of tokens before compaction. |
details |
Optional metadata. |
from_hook |
Was the entry created by an extension hook? |
from_id |
Branch source entry id. |
The appended entry id.
Append session metadata and extension entries
bebel_session_append_session_info(session, name) bebel_session_append_custom(session, custom_type, data = NULL) bebel_session_append_custom_message( session, custom_type, content, display = TRUE, details = NULL )bebel_session_append_session_info(session, name) bebel_session_append_custom(session, custom_type, data = NULL) bebel_session_append_custom_message( session, custom_type, content, display = TRUE, details = NULL )
session |
An |
name |
Session display name. |
custom_type |
Extension or custom entry type. |
data |
Extension state data. Custom entries do not enter model context. |
content |
Custom message content. Custom messages may enter model context. |
display |
Should a UI render the custom message? |
details |
Optional extension-specific metadata. |
The appended entry id.
Return the branch from root to a session entry
bebel_session_branch(session, from_id = bebel_session_leaf_id(session))bebel_session_branch(session, from_id = bebel_session_leaf_id(session))
session |
An |
from_id |
Entry id. Defaults to the current leaf. |
A list of session entries in path order.
Move the current session leaf
bebel_session_checkout(session, entry_id = NULL)bebel_session_checkout(session, entry_id = NULL)
session |
An |
entry_id |
Entry id to continue from, or |
The session, invisibly.
Build model context from the active session branch
bebel_session_context(session)bebel_session_context(session)
session |
An |
A list with messages, thinking_level, model, and branch entries.
The store is backend-agnostic. It records framework/session information and message-shaped data; it does not assume a BebeLM transcript implementation.
bebel_session_create( cwd = getwd(), session_dir = NULL, id = NULL, parent_session = NULL, name = NULL, persist = TRUE )bebel_session_create( cwd = getwd(), session_dir = NULL, id = NULL, parent_session = NULL, name = NULL, persist = TRUE )
cwd |
Working directory stored in the session header. |
session_dir |
Optional concrete directory for the JSONL file. If |
id |
Optional session id. |
parent_session |
Optional parent session file path for forks/clones. |
name |
Optional display name stored as a |
persist |
If |
An bebelSession object.
Returns the directory used for backend-agnostic agent session JSONL files.
By default sessions are stored under
tools::R_user_dir("Rbebelm", "data")/sessions/<encoded-cwd>/, inspired by
Pi's per-working-directory session layout. Set RBEBELM_SESSION_DIR or pass
session_dir to the creation/opening helpers to override it.
bebel_session_dir(cwd = getwd(), session_root = NULL, create = TRUE)bebel_session_dir(cwd = getwd(), session_root = NULL, create = TRUE)
cwd |
Working directory represented by the session directory. |
session_root |
Optional root directory. Defaults to
|
create |
Create the directory if needed? |
A session directory path.
bebel_session_fork() copies all non-header entries from an existing JSONL
file. bebel_session_clone_branch() copies only the path from the root to a
selected leaf, matching Pi's active-branch clone behavior.
bebel_session_fork(source_path, cwd = getwd(), session_dir = NULL, id = NULL) bebel_session_clone_branch( session, leaf_id = bebel_session_leaf_id(session), cwd = session$cwd, session_dir = session$session_dir, id = NULL )bebel_session_fork(source_path, cwd = getwd(), session_dir = NULL, id = NULL) bebel_session_clone_branch( session, leaf_id = bebel_session_leaf_id(session), cwd = session$cwd, session_dir = session$session_dir, id = NULL )
source_path |
Source JSONL session file. |
cwd |
Target working directory for the new session. |
session_dir |
Optional concrete target session directory. |
id |
Optional new session id. |
session |
Source |
leaf_id |
Leaf entry id to clone. Defaults to the source session leaf. |
The opened forked/cloned bebelSession.
Inspect agent session metadata
bebel_session_header(session) bebel_session_entries(session) bebel_session_leaf_id(session) bebel_session_file(session) bebel_session_get_entry(session, id)bebel_session_header(session) bebel_session_entries(session) bebel_session_leaf_id(session) bebel_session_file(session) bebel_session_get_entry(session, id)
session |
An |
id |
Entry id for |
List agent session files
bebel_session_list(cwd = getwd(), session_dir = NULL)bebel_session_list(cwd = getwd(), session_dir = NULL)
cwd |
Working directory used for default session directory lookup. |
session_dir |
Optional concrete directory to scan. |
A data frame with basic session metadata.
Open an agent session JSONL file
bebel_session_open(path, session_dir = NULL, cwd = NULL)bebel_session_open(path, session_dir = NULL, cwd = NULL)
path |
Session JSONL file. |
session_dir |
Optional session directory for future derived sessions. |
cwd |
Optional working-directory override. |
An bebelSession object.
Return an agent session tree
bebel_session_tree(session)bebel_session_tree(session)
session |
An |
A nested list of tree nodes with entry, children, and optional label.
A skill is reusable instruction/context text plus metadata. Skill providers list and load skills; the loop or prompt-composition layer decides when to include them.
bebel_skill(name, content, description = NULL, metadata = list(), path = NULL)bebel_skill(name, content, description = NULL, metadata = list(), path = NULL)
name |
Skill name. |
content |
Skill content. |
description |
Optional description. |
metadata |
Optional metadata list. |
path |
Optional source path. |
An bebelSkill object.
List available skills
bebel_skill_list(provider)bebel_skill_list(provider)
provider |
A skill provider. |
Load a skill by name
bebel_skill_load(provider, name)bebel_skill_load(provider, name)
provider |
A skill provider. |
name |
Skill name. |
Create a skill provider
bebel_skill_provider(skills = list(), paths = character(), name = "default")bebel_skill_provider(skills = list(), paths = character(), name = "default")
skills |
|
paths |
Skill markdown files or directories to scan. |
name |
Provider name. |
An bebelSkillProvider implementing BebelSkillProvider.
Compose a system prompt from a prompt template and optional skills
bebel_system_prompt( provider, name = "system", data = list(), skill_provider = NULL, skills = character() )bebel_system_prompt( provider, name = "system", data = list(), skill_provider = NULL, skills = character() )
provider |
Object implementing |
name |
Prompt template name. |
data |
Template data. |
skill_provider |
Optional object implementing |
skills |
Character vector of skill names to append. |
Rendered system prompt text.
Return BebeLM tokenizer special token ids.
bebel_token_ids()bebel_token_ids()
Tokenize text with a BebeLM model tokenizer
bebel_tokenize(model, text, add_bos = TRUE)bebel_tokenize(model, text, add_bos = TRUE)
model |
A |
text |
Text to encode. |
add_bos |
Whether to prepend the BOS token. |
Integer token ids.
Define a BebeLM R tool
bebel_tool(name, fun, description = NULL, schema = NULL)bebel_tool(name, fun, description = NULL, schema = NULL)
name |
Tool name exposed to the tool dispatcher. |
fun |
Function to run. It is called as |
description |
Optional human-readable description. |
schema |
Optional schema/metadata object for prompts or adapters. |
A bebelTool object.
Converts an R bebel_tool() declaration into BebeLM's JSON tool schema string
for the system List of tools: [...] preamble using yyjsonr. This is
normally called by bebel_append_system() when tools are supplied.
bebel_tool_schema_json(tool)bebel_tool_schema_json(tool)
tool |
A |
A character scalar containing the rendered tool schema.
Decodes the agent's full token transcript. This is the helper form of
agent$transcript().
bebel_transcript(agent)bebel_transcript(agent)
agent |
A |
Transcript text.
Persistent BebeLM conversation agent with transcript and decode caches.
BebelAgentBebelAgent
An object of class Rbebelm::BebelAgent__bundle (inherits from savvy_Rbebelm__sealed) of length 1.
Backends implement the minimal transcript/generation protocol consumed by
bebel_agent_loop().
BebelAgentBackendBebelAgentBackend
An object of class s7contract::s7_interface (inherits from S7_object) of length 1.
Extensions expose a manifest plus contributed tools, commands, and hooks.
BebelAgentExtensionBebelAgentExtension
An object of class s7contract::s7_interface (inherits from S7_object) of length 1.
Persistent native FFF fuzzy file finder.
BebelFileFinderBebelFileFinder
An object of class Rbebelm::BebelFileFinder__bundle (inherits from savvy_Rbebelm__sealed) of length 1.
Loaded BebeLM GGUF model.
BebelModelBebelModel
An object of class Rbebelm::BebelModel__bundle (inherits from savvy_Rbebelm__sealed) of length 1.
Prompt-template providers list and render named templates.
BebelPromptTemplateProviderBebelPromptTemplateProvider
An object of class s7contract::s7_interface (inherits from S7_object) of length 1.
Skill providers list and load reusable instructions or workflow snippets.
BebelSkillProviderBebelSkillProvider
An object of class s7contract::s7_interface (inherits from S7_object) of length 1.
Print a BebeLM generation result
## S3 method for class 'bebelGeneration' print(x, ...)## S3 method for class 'bebelGeneration' print(x, ...)
x |
A result returned by |
... |
Unused. |
Invisibly returns x.
Return feature information reported by the loaded Rust backend.
rbebelm_backend_features()rbebelm_backend_features()
Inspect Rbebelm backend dispatch state
rbebelm_backend_info()rbebelm_backend_info()
A named list describing installed, supported, requested, and selected backends,
with class rbebelmBackendInfo.
These S7/s7contract interfaces keep the loop, extension, skill, and prompt
infrastructure independent from the concrete LLM backend. BebeLM implements
BebelAgentBackend; other local or remote providers can implement the same
generics later.
Inspect CPU SIMD support used by backend dispatch
rbebelm_cpuid_info()rbebelm_cpuid_info()
A named list of logical CPU feature checks with class rbebelmCpuidInfo.
Must be called before loading a model or querying backend features.
rbebelm_set_backend(backend = "auto")rbebelm_set_backend(backend = "auto")
backend |
One of |
The requested backend name.