Cấu hình, tùy chỉnh, thiết lập nền tảng và tham chiếu API cho Pi.

Tùy chỉnh Models

Thêm nhà cung cấp và mô hình tùy chỉnh (Ollama, vLLM, LM Studio, proxy) qua ~/.pi/agent/models.json.

Mục lục

Ví dụ tối thiểu

Đối với các mô hình địa phương (Ollama, LM Studio, vLLM), mỗi mô hình chỉ yêu cầu id:

{
  "providers": {
    "ollama": {
      "baseUrl": "http://localhost:11434/v1",
      "api": "openai-completions",
      "apiKey": "ollama",
      "models": [
        { "id": "llama3.1:8b" },
        { "id": "qwen2.5-coder:7b" }
      ]
    }
  }
}

Giá trị apiKey là phần giữ chỗ vì Ollama bỏ qua nó. pi vẫn coi các mô hình là yêu cầu xác thực trước khi chúng xuất hiện trong /model, vì vậy, các máy chủ cục bộ không cần khóa phải giữ một giá trị giả, lưu khóa cho nhà cung cấp đó bằng /login hoặc chuyển --api-key khi chọn mô hình.

Một số máy chủ tương thích với OpenAI không hiểu vai trò developer được sử dụng cho các mô hình có khả năng suy luận. Đối với những nhà cung cấp đó, hãy đặt compat.supportsDeveloperRole thành false để pi gửi lời nhắc hệ thống dưới dạng tin nhắn system. Nếu máy chủ cũng không hỗ trợ reasoning_effort, hãy đặt compat.supportsReasoningEffort thành false.

Bạn có thể đặt compat ở cấp nhà cung cấp để áp dụng cho tất cả các kiểu máy hoặc ở cấp độ mô hình để ghi đè một mô hình cụ thể. Điều này thường áp dụng cho Ollama, vLLM, SGLang và các máy chủ tương thích với OpenAI tương tự.

{
  "providers": {
    "ollama": {
      "baseUrl": "http://localhost:11434/v1",
      "api": "openai-completions",
      "apiKey": "ollama",
      "compat": {
        "supportsDeveloperRole": false,
        "supportsReasoningEffort": false
      },
      "models": [
        {
          "id": "gpt-oss:20b",
          "reasoning": true
        }
      ]
    }
  }
}

Ví dụ đầy đủ

Ghi đè mặc định khi bạn cần các giá trị cụ thể:

{
  "providers": {
    "ollama": {
      "baseUrl": "http://localhost:11434/v1",
      "api": "openai-completions",
      "apiKey": "ollama",
      "models": [
        {
          "id": "llama3.1:8b",
          "name": "Llama 3.1 8B (Local)",
          "reasoning": false,
          "input": ["text"],
          "contextWindow": 128000,
          "maxTokens": 32000,
          "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
        }
      ]
    }
  }
}

Tệp sẽ tải lại mỗi khi bạn mở /model. Chỉnh sửa trong phiên; không cần khởi động lại.

Ví dụ về Google AI Studio

Sử dụng google-generative-ai với baseUrl để thêm mô hình từ Google AI Studio, bao gồm các mục nhập Gemma 4 tùy chỉnh:

{
  "providers": {
    "my-google": {
      "baseUrl": "https://generativelanguage.googleapis.com/v1beta",
      "api": "google-generative-ai",
      "apiKey": "$GEMINI_API_KEY",
      "models": [
        {
          "id": "gemma-4-31b-it",
          "name": "Gemma 4 31B",
          "input": ["text", "image"],
          "contextWindow": 262144,
          "reasoning": true
        }
      ]
    }
  }
}

Bắt buộc phải có baseUrl khi thêm mô hình tùy chỉnh vào loại google-generative-ai API.

Được hỗ trợ APIs

API Sự miêu tả
openai-completions Hoàn thành trò chuyện OpenAI (tương thích nhất)
openai-responses Phản hồi OpenAI API
anthropic-messages Thông điệp nhân loại API
google-generative-ai AI sáng tạo của Google

Đặt api ở cấp nhà cung cấp (mặc định cho tất cả kiểu máy) hoặc cấp độ mô hình (ghi đè cho mỗi kiểu máy).

Cấu hình nhà cung cấp

