langroid 0.37.7__py3-none-any.whl → 0.38.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- langroid/embedding_models/__init__.py +4 -0
- langroid/embedding_models/base.py +4 -0
- langroid/embedding_models/models.py +60 -0
- {langroid-0.37.7.dist-info → langroid-0.38.0.dist-info}/METADATA +3 -1
- {langroid-0.37.7.dist-info → langroid-0.38.0.dist-info}/RECORD +7 -7
- {langroid-0.37.7.dist-info → langroid-0.38.0.dist-info}/WHEEL +0 -0
- {langroid-0.37.7.dist-info → langroid-0.38.0.dist-info}/licenses/LICENSE +0 -0
@@ -13,6 +13,8 @@ from .models import (
|
|
13
13
|
SentenceTransformerEmbeddingsConfig,
|
14
14
|
LlamaCppServerEmbeddings,
|
15
15
|
LlamaCppServerEmbeddingsConfig,
|
16
|
+
GeminiEmbeddings,
|
17
|
+
GeminiEmbeddingsConfig,
|
16
18
|
embedding_model,
|
17
19
|
)
|
18
20
|
from .remote_embeds import (
|
@@ -33,6 +35,8 @@ __all__ = [
|
|
33
35
|
"SentenceTransformerEmbeddingsConfig",
|
34
36
|
"LlamaCppServerEmbeddings",
|
35
37
|
"LlamaCppServerEmbeddingsConfig",
|
38
|
+
"GeminiEmbeddings",
|
39
|
+
"GeminiEmbeddingsConfig",
|
36
40
|
"embedding_model",
|
37
41
|
"RemoteEmbeddingsConfig",
|
38
42
|
"RemoteEmbeddings",
|
@@ -28,6 +28,8 @@ class EmbeddingModel(ABC):
|
|
28
28
|
AzureOpenAIEmbeddingsConfig,
|
29
29
|
FastEmbedEmbeddings,
|
30
30
|
FastEmbedEmbeddingsConfig,
|
31
|
+
GeminiEmbeddings,
|
32
|
+
GeminiEmbeddingsConfig,
|
31
33
|
LlamaCppServerEmbeddings,
|
32
34
|
LlamaCppServerEmbeddingsConfig,
|
33
35
|
OpenAIEmbeddings,
|
@@ -52,6 +54,8 @@ class EmbeddingModel(ABC):
|
|
52
54
|
return FastEmbedEmbeddings(config)
|
53
55
|
elif isinstance(config, LlamaCppServerEmbeddingsConfig):
|
54
56
|
return LlamaCppServerEmbeddings(config)
|
57
|
+
elif isinstance(config, GeminiEmbeddingsConfig):
|
58
|
+
return GeminiEmbeddings(config)
|
55
59
|
else:
|
56
60
|
raise ValueError(f"Unknown embedding config: {config.__repr_name__}")
|
57
61
|
|
@@ -77,6 +77,14 @@ class LlamaCppServerEmbeddingsConfig(EmbeddingModelsConfig):
|
|
77
77
|
batch_size: int = 2048
|
78
78
|
|
79
79
|
|
80
|
+
class GeminiEmbeddingsConfig(EmbeddingModelsConfig):
|
81
|
+
model_type: str = "gemini"
|
82
|
+
model_name: str = "models/text-embedding-004"
|
83
|
+
api_key: str = ""
|
84
|
+
dims: int = 768
|
85
|
+
batch_size: int = 512
|
86
|
+
|
87
|
+
|
80
88
|
class EmbeddingFunctionCallable:
|
81
89
|
"""
|
82
90
|
A callable class designed to generate embeddings for a list of texts using
|
@@ -160,6 +168,8 @@ class EmbeddingFunctionCallable:
|
|
160
168
|
self.embed_model.detokenize_string(list(token_batch))
|
161
169
|
)
|
162
170
|
embeds.append(gen_embedding)
|
171
|
+
elif isinstance(self.embed_model, GeminiEmbeddings):
|
172
|
+
embeds = self.embed_model.generate_embeddings(input)
|
163
173
|
return embeds
|
164
174
|
|
165
175
|
|
@@ -437,6 +447,54 @@ class LlamaCppServerEmbeddings(EmbeddingModel):
|
|
437
447
|
return self.config.dims
|
438
448
|
|
439
449
|
|
450
|
+
class GeminiEmbeddings(EmbeddingModel):
|
451
|
+
def __init__(self, config: GeminiEmbeddingsConfig = GeminiEmbeddingsConfig()):
|
452
|
+
try:
|
453
|
+
import google.generativeai as genai
|
454
|
+
except ImportError as e:
|
455
|
+
raise LangroidImportError(extra="google-generativeai", error=str(e))
|
456
|
+
super().__init__()
|
457
|
+
self.config = config
|
458
|
+
load_dotenv()
|
459
|
+
self.config.api_key = os.getenv("GEMINI_API_KEY", "")
|
460
|
+
|
461
|
+
if self.config.api_key == "":
|
462
|
+
raise ValueError(
|
463
|
+
"""
|
464
|
+
GEMINI_API_KEY env variable must be set to use GeminiEmbeddings.
|
465
|
+
"""
|
466
|
+
)
|
467
|
+
genai.configure(api_key=self.config.api_key) # type: ignore[attr-defined]
|
468
|
+
self.client = genai
|
469
|
+
|
470
|
+
def embedding_fn(self) -> Callable[[List[str]], Embeddings]:
|
471
|
+
return EmbeddingFunctionCallable(self, self.config.batch_size)
|
472
|
+
|
473
|
+
def generate_embeddings(self, texts: List[str]) -> Embeddings:
|
474
|
+
all_embeddings = [] # More precise type hint
|
475
|
+
for batch in batched(texts, self.config.batch_size):
|
476
|
+
result = self.client.embed_content( # type: ignore[attr-defined]
|
477
|
+
model=self.config.model_name,
|
478
|
+
content=batch,
|
479
|
+
task_type="RETRIEVAL_DOCUMENT",
|
480
|
+
)
|
481
|
+
|
482
|
+
embeddings = result["embedding"]
|
483
|
+
if not isinstance(embeddings, list):
|
484
|
+
raise ValueError("Unexpected format for embeddings: not a list")
|
485
|
+
|
486
|
+
if embeddings and isinstance(embeddings[0], list):
|
487
|
+
all_embeddings.extend(embeddings)
|
488
|
+
else:
|
489
|
+
all_embeddings.append(embeddings)
|
490
|
+
|
491
|
+
return all_embeddings
|
492
|
+
|
493
|
+
@property
|
494
|
+
def embedding_dims(self) -> int:
|
495
|
+
return self.config.dims
|
496
|
+
|
497
|
+
|
440
498
|
def embedding_model(embedding_fn_type: str = "openai") -> EmbeddingModel:
|
441
499
|
"""
|
442
500
|
Args:
|
@@ -457,5 +515,7 @@ def embedding_model(embedding_fn_type: str = "openai") -> EmbeddingModel:
|
|
457
515
|
return FastEmbedEmbeddings # type: ignore
|
458
516
|
elif embedding_fn_type == "llamacppserver":
|
459
517
|
return LlamaCppServerEmbeddings # type: ignore
|
518
|
+
elif embedding_fn_type == "gemini":
|
519
|
+
return GeminiEmbeddings # type: ignore
|
460
520
|
else: # default sentence transformer
|
461
521
|
return SentenceTransformerEmbeddings # type: ignore
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: langroid
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.38.0
|
4
4
|
Summary: Harness LLMs with Multi-Agent Programming
|
5
5
|
Author-email: Prasad Chalasani <pchalasani@gmail.com>
|
6
6
|
License: MIT
|
@@ -106,6 +106,8 @@ Provides-Extra: docx
|
|
106
106
|
Requires-Dist: python-docx<2.0.0,>=1.1.0; extra == 'docx'
|
107
107
|
Provides-Extra: fastembed
|
108
108
|
Requires-Dist: fastembed<0.4.0,>=0.3.1; extra == 'fastembed'
|
109
|
+
Provides-Extra: google-generativeai
|
110
|
+
Requires-Dist: google-generativeai>=0.8.4; extra == 'google-generativeai'
|
109
111
|
Provides-Extra: hf-embeddings
|
110
112
|
Requires-Dist: sentence-transformers<3.0.0,>=2.2.2; extra == 'hf-embeddings'
|
111
113
|
Requires-Dist: torch<3.0.0,>=2.0.0; extra == 'hf-embeddings'
|
@@ -55,9 +55,9 @@ langroid/cachedb/__init__.py,sha256=icAT2s7Vhf-ZGUeqpDQGNU6ob6o0aFEyjwcxxUGRFjg,
|
|
55
55
|
langroid/cachedb/base.py,sha256=ztVjB1DtN6pLCujCWnR6xruHxwVj3XkYniRTYAKKqk0,1354
|
56
56
|
langroid/cachedb/momento_cachedb.py,sha256=YEOJ62hEcV6iIeMr5aGgRYgWQqFYaej9gEDEcY0sm7M,3172
|
57
57
|
langroid/cachedb/redis_cachedb.py,sha256=7kgnbf4b5CKsCrlL97mHWKvdvlLt8zgn7lc528jEpiE,5141
|
58
|
-
langroid/embedding_models/__init__.py,sha256=
|
59
|
-
langroid/embedding_models/base.py,sha256=
|
60
|
-
langroid/embedding_models/models.py,sha256=
|
58
|
+
langroid/embedding_models/__init__.py,sha256=KyYxR3jDFUCfYjSuCL86qjAmrq6mXXjOT4lFNOKVj6Y,955
|
59
|
+
langroid/embedding_models/base.py,sha256=Ml7oA6PzQm0wZmIYn3fhF7dvZCi-amviWUwOeBegH3A,2562
|
60
|
+
langroid/embedding_models/models.py,sha256=fKQBiaaG7uYoeELDbAiNxwLdn-CWN8dyiVEZcdk_bjI,18959
|
61
61
|
langroid/embedding_models/remote_embeds.py,sha256=6_kjXByVbqhY9cGwl9R83ZcYC2km-nGieNNAo1McHaY,5151
|
62
62
|
langroid/embedding_models/protoc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
63
63
|
langroid/embedding_models/protoc/embeddings.proto,sha256=_O-SgFpTaylQeOTgSpxhEJ7CUw7PeCQQJLaPqpPYKJg,321
|
@@ -123,7 +123,7 @@ langroid/vector_store/meilisearch.py,sha256=6frB7GFWeWmeKzRfLZIvzRjllniZ1cYj3Hmh
|
|
123
123
|
langroid/vector_store/momento.py,sha256=xOaU7Hlyyn_5ihb0ARS5JHtmrKrTCt2IdRA-ioMM5ek,10307
|
124
124
|
langroid/vector_store/qdrantdb.py,sha256=v7TAsIoj_vxeKDYS9tpwJLBZA8fuTweTYxHo0X_uawM,17949
|
125
125
|
langroid/vector_store/weaviatedb.py,sha256=FOzgvqLqvdN5jJebVtJ-8tu2CeBzBfSP3ih4_ODEOOw,10605
|
126
|
-
langroid-0.
|
127
|
-
langroid-0.
|
128
|
-
langroid-0.
|
129
|
-
langroid-0.
|
126
|
+
langroid-0.38.0.dist-info/METADATA,sha256=PMVjo4UfoNgUyP9RWp2AAEIWA9amAnTHUvzrPPjt_ms,60634
|
127
|
+
langroid-0.38.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
128
|
+
langroid-0.38.0.dist-info/licenses/LICENSE,sha256=EgVbvA6VSYgUlvC3RvPKehSg7MFaxWDsFuzLOsPPfJg,1065
|
129
|
+
langroid-0.38.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|