All skills
Skillintermediate

/rag/ingest

All-in-one document ingestion pipeline: **Upload → Chunk → Embed → Vector Store**

Claude Code Knowledge Pack7/10/2026

Overview

/rag/ingest

All-in-one document ingestion pipeline: Upload → Chunk → Embed → Vector Store

FeatureSupported
LoggingYes
Supported Providersopenai, bedrock, vertex_ai, gemini, s3_vectors

:::tip After ingesting documents, use /rag/query to search and generate responses with your ingested content. :::

Quick Start

OpenAI

curl -X POST "http://localhost:4000/v1/rag/ingest" \\
    -H "Authorization: Bearer sk-1234" \\
    -H "Content-Type: application/json" \\
    -d "{
        \\"file\\": {
            \\"filename\\": \\"document.txt\\",
            \\"content\\": \\"$(base64 -i document.txt)\\",
            \\"content_type\\": \\"text/plain\\"
        },
        \\"ingest_options\\": {
            \\"vector_store\\": {
                \\"custom_llm_provider\\": \\"openai\\"
            }
        }
    }"

Bedrock

curl -X POST "http://localhost:4000/v1/rag/ingest" \\
    -H "Authorization: Bearer sk-1234" \\
    -H "Content-Type: application/json" \\
    -d "{
        \\"file\\": {
            \\"filename\\": \\"document.txt\\",
            \\"content\\": \\"$(base64 -i document.txt)\\",
            \\"content_type\\": \\"text/plain\\"
        },
        \\"ingest_options\\": {
            \\"vector_store\\": {
                \\"custom_llm_provider\\": \\"bedrock\\"
            }
        }
    }"

Vertex AI RAG Engine

curl -X POST "http://localhost:4000/v1/rag/ingest" \\
    -H "Authorization: Bearer sk-1234" \\
    -H "Content-Type: application/json" \\
    -d "{
        \\"file\\": {
            \\"filename\\": \\"document.txt\\",
            \\"content\\": \\"$(base64 -i document.txt)\\",
            \\"content_type\\": \\"text/plain\\"
        },
        \\"ingest_options\\": {
            \\"vector_store\\": {
                \\"custom_llm_provider\\": \\"vertex_ai\\",
                \\"vector_store_id\\": \\"your-corpus-id\\",
                \\"gcs_bucket\\": \\"your-gcs-bucket\\"
            }
        }
    }"

AWS S3 Vectors

curl -X POST "http://localhost:4000/v1/rag/ingest" \\
    -H "Authorization: Bearer sk-1234" \\
    -H "Content-Type: application/json" \\
    -d "{
        \\"file\\": {
            \\"filename\\": \\"document.txt\\",
            \\"content\\": \\"$(base64 -i document.txt)\\",
            \\"content_type\\": \\"text/plain\\"
        },
        \\"ingest_options\\": {
            \\"embedding\\": {
                \\"model\\": \\"text-embedding-3-small\\"
            },
            \\"vector_store\\": {
                \\"custom_llm_provider\\": \\"s3_vectors\\",
                \\"vector_bucket_name\\": \\"my-embeddings\\",
                \\"aws_region_name\\": \\"us-west-2\\"
            }
        }
    }"

Response

{
  "id": "ingest_abc123",
  "status": "completed",
  "vector_store_id": "vs_xyz789",
  "file_id": "file_123"
}

Query with RAG

After ingestion, use the /rag/query endpoint to search and generate LLM responses:

curl -X POST "http://localhost:4000/v1/rag/query" \\
    -H "Authorization: Bearer sk-1234" \\
    -H "Content-Type: application/json" \\
    -d '{
        "model": "gpt-4o-mini",
        "messages": [{"role": "user", "content": "What is the main topic?"}],
        "retrieval_config": {
            "vector_store_id": "vs_xyz789",
            "custom_llm_provider": "openai",
            "top_k": 5
        }
    }'

This will:

  1. Search the vector store for relevant context
  2. Prepend the context to your messages
  3. Generate an LLM response

Direct Vector Store Search

