File size: 1,713 Bytes
80ae18e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from typing import Any, Optional
from smolagents.tools import Tool

class InfoTheoryExplainerTool(Tool):
    name = "information_theory_explainer"
    description = """
    Five basic information theory concepts in simple terms.
    Given a concept name, it returns a high-school explanation with an example if applicable.
    """
    inputs = {'concept': {'type': 'string', 'description': "The information theory concept to explain (e.g., 'entropy', 'mutual information', 'KL divergence')."}}
    output_type = "string"

    def forward(self, concept: str):
        explanations = {
            "entropy": "Entropy measures the uncertainty or unpredictability in a set of outcomes. Example: A fair coin flip has 1 bit of entropy.",
            "mutual information": "Mutual information quantifies how much information one random variable tells you about another. Example: Knowing the weather can reduce uncertainty about umbrella usage.",
            "kl divergence": "KL Divergence measures how one probability distribution differs from another. It's not symmetric and often used in model evaluation.",
            "cross entropy": "Cross-entropy measures the difference between the true distribution and the predicted one, often used as a loss function in classification tasks.",
            "channel capacity": "Channel capacity is the maximum rate at which information can be reliably transmitted over a communication channel."
        }

        key = concept.lower().strip()
        return explanations.get(key, "Concept not found. Try 'entropy', 'mutual information', 'KL divergence', 'cross entropy', or 'channel capacity'.")

    def __init__(self, *args, **kwargs):
        self.is_initialized = False