If you’re new to Unstructured, read this note first.

Before you can create a destination connector, you must first 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, go to https://platform.unstructured.io and sign in by using the email address, Google account, or GitHub account that is associated with your Unstructured account.

After you sign in, the Unstructured user interface (UI) appears, which you use to get your Unstructured API key. To learn how, watch this 40-second how-to video.

After you create the destination connector, add it along with a source connector to a workflow. Then run the worklow as a job. To learn how, try out the hands-on Workflow Endpoint quickstart, go directly to the quickstart notebook, or watch the two 4-minute video tutorials for the Unstructured Python SDK.

You can also create destination connectors with the Unstructured user interface (UI). Learn how.

If you need help, reach out to the community on Slack, or contact us directly.

You are now ready to start creating a destination connector! Keep reading to learn how.

Send processed data from Unstructured to Pinecone.

The requirements are as follows.

  • A Pinecone account. Get an account.

  • A Pinecone API key. Get an API key.

  • A Pinecone serverless index. Create a serverless index.

    An existing index is not required. At runtime, the index behavior is as follows:

    For the Unstructured UI and Unstructured API:

    • If an existing index name is specified, and Unstructured generates embeddings, but the number of dimensions that are generated does not match the existing index’s embedding settings, the run will fail. You must change your Unstructured embedding settings or your existing index’s embedding settings to match, and try the run again.
    • If an index name is not specified, Unstructured creates a new index in your Pinecone account. If Unstructured generates embeddings, the new index’s name will be u<short-workflow-id>-<short-embedding-model-name>-<number-of-dimensions>. If Unstructured does not generate embeddings, the new index’s name will be u<short-workflow-id.

    For Unstructured Ingest:

    • If an existing index name is specified, and Unstructured generates embeddings, but the number of dimensions that are generated does not match the existing index’s embedding settings, the run will fail. You must change your Unstructured embedding settings or your existing index’s embedding settings to match, and try the run again.
    • If an index name is not specified, Unstructured creates a new index in your Pinecone account. The new index’s name will be unstructuredautocreated.

    If you create a new index or use an existing one, Unstructured recommends that all records in the target index have a field named record_id with a string data type. Unstructured can use this field to do intelligent document overwrites. Without this field, duplicate documents might be written to the index or, in some cases, the operation could fail altogether.

To create a Pinecone destination connector, see the following examples.

import os

from unstructured_client import UnstructuredClient
from unstructured_client.models.operations import CreateDestinationRequest
from unstructured_client.models.shared import (
    CreateDestinationConnector,
    DestinationConnectorType,
    PineconeDestinationConnectorConfigInput
)

with UnstructuredClient(api_key_auth=os.getenv("UNSTRUCTURED_API_KEY")) as client:
    response = client.destinations.create_destination(
        request=CreateDestinationRequest(
            create_destination_connector=CreateDestinationConnector(
                name="<name>",
                type=DestinationConnectorType.PINECONE,
                config=PineconeDestinationConnectorConfigInput(
                    index_name="<index-name>", 
                    api_key="<api-key>",
                    batch_size=<batch-size>
                )
            )
        )
    )

    print(response.destination_connector_information)

Replace the preceding placeholders as follows:

  • <name> (required) - A unique name for this connector.
  • <index-name> - The name of the index in the Pinecone database. If no value is provided, see the beginning of this article for the behavior at run time.
  • <api-key> (required) - The Pinecone API key.
  • <batch-size> - The maximum number of records to transmit in a single batch. The default is 50 unless otherwise specified.