Table of Contents
Module spoon_ai.chat
ShortTermMemoryConfig Objects​
class ShortTermMemoryConfig(BaseModel)
Configuration for short-term memory management.
enabled​
Enable automatic short-term memory management.
max_tokens​
Maximum token count before triggering trimming/summarization.
strategy​
Strategy to use when exceeding max_tokens: 'summarize' or 'trim'.
messages_to_keep​
Number of recent messages to keep when summarizing.
trim_strategy​
Trimming strategy when using 'trim' mode.
keep_system_messages​
Always keep system messages during trimming.
auto_checkpoint​
Automatically save checkpoints before trimming/summarization.
checkpoint_thread_id​
Thread ID for checkpoint management.
summary_model​
Model to use for summarization (defaults to ChatBot's model).
ChatBot Objects​
class ChatBot()
__init__​
def __init__(use_llm_manager: bool = True,
model_name: str = None,
llm_provider: str = None,
api_key: str = None,
base_url: str = None,
enable_short_term_memory: bool = True,
short_term_memory_config: Optional[Union[Dict[
str, Any], ShortTermMemoryConfig]] = None,
token_counter: Optional[MessageTokenCounter] = None,
enable_long_term_memory: bool = False,
mem0_config: Optional[Dict[str, Any]] = None,
callbacks: Optional[List[BaseCallbackHandler]] = None,
**kwargs)
Initialize ChatBot with hierarchical configuration priority system.
Configuration Priority System:
- Full manual override (highest priority) - all params provided
- Partial override with config fallback - llm_provider provided, credentials pulled from environment (or config files if explicitly enabled)
- Full environment-based loading - only use_llm_manager=True, reads from environment variables
Arguments:
use_llm_manager- Enable LLM manager architecture (default: True)model_name- Model name overridellm_provider- Provider name overrideapi_key- API key overridebase_url- Base URL overrideenable_short_term_memory- Enable short-term memory management (default: True)short_term_memory_config- Configuration dict or ShortTermMemoryConfig instancetoken_counter- Optional custom token counter instanceenable_long_term_memory- Enable Mem0-backed long-term memory retrieval/storagemem0_config- Configuration dict for Mem0 (api_key, user_id/agent_id, collection, etc.)callbacks- Optional list of callback handlers for monitoring**kwargs- Additional parameters
update_mem0_config​
def update_mem0_config(config: Optional[Dict[str, Any]] = None,
enable: Optional[bool] = None) -> None
Update Mem0 configuration and re-initialize the client if needed.
ask​
async def ask(messages: List[Union[dict, Message]],
system_msg: Optional[str] = None,
output_queue: Optional[asyncio.Queue] = None) -> str
Ask method using the LLM manager architecture.
Automatically applies short-term memory strategy if enabled.
ask_tool​
async def ask_tool(messages: List[Union[dict, Message]],
system_msg: Optional[str] = None,
tools: Optional[List[dict]] = None,
tool_choice: Optional[str] = None,
output_queue: Optional[asyncio.Queue] = None,
**kwargs) -> LLMResponse
Ask tool method using the LLM manager architecture.
Automatically applies short-term memory strategy if enabled.
trim_messages​
async def trim_messages(messages: List[Message],
max_tokens: int,
strategy: TrimStrategy = TrimStrategy.FROM_END,
keep_system: bool = True,
model: Optional[str] = None) -> List[Message]
Trim messages to stay within the token budget.
Arguments:
messages- List of messages to trimmax_tokens- Maximum token count to retainstrategy- Trimming strategy (from_start or from_end)keep_system- Whether to always keep the leading system messagemodel- Model name for token counting
Returns:
List[Message]- Trimmed messages list
remove_message​
def remove_message(message_id: str, **kwargs: Any) -> "RemoveMessage"
Construct a removal instruction for the message with the given ID.
remove_all_messages​
def remove_all_messages() -> "RemoveMessage"
Construct a removal instruction that clears the entire history.
summarize_messages​
async def summarize_messages(
messages: List[Message],
max_tokens_before_summary: int,
messages_to_keep: int = 5,
summary_model: Optional[str] = None,
existing_summary: str = ""
) -> Tuple[List[Message], List[RemoveMessage], Optional[str]]
Summarize earlier messages and emit removal directives.
Returns a tuple (messages_for_llm, removals, summary_text) where
messages_for_llm are the messages that should be sent to the language
model for the next turn, removals contains RemoveMessage
directives that should be applied to the stored history, and
summary_text is the newly generated summary (if any).
Arguments:
messages- List of messages to processmax_tokens_before_summary- Token threshold for triggering summarymessages_to_keep- Number of recent messages to keep uncompressedsummary_model- Model to use for summarizationexisting_summary- Previously stored summary text
latest_summary​
@property
def latest_summary() -> Optional[str]
Return the most recent summary generated by short-term memory.
latest_removals​
@property
def latest_removals() -> List[RemoveMessage]
Return the most recent removal directives emitted by summarization.
save_checkpoint​
def save_checkpoint(thread_id: str,
messages: List[Message],
metadata: Optional[dict] = None) -> str
Save current message state to checkpoint.
Arguments:
thread_id- Thread identifiermessages- Messages to savemetadata- Optional metadata to store
Returns:
str- Checkpoint ID
restore_checkpoint​
def restore_checkpoint(
thread_id: str,
checkpoint_id: Optional[str] = None) -> Optional[List[Message]]
Restore messages from checkpoint.
Arguments:
thread_id- Thread identifiercheckpoint_id- Optional specific checkpoint ID
Returns:
Optional[List[Message]]- Restored messages, or None if checkpoint not found
list_checkpoints​
def list_checkpoints(thread_id: str) -> List[dict]
List all checkpoints for a thread.
Arguments:
thread_id- Thread identifier
Returns:
List[dict]- List of checkpoint metadata
clear_checkpoints​
def clear_checkpoints(thread_id: str) -> None
Clear all checkpoints for a thread.
Arguments:
thread_id- Thread identifier
astream​
async def astream(messages: List[Union[dict, Message]],
system_msg: Optional[str] = None,
callbacks: Optional[List[BaseCallbackHandler]] = None,
**kwargs: Any) -> AsyncIterator[LLMResponseChunk]
Stream LLM responses chunk by chunk.
astream_events​
async def astream_events(messages: List[Union[dict, Message]],
system_msg: Optional[str] = None,
callbacks: Optional[List[BaseCallbackHandler]] = None,
**kwargs) -> AsyncIterator[dict]
Stream structured events during LLM execution.
This method yields detailed events tracking the execution flow, useful for monitoring and debugging.
Arguments:
messages- List of messages or dictssystem_msg- Optional system messagecallbacks- Optional callback handlers**kwargs- Additional provider parameters
Yields:
Event dictionaries with structure: {
"event"- event_type,"run_id"- str,"timestamp"- ISO datetime string,"data"- {event-specific data} }
astream_log​
async def astream_log(messages: List[Union[dict, Message]],
system_msg: Optional[str] = None,
callbacks: Optional[List[BaseCallbackHandler]] = None,
*,
diff: bool = True,
**kwargs: Any) -> AsyncIterator[RunLogPatch]
Stream run log patches describing ChatBot execution.