Cánh đồng Sự miêu tả
baseUrl API URL điểm cuối
api loại API (xem ở trên)
apiKey Cấu hình API key tùy chọn (xem độ phân giải giá trị bên dưới). Bỏ qua nó khi xác thực được cung cấp bởi /login/auth.json hoặc CLI --api-key.
oauth Loại nhà cung cấp OAuth động. Hiện hỗ trợ "radius"; yêu cầu cổng baseUrl.
headers Tiêu đề tùy chỉnh (xem độ phân giải giá trị bên dưới)
authHeader Đặt true để tự động thêm Authorization: Bearer <apiKey>
models Mảng cấu hình mô hình
modelOverrides Ghi đè theo mô hình cho các mô hình được tích hợp sẵn hoặc đã đăng ký mở rộng trên nhà cung cấp này

Đối với các nhà cung cấp có models, cấu hình nhà cung cấp không được tích hợp sẵn cần baseUrl và giá trị api ở cấp nhà cung cấp hoặc cấp mô hình. apiKey không bắt buộc phải tải tệp: các mô hình sẽ khả dụng khi xác thực được định cấu hình thông qua /login/auth.json, CLI --api-key hoặc nhà cung cấp apiKey. Nếu không định cấu hình xác thực, các mô hình sẽ tải nhưng vẫn không khả dụng ở /model--list-models.

Độ phân giải giá trị

Các trường apiKeyheaders hỗ trợ thực thi lệnh, nội suy môi trường và chữ:

  • Lệnh Shell: "!command" khi bắt đầu thực thi toàn bộ giá trị dưới dạng lệnh và sử dụng stdout
    "apiKey": "!security find-generic-password -ws 'anthropic'"
    "apiKey": "!op read 'op://vault/item/credential'"
  • Nội suy môi trường: "$ENV_VAR" hoặc "${ENV_VAR}" sử dụng giá trị của biến được đặt tên. Nội suy hoạt động bên trong các chữ lớn hơn.
    "apiKey": "$MY_API_KEY"
    "apiKey": "${KEY_PREFIX}_${KEY_SUFFIX}"
    $FOO_BAR là biến FOO_BAR; sử dụng ${FOO}_BAR khi BAR là văn bản chữ. Thiếu biến môi trường làm cho giá trị không được giải quyết.
  • Thoát: "
    quot;
    phát ra chữ "
    quot;
    ; "$!" phát ra "!" theo nghĩa đen mà không kích hoạt thực thi lệnh.
    "apiKey": "$literal-dollar-prefix"
    "apiKey": "$!literal-bang-prefix"
  • Giá trị bằng chữ: Được sử dụng trực tiếp. Các chuỗi viết hoa đơn giản như MY_API_KEY là chữ; sử dụng $MY_API_KEY cho các biến môi trường.
    "apiKey": "sk-..."

Đối với models.json, các lệnh shell được giải quyết tại thời điểm yêu cầu. pi cố tình không áp dụng TTL tích hợp, tái sử dụng cũ hoặc logic khôi phục cho các lệnh tùy ý. Các lệnh khác nhau cần các chiến lược lưu trữ và thất bại khác nhau và pi không thể suy ra chiến lược đúng.

Nếu lệnh của bạn chậm, tốn kém, bị giới hạn tốc độ hoặc phải tiếp tục sử dụng giá trị trước đó đối với các lỗi tạm thời, hãy gói lệnh đó trong tập lệnh hoặc lệnh của riêng bạn để thực hiện hành vi lưu vào bộ nhớ đệm hoặc TTL mà bạn muốn.

/model kiểm tra tính khả dụng sử dụng sự hiện diện xác thực đã định cấu hình và không thực thi các lệnh shell.

Tiêu đề tùy chỉnh

{
  "providers": {
    "custom-proxy": {
      "baseUrl": "https://proxy.example.com/v1",
      "apiKey": "$MY_API_KEY",
      "api": "anthropic-messages",
      "headers": {
        "x-portkey-api-key": "$PORTKEY_API_KEY",
        "x-secret": "!op read 'op://vault/item/secret'"
      },
      "models": [...]
    }
  }
}

Cấu hình mô hình

