Tài liệu

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.

~/.omp/agent/models.yml
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: ...
URL cơ sở giữ hậu tố /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.
Bỏ 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.
Cấu hình này được lấy từ tài liệu riêng của omp vào ngày bên dưới. Kunavo chưa chạy omp với endpoint của mình — chưa có phiên làm việc, lượt trao đổi truyền trực tiếp, vòng gọi công cụ hay kiểm tra định tuyến nào. Một trang hướng dẫn cấu hình đã xuất bản không phải là bài kiểm tra, và không nên hiểu nội dung ở đây là đã kiểm thử. 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.
Kunavo không cung cấp mô hình embedding, chuyển văn bản thành giọng nói hoặc chuyển giọng nói thành văn bản, vì vậy nhà cung cấp này chỉ trả lời trò chuyện. Mọi cấu hình chuyển âm thanh thành văn bản hoặc tạo chỉ mục vector của bạn vẫn dùng khóa nhà cung cấp hiện có.
Chưa có khóa? Tạo tài khoản Kunavo, tạo khóa (bắt đầu bằng 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

  1. Tạo khóa tại /app/keys rồi sao chép khóa — khóa chỉ hiển thị một lần.
  2. Xuất biến này thành KUNAVO_API_KEY trong shell dùng để khởi chạy omp. Trước tiên, omp phân giải apiKey thà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.
  3. Đặ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.
  4. 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ẽ in models.yml validation failed cùng trường gây lỗi; omp models refresh kunavo buộ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.
  5. 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ạy omp, nhập /model và gán id bạn muốn cho Default — trung tâm mô hình sẽ tải lại models.yml khi mở. /switch chỉ 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.

Đây là phiên bản ngắn. Hướng dẫn đầy đủ — lựa chọn mô hình, chi phí của một phiên thực tế và các trường hợp lỗi — nằm trong so sánh Oh My Pi và OpenCode.

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ìnhKunavo vào / raPhù hợp ở đâu trong Oh My Pi
claude-sonnet-5$1.40 / $7.00vai 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.50vai 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.50vai 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
Thanh toán theo token từ số dư trả trước, không có phí hàng tháng — xem trang Thanh toán. Với ngữ cảnh lặp lại — chiếm phần lớn dữ liệu mà trình chỉnh sửa hoặc ứng dụng trò chuyện gửi đi — bộ nhớ đệm prompt ảnh hưởng đến hóa đơn nhiều hơn lựa chọn mô hình.

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 đó.