Alternatively, search the vector store directly with /vector_stores/{vector_store_id}/search:

curl -X POST "http://localhost:4000/v1/vector_stores/vs_xyz789/search" \\
    -H "Authorization: Bearer sk-1234" \\
    -H "Content-Type: application/json" \\
    -d '{
        "query": "What is the main topic?",
        "max_num_results": 5
    }'

End-to-End Example

OpenAI

1. Ingest Document

curl -X POST "http://localhost:4000/v1/rag/ingest" \\
    -H "Authorization: Bearer sk-1234" \\
    -H "Content-Type: application/json" \\
    -d "{
        \\"file\\": {
            \\"filename\\": \\"test_document.txt\\",
            \\"content\\": \\"$(base64 -i test_document.txt)\\",
            \\"content_type\\": \\"text/plain\\"
        },
        \\"ingest_options\\": {
            \\"name\\": \\"test-basic-ingest\\",
            \\"vector_store\\": {
                \\"custom_llm_provider\\": \\"openai\\"
            }
        }
    }"

Response:

{
  "id": "ingest_d834f544-fc5e-4751-902d-fb0bcc183b85",
  "status": "completed",
  "vector_store_id": "vs_692658d337c4819183f2ad8488d12fc9",
  "file_id": "file-M2pJJiWH56cfUP4Fe7rJay"
}

2. Query

curl -X POST "http://localhost:4000/v1/vector_stores/vs_692658d337c4819183f2ad8488d12fc9/search" \\
    -H "Authorization: Bearer sk-1234" \\
    -H "Content-Type: application/json" \\
    -d '{
        "query": "What is LiteLLM?",
        "custom_llm_provider": "openai"
    }'

Response:

{
  "object": "vector_store.search_results.page",
  "search_query": ["What is LiteLLM?"],
  "data": [
    {
      "file_id": "file-M2pJJiWH56cfUP4Fe7rJay",
      "filename": "test_document.txt",
      "score": 0.4004629778869299,
      "attributes": {},
      "content": [
        {
          "type": "text",
          "text": "Test document abc123 for RAG ingestion.\
This is a sample document to test the RAG ingest API.\
LiteLLM provides a unified interface for vector stores."
        }
      ]
    }
  ],
  "has_more": false,
  "next_page": null
}

Request Parameters

Top-Level

ParameterTypeRequiredDescription
fileobjectOne of file/file_url/file_id requiredBase64-encoded file
file.filenamestringYesFilename with extension
file.contentstringYesBase64-encoded content
file.content_typestringYesMIME type (e.g., text/plain)
file_urlstringOne of file/file_url/file_id requiredURL to fetch file from
file_idstringOne of file/file_url/file_id requiredExisting file ID
ingest_optionsobjectYesPipeline configuration

ingest_options

ParameterTypeRequiredDescription
vector_storeobjectYesVector store configuration
namestringNoPipeline name for logging

vector_store (OpenAI)

ParameterTypeDefaultDescription
custom_llm_providerstring-"openai"
vector_store_idstringauto-createExisting vector store ID

vector_store (Bedrock)

ParameterTypeDefaultDescription
custom_llm_providerstring-"bedrock"
vector_store_idstringauto-createExisting Knowledge Base ID
wait_for_ingestionbooleanfalseWait for indexing to complete
ingestion_timeoutinteger300Timeout in seconds (if waiting)
s3_bucketstringauto-createS3 bucket for documents
s3_prefixstring"data/"S3 key prefix
embedding_modelstringamazon.titan-embed-text-v2:0Bedrock embedding model
aws_region_namestringus-west-2AWS region

:::info Bedrock Auto-Creation When vector_store_id is omitted, LiteLLM automatically creates:

  • S3 bucket for document storage
  • OpenSearch Serverless collection
  • IAM role with required permissions
  • Bedrock Knowledge Base
  • Data Source :::

vector_store (Vertex AI)

