From 44c8c638994282c1821ec1a86df58a6ba5892af4 Mon Sep 17 00:00:00 2001 From: jiangnan <1394485448@qq.com> Date: Mon, 16 Mar 2026 17:42:35 +0800 Subject: [PATCH 1/3] fix: only pass dimensions param when explicitly configured Models like bge-m3 don't support the dimensions parameter in the embedding API, causing HTTP 400 errors. Previously dimensions was always sent with a default value of 1024, even when the user never configured it. Now dimensions is only included in the request when embedding_dimensions is explicitly set in provider config. Closes #6421 Signed-off-by: JiangNan <1394485448@qq.com> --- .../provider/sources/openai_embedding_source.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/astrbot/core/provider/sources/openai_embedding_source.py b/astrbot/core/provider/sources/openai_embedding_source.py index 8bf92ef4d5..57b409fed4 100644 --- a/astrbot/core/provider/sources/openai_embedding_source.py +++ b/astrbot/core/provider/sources/openai_embedding_source.py @@ -40,22 +40,31 @@ def __init__(self, provider_config: dict, provider_settings: dict) -> None: async def get_embedding(self, text: str) -> list[float]: """获取文本的嵌入""" + kwargs = self._embedding_kwargs() embedding = await self.client.embeddings.create( input=text, model=self.model, - dimensions=self.get_dim(), + **kwargs, ) return embedding.data[0].embedding async def get_embeddings(self, text: list[str]) -> list[list[float]]: """批量获取文本的嵌入""" + kwargs = self._embedding_kwargs() embeddings = await self.client.embeddings.create( input=text, model=self.model, - dimensions=self.get_dim(), + **kwargs, ) return [item.embedding for item in embeddings.data] + def _embedding_kwargs(self) -> dict: + """构建嵌入请求的可选参数""" + kwargs = {} + if "embedding_dimensions" in self.provider_config: + kwargs["dimensions"] = int(self.provider_config["embedding_dimensions"]) + return kwargs + def get_dim(self) -> int: """获取向量的维度""" return int(self.provider_config.get("embedding_dimensions", 1024)) From 41a7a660c8e5fa199157c647bab876cf970ba0d9 Mon Sep 17 00:00:00 2001 From: jnMetaCode <1394485448@qq.com> Date: Mon, 16 Mar 2026 18:06:26 +0800 Subject: [PATCH 2/3] fix: handle invalid dimensions config and align get_dim return - Add try-except around int() conversion in _embedding_kwargs to gracefully handle invalid embedding_dimensions config values - Update get_dim() to return 0 when embedding_dimensions is not explicitly configured, so callers know dimensions weren't specified and can handle it accordingly - Both methods now share consistent logic for reading the config Signed-off-by: JiangNan <1394485448@qq.com> --- .../core/provider/sources/openai_embedding_source.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/astrbot/core/provider/sources/openai_embedding_source.py b/astrbot/core/provider/sources/openai_embedding_source.py index 57b409fed4..65bcdaa2e9 100644 --- a/astrbot/core/provider/sources/openai_embedding_source.py +++ b/astrbot/core/provider/sources/openai_embedding_source.py @@ -62,12 +62,20 @@ def _embedding_kwargs(self) -> dict: """构建嵌入请求的可选参数""" kwargs = {} if "embedding_dimensions" in self.provider_config: - kwargs["dimensions"] = int(self.provider_config["embedding_dimensions"]) + try: + kwargs["dimensions"] = int(self.provider_config["embedding_dimensions"]) + except (ValueError, TypeError): + logger.warning(f"配置中的 embedding_dimensions 值无效: '{self.provider_config['embedding_dimensions']}',已忽略。") return kwargs def get_dim(self) -> int: """获取向量的维度""" - return int(self.provider_config.get("embedding_dimensions", 1024)) + if "embedding_dimensions" in self.provider_config: + try: + return int(self.provider_config["embedding_dimensions"]) + except (ValueError, TypeError): + logger.warning(f"配置中的 embedding_dimensions 值无效: '{self.provider_config['embedding_dimensions']}'") + return 0 async def terminate(self): if self.client: From 4c957ffe35cd8082bff59fa6188a0e197e5b7155 Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Tue, 17 Mar 2026 17:51:38 +0800 Subject: [PATCH 3/3] fix: improve logging for invalid embedding_dimensions configuration --- astrbot/core/provider/sources/openai_embedding_source.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/astrbot/core/provider/sources/openai_embedding_source.py b/astrbot/core/provider/sources/openai_embedding_source.py index 65bcdaa2e9..04397b1822 100644 --- a/astrbot/core/provider/sources/openai_embedding_source.py +++ b/astrbot/core/provider/sources/openai_embedding_source.py @@ -65,7 +65,9 @@ def _embedding_kwargs(self) -> dict: try: kwargs["dimensions"] = int(self.provider_config["embedding_dimensions"]) except (ValueError, TypeError): - logger.warning(f"配置中的 embedding_dimensions 值无效: '{self.provider_config['embedding_dimensions']}',已忽略。") + logger.warning( + f"embedding_dimensions in embedding configs is not a valid integer: '{self.provider_config['embedding_dimensions']}', ignored." + ) return kwargs def get_dim(self) -> int: @@ -74,7 +76,9 @@ def get_dim(self) -> int: try: return int(self.provider_config["embedding_dimensions"]) except (ValueError, TypeError): - logger.warning(f"配置中的 embedding_dimensions 值无效: '{self.provider_config['embedding_dimensions']}'") + logger.warning( + f"embedding_dimensions in embedding configs is not a valid integer: '{self.provider_config['embedding_dimensions']}', ignored." + ) return 0 async def terminate(self):