Triển khai danh mục mô hình cho gateway và dịch vụ đám mây

Lấy các giá trị mặc định của Codex theo phiên bản, áp dụng các giá trị ghi đè của nhà cung cấp và cung cấp danh mục mô hình

Trang này dành cho các nhà phát triển triển khai định dạng Codex Models, định dạng xác định danh mục mô hình và cung cấp dữ liệu cho bộ chọn mô hình. Nếu bạn xây dựng một nhà cung cấp dịch vụ suy luận, chẳng hạn như gateway hoặc dịch vụ đám mây, hãy dùng đặc tả này để cho phép ứng dụng Codex trên máy tính và CLI khám phá các mô hình của bạn cũng như sử dụng chỉ dẫn và các thiết lập khả năng của chúng.

Nếu bạn quản trị một doanh nghiệp và muốn kiểm soát danh mục mô hình, hãy xem hướng dẫn cấu hình model_catalog_url.

Để hỗ trợ định dạng này, hãy triển khai một endpoint danh mục có xác thực. Lấy các giá trị mặc định hiện tại của nhà cung cấp thượng nguồn cho phiên bản Codex gửi yêu cầu, áp dụng các giá trị ghi đè của bạn và trả về danh mục thu được.

Triển khai endpoint danh mục

Endpoint danh mục mặc định là /models bên dưới base_url của nhà cung cấp. Ví dụ, với base_url = "https://gateway.example.com/v1", Codex gửi yêu cầu:

GET /v1/models?client_version=0.162.1
Authorization: Bearer <PROVIDER_ACCESS_TOKEN>

Cơ chế khám phá mặc định hỗ trợ xác thực thông qua lệnh và xác thực qua backend Codex, chẳng hạn như ChatGPT. Đối với nhà cung cấp tùy chỉnh sử dụng xác thực bằng API key mà không xác thực thông qua lệnh, hãy đặt model_providers.<id>.model_catalog_url một cách tường minh để bật khám phá từ xa. Chỉ có API key sẽ không kích hoạt khám phá tại đường dẫn mặc định.

Sử dụng model_catalog_url để chọn URL danh mục đầy đủ, chẳng hạn như https://gateway.example.com/codex/models. URL này cũng có thể trỏ đến endpoint /v1/models mặc định. Codex sử dụng trực tiếp URL này mà không nối thêm /models. Để khám phá bằng API key, hãy giữ features.api_key_model_discovery ở trạng thái bật; thiết lập này được bật theo mặc định. Chỉ có các header tùy chỉnh sẽ không bật tính năng khám phá.

Codex gửi thông tin xác thực của nhà cung cấp đã chọn và các header đã cấu hình, đồng thời nối thêm client_version và mọi query_params của nhà cung cấp. Hãy lưu trữ danh mục trên một dịch vụ được phép nhận các thông tin xác thực đó.

Xác thực bên gọi, lấy các giá trị mặc định thượng nguồn tương ứng, áp dụng các giá trị ghi đè của bạn và trả về trực tiếp JSON ModelsResponse hoàn chỉnh. Cấp cho mỗi mục một slug duy nhất, không rỗng. Với model_catalog_url được đặt tường minh, Codex từ chối chuyển hướng và phản hồi lớn hơn 1 MiB. Tiếp tục thực thi quyền truy cập mô hình đối với các yêu cầu suy luận.

Xóa mọi thiết lập model_catalog_json đang có hiệu lực khỏi các ứng dụng khách sử dụng endpoint: tệp cục bộ được ưu tiên và ngăn việc lấy dữ liệu từ xa.

Khớp với schema của ứng dụng khách

Đọc tham số truy vấn client_version trong yêu cầu danh mục. Codex gửi phiên bản CLI của mình dưới dạng major.minor.patch, sau khi loại bỏ mọi hậu tố tiền phát hành. Đối với ứng dụng khách trên máy tính, đây là phiên bản CLI đi kèm.

Sử dụng tag rust-v<version> tương ứng trong kho lưu trữ Codex công khai, hoặc commit mã nguồn chính xác cho bản dựng tùy chỉnh. Các liên kết này sử dụng rust-v0.162.1; hãy chọn bản sửa đổi khớp với ứng dụng khách của bạn:

Tệp đi kèm là ảnh chụp dữ liệu tại thời điểm phát hành. Hãy lấy các giá trị mặc định hiện tại trước khi tạo danh mục của bạn.

