"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""

from __future__ import annotations
import dataclasses
from .customstep import CustomStep
from .functionstep import FunctionStep
from .llmstep import LLMStep
from .retrievalstep import RetrievalStep
from .stepformat import StepFormat
from dataclasses_json import Undefined, dataclass_json
from gantry import utils
from typing import Dict, List, Optional, Union


@dataclasses.dataclass
class Inputs:
    pass


@dataclasses.dataclass
class Outputs:
    pass


@dataclasses.dataclass
class RagRecordMetadata:
    pass


@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class RagRecord:
    inputs: Inputs = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('inputs') }})
    outputs: Outputs = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('outputs') }})
    steps: List[Union[RetrievalStep, LLMStep, FunctionStep, CustomStep]] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('steps') }})
    format: Optional[StepFormat] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('format'), 'exclude': lambda f: f is None }})
    r"""An enumeration."""
    labels: Optional[Dict[str, str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('labels'), 'exclude': lambda f: f is None }})
    metadata: Optional[RagRecordMetadata] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('metadata'), 'exclude': lambda f: f is None }})
    session_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('session_id'), 'exclude': lambda f: f is None }})
    

