from __future__ import annotations

from abc import ABC, abstractmethod
from dataclasses import dataclass
from typing import Any, Dict


@dataclass
class ToolExecutionResult:
    context: Dict[str, Any]
    output_summary: str
    fallback_used: bool = False


class TestingTool(ABC):
    name: str

    @abstractmethod
    def execute(self, context: Dict[str, Any]) -> ToolExecutionResult:
        raise NotImplementedError
