# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

from __future__ import annotations

from typing import Dict, Union, Iterable, Optional
from typing_extensions import Required, TypedDict

from ..._types import SequenceNotStr
from ..file_chunking_strategy_param import FileChunkingStrategyParam

__all__ = ["FileBatchCreateParams", "File"]


class FileBatchCreateParams(TypedDict, total=False):
    attributes: Optional[Dict[str, Union[str, float, bool]]]
    """Set of 16 key-value pairs that can be attached to an object.

    This can be useful for storing additional information about the object in a
    structured format, and querying for objects via API or the dashboard. Keys are
    strings with a maximum length of 64 characters. Values are strings with a
    maximum length of 512 characters, booleans, or numbers.
    """

    chunking_strategy: FileChunkingStrategyParam
    """The chunking strategy used to chunk the file(s).

    If not set, will use the `auto` strategy. Only applicable if `file_ids` is
    non-empty.
    """

    file_ids: SequenceNotStr[str]
    """
    A list of [File](https://platform.openai.com/docs/api-reference/files) IDs that
    the vector store should use. Useful for tools like `file_search` that can access
    files. If `attributes` or `chunking_strategy` are provided, they will be applied
    to all files in the batch. The maximum batch size is 2000 files. This endpoint
    is recommended for multi-file ingestion and helps reduce per-vector-store write
    request pressure. Mutually exclusive with `files`.
    """

    files: Iterable[File]
    """
    A list of objects that each include a `file_id` plus optional `attributes` or
    `chunking_strategy`. Use this when you need to override metadata for specific
    files. The global `attributes` or `chunking_strategy` will be ignored and must
    be specified for each file. The maximum batch size is 2000 files. This endpoint
    is recommended for multi-file ingestion and helps reduce per-vector-store write
    request pressure. Mutually exclusive with `file_ids`.
    """


class File(TypedDict, total=False):
    file_id: Required[str]
    """
    A [File](https://platform.openai.com/docs/api-reference/files) ID that the
    vector store should use. Useful for tools like `file_search` that can access
    files. For multi-file ingestion, we recommend
    [`file_batches`](https://platform.openai.com/docs/api-reference/vector-stores-file-batches/createBatch)
    to minimize per-vector-store write requests.
    """

    attributes: Optional[Dict[str, Union[str, float, bool]]]
    """Set of 16 key-value pairs that can be attached to an object.

    This can be useful for storing additional information about the object in a
    structured format, and querying for objects via API or the dashboard. Keys are
    strings with a maximum length of 64 characters. Values are strings with a
    maximum length of 512 characters, booleans, or numbers.
    """

    chunking_strategy: FileChunkingStrategyParam
    """The chunking strategy used to chunk the file(s).

    If not set, will use the `auto` strategy. Only applicable if `file_ids` is
    non-empty.
    """
