> ## Documentation Index
> Fetch the complete documentation index at: https://futureagi.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Test Case

> Reference for the Test Case classes in the Future AGI Python SDK.

# Test Case Classes

The Test Case classes define the structure for test cases used in evaluations, including support for text, conversational, LLM, multimodal (image/audio), and more.

***

## `TestCase` Class

Represents a general test case for evaluation.

```python theme={null}
class TestCase(BaseModel):
    text: Optional[str] = None
    document: Optional[str] = None
    input: Optional[str] = None
    output: Optional[str] = None
    prompt: Optional[str] = None
    criteria: Optional[str] = None
    actual_json: Optional[dict] = None
    expected_json: Optional[dict] = None
    expected_text: Optional[str] = None
    query: Optional[str] = None
    response: Optional[str] = None
    context: Union[List[str], str] = None
```

**Attributes:**

* `text` (Optional\[str]): Text for the test case.
* `document` (Optional\[str]): Document content.
* `input` (Optional\[str]): Input string.
* `output` (Optional\[str]): Output string.
* `prompt` (Optional\[str]): Prompt used.
* `criteria` (Optional\[str]): Evaluation criteria.
* `actual_json` (Optional\[dict]): Actual JSON object.
* `expected_json` (Optional\[dict]): Expected JSON object.
* `expected_text` (Optional\[str]): Expected text output.
* `query` (Optional\[str]): Query string.
* `response` (Optional\[str]): Response string.
* `context` (Union\[List\[str], str]): Context for the test case.

***

## `ConversationalTestCase` Class

Represents a conversational test case, consisting of a list of LLM test cases (messages).

```python theme={null}
class ConversationalTestCase(BaseModel):
    messages: List[LLMTestCase]
```

**Attributes:**

* `messages` (List\[LLMTestCase]): List of LLM test case messages.

***

## `LLMTestCase` Class

Represents a test case for LLM (Language Model) evaluation.

```python theme={null}
class LLMTestCase(BaseModel):
    query: str
    response: str
    context: Optional[Union[str, List[str]]] = None
    expected_response: Optional[str] = None
```

**Attributes:**

* `query` (str): The input query.
* `response` (str): The model's response.
* `context` (Optional\[Union\[str, List\[str]]]): Context for the test case.
* `expected_response` (Optional\[str]): The expected response.

***

## `MLLMImage` Class

Represents an image input for multimodal LLM test cases.

```python theme={null}
class MLLMImage(BaseModel):
    url: str
    local: Optional[bool] = None
```

**Attributes:**

* `url` (str): URL or local path to the image.
* `local` (Optional\[bool]): Whether the image is local.

***

## `MLLMAudio` Class

Represents an audio input for multimodal LLM test cases.

```python theme={null}
class MLLMAudio(BaseModel):
    url: str
    local: Optional[bool] = None
    is_plain_text: bool = False
```

**Attributes:**

* `url` (str): URL or local path to the audio file.
* `local` (Optional\[bool]): Whether the audio is local.
* `is_plain_text` (bool): Whether the input is plain text (not audio).

***

## `MLLMTestCase` Class

Represents a multimodal LLM test case, supporting image and audio inputs.

```python theme={null}
class MLLMTestCase(TestCase):
    image_url: Optional[Union[str, MLLMImage]] = None
    input_image_url: Optional[Union[str, MLLMImage]] = None
    output_image_url: Optional[Union[str, MLLMImage]] = None
    input_audio: Optional[Union[str, MLLMAudio]] = None
    call_type: Optional[str] = None
```

**Attributes:**

* `image_url` (Optional\[Union\[str, MLLMImage]]): Image input.
* `input_image_url` (Optional\[Union\[str, MLLMImage]]): Input image.
* `output_image_url` (Optional\[Union\[str, MLLMImage]]): Output image.
* `input_audio` (Optional\[Union\[str, MLLMAudio]]): Input audio.
* `call_type` (Optional\[str]): Type of call (if applicable).

***

## Example Usage

```python theme={null}
from fi.testcase import TestCase, LLMTestCase, ConversationalTestCase, MLLMTestCase

# Simple test case
tc = TestCase(input="What is the capital of France?", output="Paris")

# LLM test case
llm_tc = LLMTestCase(query="Who wrote 1984?", response="George Orwell")

# Conversational test case
conv_tc = ConversationalTestCase(messages=[llm_tc])

# Multimodal test case
mllm_tc = MLLMTestCase(
    input="Describe this image.",
    image_url="path/to/image.jpg"
)
```

***
