|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from typing import Optional, Tuple |
|
|
|
from camel.terminators.base import BaseTerminator |
|
|
|
|
|
class TokenLimitTerminator(BaseTerminator): |
|
r"""Terminate agent if number of tokens reached to token limit threshold. |
|
|
|
Args: |
|
token_limit (int): Token limit threshold. |
|
""" |
|
|
|
def __init__(self, token_limit: int): |
|
super().__init__() |
|
self.token_limit = token_limit |
|
|
|
def _validate(self): |
|
if self.token_limit <= 0: |
|
raise ValueError( |
|
f"`token_limit` should be a " |
|
f"value larger than 0, got {self.token_limit}." |
|
) |
|
|
|
def is_terminated(self, num_tokens: int) -> Tuple[bool, Optional[str]]: |
|
r"""Whether terminate the agent by checking number of |
|
used tokens reached to token limit. |
|
|
|
Args: |
|
num_tokens (int): Number of tokens. |
|
|
|
Returns: |
|
tuple: A tuple containing whether the agent should be |
|
terminated and a string of termination reason. |
|
""" |
|
if self._terminated: |
|
return True, self._termination_reason |
|
if num_tokens >= self.token_limit: |
|
self._terminated = True |
|
self._termination_reason = "max_tokens_exceeded" |
|
return self._terminated, self._termination_reason |
|
|
|
def reset(self): |
|
r"""Reset the terminator.""" |
|
self._terminated = False |
|
self._termination_reason = None |
|
|