langroid 0.37.7__tar.gz → 0.38.0__tar.gz

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.
Files changed (130) hide show
  1. {langroid-0.37.7 → langroid-0.38.0}/PKG-INFO +3 -1
  2. {langroid-0.37.7 → langroid-0.38.0}/langroid/embedding_models/__init__.py +4 -0
  3. {langroid-0.37.7 → langroid-0.38.0}/langroid/embedding_models/base.py +4 -0
  4. {langroid-0.37.7 → langroid-0.38.0}/langroid/embedding_models/models.py +60 -0
  5. {langroid-0.37.7 → langroid-0.38.0}/pyproject.toml +4 -1
  6. {langroid-0.37.7 → langroid-0.38.0}/.gitignore +0 -0
  7. {langroid-0.37.7 → langroid-0.38.0}/LICENSE +0 -0
  8. {langroid-0.37.7 → langroid-0.38.0}/README.md +0 -0
  9. {langroid-0.37.7 → langroid-0.38.0}/langroid/__init__.py +0 -0
  10. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/__init__.py +0 -0
  11. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/base.py +0 -0
  12. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/batch.py +0 -0
  13. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/callbacks/__init__.py +0 -0
  14. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/callbacks/chainlit.py +0 -0
  15. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/chat_agent.py +0 -0
  16. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/chat_document.py +0 -0
  17. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/openai_assistant.py +0 -0
  18. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/__init__.py +0 -0
  19. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/arangodb/__init__.py +0 -0
  20. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/arangodb/arangodb_agent.py +0 -0
  21. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/arangodb/system_messages.py +0 -0
  22. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/arangodb/tools.py +0 -0
  23. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/arangodb/utils.py +0 -0
  24. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/doc_chat_agent.py +0 -0
  25. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/lance_doc_chat_agent.py +0 -0
  26. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/lance_rag/__init__.py +0 -0
  27. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/lance_rag/critic_agent.py +0 -0
  28. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/lance_rag/lance_rag_task.py +0 -0
  29. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/lance_rag/query_planner_agent.py +0 -0
  30. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/lance_tools.py +0 -0
  31. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/neo4j/__init__.py +0 -0
  32. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/neo4j/csv_kg_chat.py +0 -0
  33. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/neo4j/neo4j_chat_agent.py +0 -0
  34. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/neo4j/system_messages.py +0 -0
  35. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/neo4j/tools.py +0 -0
  36. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/relevance_extractor_agent.py +0 -0
  37. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/retriever_agent.py +0 -0
  38. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/sql/__init__.py +0 -0
  39. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/sql/sql_chat_agent.py +0 -0
  40. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/sql/utils/__init__.py +0 -0
  41. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/sql/utils/description_extractors.py +0 -0
  42. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/sql/utils/populate_metadata.py +0 -0
  43. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/sql/utils/system_message.py +0 -0
  44. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/sql/utils/tools.py +0 -0
  45. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/special/table_chat_agent.py +0 -0
  46. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/task.py +0 -0
  47. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/tool_message.py +0 -0
  48. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/tools/__init__.py +0 -0
  49. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/tools/duckduckgo_search_tool.py +0 -0
  50. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/tools/file_tools.py +0 -0
  51. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/tools/google_search_tool.py +0 -0
  52. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/tools/metaphor_search_tool.py +0 -0
  53. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/tools/orchestration.py +0 -0
  54. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/tools/recipient_tool.py +0 -0
  55. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/tools/retrieval_tool.py +0 -0
  56. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/tools/rewind_tool.py +0 -0
  57. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/tools/segment_extract_tool.py +0 -0
  58. {langroid-0.37.7 → langroid-0.38.0}/langroid/agent/xml_tool_message.py +0 -0
  59. {langroid-0.37.7 → langroid-0.38.0}/langroid/cachedb/__init__.py +0 -0
  60. {langroid-0.37.7 → langroid-0.38.0}/langroid/cachedb/base.py +0 -0
  61. {langroid-0.37.7 → langroid-0.38.0}/langroid/cachedb/momento_cachedb.py +0 -0
  62. {langroid-0.37.7 → langroid-0.38.0}/langroid/cachedb/redis_cachedb.py +0 -0
  63. {langroid-0.37.7 → langroid-0.38.0}/langroid/embedding_models/protoc/__init__.py +0 -0
  64. {langroid-0.37.7 → langroid-0.38.0}/langroid/embedding_models/protoc/embeddings.proto +0 -0
  65. {langroid-0.37.7 → langroid-0.38.0}/langroid/embedding_models/protoc/embeddings_pb2.py +0 -0
  66. {langroid-0.37.7 → langroid-0.38.0}/langroid/embedding_models/protoc/embeddings_pb2.pyi +0 -0
  67. {langroid-0.37.7 → langroid-0.38.0}/langroid/embedding_models/protoc/embeddings_pb2_grpc.py +0 -0
  68. {langroid-0.37.7 → langroid-0.38.0}/langroid/embedding_models/remote_embeds.py +0 -0
  69. {langroid-0.37.7 → langroid-0.38.0}/langroid/exceptions.py +0 -0
  70. {langroid-0.37.7 → langroid-0.38.0}/langroid/language_models/__init__.py +0 -0
  71. {langroid-0.37.7 → langroid-0.38.0}/langroid/language_models/azure_openai.py +0 -0
  72. {langroid-0.37.7 → langroid-0.38.0}/langroid/language_models/base.py +0 -0
  73. {langroid-0.37.7 → langroid-0.38.0}/langroid/language_models/config.py +0 -0
  74. {langroid-0.37.7 → langroid-0.38.0}/langroid/language_models/mock_lm.py +0 -0
  75. {langroid-0.37.7 → langroid-0.38.0}/langroid/language_models/openai_gpt.py +0 -0
  76. {langroid-0.37.7 → langroid-0.38.0}/langroid/language_models/prompt_formatter/__init__.py +0 -0
  77. {langroid-0.37.7 → langroid-0.38.0}/langroid/language_models/prompt_formatter/base.py +0 -0
  78. {langroid-0.37.7 → langroid-0.38.0}/langroid/language_models/prompt_formatter/hf_formatter.py +0 -0
  79. {langroid-0.37.7 → langroid-0.38.0}/langroid/language_models/prompt_formatter/llama2_formatter.py +0 -0
  80. {langroid-0.37.7 → langroid-0.38.0}/langroid/language_models/utils.py +0 -0
  81. {langroid-0.37.7 → langroid-0.38.0}/langroid/mytypes.py +0 -0
  82. {langroid-0.37.7 → langroid-0.38.0}/langroid/parsing/__init__.py +0 -0
  83. {langroid-0.37.7 → langroid-0.38.0}/langroid/parsing/agent_chats.py +0 -0
  84. {langroid-0.37.7 → langroid-0.38.0}/langroid/parsing/code_parser.py +0 -0
  85. {langroid-0.37.7 → langroid-0.38.0}/langroid/parsing/document_parser.py +0 -0
  86. {langroid-0.37.7 → langroid-0.38.0}/langroid/parsing/para_sentence_split.py +0 -0
  87. {langroid-0.37.7 → langroid-0.38.0}/langroid/parsing/parse_json.py +0 -0
  88. {langroid-0.37.7 → langroid-0.38.0}/langroid/parsing/parser.py +0 -0
  89. {langroid-0.37.7 → langroid-0.38.0}/langroid/parsing/pdf_utils.py +0 -0
  90. {langroid-0.37.7 → langroid-0.38.0}/langroid/parsing/repo_loader.py +0 -0
  91. {langroid-0.37.7 → langroid-0.38.0}/langroid/parsing/routing.py +0 -0
  92. {langroid-0.37.7 → langroid-0.38.0}/langroid/parsing/search.py +0 -0
  93. {langroid-0.37.7 → langroid-0.38.0}/langroid/parsing/spider.py +0 -0
  94. {langroid-0.37.7 → langroid-0.38.0}/langroid/parsing/table_loader.py +0 -0
  95. {langroid-0.37.7 → langroid-0.38.0}/langroid/parsing/url_loader.py +0 -0
  96. {langroid-0.37.7 → langroid-0.38.0}/langroid/parsing/urls.py +0 -0
  97. {langroid-0.37.7 → langroid-0.38.0}/langroid/parsing/utils.py +0 -0
  98. {langroid-0.37.7 → langroid-0.38.0}/langroid/parsing/web_search.py +0 -0
  99. {langroid-0.37.7 → langroid-0.38.0}/langroid/prompts/__init__.py +0 -0
  100. {langroid-0.37.7 → langroid-0.38.0}/langroid/prompts/dialog.py +0 -0
  101. {langroid-0.37.7 → langroid-0.38.0}/langroid/prompts/prompts_config.py +0 -0
  102. {langroid-0.37.7 → langroid-0.38.0}/langroid/prompts/templates.py +0 -0
  103. {langroid-0.37.7 → langroid-0.38.0}/langroid/py.typed +0 -0
  104. {langroid-0.37.7 → langroid-0.38.0}/langroid/pydantic_v1/__init__.py +0 -0
  105. {langroid-0.37.7 → langroid-0.38.0}/langroid/pydantic_v1/main.py +0 -0
  106. {langroid-0.37.7 → langroid-0.38.0}/langroid/utils/__init__.py +0 -0
  107. {langroid-0.37.7 → langroid-0.38.0}/langroid/utils/algorithms/__init__.py +0 -0
  108. {langroid-0.37.7 → langroid-0.38.0}/langroid/utils/algorithms/graph.py +0 -0
  109. {langroid-0.37.7 → langroid-0.38.0}/langroid/utils/configuration.py +0 -0
  110. {langroid-0.37.7 → langroid-0.38.0}/langroid/utils/constants.py +0 -0
  111. {langroid-0.37.7 → langroid-0.38.0}/langroid/utils/git_utils.py +0 -0
  112. {langroid-0.37.7 → langroid-0.38.0}/langroid/utils/globals.py +0 -0
  113. {langroid-0.37.7 → langroid-0.38.0}/langroid/utils/logging.py +0 -0
  114. {langroid-0.37.7 → langroid-0.38.0}/langroid/utils/object_registry.py +0 -0
  115. {langroid-0.37.7 → langroid-0.38.0}/langroid/utils/output/__init__.py +0 -0
  116. {langroid-0.37.7 → langroid-0.38.0}/langroid/utils/output/citations.py +0 -0
  117. {langroid-0.37.7 → langroid-0.38.0}/langroid/utils/output/printing.py +0 -0
  118. {langroid-0.37.7 → langroid-0.38.0}/langroid/utils/output/status.py +0 -0
  119. {langroid-0.37.7 → langroid-0.38.0}/langroid/utils/pandas_utils.py +0 -0
  120. {langroid-0.37.7 → langroid-0.38.0}/langroid/utils/pydantic_utils.py +0 -0
  121. {langroid-0.37.7 → langroid-0.38.0}/langroid/utils/system.py +0 -0
  122. {langroid-0.37.7 → langroid-0.38.0}/langroid/utils/types.py +0 -0
  123. {langroid-0.37.7 → langroid-0.38.0}/langroid/vector_store/__init__.py +0 -0
  124. {langroid-0.37.7 → langroid-0.38.0}/langroid/vector_store/base.py +0 -0
  125. {langroid-0.37.7 → langroid-0.38.0}/langroid/vector_store/chromadb.py +0 -0
  126. {langroid-0.37.7 → langroid-0.38.0}/langroid/vector_store/lancedb.py +0 -0
  127. {langroid-0.37.7 → langroid-0.38.0}/langroid/vector_store/meilisearch.py +0 -0
  128. {langroid-0.37.7 → langroid-0.38.0}/langroid/vector_store/momento.py +0 -0
  129. {langroid-0.37.7 → langroid-0.38.0}/langroid/vector_store/qdrantdb.py +0 -0
  130. {langroid-0.37.7 → langroid-0.38.0}/langroid/vector_store/weaviatedb.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langroid
3
- Version: 0.37.7
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'
@@ -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
  [project]
2
2
  name = "langroid"
3
- version = "0.37.7"
3
+ version = "0.38.0"
4
4
  authors = [
5
5
  {name = "Prasad Chalasani", email = "pchalasani@gmail.com"},
6
6
  ]
@@ -220,6 +220,9 @@ momento = [
220
220
  fastembed = [
221
221
  "fastembed<0.4.0,>=0.3.1",
222
222
  ]
223
+ google-generativeai = [
224
+ "google-generativeai>=0.8.4",
225
+ ]
223
226
 
224
227
 
225
228
  [dependency-groups]
File without changes
File without changes
File without changes
File without changes
File without changes