Nhiệm vụ: Tìm hiểu lý do tại sao không phải tất cả các mô hình hình ảnh đều có sẵn trong openrouter
Tìm hiểu lý do tại sao không phải tất cả các mô hình hình ảnh đều có sẵn trong openrouter
Một số mô hình hoạt động bình thường, ví dụ như google/gemini-2.5-flash-image, google/gemini-3.1-flash-image-preview, trong khi một số mô hình trả về lỗi 404, ví dụ như black-forest-labs/flux.2-klein-4b, black-forest-labs/flux.2-pro, black-forest-labs/flux.2-max
Ворклоги
Hóa ra vấn đề nằm ở tham số này:
modalities: ['image', 'text']
Và ở đây tôi thấy hành vi rất tệ của openrouter-api. Vấn đề là gì? Một số mô hình thực sự hỗ trợ cả image và text, trong khi một số mô hình chỉ hỗ trợ image hoặc chỉ text. Và openrouter có một phương thức để lấy các mô hình dựa trên modality cụ thể.
curl "https://openrouter.ai/api/v1/models?output_modalities=image"
Tuy nhiên, điểm thú vị là họ không có phương thức nào để lấy các mô hình hỗ trợ cả hai. Nghĩa là chúng ta không thể dùng một request duy nhất để biết liệu mô hình có hỗ trợ tất cả các modality mà chúng ta cần hay không. Hơn nữa, chúng ta không thể thấy tất cả các mô hình trong request sh curl "https://openrouter.ai/api/v1/models"
mà không chỉ định modality. Ví dụ, ở đây chúng ta thấy flux
curl "https://openrouter.ai/api/v1/models?output_modalities=image" |jq|grep black -A 15
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 39411 0 39411 0 0 172k 0 --:--:-- --:--:-- --:--:-- 171k
"id": "black-forest-labs/flux.2-klein-4b",
"canonical_slug": "black-forest-labs/flux.2-klein-4b",
"hugging_face_id": "black-forest-labs/FLUX.2-klein-4B",
"name": "Black Forest Labs: FLUX.2 Klein 4B",
"created": 1768429228,
"description": "FLUX.2 [klein] 4B is the fastest and most cost-effective model in the FLUX.2 family, optimized for high-throughput use cases while maintaining excellent image quality. Pricing is based on the output...",
"context_length": 40960,
"architecture": {
"modality": "text+image->image",
"input_modalities": [
"text",
"image"
],
"output_modalities": [
"image"
],
"tokenizer": "Other",
"instruct_type": null
--
"details": "/api/v1/models/black-forest-labs/flux.2-klein-4b/endpoints"
}
},
Nhưng chúng ta sẽ không thấy nó trong danh sách chung các mô hình.
curl "https://openrouter.ai/api/v1/models" |jq|grep black -A 15
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 488k 0 488k 0 0 1496k 0 --:--:-- --:--:-- --:--:-- 1498k
Nhưng đó chưa phải là tất cả :-) Nếu trong request chỉ định modalities: ['image'], thì các mô hình kiểu gemini-2.5/3 trả về lỗi "No endpoints found that support the requested output modalities: image", mặc dù trong chính mô hình đó đã ghi
"architecture": {
"modality": "text+image->text+image",
"input_modalities": [
"image",
"text"
],
"output_modalities": [
"image",
"text"
],
"tokenizer": "Gemini",
"instruct_type": null
}
Tức là nó không lấy một trong các khả năng, mà bắt buộc tất cả phải trùng khớp. Điều này thực sự kỳ lạ đối với tôi. Tôi đành phải không chỉ định modality nào luôn.