def ask(
self,
query: str,
*,
context: bool = True,
temperature: Optional[float] = None,
max_tokens: Optional[int] = None,
agent: Optional[str] = None,
tools: Optional[List[str]] = None,
system_prompt: Optional[str] = None,
operator_id: Optional[str] = None,
prior_messages: Optional[List[Message]] = None,
) -> Dict[str, Any]:
"""Execute a query through the system and return a result dict."""
s = self._system
if temperature is None:
temperature = s.config.intelligence.temperature
if max_tokens is None:
max_tokens = s.config.intelligence.max_tokens
messages = [Message(role=Role.USER, content=query)]
if context and s.memory_backend and s.config.agent.context_from_memory:
try:
from openjarvis.tools.storage.context import (
ContextConfig,
inject_context,
)
ctx_cfg = ContextConfig(
top_k=s.config.memory.context_top_k,
min_score=s.config.memory.context_min_score,
max_context_tokens=s.config.memory.context_max_tokens,
)
messages = inject_context(
query,
messages,
s.memory_backend,
config=ctx_cfg,
)
except Exception as exc:
logger.warning("Failed to inject memory context: %s", exc)
use_agent = agent or s.agent_name
if not agent and use_agent != "none":
detected = self._detect_agent_intent(query)
if detected:
use_agent = detected
if use_agent and use_agent != "none":
return self._run_agent(
query,
messages,
use_agent,
tools,
temperature,
max_tokens,
system_prompt=system_prompt,
operator_id=operator_id,
prior_messages=prior_messages,
)
result = s.engine.generate(
messages,
model=s.model,
temperature=temperature,
max_tokens=max_tokens,
)
return {
"content": result.get("content", ""),
"usage": result.get("usage", {}),
"model": s.model,
"engine": s.engine_key,
}