Skip to main content
Pinecone Docs

Search documentation

Type to search this documentation.

On this pageOverview

Files in Pinecone Assistant

Overview of Pinecone Assistant files: supported file types (PDF, DOCX, JSON, MD, TXT), metadata filters, storage, and signed URL access.

Before you can chat with the assistant, you need to upload files. The files provide your assistant with context and information to reference when generating responses. Files aren't shared across assistants.

Pinecone Assistant supports the following file types:

  • DOCX (.docx)
  • JSON (.json)
  • Markdown (.md)
  • PDF (.pdf)
  • Text (.txt)

For information about file size and storage limits, see Pricing and limits.

Files are uploaded to Google Cloud Storage (us-central1 region) and to your organization's Pinecone vector database. The assistant processes the files, so data isn't sent outside of blob storage or Pinecone.

Some API responses include a signed_url field, which provides temporary, read-only access to one of the assistant's files. The URL is signed and hard to guess, but publicly accessible, so treat it as sensitive. signed_url links expire in one hour.

Each file in an assistant has a unique identifier. File IDs can be:

  • System-generated: When you upload a file using POST, the system assigns a UUID as the file ID.
  • User-provided: When you upsert a file using PUT, you provide a custom file ID. User-provided IDs must be 1-128 characters long and can contain alphanumeric characters, hyphens, and underscores. Requires API version 2026-04 or later.

You can upload a file with metadata, which allows you to store additional information about the file as key-value pairs.

File metadata can be used for the following purposes:

  • Filtering chat responses: Specify filters on assistant responses so only files that match the metadata filter are referenced in the response. Chat requests without metadata filters don't consider metadata.
  • Viewing a filtered list of files: Use metadata filters to list files in an assistant that match specific criteria.

Pinecone Assistant supports 16 KB of metadata per file.

  • Metadata fields must be key-value pairs in a flat JSON object. Nested JSON objects aren't supported.
  • Keys must be strings and must not start with a $.
  • Values must be one of the following data types:
    • String
    • Integer (converted to a 64-bit floating point by Pinecone)
    • Floating point
    • Boolean (true, false)
    • List of strings
  • Null metadata values aren't supported. Instead of setting a key to null, remove the key from the metadata payload.

Examples

Valid
{
  "document_id": "document1",
  "document_title": "Introduction to Vector Databases",
  "chunk_number": 1,
  "chunk_text": "First chunk of the document content...",
  "is_public": true,
  "tags": ["beginner", "database", "vector-db"],
  "scores": ["85", "92"]
}
Invalid
{
  "document": {       // Nested JSON objects are not supported
    "document_id": "document1",
    "document_title": "Introduction to Vector Databases",
  },
  "$chunk_number": 1, // Keys must not start with a `$`
  "chunk_text": null, // Null values are not supported
  "is_public": true,
  "tags": ["beginner", "database", "vector-db"],
  "scores": [85, 92]  // Lists of non-strings are not supported
}

Pinecone's filtering language supports the following operators:

Operator Function Supported types
$eq Matches files with metadata values that are equal to a specified value. Example: {"genre": {"$eq": "documentary"}} Number, string, boolean
$ne Matches files with metadata values that aren't equal to a specified value. Example: {"genre": {"$ne": "drama"}} Number, string, boolean
$gt Matches files with metadata values that are greater than a specified value. Example: {"year": {"$gt": 2019}} Number
$gte Matches files with metadata values that are greater than or equal to a specified value. Example:{"year": {"$gte": 2020}} Number
$lt Matches files with metadata values that are less than a specified value. Example: {"year": {"$lt": 2020}} Number
$lte Matches files with metadata values that are less than or equal to a specified value. Example: {"year": {"$lte": 2020}} Number
$in Matches files with metadata values that are in a specified array. Example: {"genre": {"$in": ["comedy", "documentary"]}} String, number
$nin Matches files with metadata values that aren't in a specified array. Example: {"genre": {"$nin": ["comedy", "documentary"]}} String, number
$exists Matches files with the specified metadata field. Example: {"genre": {"$exists": true}} Number, string, boolean
$and Joins query clauses with a logical AND. Example: {"$and": [{"genre": {"$eq": "drama"}}, {"year": {"$gte": 2020}}]} -
$or Joins query clauses with a logical OR. Example: {"$or": [{"genre": {"$eq": "drama"}}, {"year": {"$gte": 2020}}]} -
$not Matches files that don't match the wrapped clause. Example: {"genre": {"$not": {"$eq": "drama"}}} -

For example, the following has a "genre" metadata field with a list of strings:

JSON
{ "genre": ["comedy", "documentary"] }

This means "genre" takes on both values, and requests with the following filters will match:

JSON
{"genre":"comedy"}

{"genre": {"$in":["documentary","action"]}}

{"$and": [{"genre": "comedy"}, {"genre":"documentary"}]}

However, requests with the following filter will not match:

JSON
{ "$and": [{ "genre": "comedy" }, { "genre": "drama" }] }

Additionally, requests with the following filters will not match because they're invalid. They will result in a compilation error:

JSON
# INVALID QUERY:
{"genre": ["comedy", "documentary"]}
JSON
# INVALID QUERY:
{"genre": {"$eq": ["comedy", "documentary"]}}
Suggest an edit

Propose a replacement for this page. The site team reviews it before applying any changes.

Export
Documentation menu