Cánh đồng Yêu cầu Mặc định Sự miêu tả
id Đúng Mã nhận dạng mẫu (được chuyển tới API)
name KHÔNG id Nhãn mô hình con người có thể đọc được. Được sử dụng để khớp (mẫu --model) và hiển thị dưới dạng văn bản chi tiết mô hình phụ.
api KHÔNG của nhà cung cấp api Ghi đè API của nhà cung cấp cho mô hình này
reasoning KHÔNG false Hỗ trợ tư duy mở rộng
thinkingLevelMap KHÔNG bỏ qua Ánh xạ các cấp độ tư duy pi tới các giá trị của nhà cung cấp và đánh dấu các cấp độ không được hỗ trợ (xem bên dưới)
input KHÔNG ["text"] Các loại đầu vào: ["text"] hoặc ["text", "image"]
contextWindow KHÔNG 128000 Kích thước cửa sổ ngữ cảnh tính bằng mã thông báo
maxTokens KHÔNG 16384 Mã thông báo đầu ra tối đa
samplingParams KHÔNG bỏ qua Các tham số lấy mẫu đã hợp nhất nguyên văn vào mọi nội dung yêu cầu (xem bên dưới)
cost KHÔNG tất cả số không Tỷ lệ mỗi triệu mã thông báo với các mức giá đầu vào cho toàn bộ yêu cầu tùy chọn
compat KHÔNG nhà cung cấp compat Ghi đè khả năng tương thích của nhà cung cấp. Được hợp nhất với cấp nhà cung cấp compat khi cả hai đều được đặt.

Một bậc chi phí cung cấp một bộ giá thay thế hoàn chỉnh và áp dụng cho toàn bộ yêu cầu khi tổng mức sử dụng đầu vào (input + cacheRead + cacheWrite) vượt quá inputTokensAbove. Khi nhiều bậc khớp nhau, ngưỡng cao nhất sẽ thắng.

{
  "cost": {
    "input": 5,
    "output": 30,
    "cacheRead": 0.5,
    "cacheWrite": 6.25,
    "tiers": [
      {
        "inputTokensAbove": 272000,
        "input": 10,
        "output": 45,
        "cacheRead": 1,
        "cacheWrite": 12.5
      }
    ]
  }
}

Hành vi hiện tại:

  • /model, --list-models và các mục hiển thị chân trang tương tác theo mô hình id.
  • name được định cấu hình được sử dụng để khớp mô hình và văn bản chi tiết mô hình phụ. Nó không thay thế id mô hình chân trang/thanh trạng thái.

Thông số lấy mẫu

samplingParams là một đối tượng dạng tự do được hợp nhất nguyên văn vào mọi nội dung yêu cầu cho mô hình, sau khi các trường pi tự đặt, do đó, khóa của nó sẽ thắng. Sử dụng nó để gửi các tham số lấy mẫu mà pi không lập mô hình — bao gồm các tham số dành riêng cho máy chủ như llama.cpp's min_p hoặc top_k của vLLM:

{
  "id": "deepseek-v4-flash",
  "samplingParams": {
    "temperature": 1.0,
    "top_p": 0.95,
    "top_k": 0,
    "min_p": 0.0
  }
}

Chỉ những API tương thích với OpenAI mới áp dụng nó (openai-completions, openai-responses, azure-openai-responses); các API khác bỏ qua nó. Các khóa ghi đè các trường yêu cầu được đặt tên của pi (ví dụ: khóa temperature ở đây đánh bại nhiệt độ ở mức yêu cầu), vì vậy, hãy ưu tiên khóa này làm nguồn lấy mẫu đúng cho một mô hình. Trong modelOverrides, samplingParams hợp nhất từng khóa với giá trị của mô hình cơ sở.

Bản đồ cấp độ tư duy

Sử dụng thinkingLevelMap trên một mô hình để mô tả các biện pháp kiểm soát tư duy dành riêng cho mô hình. Chìa khóa là các cấp độ tư duy pi: off, minimal, low, medium, high, xhigh, max. Bản đồ có thể chứa lỗ hổng; ví dụ: một mô hình có thể hiển thị highmax mà không hiển thị xhigh.

Các giá trị là ba trạng thái:

Giá trị Nghĩa
bỏ qua Các cấp độ tiêu chuẩn cho đến high sử dụng ánh xạ mặc định của nhà cung cấp; mức xhighmax mở rộng không được hỗ trợ
sợi dây Cấp độ được hỗ trợ và giá trị này được gửi đến nhà cung cấp
null Cấp độ không được hỗ trợ và bị ẩn/bỏ qua/kẹp đi

