From 540263b912d499aca6bba7eff8d9dc977e91edd1 Mon Sep 17 00:00:00 2001 From: jayhack Date: Wed, 19 Mar 2025 17:29:14 -0700 Subject: [PATCH 1/2] . --- src/codegen/extensions/tools/observation.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/codegen/extensions/tools/observation.py b/src/codegen/extensions/tools/observation.py index 487c1bdfe..2ead1dc59 100644 --- a/src/codegen/extensions/tools/observation.py +++ b/src/codegen/extensions/tools/observation.py @@ -1,11 +1,14 @@ """Base class for tool observations/responses.""" import json +import logging from typing import Any, ClassVar, Optional from langchain_core.messages import ToolMessage from pydantic import BaseModel, Field +logger = logging.getLogger(__name__) + class Observation(BaseModel): """Base class for all tool observations. @@ -44,14 +47,18 @@ def __repr__(self) -> str: """Get detailed string representation of the observation.""" return f"{self.__class__.__name__}({self.model_dump_json()})" - def render_as_string(self) -> str: + def render_as_string(self, max_tokens: int = 8000) -> str: """Render the observation as a string. This is used for string representation and as the content field in the ToolMessage. Subclasses can override this to customize their string output format. """ - return json.dumps(self.model_dump(), indent=2) + rendered = json.dumps(self.model_dump(), indent=2) + if 3 * len(rendered) > max_tokens: + logger.error(f"Observation is too long to render: {len(rendered) * 3} tokens") + return rendered[:max_tokens] + "\n\n...truncated...\n\n" + return rendered def render(self, tool_call_id: Optional[str] = None) -> ToolMessage | str: """Render the observation as a ToolMessage or string. From d249ec137b4297b26b33d001cc1bbc371c7a2d26 Mon Sep 17 00:00:00 2001 From: jayhack Date: Wed, 19 Mar 2025 17:31:03 -0700 Subject: [PATCH 2/2] . --- src/codegen/extensions/tools/observation.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/codegen/extensions/tools/observation.py b/src/codegen/extensions/tools/observation.py index 2ead1dc59..1d12aadc0 100644 --- a/src/codegen/extensions/tools/observation.py +++ b/src/codegen/extensions/tools/observation.py @@ -1,13 +1,14 @@ """Base class for tool observations/responses.""" import json -import logging from typing import Any, ClassVar, Optional from langchain_core.messages import ToolMessage from pydantic import BaseModel, Field -logger = logging.getLogger(__name__) +from codegen.shared.logging.get_logger import get_logger + +logger = get_logger(__name__) class Observation(BaseModel):