Source code for council.agents.agent_result

from collections.abc import Sequence
from typing import List, Optional

from council.contexts import ScoredChatMessage, ChatMessage
from council.utils import Option


[docs]class AgentResult: """ Represent the execution result of an :class:`Agent` """ _messages: List[ScoredChatMessage]
[docs] def __init__(self, messages: Optional[List[ScoredChatMessage]] = None): """ Initialize a new instance. Parameters: messages(Optional[List[ScoredChatMessage]]): an optional list of messages """ self._messages = messages if messages is not None else []
@property def messages(self) -> Sequence[ScoredChatMessage]: """ An unordered list of messages, with their scores. Returns: Sequence[ScoredChatMessage]: """ return self._messages @property def best_message(self) -> ChatMessage: """ The message with the highest score. If multiple messages have the highest score, the first one is returned. Returns: ChatMessage: Raises: ValueError: there is no messages """ return max(self._messages, key=lambda item: item.score).message @property def try_best_message(self) -> Option[ChatMessage]: """ The message with the highest score, if any. See :meth:`best_message` for more details Returns: Option[ChatMessage]: the message with the highest score, wrapped into :meth:`.Option.some`, if some, :meth:`.Option.none` otherwise """ if len(self._messages) == 0: return Option.none() return Option.some(self.best_message)