Ví dụ về mô hình chỉ hỗ trợ lý luận tắt, cao và tối đa:

{
  "id": "deepseek-v4-pro",
  "reasoning": true,
  "thinkingLevelMap": {
    "minimal": null,
    "low": null,
    "medium": null,
    "high": "high",
    "xhigh": null,
    "max": "max"
  }
}

Ví dụ về mô hình không thể vô hiệu hóa suy nghĩ:

{
  "id": "always-thinking-model",
  "reasoning": true,
  "thinkingLevelMap": {
    "off": null
  }
}

Di chuyển: các cấu hình cũ hơn đã sử dụng compat.reasoningEffortMap sẽ di chuyển ánh xạ đó sang cấp mô hình thinkingLevelMap. Sử dụng null cho các cấp độ không xuất hiện trong giao diện người dùng.

Ghi đè tích hợp sẵn Providers

Định tuyến nhà cung cấp tích hợp thông qua proxy mà không cần xác định lại mô hình:

{
  "providers": {
    "anthropic": {
      "baseUrl": "https://my-proxy.example.com/v1"
    }
  }
}

Tất cả các mẫu Anthropic tích hợp vẫn có sẵn. Xác thực OAuth hoặc API key hiện tại vẫn tiếp tục hoạt động.

Để hợp nhất các mô hình tùy chỉnh vào một nhà cung cấp tích hợp, hãy bao gồm mảng models:

{
  "providers": {
    "anthropic": {
      "baseUrl": "https://my-proxy.example.com/v1",
      "apiKey": "$ANTHROPIC_API_KEY",
      "api": "anthropic-messages",
      "models": [...]
    }
  }
}

Hợp nhất ngữ nghĩa:

  • Các mô hình tích hợp được giữ lại.
  • Các mô hình tùy chỉnh được nâng cấp thêm id trong nhà cung cấp.
  • Nếu mô hình tùy chỉnh id khớp với mô hình tích hợp sẵn id thì mô hình tùy chỉnh sẽ thay thế mô hình tích hợp đó.
  • Nếu mô hình tùy chỉnh id là mô hình mới, mô hình đó sẽ được thêm cùng với các mô hình tích hợp sẵn.

Ghi đè trên mỗi mô hình

Sử dụng modelOverrides để tùy chỉnh các mô hình tích hợp và khớp với các mô hình đã đăng ký tiện ích mở rộng mà không thay thế danh sách mô hình đầy đủ của nhà cung cấp.

{
  "providers": {
    "openrouter": {
      "modelOverrides": {
        "anthropic/claude-sonnet-4": {
          "name": "Claude Sonnet 4 (Bedrock Route)",
          "compat": {
            "openRouterRouting": {
              "only": ["amazon-bedrock"]
            }
          }
        }
      }
    }
  }
}

modelOverrides hỗ trợ các trường này cho mỗi mô hình: name, reasoning, thinkingLevelMap, input, cost (một phần), contextWindow, maxTokens, samplingParams (được hợp nhất cho mỗi khóa), headers, compat.

OpenAI GPT-5.6 Sol, Terra và Luna trực tiếp mặc định có cửa sổ ngữ cảnh 272000 để các yêu cầu vẫn nằm trong bậc định giá ngữ cảnh ngắn của OpenAI. Để chọn tham gia cửa sổ ngữ cảnh 1,05M của OpenAI, hãy tăng cửa sổ ngữ cảnh đó cho từng kiểu máy bạn sử dụng:

{
  "providers": {
    "openai": {
      "modelOverrides": {
        "gpt-5.6-sol": {
          "contextWindow": 1050000
        }
      }
    }
  }
}

Việc ghi đè sẽ giữ nguyên siêu dữ liệu về giá được tích hợp sẵn. Các yêu cầu có tổng số mã thông báo đầu vào hơn 272K sẽ sử dụng tốc độ ngữ cảnh dài của GPT-5.6 cho toàn bộ yêu cầu. Áp dụng ghi đè tương tự cho gpt-5.6-terra hoặc gpt-5.6-luna khi cần.

