{
  "@context": "https://schema.org",
  "@type": "Dataset",
  "name": "AI Vendor Lock-in Matrix — severity + portability tactics 2026",
  "description": "Vendor-by-vendor analysis of lock-in severity (model API, fine-tuning, vector DB, agent framework, eval platform, observability) plus concrete portability tactics. For each vendor: lock-in axes scored 0-5, switching cost band, exit timeline estimate, mitigations available pre-commitment. Originally compiled for SLAtech client portability audits — published as open data.",
  "version": "1.0.0",
  "datePublished": "2026-06-20",
  "dateModified": "2026-06-20",
  "license": "https://creativecommons.org/licenses/by/4.0/",
  "publisher": {
    "@type": "Organization",
    "name": "Slavin AI (SLAtech LTD)",
    "url": "https://www.slavin.ai"
  },
  "isAccessibleForFree": true,
  "keywords": ["vendor lock-in", "portability", "exit strategy", "AI procurement", "vendor risk"],
  "methodology": "Lock-in axes scored on a 0-5 scale based on (1) proprietary surface area (custom formats, APIs without open equivalents), (2) data extractability (training-data and fine-tuned weights egress), (3) tooling migration cost (downstream code rewrites), (4) commercial lock-in (long-term commitments, custom contracts), (5) operational lock-in (runtime dependencies). Switching-cost bands derived from real client migrations 2024-2026. Exit timeline = elapsed time from decision-to-switch to full cutover with feature parity.",
  "scoringScale": {
    "0": "No lock-in — full open standard, drop-in alternative exists",
    "1": "Minor — superficial config changes",
    "2": "Mild — some code refactor, no business impact",
    "3": "Moderate — significant refactor, possible workflow changes",
    "4": "Heavy — system rebuild required, business disruption",
    "5": "Severe — effectively irreversible without major business cost"
  },
  "vendors": [
    {
      "id": "openai",
      "name": "OpenAI (API)",
      "category": "Frontier LLM API",
      "lockinAxes": {
        "modelApi": 2,
        "fineTuning": 4,
        "embeddings": 3,
        "tools": 2,
        "commercial": 2,
        "operational": 2
      },
      "overallSeverity": "moderate",
      "switchingCost": "1-3 person-months for typical RAG stack",
      "exitTimeline": "4-8 weeks",
      "primaryFriction": "Fine-tuned model artifacts don't transfer; tool/function-calling schema syntax differs from Anthropic; specific behaviors (formatting quirks, refusal patterns) may not replicate exactly",
      "preCommitmentMitigations": [
        "Abstract model client behind own interface (OpenAI-compatible adapter pattern)",
        "Don't depend on Assistants API state — keep state in your own DB",
        "Avoid fine-tuning until volume + utility justifies portability cost",
        "Use LiteLLM, Helicone, or OpenRouter as a routing layer from day one"
      ]
    },
    {
      "id": "anthropic",
      "name": "Anthropic (Claude API)",
      "category": "Frontier LLM API",
      "lockinAxes": {
        "modelApi": 2,
        "fineTuning": 3,
        "embeddings": 0,
        "tools": 3,
        "commercial": 2,
        "operational": 2
      },
      "overallSeverity": "low-moderate",
      "switchingCost": "1-2 person-months",
      "exitTimeline": "3-6 weeks",
      "primaryFriction": "XML-style tool definitions slightly different; system prompt structure (top-down hierarchy assumption) deeper than other models; constitutional AI training shapes outputs in subtle ways",
      "preCommitmentMitigations": [
        "Adapter pattern over Anthropic SDK",
        "Use OpenAI-compatible Anthropic endpoints where available",
        "Don't depend on Computer Use API in production until v2",
        "Embeddings: Anthropic doesn't sell — already portable via Voyage / Cohere / OpenAI"
      ]
    },
    {
      "id": "google-vertex",
      "name": "Google Cloud Vertex AI / Gemini API",
      "category": "Frontier LLM API + ML platform",
      "lockinAxes": {
        "modelApi": 3,
        "fineTuning": 4,
        "embeddings": 3,
        "tools": 3,
        "commercial": 3,
        "operational": 4
      },
      "overallSeverity": "heavy",
      "switchingCost": "3-9 person-months if heavy Vertex usage",
      "exitTimeline": "8-16 weeks",
      "primaryFriction": "Vertex AI Pipelines, AutoML, Feature Store, Model Registry — each adds lock-in beyond just the API call. Tight IAM/VPC-SC integration makes egress harder. Gemini fine-tunes are non-portable.",
      "preCommitmentMitigations": [
        "Use Gemini via direct API (not Vertex SDK) where possible",
        "Keep pipelines in Kubeflow/Argo, not Vertex Pipelines",
        "Maintain non-Gemini eval branch in CI to catch silent drift",
        "Avoid Vertex Search if you can use Pinecone/Weaviate/PGVector"
      ]
    },
    {
      "id": "azure-openai",
      "name": "Azure OpenAI Service",
      "category": "Frontier LLM API + enterprise integrations",
      "lockinAxes": {
        "modelApi": 2,
        "fineTuning": 3,
        "embeddings": 2,
        "tools": 2,
        "commercial": 4,
        "operational": 4
      },
      "overallSeverity": "heavy commercial",
      "switchingCost": "API compatibility is high but Azure ecosystem (AAD, AKS, App Service, Key Vault, Azure AI Search integration) costs 3-6 person-months to detach",
      "exitTimeline": "6-12 weeks",
      "primaryFriction": "API itself is OpenAI-compatible (low technical lock-in), but multi-year EA commitments + ecosystem integration (Azure AI Search, Cognitive Services, Bot Service) create commercial and operational gravity",
      "preCommitmentMitigations": [
        "Negotiate shorter terms",
        "Keep Azure AI Search optional — use Pinecone/Weaviate/PGVector as primary",
        "Use openai-python with Azure base_url to maintain SDK portability",
        "Don't tightly couple to Azure Cognitive Services for AI subcomponents"
      ]
    },
    {
      "id": "aws-bedrock",
      "name": "AWS Bedrock",
      "category": "Multi-model LLM gateway",
      "lockinAxes": {
        "modelApi": 1,
        "fineTuning": 3,
        "embeddings": 2,
        "tools": 2,
        "commercial": 2,
        "operational": 3
      },
      "overallSeverity": "low-moderate",
      "switchingCost": "1-2 person-months",
      "exitTimeline": "4-8 weeks",
      "primaryFriction": "Bedrock is intentionally multi-model so API lock-in is low. But Bedrock Knowledge Bases, Guardrails, and Agents add bespoke surface area. Bedrock IAM integration assumes AWS as control plane.",
      "preCommitmentMitigations": [
        "Use raw model APIs through Bedrock — avoid Knowledge Bases unless time-bounded experiment",
        "Implement Guardrails portably (open-source NeMo Guardrails / LLM Guard) before Bedrock Guardrails",
        "Custom Models (fine-tuned) only when you need them in production"
      ]
    },
    {
      "id": "pinecone",
      "name": "Pinecone (vector DB)",
      "category": "Managed vector DB",
      "lockinAxes": {
        "api": 2,
        "data": 3,
        "infra": 1
      },
      "overallSeverity": "moderate",
      "switchingCost": "2-6 weeks for re-embedding and re-indexing",
      "exitTimeline": "2-4 weeks",
      "primaryFriction": "Embeddings tied to model version — switching vector DB usually triggers re-embedding cost. Pinecone's metadata filter syntax is proprietary. Hybrid search (sparse + dense) implementation differs from PGVector/Weaviate.",
      "preCommitmentMitigations": [
        "Keep raw text + chunks in your own DB; treat vector DB as a derived index",
        "Use a vector-DB abstraction layer (LangChain VectorStore, LlamaIndex)",
        "Choose embedding model independently from vector DB choice"
      ]
    },
    {
      "id": "pgvector",
      "name": "PGVector (Postgres extension)",
      "category": "Open vector DB",
      "lockinAxes": {
        "api": 0,
        "data": 0,
        "infra": 0
      },
      "overallSeverity": "minimal",
      "switchingCost": "0-1 weeks (mostly data-export logistics)",
      "exitTimeline": "1-2 weeks",
      "primaryFriction": "Performance at scale (>10M vectors) requires careful tuning; HNSW vs IVF tradeoffs. But standard SQL + extension model = full portability",
      "preCommitmentMitigations": [
        "Postgres-anywhere makes PGVector inherently portable",
        "Use cosine_distance / l2_distance / inner_product — all standard"
      ]
    },
    {
      "id": "langchain",
      "name": "LangChain",
      "category": "AI application framework",
      "lockinAxes": {
        "api": 4,
        "data": 1,
        "infra": 2
      },
      "overallSeverity": "moderate-heavy",
      "switchingCost": "3-6 person-months for non-trivial chains",
      "exitTimeline": "6-12 weeks",
      "primaryFriction": "LangChain's abstractions leak through your code; agents, callbacks, memory, and chain composition often have no clean equivalents in LlamaIndex or Semantic Kernel. LangGraph state machines are particularly framework-locked.",
      "preCommitmentMitigations": [
        "Use LangChain for prototyping, then refactor critical paths to raw SDK before scaling",
        "Avoid LangChain Hub (proprietary prompt registry) for production prompts",
        "Keep chains shallow — deep nested chains are exit-tax"
      ]
    },
    {
      "id": "huggingface-inference-endpoints",
      "name": "HuggingFace Inference Endpoints",
      "category": "Managed model hosting",
      "lockinAxes": {
        "api": 1,
        "data": 0,
        "infra": 2
      },
      "overallSeverity": "minimal",
      "switchingCost": "1-2 weeks (deployment to alternative runtime)",
      "exitTimeline": "1-3 weeks",
      "primaryFriction": "Custom handler.py + Dockerfile patterns; ecosystem assumes HF model card format. But model weights and tokenizer always exportable.",
      "preCommitmentMitigations": [
        "Use standard transformers / vLLM / TGI patterns — they run anywhere",
        "Don't depend on HF Inference's autoscaling guarantees for SLA-critical workloads"
      ]
    },
    {
      "id": "weights-biases",
      "name": "Weights & Biases (W&B)",
      "category": "ML experiment tracking + production observability",
      "lockinAxes": {
        "api": 3,
        "data": 3,
        "infra": 2
      },
      "overallSeverity": "moderate",
      "switchingCost": "2-6 person-weeks for history migration; ongoing logging migration",
      "exitTimeline": "3-8 weeks",
      "primaryFriction": "Run history, artifacts, and project structure don't export cleanly to MLflow/Comet. Custom panels and reports are W&B-specific.",
      "preCommitmentMitigations": [
        "Use MLflow Tracking format alongside W&B (dual-write)",
        "Don't depend on W&B Sweeps if Ray Tune / Optuna can do the job",
        "Avoid W&B Launch for orchestration — use Argo/Kubeflow/Prefect"
      ]
    }
  ],
  "categories": ["frontier-llm", "vector-db", "framework", "platform", "tracking"],
  "lastReview": "2026-06-20",
  "nextReviewDate": "2026-12-20",
  "feedback": "Inaccuracy or want a vendor added? Contact info@slavin.ai"
}
