Files
loki/docs/testing/plans/07-input-construction.md
2026-04-16 10:17:03 -06:00

2.0 KiB

Test Plan: Input Construction

Feature description

Input encapsulates a single chat turn's data: text, files, role, model, session context, RAG embeddings, and function declarations. It's constructed at the start of each turn and captures all needed state from RequestContext.

Behaviors to test

Input::from_str

  • Creates Input from text string
  • Captures role via resolve_role
  • Captures session from ctx
  • Captures rag from ctx
  • Captures functions via select_functions
  • Captures stream_enabled from AppConfig
  • app_config field set from ctx.app.config
  • Empty text → is_empty() returns true

Input::from_files

  • Loads file contents
  • Supports multiple files
  • Supports directories (recursive)
  • Supports URLs (fetches content)
  • Supports loader syntax (e.g., jina:url)
  • Last message carry-over (%% syntax)
  • Combines file content with text
  • document_loaders from AppConfig used

resolve_role

  • Returns provided role if given
  • Extracts role from agent if agent active
  • Extracts role from session if session has role
  • Returns default model-based role otherwise
  • with_session flag set correctly
  • with_agent flag set correctly

Input methods

  • stream() returns stream_enabled && !model.no_stream()
  • create_client() uses app_config to init client
  • prepare_completion_data() uses captured functions
  • build_messages() uses captured session
  • echo_messages() uses captured session
  • set_regenerate(role) refreshes role
  • use_embeddings() searches RAG if present
  • merge_tool_results() creates continuation input

Context switching scenarios

  • Input with agent → agent functions selected
  • Input with MCP → MCP meta functions in declarations
  • Input with RAG → embeddings included after use_embeddings
  • Input without session → no session messages in build_messages

Old code reference

  • src/config/input.rs — Input struct, from_str, from_files
  • src/config/mod.rs — select_functions, extract_role