Ghi chú hành vi:

  • modelOverrides được áp dụng cho các mô hình nhà cung cấp tích hợp và phù hợp với các mô hình nhà cung cấp đã đăng ký mở rộng.
  • ID mô hình không xác định sẽ bị bỏ qua.
  • Bạn có thể kết hợp baseUrl/headers cấp nhà cung cấp với modelOverrides.
  • Ghi đè name chỉ thay đổi văn bản khớp mô hình và chi tiết phụ; danh sách mô hình chân trang và chính tiếp tục hiển thị mô hình id.
  • Nếu models cũng được xác định cho nhà cung cấp, các mô hình tùy chỉnh sẽ được hợp nhất sau khi ghi đè tích hợp sẵn. Một mô hình tùy chỉnh có cùng id sẽ thay thế mục nhập mô hình tích hợp bị ghi đè.

Tính tương thích của thông điệp nhân loại

Đối với các nhà cung cấp hoặc proxy sử dụng api: "anthropic-messages", hãy sử dụng compat để kiểm soát khả năng tương thích của yêu cầu dành riêng cho Anthropic.

Theo mặc định pi gửi mỗi công cụ eager_input_streaming: true. Nếu proxy hoặc chương trình phụ trợ tương thích với Anthropic từ chối trường đó, hãy đặt supportsEagerToolInputStreaming thành false. Pi sẽ bỏ qua tools[].eager_input_streaming và thay vào đó gửi tiêu đề beta fine-grained-tool-streaming-2025-05-14 cũ cho các yêu cầu hỗ trợ công cụ.

Một số mô hình Nhân học yêu cầu tư duy thích ứng (thinking.type: "adaptive" cộng output_config.effort) thay vì khối lượng tư duy dựa trên ngân sách truyền thống. Các mô hình tích hợp tự động thiết lập điều này. Đối với các nhà cung cấp tùy chỉnh hoặc bí danh định tuyến đến các mô hình đó, hãy đặt forceAdaptiveThinking thành true.

Một số nhà cung cấp tương thích với Anthropic phát ra các khối tư duy có chữ ký trống và vẫn mong đợi chúng được phát lại. Chỉ đặt allowEmptySignature thành true cho những nhà cung cấp đó; Anthropic thực sự từ chối những chữ ký suy nghĩ trống rỗng.

Các mô hình Anthropic tích hợp sẵn cho phép supportsStrictTools trong siêu dữ liệu mô hình của chúng. Các mô hình tương thích với Anthropic tùy chỉnh phải đặt thành true khi điểm cuối của chúng chấp nhận các định nghĩa công cụ lược đồ JSON nghiêm ngặt.

{
  "providers": {
    "anthropic-proxy": {
      "baseUrl": "https://proxy.example.com",
      "api": "anthropic-messages",
      "apiKey": "$ANTHROPIC_PROXY_KEY",
      "compat": {
        "supportsEagerToolInputStreaming": false,
        "supportsLongCacheRetention": true,
        "forceAdaptiveThinking": true,
        "allowEmptySignature": true
      },
      "models": [
        {
          "id": "claude-opus-4-7",
          "reasoning": true,
          "input": ["text", "image"]
        }
      ]
    }
  }
}
Cánh đồng Sự miêu tả
supportsEagerToolInputStreaming Liệu nhà cung cấp có chấp nhận mỗi công cụ eager_input_streaming hay không. Mặc định: true. Đặt thành false để bỏ qua trường đó và sử dụng tiêu đề beta phát trực tuyến công cụ chi tiết cũ cho các yêu cầu hỗ trợ công cụ.
supportsLongCacheRetention Liệu nhà cung cấp có chấp nhận lưu giữ bộ nhớ đệm dài Anthropic (cache_control.ttl: "1h") hay không khi lưu giữ bộ nhớ đệm là long. Mặc định: true.
sendSessionAffinityHeaders Có gửi x-session-affinity từ id phiên khi bật bộ nhớ đệm hay không. Mặc định: tự động phát hiện các nhà cung cấp đã biết.
supportsCacheControlOnTools Liệu nhà cung cấp có chấp nhận điểm đánh dấu cache_control kiểu Anthropic trên định nghĩa công cụ hay không. Mặc định: true.
forceAdaptiveThinking Có gửi tư duy thích ứng (thinking.type: "adaptive" cộng output_config.effort) cho mô hình này hay không. Các mô hình thích ứng tích hợp tự động thiết lập điều này. Mặc định: false.
allowEmptySignature Có phát lại các dấu hiệu suy nghĩ trống rỗng dưới dạng signature: "" thay vì chuyển đổi suy nghĩ thành văn bản hay không. Mặc định: false.
supportsStrictTools Liệu nhà cung cấp có chấp nhận các định nghĩa công cụ lược đồ JSON nghiêm ngặt hay không. Mặc định: false; các mô hình Anthropic tích hợp sẵn cho phép nó tạo ra siêu dữ liệu.

