# **Documentation for the `Anthropic` Class**

## **Overview and Introduction**

The `Anthropic` class provides an interface to interact with the Anthropic large language models. This class encapsulates the necessary functionality to request completions from the Anthropic API based on a provided prompt and other configurable parameters.

### **Key Concepts and Terminology**

- **Anthropic**: A large language model, akin to GPT-3 and its successors.
- **Prompt**: A piece of text that serves as the starting point for model completions.
- **Stop Sequences**: Specific tokens or sequences to indicate when the model should stop generating.
- **Tokens**: Discrete pieces of information in a text. For example, in English, a token can be as short as one character or as long as one word.

## **Class Definition**

### `Anthropic`
```python
class Anthropic:
    """Anthropic large language models."""
```

### Parameters:

- `model (str)`: The name of the model to use for completions. Default is "claude-2".

- `max_tokens_to_sample (int)`: Maximum number of tokens to generate in the output. Default is 256.

- `temperature (float, optional)`: Sampling temperature. A higher value will make the output more random, while a lower value will make it more deterministic.

- `top_k (int, optional)`: Sample from the top-k most probable next tokens. Setting this parameter can reduce randomness in the output.

- `top_p (float, optional)`: Sample from the smallest set of tokens such that their cumulative probability exceeds the specified value. Used in nucleus sampling to provide a balance between randomness and determinism.

- `streaming (bool)`: Whether to stream the output or not. Default is False.

- `default_request_timeout (int, optional)`: Default timeout in seconds for API requests. Default is 600.

### **Methods and their Functionality**

#### `_default_params(self) -> dict`

- Provides the default parameters for calling the Anthropic API.

- **Returns**: A dictionary containing the default parameters.

#### `generate(self, prompt: str, stop: list[str] = None) -> str`

- Calls out to Anthropic's completion endpoint to generate text based on the given prompt.

- **Parameters**:
    - `prompt (str)`: The input text to provide context for the generated text.

    - `stop (list[str], optional)`: Sequences to indicate when the model should stop generating.

- **Returns**: A string containing the model's generated completion based on the prompt.

#### `__call__(self, prompt: str, stop: list[str] = None) -> str`

- An alternative to the `generate` method that allows calling the class instance directly.

- **Parameters**:
    - `prompt (str)`: The input text to provide context for the generated text.

    - `stop (list[str], optional)`: Sequences to indicate when the model should stop generating.

- **Returns**: A string containing the model's generated completion based on the prompt.

## **Usage Examples**

```python
# Import necessary modules and classes
from swarm_models import Anthropic

# Initialize an instance of the Anthropic class
model = Anthropic(anthropic_api_key="")

# Using the run method
completion_1 = model.run("What is the capital of France?")
print(completion_1)

# Using the __call__ method
completion_2 = model("How far is the moon from the earth?", stop=["miles", "km"])
print(completion_2)
```

## **Mathematical Formula**

The underlying operations of the `Anthropic` class involve probabilistic sampling based on token logits from the Anthropic model. Mathematically, the process of generating a token \( t \) from the given logits \( l \) can be described by the softmax function:

\[ P(t) = \frac{e^{l_t}}{\sum_{i} e^{l_i}} \]

Where:
- \( P(t) \) is the probability of token \( t \).
- \( l_t \) is the logit corresponding to token \( t \).
- The summation runs over all possible tokens.

The temperature, top-k, and top-p parameters are further used to modulate the probabilities.

## **Additional Information and Tips**

- Ensure you have a valid `ANTHROPIC_API_KEY` set as an environment variable or passed during class instantiation.

- Always handle exceptions that may arise from API timeouts or invalid prompts.

## **References and Resources**

- [Anthropic's official documentation](https://www.anthropic.com/docs)

- [Token-based sampling in Language Models](https://arxiv.org/abs/1904.09751) for a deeper understanding of token sampling.
