from typing import Literal from pydantic import BaseModel, Field from openhands.core.config.llm_config import LLMConfig class NoOpCondenserConfig(BaseModel): """Configuration for NoOpCondenser.""" type: Literal['noop'] = Field('noop') class ObservationMaskingCondenserConfig(BaseModel): """Configuration for ObservationMaskingCondenser.""" type: Literal['observation_masking'] = Field('observation_masking') attention_window: int = Field( default=10, description='The number of most-recent events where observations will not be masked.', ge=1, ) class RecentEventsCondenserConfig(BaseModel): """Configuration for RecentEventsCondenser.""" type: Literal['recent'] = Field('recent') keep_first: int = Field( default=0, description='The number of initial events to condense.', ge=0, ) max_events: int = Field( default=10, description='Maximum number of events to keep.', ge=1 ) class LLMSummarizingCondenserConfig(BaseModel): """Configuration for LLMCondenser.""" type: Literal['llm'] = Field('llm') llm_config: LLMConfig = Field( ..., description='Configuration for the LLM to use for condensing.' ) class AmortizedForgettingCondenserConfig(BaseModel): """Configuration for AmortizedForgettingCondenser.""" type: Literal['amortized'] = Field('amortized') max_size: int = Field( default=100, description='Maximum size of the condensed history before triggering forgetting.', ge=2, ) keep_first: int = Field( default=0, description='Number of initial events to always keep in history.', ge=0, ) class LLMAttentionCondenserConfig(BaseModel): """Configuration for LLMAttentionCondenser.""" type: Literal['llm_attention'] = Field('llm_attention') llm_config: LLMConfig = Field( ..., description='Configuration for the LLM to use for attention.' ) max_size: int = Field( default=100, description='Maximum size of the condensed history before triggering forgetting.', ge=2, ) keep_first: int = Field( default=0, description='Number of initial events to always keep in history.', ge=0, ) CondenserConfig = ( NoOpCondenserConfig | ObservationMaskingCondenserConfig | RecentEventsCondenserConfig | LLMSummarizingCondenserConfig | AmortizedForgettingCondenserConfig | LLMAttentionCondenserConfig )