Khả năng tương thích OpenAI

Đối với các nhà cung cấp có khả năng tương thích một phần với OpenAI, hãy sử dụng trường compat.

  • Cấp nhà cung cấp compat áp dụng mặc định cho tất cả các kiểu máy thuộc nhà cung cấp đó.
  • Cấp mô hình compat ghi đè các giá trị cấp nhà cung cấp cho mô hình đó.
{
  "providers": {
    "local-llm": {
      "baseUrl": "http://localhost:8080/v1",
      "api": "openai-completions",
      "compat": {
        "supportsUsageInStreaming": false,
        "maxTokensField": "max_tokens"
      },
      "models": [...]
    }
  }
}
Cánh đồng Sự miêu tả
supportsStore Nhà cung cấp hỗ trợ trường store
supportsDeveloperRole Sử dụng vai trò developer so với system
supportsReasoningEffort Hỗ trợ tham số reasoning_effort
supportsUsageInStreaming Hỗ trợ stream_options: { include_usage: true } (mặc định: true)
supportsFinishReason Câu trả lời được truyền trực tuyến có bao gồm finish_reason hay không. Khi false, pi suy ra stop hoặc toolUse khi luồng kết thúc. Mặc định: true.
maxTokensField Sử dụng max_completion_tokens hoặc max_tokens
requiresToolResultName Bao gồm name trên thông báo kết quả công cụ
requiresAssistantAfterToolResult Chèn tin nhắn trợ lý trước tin nhắn người dùng sau kết quả của công cụ
requiresThinkingAsText Chuyển đổi các khối suy nghĩ thành văn bản thuần túy
requiresReasoningContentOnAssistantMessages Bao gồm reasoning_content trống trên tất cả các tin nhắn trợ lý được phát lại khi tính năng lý luận được bật
thinkingFormat Sử dụng các tham số suy nghĩ reasoning_effort, openrouter, deepseek, together, baseten, zai, qwen, chat-template hoặc qwen-chat-template
chatTemplateKwargs giá trị chat_template_kwargs cho thinkingFormat: "chat-template"; sử dụng { "$var": "thinking.enabled" } hoặc { "$var": "thinking.effort" } cho các giá trị tư duy do pi điều khiển
chatTemplateArgs giá trị chat_template_args cho thinkingFormat: "baseten"; sử dụng { "$var": "thinking.enabled" } hoặc { "$var": "thinking.effort" } cho các giá trị tư duy do pi điều khiển
cacheControlFormat Sử dụng các điểm đánh dấu cache_control kiểu Anthropic trên lời nhắc hệ thống, định nghĩa công cụ cuối cùng và nội dung văn bản kết quả công cụ, trợ lý hoặc người dùng cuối cùng. Hiện tại chỉ hỗ trợ anthropic.
sendSessionAffinityHeaders Đối với openai-completions, hãy gửi tiêu đề sở thích phiên từ id phiên khi bộ nhớ đệm được bật. Mặc định: false.
sessionAffinityFormat Đối với openai-completionsopenai-responses, định dạng tiêu đề sở thích phiên: openai gửi session_id/x-client-request-id (các lần hoàn thành cũng x-session-affinity), openai-nosession bỏ qua tiêu đề chứa dấu gạch dưới session_id, openrouter gửi x-session-id. Không ảnh hưởng đến thông số cơ thể prompt_cache_key. Mặc định: tự động phát hiện.
supportsStrictMode Liệu nhà cung cấp có chấp nhận các định nghĩa nghiêm ngặt của công cụ hàm lược đồ JSON hay không. Giá trị mặc định phụ thuộc vào API; các mô hình OpenAI tích hợp mang siêu dữ liệu khả năng rõ ràng.
supportsOpenAIGrammarTools Liệu các API tương thích với OpenAI có phát ra các công cụ ngữ pháp Lark/regex tùy chỉnh hay không. Khi false, các công cụ bị hạn chế về ngữ pháp sẽ quay trở lại các công cụ chức năng thông thường. Mặc định: false; danh mục mô hình tích hợp sẵn hỗ trợ các mô hình GPT-5+ trên OpenAI, OpenAI Codex, Azure OpenAI, GitHub Copilot, opencode và Cloudflare AI Gateway.
deferredToolsMode Sử dụng tuần tự hóa công cụ trì hoãn dành riêng cho nhà cung cấp. Hiện tại, chỉ "kimi" được hỗ trợ cho định dạng Hoàn thành trò chuyện tương thích với OpenAI của Kimi.
supportsLongCacheRetention Liệu nhà cung cấp có chấp nhận lưu giữ bộ nhớ đệm trong thời gian dài khi lưu giữ bộ nhớ đệm là long: prompt_cache_retention: "24h" đối với bộ nhớ đệm nhắc nhở OpenAI hay cache_control.ttl: "1h" khi cacheControlFormatanthropic. Mặc định: true.
openRouterRouting Tùy chọn định tuyến của nhà cung cấp OpenRouter. Đối tượng này được gửi nguyên trạng trong trường provider của OpenRouter API request.
vercelGatewayRouting Cấu hình định tuyến Vercel AI Gateway để lựa chọn nhà cung cấp (only, order)

