Skip to content

Commit 78f541e

Browse files
committed
Sync embedder models with latest meili settings
1 parent a43baec commit 78f541e

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
)
@@ -958,12 +960,23 @@ def get_settings(self) -> Dict[str, Any]:
958960
)
959961

960962
if settings.get("embedders"):
961-
embedders: dict[str, OpenAiEmbedder | HuggingFaceEmbedder | UserProvidedEmbedder] = {}
963+
embedders: dict[
964+
str,
965+
OpenAiEmbedder
966+
| HuggingFaceEmbedder
967+
| OllamaEmbedder
968+
| RestEmbedder
969+
| UserProvidedEmbedder,
970+
] = {}
962971
for k, v in settings["embedders"].items():
963972
if v.get("source") == "openAi":
964973
embedders[k] = OpenAiEmbedder(**v)
974+
elif v.get("source") == "ollama":
975+
embedders[k] = OllamaEmbedder(**v)
965976
elif v.get("source") == "huggingFace":
966977
embedders[k] = HuggingFaceEmbedder(**v)
978+
elif v.get("source") == "rest":
979+
embedders[k] = RestEmbedder(**v)
967980
else:
968981
embedders[k] = UserProvidedEmbedder(**v)
969982

@@ -1886,12 +1899,23 @@ def get_embedders(self) -> Embedders | None:
18861899
if not response:
18871900
return None
18881901

1889-
embedders: dict[str, OpenAiEmbedder | HuggingFaceEmbedder | UserProvidedEmbedder] = {}
1902+
embedders: dict[
1903+
str,
1904+
OpenAiEmbedder
1905+
| HuggingFaceEmbedder
1906+
| OllamaEmbedder
1907+
| RestEmbedder
1908+
| UserProvidedEmbedder,
1909+
] = {}
18901910
for k, v in response.items():
18911911
if v.get("source") == "openAi":
18921912
embedders[k] = OpenAiEmbedder(**v)
1913+
elif v.get("source") == "ollama":
1914+
embedders[k] = OllamaEmbedder(**v)
18931915
elif v.get("source") == "huggingFace":
18941916
embedders[k] = HuggingFaceEmbedder(**v)
1917+
elif v.get("source") == "rest":
1918+
embedders[k] = RestEmbedder(**v)
18951919
else:
18961920
embedders[k] = UserProvidedEmbedder(**v)
18971921

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)