Lấy các giá trị mặc định hiện tại từ thượng nguồn

Các nhà cung cấp đám mây cung cấp mô hình OpenAI lấy giá trị mặc định từ OpenAI. Gateway đọc danh mục của nhà cung cấp đám mây hoặc thượng nguồn để giữ lại các thiết lập của mô hình đã triển khai và tính khả dụng theo tài khoản và khu vực. Truyền phiên bản Codex gửi yêu cầu ở mỗi bước và xác thực riêng với từng endpoint.

Để lấy các giá trị mặc định trực tiếp từ OpenAI, hãy gọi endpoint mô hình Codex với cùng client_version. Ví dụ, với một API key của OpenAI:

curl --fail --silent --show-error \
  'https://chatgpt.com/backend-api/codex/models?client_version=0.162.1' \
  -H "Authorization: Bearer $OPENAI_API_KEY"

Đối với tích hợp ChatGPT, hãy sử dụng token truy cập ChatGPT của bên gọi và header ChatGPT-Account-ID khi áp dụng. Sử dụng thông tin xác thực được cấp quyền cho endpoint thượng nguồn; API key riêng của gateway không dùng để xác thực với OpenAI.

Phân tích toàn bộ phản hồi, bao gồm mảng models ở cấp cao nhất. Endpoint này trả về siêu dữ liệu Codex như chỉ dẫn, giá trị mặc định cho suy luận, thiết lập công cụ, giới hạn ngữ cảnh và các cấp dịch vụ. Endpoint /v1/models công khai không cung cấp danh mục này.

Làm mới các giá trị mặc định này ngay cả khi phiên bản Codex không thay đổi. Giữ phạm vi yêu cầu gắn với danh tính thượng nguồn dự kiến và tuân thủ các chỉ thị kiểm soát bộ nhớ đệm của phản hồi: danh mục có thể phụ thuộc vào quyền truy cập của bên gọi. Giữ riêng các giá trị ghi đè để bạn có thể áp dụng lại chúng cho các giá trị mặc định mới.

Áp dụng các giá trị ghi đè của nhà cung cấp

Thay đổi giá trị các trường nhưng vẫn giữ nguyên cấu trúc phản hồi của phiên bản:

  • Lọc để chỉ giữ các mô hình mà bên gọi có thể sử dụng. Ánh xạ mỗi slug tới một tuyến suy luận được hỗ trợ và điều chỉnh display_name, description hoặc priority. Với bí danh không kèm chuyển đổi mô hình, hãy đặt upgrade thành null.
  • Đặt các tùy chọn suy luận, giới hạn ngữ cảnh, phương thức đầu vào và cấp dịch vụ thành các giá trị mà mô hình và tuyến của bạn hỗ trợ. Giữ các giá trị mặc định trong phạm vi những lựa chọn được hỗ trợ. Với tuyến không có cấp dịch vụ, hãy xóa service_tiers và additional_speed_tiers, đồng thời đặt default_service_tier thành null.
  • Giữ nguyên chỉ dẫn và thiết lập công cụ từ thượng nguồn trừ khi bạn đã kiểm thử một phương án thay thế. Siêu dữ liệu không bổ sung khả năng cho mô hình hay cấp quyền truy cập suy luận.

Đối với Bedrock qua LiteLLM, hãy áp dụng các chỉnh sửa danh mục bắt buộc. Kiểm thử danh mục thu được với từng phiên bản Codex được hỗ trợ.

Sử dụng các kiểu Rust công khai

Sử dụng các crate từ cùng tag Git hoặc commit công khai với schema của ứng dụng khách:

  • Sử dụng codex-protocol cho codex_protocol::openai_models::{ModelsResponse, ModelInfo}. Phân tích bằng serde_json::from_slice::<ModelsResponse>(), chỉnh sửa catalog.models và tuần tự hóa toàn bộ đối tượng bao bằng serde_json::to_vec(). Đối tượng bao xử lý các trường tương thích cho chỉ dẫn mô hình.
  • Sử dụng codex-models-manager::bundled_models_response() để tải danh mục tĩnh đi kèm của bản sửa đổi đó dưới dạng ModelsResponse. Thao tác này không lấy các giá trị mặc định hiện tại từ thượng nguồn.