openrouter sử dụng reasoning: { effort }. together sử dụng reasoning: { enabled } và cả reasoning_effort khi supportsReasoningEffort được bật. qwen sử dụng cấp cao nhất enable_thinking. Sử dụng qwen-chat-template cho các máy chủ tương thích với Qwen cục bộ yêu cầu chat_template_kwargs.enable_thinkingpreserve_thinking. Sử dụng chat-template cho các mẫu trò chuyện vLLM/Hugging Face cần có thể định cấu hình chat_template_kwargs, chẳng hạn như chatTemplateKwargs: { "thinking": { "$var": "thinking.enabled" } } cho các mẫu DeepSeek V3.x. Sử dụng thinkingFormat: "baseten" với chatTemplateArgs đối với các nhà cung cấp hiển thị các điều khiển chuyển đổi thông qua chat_template_args và tùy chọn hỗ trợ cấp cao nhất reasoning_effort.

cacheControlFormat: "anthropic" dành cho các nhà cung cấp tương thích với OpenAI, hiển thị bộ nhớ đệm nhắc nhở kiểu Anthropic thông qua các điểm đánh dấu cache_control trên nội dung văn bản và định nghĩa công cụ.

Ví dụ:

{
  "providers": {
    "openrouter": {
      "baseUrl": "https://openrouter.ai/api/v1",
      "apiKey": "$OPENROUTER_API_KEY",
      "api": "openai-completions",
      "models": [
        {
          "id": "openrouter/anthropic/claude-3.5-sonnet",
          "name": "OpenRouter Claude 3.5 Sonnet",
          "compat": {
            "openRouterRouting": {
              "allow_fallbacks": true,
              "require_parameters": false,
              "data_collection": "deny",
              "zdr": true,
              "enforce_distillable_text": false,
              "order": ["anthropic", "amazon-bedrock", "google-vertex"],
              "only": ["anthropic", "amazon-bedrock"],
              "ignore": ["gmicloud", "friendli"],
              "quantizations": ["fp16", "bf16"],
              "sort": {
                "by": "price",
                "partition": "model"
              },
              "max_price": {
                "prompt": 10,
                "completion": 20
              },
              "preferred_min_throughput": {
                "p50": 100,
                "p90": 50
              },
              "preferred_max_latency": {
                "p50": 1,
                "p90": 3,
                "p99": 5
              }
            }
          }
        }
      ]
    }
  }
}

Ví dụ về Cổng AI của Vercel:

{
  "providers": {
    "vercel-ai-gateway": {
      "baseUrl": "https://ai-gateway.vercel.sh/v1",
      "apiKey": "$AI_GATEWAY_API_KEY",
      "api": "openai-completions",
      "models": [
        {
          "id": "moonshotai/kimi-k2.5",
          "name": "Kimi K2.5 (Fireworks via Vercel)",
          "reasoning": true,
          "input": ["text", "image"],
          "cost": { "input": 0.6, "output": 3, "cacheRead": 0, "cacheWrite": 0 },
          "contextWindow": 262144,
          "maxTokens": 262144,
          "compat": {
            "vercelGatewayRouting": {
              "only": ["fireworks", "novita"],
              "order": ["fireworks", "novita"]
            }
          }
        }
      ]
    }
  }
}