The Unstructured Ingest Python library enables you to use Python code to send files in batches to Unstructured for processing, and to tell Unstructured where to deliver the processed data.

The Unstructured Ingest Python library does not work with the Unstructured API.

For information about the Unstructured API, see the Unstructured API Overview.

The following 3-minute video shows how to use the Unstructured Ingest Python library to send multiple PDFs from a local directory in batches to be ingested by Unstructured for processing:

Getting started

You can use the Unstructured Ingest Python library to process files locally, or you can use the Ingest Python library to send files in batches to Unstructured for processing.

Local processing does not use an Unstructured API key or API URL.

Using the Ingest Python library to send files in batches to Unstructured for processing is more robust, and usage is billed to you on a pay-as-you-go basis. Usage requires an Unstructured API key and API URL, as follows:

  1. Sign in to your Unstructured account:

    • If you do not already have an Unstructured account, go to https://unstructured.io/contact and fill out the online form to indicate your interest.
    • If you already have an Unstructured account, sign in by using the URL of the sign in page that Unstructured provided to you when your Unstructured account was created. After you sign in, the Unstructured user interface (UI) then appears, and you can start using it right away. If you do not have this URL, contact Unstructured Sales at sales@unstructured.io.
  2. Get your Unstructured API key:

    a. In the Unstructured UI, click API Keys on the sidebar.
    b. Click Generate API Key.
    c. Follow the on-screen instructions to finish generating the key.
    d. Click the Copy icon next to your new key to add the key to your system’s clipboard. If you lose this key, simply return and click the Copy icon again.

  1. The Unstructured API URL for Unstructured Ingest was provided to you when your Unstructured account was created. If you do not have this URL, contact Unstructured Sales at sales@unstructured.io.

The default URL for Unstructured Ingest is the same as the default URL for the Unstructured Partition Endpoint: https://api.unstructuredapp.io/general/v0/general. However, this URL might not necessarily work for your account.

Installation

One approach to get started quickly with the Unstructured Ingest Python library is to install Python and then run the following command:

pip install unstructured-ingest

This default installation option enables the ingestion of plain text files, HTML, XML, JSON and emails that do not require any extra dependencies. This default option also enables you to specify local source and destination locations.

You might also need to install additional dependencies, depending on your needs. Learn more.

For additional installation options, see the Unstructured Ingest Python library in the Ingest section.

To migrate from older, deprecated versions of the Ingest Python library that used pip install unstructured, see the migration guide.

Usage

For example, to use the Unstructured Ingest Python library to ingest files from a local source (input) location and to deliver the processed data to an Azure Storage account destination (output) location:

import os

from unstructured_ingest.pipeline.pipeline import Pipeline
from unstructured_ingest.interfaces import ProcessorConfig

from unstructured_ingest.processes.connectors.fsspec.azure import (
    AzureConnectionConfig,
    AzureAccessConfig,
    AzureUploaderConfig
)
from unstructured_ingest.processes.connectors.local import (
    LocalIndexerConfig,
    LocalDownloaderConfig,
    LocalConnectionConfig
)
from unstructured_ingest.processes.partitioner import PartitionerConfig
from unstructured_ingest.processes.chunker import ChunkerConfig
from unstructured_ingest.processes.embedder import EmbedderConfig

# Chunking and embedding are optional.

if __name__ == "__main__":
    Pipeline.from_configs(
        context=ProcessorConfig(),
        indexer_config=LocalIndexerConfig(input_path=os.getenv("LOCAL_FILE_INPUT_DIR")),
        downloader_config=LocalDownloaderConfig(),
        source_connection_config=LocalConnectionConfig(),
        partitioner_config=PartitionerConfig(
            partition_by_api=True,
            api_key=os.getenv("UNSTRUCTURED_API_KEY"),
            partition_endpoint=os.getenv("UNSTRUCTURED_API_URL"),
            strategy="hi_res",
            additional_partition_args={
                "split_pdf_page": True,
                "split_pdf_allow_failed": True,
                "split_pdf_concurrency_level": 15
            }
        ),
        chunker_config=ChunkerConfig(chunking_strategy="by_title"),
        embedder_config=EmbedderConfig(embedding_provider="huggingface"),
        destination_connection_config=AzureConnectionConfig(
            access_config=AzureAccessConfig(
                account_name=os.getenv("AZURE_STORAGE_ACCOUNT_NAME"),
                account_key=os.getenv("AZURE_STORAGE_ACCOUNT_KEY")
            )
        ),
        uploader_config=AzureUploaderConfig(remote_url=os.getenv("AZURE_STORAGE_REMOTE_URL"))
    ).run()

To learn how to use the Unstructured Ingest Python library to work with a specific source (input) and destination (output) location, see the Python code examples for the source and destination connectors that are available for you to choose from.

See also the ingest configuration settings that enable you to further control how batches are sent and processed.

Migration guide

The Unstructured Ingest Python library introduced breaking changes in version 0.7.0 as follows:

  • The library has moved the calling pattern (formerly commonly referred to as “v2”) up one level in the package. If you are using this calling pattern in your existing code, beginning with version 0.7.0 you must remove .v2 from your related from...import statements. For example, if you previously had statments such as these:

    from unstructured_ingest.v2.pipeline.pipeline import Pipeline
    from unstructured_ingest.v2.interfaces import ProcessorConfig
    

    Beginning with version 0.7.0, you must change to these by removing .v2:

    from unstructured_ingest.pipeline.pipeline import Pipeline
    from unstructured_ingest.interfaces import ProcessorConfig
    

    If you do not make these changes beginning with version 0.7.0, your existing code will no longer work. To run your existing code without making these changes, you must pin your installed library version to 0.6.4 or earlier.

  • The earlier calling pattern (commonly referred to as “v1”) has been deprecated and removed from the library and will no longer work beginning with version 0.7.0. If you are using this earlier “v1” calling pattern in your code, you must either manually migrate your code to the new calling pattern (formerly commonly referred to as “v2”), or pin your installed library version to 0.6.4 or earlier to keep using this earlier “v1” calling pattern.

    To learn how to use the new calling pattern (formerly commonly referred to as “v2”), see the code examples in the source connectors and destination connectors documentation.