ParameterTypeDefaultDescription
custom_llm_providerstring-"vertex_ai"
vector_store_idstringrequiredRAG corpus ID
gcs_bucketstringrequiredGCS bucket for file uploads
vertex_projectstringenv VERTEXAI_PROJECTGCP project ID
vertex_locationstringus-central1GCP region
vertex_credentialsstringADCPath to credentials JSON
wait_for_importbooleantrueWait for import to complete
import_timeoutinteger600Timeout in seconds (if waiting)

:::info Vertex AI Prerequisites

  1. Create a RAG corpus in Vertex AI console or via API
  2. Create a GCS bucket for file uploads
  3. Authenticate via gcloud auth application-default login
  4. Install: uv add 'google-cloud-aiplatform>=1.60.0' :::

vector_store (AWS S3 Vectors)

ParameterTypeDefaultDescription
custom_llm_providerstring-"s3_vectors"
vector_bucket_namestringrequiredS3 vector bucket name
index_namestringauto-createVector index name
dimensionintegerauto-detectVector dimension (auto-detected from embedding model)
distance_metricstringcosineDistance metric: cosine or euclidean
non_filterable_metadata_keysarray["source_text"]Metadata keys excluded from filtering
aws_region_namestringus-west-2AWS region
aws_access_key_idstringenvAWS access key
aws_secret_access_keystringenvAWS secret key

:::info S3 Vectors Auto-Creation When index_name is omitted, LiteLLM automatically creates:

  • S3 vector bucket (if it doesn't exist)
  • Vector index with auto-detected dimensions from your embedding model

Dimension Auto-Detection: The vector dimension is automatically detected by making a test embedding request to your specified model. No need to manually specify dimensions!

Supported Embedding Models: Works with any LiteLLM-supported embedding model (OpenAI, Cohere, Bedrock, Azure, etc.) :::

Example with auto-detection:

{
  "embedding": {
    "model": "text-embedding-3-small"  // Dimension auto-detected as 1536
  },
  "vector_store": {
    "custom_llm_provider": "s3_vectors",
    "vector_bucket_name": "my-embeddings"
  }
}

Example with custom embedding provider:

{
  "embedding": {
    "model": "cohere/embed-english-v3.0"  // Dimension auto-detected as 1024
  },
  "vector_store": {
    "custom_llm_provider": "s3_vectors",
    "vector_bucket_name": "my-embeddings",
    "distance_metric": "cosine"
  }
}

Input Examples

File (Base64)

{
  "file": {
    "filename": "document.txt",
    "content": "<base64-encoded-content>",
    "content_type": "text/plain"
  },
  "ingest_options": {
    "vector_store": {"custom_llm_provider": "openai"}
  }
}

File URL

curl -X POST "http://localhost:4000/v1/rag/ingest" \\
    -H "Authorization: Bearer sk-1234" \\
    -H "Content-Type: application/json" \\
    -d '{
        "file_url": "https://example.com/document.pdf",
        "ingest_options": {"vector_store": {"custom_llm_provider": "openai"}}
    }'

Chunking Strategy

Control how documents are split into chunks before embedding. Specify chunking_strategy in ingest_options.

ParameterTypeDefaultDescription
chunk_sizeinteger1000Maximum size of each chunk
chunk_overlapinteger200Overlap between consecutive chunks

Vertex AI RAG Engine

Vertex AI RAG Engine supports custom chunking via the chunking_strategy parameter. Chunks are processed server-side during import.

curl -X POST "http://localhost:4000/v1/rag/ingest" \\
    -H "Authorization: Bearer sk-1234" \\
    -H "Content-Type: application/json" \\
    -d "{
        \\"file\\": {
            \\"filename\\": \\"document.txt\\",
            \\"content\\": \\"$(base64 -i document.txt)\\",
            \\"content_type\\": \\"text/plain\\"
        },
        \\"ingest_options\\": {
            \\"chunking_strategy\\": {
                \\"chunk_size\\": 500,
                \\"chunk_overlap\\": 100
            },
            \\"vector_store\\": {
                \\"custom_llm_provider\\": \\"vertex_ai\\",
                \\"vector_store_id\\": \\"your-corpus-id\\",
                \\"gcs_bucket\\": \\"your-gcs-bucket\\"
            }
        }
    }"