Query the agent.
(
self,
question: str,
system_message: Optional[str] = None,
**kwargs
)
| 340 | return memories |
| 341 | |
| 342 | def query( |
| 343 | self, |
| 344 | question: str, |
| 345 | system_message: Optional[str] = None, |
| 346 | **kwargs |
| 347 | ) -> AgentResponse: |
| 348 | """Query the agent.""" |
| 349 | # Retrieve relevant memories |
| 350 | retrieved_memories = self._retrieve(question) |
| 351 | |
| 352 | # Bound question tokens first |
| 353 | full_question = f"{question}\n\nCurrent Time: {time.strftime('%Y-%m-%d %H:%M:%S')}" |
| 354 | full_question = self._truncate_to_tokens(full_question, self.max_question_tokens) |
| 355 | |
| 356 | base_system = system_message or "" |
| 357 | reserved_tokens = self.max_tokens + 400 |
| 358 | available_tokens = max(self.max_context_tokens - reserved_tokens, 0) |
| 359 | question_tokens = self._llm_client.count_tokens(full_question) |
| 360 | base_system_tokens = self._llm_client.count_tokens(base_system) if base_system else 0 |
| 361 | memory_budget = max(available_tokens - question_tokens - base_system_tokens, 0) |
| 362 | |
| 363 | # Build memory string |
| 364 | if retrieved_memories: |
| 365 | memory_lines: List[str] = [] |
| 366 | used_tokens = 0 |
| 367 | for entry in retrieved_memories: |
| 368 | line = f"- {entry['memory']}" |
| 369 | line_tokens = self._llm_client.count_tokens(line) |
| 370 | if used_tokens + line_tokens <= memory_budget: |
| 371 | memory_lines.append(line) |
| 372 | used_tokens += line_tokens |
| 373 | else: |
| 374 | break |
| 375 | memories_str = "\n".join(memory_lines) |
| 376 | # Build system message with retrieved content |
| 377 | memory_prompt = f"You are a helpful AI. Answer the question based on the following memories:\n{memories_str}\n" |
| 378 | if system_message: |
| 379 | full_system = f"{system_message}\n\n{memory_prompt}" |
| 380 | else: |
| 381 | full_system = memory_prompt |
| 382 | else: |
| 383 | full_system = system_message |
| 384 | |
| 385 | messages = format_messages(full_question, full_system) |
| 386 | |
| 387 | # Call LLM |
| 388 | response = self._llm_client.chat(messages) |
| 389 | |
| 390 | # Build retrieved_memories format |
| 391 | formatted_memories = [ |
| 392 | {"memory": m["memory"], "type": "mem0_retrieval", "score": m.get("score", 0)} |
| 393 | for m in retrieved_memories |
| 394 | ] |
| 395 | |
| 396 | return AgentResponse( |
| 397 | output=response.content, |
| 398 | query_time=0.0, |
| 399 | retrieved_count=len(retrieved_memories), |
nothing calls this directly
no test coverage detected