Tài liệu
Oh My Pi
Oh My Pi lưu các nhà cung cấp trong một tệp YAML. Chỉ cần ba dòng dưới một tên do bạn chọn — baseUrl, api, apiKey — là omp có thể định tuyến đến Claude và GPT qua một khóa duy nhất, đồng thời tự lấy danh sách mô hình thay vì yêu cầu nhập thủ công.
Một khối nhà cung cấp trong ~/.omp/agent/models.yml — baseUrl, api, apiKey — trỏ Oh My Pi tới Kunavo, và discovery điền danh sách model từ GET /v1/models.
providers:
kunavo:
baseUrl: https://api.kunavo.com/v1
api: openai-completions
apiKey: KUNAVO_API_KEY # an env-var name; literal text also works
discovery:
type: openai-models-list # reads GET /v1/models
# Prefer a fixed list to a discovered one? Drop the discovery block and
# declare ids instead. Omitted metadata defaults to a 128,000-token context
# window and a 16,384-token output limit, so set the real numbers from
# /models when they differ.
#
# models:
# - id: claude-sonnet-5
# name: Claude Sonnet 5
# contextWindow: ...
# maxTokens: .../v1. omp mô tả baseUrl là “gốc endpoint” và openai-completions là “Chat Completions tương thích OpenAI”; mục khắc phục lỗi 404 của chính omp viết rằng “URL cơ sở tương thích OpenAI nói chung kết thúc bằng /v1”. Mọi ví dụ nhà cung cấp tùy chỉnh trên cả hai trang đều kết thúc theo cùng cách. “Nói chung” là cách họ giới hạn khẳng định, không phải bảo đảm — nhưng Kunavo phục vụ /v1/chat/completions, vì vậy https://api.kunavo.com/v1 là gốc tạo ra đường dẫn đó. Điều này ngược với các ứng dụng dùng kiểu Anthropic, vốn cần origin thuần.authHeader khỏi tuyến này. omp mô tả biến này dùng cho gateway “cụ thể cần chèn Authorization: Bearer làm header thông thường”, đồng thời lưu ý rằng “các ứng dụng khách nhà cung cấp tiêu chuẩn đã áp dụng cơ chế xác thực thông thường của chúng” — ứng dụng khách tương thích OpenAI cũng làm vậy, và Kunavo chấp nhận cơ chế đó. Chỉ thêm biến này nếu bạn thấy lỗi 401 mà curl bên dưới không tái hiện được.curl bên dưới là phần bạn có thể tự xác nhận trong mười giây; phần còn lại phụ thuộc vào bạn và omp.sk-kn-) và nạp tín dụng từ $10 — các lệnh gọi được thanh toán từ số dư đó và các lệnh gọi thất bại không bị tính phí. Sau đó, bảng điều khiển mở tại phần thiết lập Oh My Pi.Từng bước
- Tạo khóa tại
/app/keysrồi sao chép khóa — khóa chỉ hiển thị một lần. - Xuất biến này thành
KUNAVO_API_KEYtrong shell dùng để khởi chạy omp. Trước tiên, omp phân giảiapiKeythành tên biến môi trường; nếu không tìm thấy, nó sẽ coi nguyên văn đó là khóa. Vì vậy, gõ sai tên biến sẽ không báo lỗi mà âm thầm tải cấu hình sai, rồi thất bại ở yêu cầu đầu tiên. Giá trị bắt đầu bằng!sẽ được chạy như một lệnh shell — đó là cách dùng kiểu 1Password. - Đặt khối trên vào
~/.omp/agent/models.yml. Bạn tự chọn provider id — ở đây làkunavo— và nó sẽ trở thành phần đầu của mọi bộ chọn. - Chạy
omp models kunavođể tải tệp và chỉ liệt kê nhà cung cấp này. Lỗi YAML hoặc schema sẽ inmodels.yml validation failedcùng trường gây lỗi;omp models refresh kunavobuộc thực hiện một lần khám phá mới thay vì dùng danh mục đã lưu trong bộ nhớ đệm. - Kiểm tra bằng bộ chọn chính xác:
omp -p --model kunavo/claude-sonnet-5 "Reply with only OK". Sau đó khởi chạyomp, nhập/modelvà gán id bạn muốn cho Default — trung tâm mô hình sẽ tải lạimodels.ymlkhi mở./switchchỉ thay đổi phiên hiện tại.
Đã kiểm tra đối chiếu với Trang Providers của omp vào 21 tháng 9, 2026. Cài đặt của bên thứ ba có thể thay đổi; nếu tên trường ở đây không còn khớp với những gì bạn thấy, trang đó là nguồn có thẩm quyền, không phải trang này.
Xác minh trước khi gỡ lỗi ứng dụng khách
Một yêu cầu sẽ xác định liệu lỗi nằm ở endpoint, khóa hay tệp cấu hình. Nếu lệnh này trả về JSON, cùng base URL và khóa sẽ hoạt động trong Oh My Pi.
# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
-H "Authorization: Bearer sk-kn-..."Đặt model id nào vào trường
Mọi mô hình văn bản đều có thể truy cập bằng model id — danh sách đang hoạt động là GET /v1/models, còn danh mục kèm giá nằm trên trang mô hình. Mức giá tính bằng USD trên mỗi 1M token, đầu vào / đầu ra.
| ID mô hình | Kunavo vào / ra | Phù hợp ở đâu trong Oh My Pi |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | vai trò mặc định — mô hình mà phần lớn các phiên thực sự chạy |
claude-opus-5 | $3.50 / $17.50 | vai trò lập kế hoạch, nơi một kế hoạch sai gây tốn kém hơn số token |
claude-haiku-4-5 | $0.70 / $3.50 | vai trò smol: phân loại, tóm tắt và những lượt gọi diễn ra liên tục |
gpt-5-6-sol | $2.00 / $12.00 | ý kiến thứ hai từ một họ mô hình khác, cùng khối nhà cung cấp |
Khám phá: chọn kiểu nào và mục nào xuất hiện trong bộ chọn
omp cung cấp sáu giá trị discovery.type và có hai giá trị trông phù hợp với gateway. Nhưng chỉ một giá trị đúng. proxy được mô tả dành cho “proxy hỗn hợp OpenAI/Anthropic có các hàng mô hình khai báo supported_endpoint_types”, và nó xác định giao thức của từng mô hình dựa trên trường đó. GET /v1/models của Kunavo không công bố trường này, nên với proxy, mọi hàng sẽ dùng lại api ở cấp nhà cung cấp — hoặc bị loại nếu không đặt giá trị này. openai-models-list, được mô tả là “endpoint GET /v1/models tương thích OpenAI tổng quát”, là lựa chọn cần dùng; đó là lý do khối cấu hình trên giữ lại api: openai-completions: quy tắc của omp là “ngoại trừ proxy, khám phá cần có api ở cấp nhà cung cấp”.
Có một hệ quả cần biết trước khi mở bộ chọn. Danh sách mô hình Kunavo bao gồm toàn bộ danh mục được bật, vì vậy nhà cung cấp được khám phá sẽ hiển thị các id hình ảnh, video và nhạc bên cạnh các id trò chuyện, trong khi giao thức trò chuyện không thể gọi chúng. Kunavo công bố context_length trên các hàng trò chuyện — đây là trường mà tính năng khám phá tổng quát của omp đọc sau max_model_len, theo tài liệu mô hình — nhưng bỏ qua trường này trên các hàng đa phương tiện, nên những hàng đó sẽ nhận giá trị mặc định 128.000 token của omp thay vì một con số thực. Nếu muốn bộ chọn ngắn gọn và chính xác, hãy bỏ khối khám phá và khai báo ba hoặc bốn id bạn thực sự dùng.
omp cũng hỗ trợ giao thức anthropic-messages, và Kunavo trả lời tại /v1/messages. Trang này không đưa ra khối cấu hình cho cặp đó: hai trang được trích dẫn ở đây xác định dạng URL cơ sở cho tuyến tương thích OpenAI nhưng không nói cách xử lý hậu tố /v1 ở tuyến Anthropic, trong khi mục đích của khối cấu hình là để người đọc có thể sao chép và dùng ngay. Nếu chọn cách đó,disableStrictTools: true là câu trả lời trong tài liệu cho trường hợp lệnh gọi công cụ thất bại với lỗi 400 trên endpoint tương thích Anthropic.
Câu hỏi thường gặp
Làm cách nào để thêm nhà cung cấp API tùy chỉnh vào Oh My Pi?
Mọi thứ đều nằm trong ~/.omp/agent/models.yml. Thêm một khóa dưới `providers:` — tên do bạn chọn sẽ trở thành phần nhà cung cấp của bộ chọn — rồi khai báo baseUrl, api và apiKey theo đúng thứ tự trong ví dụ "Add a custom provider" của omp. Bạn có thể tự liệt kê mô hình dưới `models:` hoặc thêm khối `discovery:` để omp tự lấy chúng. Sau đó chạy `omp models <your-provider-id>` để xác nhận tệp đã được tải, rồi chọn mô hình bằng `omp --model <provider>/<model-id>` hoặc trung tâm /model bên trong một phiên.
baseUrl của Oh My Pi có cần kết thúc bằng /v1 không?
Có, với endpoint tương thích OpenAI. omp gọi baseUrl là gốc endpoint và nối đường dẫn theo họ api bạn khai báo, nên `api: openai-completions` có nghĩa là nó yêu cầu chat completions dưới gốc bạn đã cung cấp. Ghi chú khắc phục lỗi 404 của omp cho biết URL cơ sở tương thích OpenAI nói chung kết thúc bằng /v1, và mọi ví dụ nhà cung cấp tùy chỉnh trong tài liệu đều như vậy. Kunavo phục vụ /v1/chat/completions, nên gốc cần ghi là https://api.kunavo.com/v1 — thiếu /v1 sẽ dẫn đến lỗi 404 hoặc "unsupported endpoint", chứ không phải lỗi xác thực.
Oh My Pi tìm khóa API ở đâu và thứ tự ưu tiên ra sao?
apiKey trong models.yml được phân giải qua ba bước: nếu giá trị bắt đầu bằng !, nội dung đó được chạy như lệnh shell và đầu ra stdout sau khi cắt khoảng trắng được dùng; nếu không, omp tìm biến môi trường có tên trùng khớp chính xác; nếu không có biến đó, omp coi nguyên văn chuỗi là khóa. Cách dự phòng cuối cùng này dễ gây lỗi — tên biến gõ sai vẫn được tải mà không báo gì, rồi thất bại ở yêu cầu đầu tiên. Trong thứ tự ưu tiên rộng hơn, khóa trong models.yml được ưu tiên hơn OAuth đã lưu; omp ghi rõ đây là chủ ý, nên khóa cung cấp cho gateway sẽ không bị đăng nhập qua nhà cung cấp ngược dòng ghi đè.
Gateway nên dùng kiểu khám phá nào trong omp?
openai-models-list, không phải proxy, trừ khi gateway khai báo supported_endpoint_types trên từng hàng mô hình — trường này là thứ proxy đọc để quyết định mô hình sẽ được gửi đến /v1/messages hay /v1/chat/completions; nếu thiếu, mô hình sẽ dùng api ở cấp nhà cung cấp hoặc bị loại. /v1/models của Kunavo không công bố trường đó, nên danh sách OpenAI tổng quát là kiểu phù hợp, và omp yêu cầu có api ở cấp nhà cung cấp với mọi kiểu khám phá ngoại trừ proxy. Chạy `omp models refresh <provider>` để buộc lấy dữ liệu mới thay vì dùng danh mục đã lưu trong bộ nhớ đệm.
Kunavo đã kiểm thử Oh My Pi với endpoint của mình chưa?
Chưa. Nội dung được kiểm tra vào ngày 21 tháng 9 năm 2026 là tài liệu riêng của omp — tên trường, thứ tự, quy tắc phân giải khóa và các kiểu khám phá đều được trích từ đó; hai chi tiết được đối chiếu với tuyến /v1/models của Kunavo thay vì giả định. Tại đây chưa chạy phiên omp nào với api.kunavo.com, và không đưa ra khẳng định nào về truyền trực tiếp, vòng gọi công cụ hay định tuyến mô hình bên trong ứng dụng khách. Điều duy nhất có thể xác nhận riêng là endpoint và khóa có hoạt động hay không; lệnh curl trên trang này giúp kiểm tra điều đó.