Skip to content

Commit 15b1c2a

Browse files
Merge #1075
1075: Sync embedder models with latest meili settings r=curquiza a=ellnix # Pull Request ## Related issue Fixes #1012 Co-authored-by: ellnix <[email protected]>
2 parents 32d63f0 + 78f541e commit 15b1c2a

File tree

2 files changed

+68
-3
lines changed

2 files changed

+68
-3
lines changed

meilisearch/index.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,11 @@
3030
HuggingFaceEmbedder,
3131
IndexStats,
3232
LocalizedAttributes,
33+
OllamaEmbedder,
3334
OpenAiEmbedder,
3435
Pagination,
3536
ProximityPrecision,
37+
RestEmbedder,
3638
TypoTolerance,
3739
UserProvidedEmbedder,
3840
)
@@ -953,12 +955,23 @@ def get_settings(self) -> Dict[str, Any]:
953955
)
954956

955957
if settings.get("embedders"):
956-
embedders: dict[str, OpenAiEmbedder | HuggingFaceEmbedder | UserProvidedEmbedder] = {}
958+
embedders: dict[
959+
str,
960+
OpenAiEmbedder
961+
| HuggingFaceEmbedder
962+
| OllamaEmbedder
963+
| RestEmbedder
964+
| UserProvidedEmbedder,
965+
] = {}
957966
for k, v in settings["embedders"].items():
958967
if v.get("source") == "openAi":
959968
embedders[k] = OpenAiEmbedder(**v)
969+
elif v.get("source") == "ollama":
970+
embedders[k] = OllamaEmbedder(**v)
960971
elif v.get("source") == "huggingFace":
961972
embedders[k] = HuggingFaceEmbedder(**v)
973+
elif v.get("source") == "rest":
974+
embedders[k] = RestEmbedder(**v)
962975
else:
963976
embedders[k] = UserProvidedEmbedder(**v)
964977

@@ -1881,12 +1894,23 @@ def get_embedders(self) -> Embedders | None:
18811894
if not response:
18821895
return None
18831896

1884-
embedders: dict[str, OpenAiEmbedder | HuggingFaceEmbedder | UserProvidedEmbedder] = {}
1897+
embedders: dict[
1898+
str,
1899+
OpenAiEmbedder
1900+
| HuggingFaceEmbedder
1901+
| OllamaEmbedder
1902+
| RestEmbedder
1903+
| UserProvidedEmbedder,
1904+
] = {}
18851905
for k, v in response.items():
18861906
if v.get("source") == "openAi":
18871907
embedders[k] = OpenAiEmbedder(**v)
1908+
elif v.get("source") == "ollama":
1909+
embedders[k] = OllamaEmbedder(**v)
18881910
elif v.get("source") == "huggingFace":
18891911
embedders[k] = HuggingFaceEmbedder(**v)
1912+
elif v.get("source") == "rest":
1913+
embedders[k] = RestEmbedder(**v)
18901914
else:
18911915
embedders[k] = UserProvidedEmbedder(**v)
18921916

meilisearch/models/index.py

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,18 +54,26 @@ class ProximityPrecision(str, Enum):
5454
BY_ATTRIBUTE = "byAttribute"
5555

5656

57+
class EmbedderDistribution(CamelBase):
58+
mean: float
59+
sigma: float
60+
61+
5762
class LocalizedAttributes(CamelBase):
5863
attribute_patterns: List[str]
5964
locales: List[str]
6065

6166

6267
class OpenAiEmbedder(CamelBase):
6368
source: str = "openAi"
69+
url: Optional[str] = None
6470
model: Optional[str] = None # Defaults to text-embedding-3-small
6571
dimensions: Optional[int] = None # Uses the model default
6672
api_key: Optional[str] = None # Can be provided through a CLI option or environment variable
6773
document_template: Optional[str] = None
6874
document_template_max_bytes: Optional[int] = None # Default to 400
75+
distribution: Optional[EmbedderDistribution] = None
76+
binary_quantized: Optional[bool] = None
6977

7078

7179
class HuggingFaceEmbedder(CamelBase):
@@ -74,12 +82,45 @@ class HuggingFaceEmbedder(CamelBase):
7482
revision: Optional[str] = None
7583
document_template: Optional[str] = None
7684
document_template_max_bytes: Optional[int] = None # Default to 400
85+
distribution: Optional[EmbedderDistribution] = None
86+
binary_quantized: Optional[bool] = None
87+
88+
89+
class OllamaEmbedder(CamelBase):
90+
source: str = "ollama"
91+
url: Optional[str] = None
92+
api_key: Optional[str] = None
93+
model: str
94+
document_template: Optional[str] = None
95+
document_template_max_bytes: Optional[int] = None # Default to 400
96+
distribution: Optional[EmbedderDistribution] = None
97+
binary_quantized: Optional[bool] = None
98+
99+
100+
class RestEmbedder(CamelBase):
101+
source: str = "rest"
102+
url: str
103+
api_key: Optional[str] # required for protected APIs
104+
document_template: Optional[str] = None
105+
document_template_max_bytes: Optional[int] = None # Default to 400
106+
request: Dict[str, Any]
107+
response: Dict[str, Any]
108+
distribution: Optional[EmbedderDistribution] = None
109+
headers: Optional[Dict[str, Any]] = None
110+
binary_quantized: Optional[bool] = None
77111

78112

79113
class UserProvidedEmbedder(CamelBase):
80114
source: str = "userProvided"
81115
dimensions: int
116+
distribution: Optional[EmbedderDistribution] = None
117+
binary_quantized: Optional[bool] = None
82118

83119

84120
class Embedders(CamelBase):
85-
embedders: Dict[str, Union[OpenAiEmbedder, HuggingFaceEmbedder, UserProvidedEmbedder]]
121+
embedders: Dict[
122+
str,
123+
Union[
124+
OpenAiEmbedder, HuggingFaceEmbedder, OllamaEmbedder, RestEmbedder, UserProvidedEmbedder
125+
],
126+
]

0 commit comments

Comments
 (0)