Spaces:
Runtime error
Runtime error
from abc import ABCMeta, abstractmethod | |
from dataclasses import dataclass, fields, replace | |
from typing import Any | |
from anthropic.types.beta import BetaToolUnionParam | |
class BaseAnthropicTool(metaclass=ABCMeta): | |
"""Abstract base class for Anthropic-defined tools.""" | |
def __call__(self, **kwargs) -> Any: | |
"""Executes the tool with the given arguments.""" | |
... | |
def to_params( | |
self, | |
) -> BetaToolUnionParam: | |
raise NotImplementedError | |
class ToolResult: | |
"""Represents the result of a tool execution.""" | |
output: str | None = None | |
error: str | None = None | |
base64_image: str | None = None | |
system: str | None = None | |
def __bool__(self): | |
return any(getattr(self, field.name) for field in fields(self)) | |
def __add__(self, other: "ToolResult"): | |
def combine_fields( | |
field: str | None, other_field: str | None, concatenate: bool = True | |
): | |
if field and other_field: | |
if concatenate: | |
return field + other_field | |
raise ValueError("Cannot combine tool results") | |
return field or other_field | |
return ToolResult( | |
output=combine_fields(self.output, other.output), | |
error=combine_fields(self.error, other.error), | |
base64_image=combine_fields(self.base64_image, other.base64_image, False), | |
system=combine_fields(self.system, other.system), | |
) | |
def replace(self, **kwargs): | |
"""Returns a new ToolResult with the given fields replaced.""" | |
return replace(self, **kwargs) | |
class CLIResult(ToolResult): | |
"""A ToolResult that can be rendered as a CLI output.""" | |
class ToolFailure(ToolResult): | |
"""A ToolResult that represents a failure.""" | |
class ToolError(Exception): | |
"""Raised when a tool encounters an error.""" | |
def __init__(self, message): | |
self.message = message | |