fix: align embedding provider request formats

This commit is contained in:
mayrain
2026-05-12 20:10:52 +08:00
parent fca3f24d91
commit 8f082674d7
4 changed files with 25 additions and 19 deletions

View File

@@ -1,5 +1,5 @@
use serde_json::Map;
use serde_json::Value; use serde_json::Value;
use serde_json::{json, Map};
use crate::formats::context::FormatContext; use crate::formats::context::FormatContext;
use crate::formats::openai::embedding::request::mapped_embedding_model; use crate::formats::openai::embedding::request::mapped_embedding_model;
@@ -24,7 +24,7 @@ pub fn to(request: &CanonicalRequest, ctx: &FormatContext) -> Option<Value> {
Value::Array( Value::Array(
items items
.into_iter() .into_iter()
.map(|text| json!({"type": "text", "text": text})) .map(|text| Value::String(text.to_string()))
.collect(), .collect(),
), ),
); );

View File

@@ -239,11 +239,11 @@ mod tests {
"openai:embedding", "openai:embedding",
"doubao:embedding", "doubao:embedding",
&body, &body,
&FormatContext::default().with_mapped_model("doubao-embedding-vision"), &FormatContext::default().with_mapped_model("doubao-embedding-text-240515"),
) )
.expect("doubao embedding conversion should succeed"); .expect("doubao embedding conversion should succeed");
assert_eq!(doubao["model"], "doubao-embedding-vision"); assert_eq!(doubao["model"], "doubao-embedding-text-240515");
assert_eq!(doubao["input"][0], json!({"type": "text", "text": "alpha"})); assert_eq!(doubao["input"], json!(["alpha", "beta"]));
assert!(doubao.get("messages").is_none()); assert!(doubao.get("messages").is_none());
} }

View File

@@ -4758,10 +4758,13 @@ mod tests {
); );
assert!(gemini.get("messages").is_none()); assert!(gemini.get("messages").is_none());
let doubao = let doubao = super::canonical_to_embedding_request(
super::canonical_to_embedding_request(&canonical, "doubao-embedding-vision", "doubao") &canonical,
.expect("doubao embedding request"); "doubao-embedding-text-240515",
assert_eq!(doubao["input"][0], json!({"type": "text", "text": "alpha"})); "doubao",
)
.expect("doubao embedding request");
assert_eq!(doubao["input"], json!(["alpha", "beta"]));
assert!(doubao.get("messages").is_none()); assert!(doubao.get("messages").is_none());
} }
@@ -4802,11 +4805,14 @@ mod tests {
assert_eq!(gemini["content"]["parts"][0]["text"], "alpha"); assert_eq!(gemini["content"]["parts"][0]["text"], "alpha");
assert!(gemini.get("requests").is_none()); assert!(gemini.get("requests").is_none());
let doubao = let doubao = super::canonical_to_embedding_request(
super::canonical_to_embedding_request(&single, "doubao-embedding-vision", "doubao") &single,
.expect("doubao embedding request"); "doubao-embedding-text-240515",
assert_eq!(doubao["model"], "doubao-embedding-vision"); "doubao",
assert_eq!(doubao["input"], json!([{"type": "text", "text": "alpha"}])); )
.expect("doubao embedding request");
assert_eq!(doubao["model"], "doubao-embedding-text-240515");
assert_eq!(doubao["input"], json!(["alpha"]));
assert_eq!(doubao["dimensions"], 1536); assert_eq!(doubao["dimensions"], 1536);
} }

View File

@@ -109,7 +109,7 @@ pub fn build_transport_request_url(
), ),
"doubao:embedding" => build_passthrough_path_url( "doubao:embedding" => build_passthrough_path_url(
&transport.endpoint.base_url, &transport.endpoint.base_url,
"/embeddings/multimodal", "/embeddings",
params.request_query, params.request_query,
&[], &[],
), ),
@@ -818,14 +818,14 @@ mod tests {
&doubao, &doubao,
TransportRequestUrlParams { TransportRequestUrlParams {
provider_api_format: "doubao:embedding", provider_api_format: "doubao:embedding",
mapped_model: Some("doubao-embedding-vision"), mapped_model: Some("doubao-embedding-text-240515"),
upstream_is_stream: false, upstream_is_stream: false,
request_query: None, request_query: None,
kiro_api_region: None, kiro_api_region: None,
}, },
) )
.as_deref(), .as_deref(),
Some("https://ark.volces.example/api/v3/embeddings/multimodal") Some("https://ark.volces.example/api/v3/embeddings")
); );
} }
@@ -943,14 +943,14 @@ mod tests {
&doubao_with_query, &doubao_with_query,
TransportRequestUrlParams { TransportRequestUrlParams {
provider_api_format: "doubao:embedding", provider_api_format: "doubao:embedding",
mapped_model: Some("doubao-embedding-vision"), mapped_model: Some("doubao-embedding-text-240515"),
upstream_is_stream: false, upstream_is_stream: false,
request_query: Some("trace=4"), request_query: Some("trace=4"),
kiro_api_region: None, kiro_api_region: None,
}, },
) )
.as_deref(), .as_deref(),
Some("https://ark.volces.example/api/v3/embeddings/multimodal?tenant=base&trace=4") Some("https://ark.volces.example/api/v3/embeddings?tenant=base&trace=4")
); );
} }