langroid 0.20.1__tar.gz → 0.21.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 (148) hide show
  1. {langroid-0.20.1 → langroid-0.21.0}/PKG-INFO +4 -1
  2. {langroid-0.20.1 → langroid-0.21.0}/README.md +3 -0
  3. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/arangodb/arangodb_agent.py +33 -1
  4. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/arangodb/system_messages.py +6 -3
  5. {langroid-0.20.1 → langroid-0.21.0}/langroid/language_models/__init__.py +2 -0
  6. {langroid-0.20.1 → langroid-0.21.0}/langroid/language_models/openai_gpt.py +24 -6
  7. {langroid-0.20.1 → langroid-0.21.0}/pyproject.toml +1 -1
  8. {langroid-0.20.1 → langroid-0.21.0}/LICENSE +0 -0
  9. {langroid-0.20.1 → langroid-0.21.0}/langroid/__init__.py +0 -0
  10. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/__init__.py +0 -0
  11. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/base.py +0 -0
  12. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/batch.py +0 -0
  13. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/callbacks/__init__.py +0 -0
  14. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/callbacks/chainlit.py +0 -0
  15. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/chat_agent.py +0 -0
  16. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/chat_document.py +0 -0
  17. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/helpers.py +0 -0
  18. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/junk +0 -0
  19. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/openai_assistant.py +0 -0
  20. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/__init__.py +0 -0
  21. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/arangodb/__init__.py +0 -0
  22. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/arangodb/tools.py +0 -0
  23. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/arangodb/utils.py +0 -0
  24. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/doc_chat_agent.py +0 -0
  25. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/lance_doc_chat_agent.py +0 -0
  26. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/lance_rag/__init__.py +0 -0
  27. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/lance_rag/critic_agent.py +0 -0
  28. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/lance_rag/lance_rag_task.py +0 -0
  29. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/lance_rag/query_planner_agent.py +0 -0
  30. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/lance_tools.py +0 -0
  31. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/neo4j/__init__.py +0 -0
  32. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/neo4j/csv_kg_chat.py +0 -0
  33. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/neo4j/neo4j_chat_agent.py +0 -0
  34. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/neo4j/system_messages.py +0 -0
  35. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/neo4j/tools.py +0 -0
  36. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/relevance_extractor_agent.py +0 -0
  37. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/retriever_agent.py +0 -0
  38. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/sql/__init__.py +0 -0
  39. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/sql/sql_chat_agent.py +0 -0
  40. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/sql/utils/__init__.py +0 -0
  41. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/sql/utils/description_extractors.py +0 -0
  42. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/sql/utils/populate_metadata.py +0 -0
  43. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/sql/utils/system_message.py +0 -0
  44. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/sql/utils/tools.py +0 -0
  45. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/special/table_chat_agent.py +0 -0
  46. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/structured_message.py +0 -0
  47. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/task.py +0 -0
  48. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/tool_message.py +0 -0
  49. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/tools/__init__.py +0 -0
  50. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/tools/duckduckgo_search_tool.py +0 -0
  51. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/tools/file_tools.py +0 -0
  52. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/tools/google_search_tool.py +0 -0
  53. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/tools/metaphor_search_tool.py +0 -0
  54. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/tools/orchestration.py +0 -0
  55. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/tools/recipient_tool.py +0 -0
  56. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/tools/retrieval_tool.py +0 -0
  57. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/tools/rewind_tool.py +0 -0
  58. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/tools/segment_extract_tool.py +0 -0
  59. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/typed_task.py +0 -0
  60. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent/xml_tool_message.py +0 -0
  61. {langroid-0.20.1 → langroid-0.21.0}/langroid/agent_config.py +0 -0
  62. {langroid-0.20.1 → langroid-0.21.0}/langroid/cachedb/__init__.py +0 -0
  63. {langroid-0.20.1 → langroid-0.21.0}/langroid/cachedb/base.py +0 -0
  64. {langroid-0.20.1 → langroid-0.21.0}/langroid/cachedb/momento_cachedb.py +0 -0
  65. {langroid-0.20.1 → langroid-0.21.0}/langroid/cachedb/redis_cachedb.py +0 -0
  66. {langroid-0.20.1 → langroid-0.21.0}/langroid/embedding_models/__init__.py +0 -0
  67. {langroid-0.20.1 → langroid-0.21.0}/langroid/embedding_models/base.py +0 -0
  68. {langroid-0.20.1 → langroid-0.21.0}/langroid/embedding_models/clustering.py +0 -0
  69. {langroid-0.20.1 → langroid-0.21.0}/langroid/embedding_models/models.py +0 -0
  70. {langroid-0.20.1 → langroid-0.21.0}/langroid/embedding_models/protoc/__init__.py +0 -0
  71. {langroid-0.20.1 → langroid-0.21.0}/langroid/embedding_models/protoc/embeddings.proto +0 -0
  72. {langroid-0.20.1 → langroid-0.21.0}/langroid/embedding_models/protoc/embeddings_pb2.py +0 -0
  73. {langroid-0.20.1 → langroid-0.21.0}/langroid/embedding_models/protoc/embeddings_pb2.pyi +0 -0
  74. {langroid-0.20.1 → langroid-0.21.0}/langroid/embedding_models/protoc/embeddings_pb2_grpc.py +0 -0
  75. {langroid-0.20.1 → langroid-0.21.0}/langroid/embedding_models/remote_embeds.py +0 -0
  76. {langroid-0.20.1 → langroid-0.21.0}/langroid/exceptions.py +0 -0
  77. {langroid-0.20.1 → langroid-0.21.0}/langroid/language_models/.chainlit/config.toml +0 -0
  78. {langroid-0.20.1 → langroid-0.21.0}/langroid/language_models/.chainlit/translations/en-US.json +0 -0
  79. {langroid-0.20.1 → langroid-0.21.0}/langroid/language_models/azure_openai.py +0 -0
  80. {langroid-0.20.1 → langroid-0.21.0}/langroid/language_models/base.py +0 -0
  81. {langroid-0.20.1 → langroid-0.21.0}/langroid/language_models/config.py +0 -0
  82. {langroid-0.20.1 → langroid-0.21.0}/langroid/language_models/mock_lm.py +0 -0
  83. {langroid-0.20.1 → langroid-0.21.0}/langroid/language_models/prompt_formatter/__init__.py +0 -0
  84. {langroid-0.20.1 → langroid-0.21.0}/langroid/language_models/prompt_formatter/base.py +0 -0
  85. {langroid-0.20.1 → langroid-0.21.0}/langroid/language_models/prompt_formatter/hf_formatter.py +0 -0
  86. {langroid-0.20.1 → langroid-0.21.0}/langroid/language_models/prompt_formatter/llama2_formatter.py +0 -0
  87. {langroid-0.20.1 → langroid-0.21.0}/langroid/language_models/utils.py +0 -0
  88. {langroid-0.20.1 → langroid-0.21.0}/langroid/mytypes.py +0 -0
  89. {langroid-0.20.1 → langroid-0.21.0}/langroid/parsing/__init__.py +0 -0
  90. {langroid-0.20.1 → langroid-0.21.0}/langroid/parsing/agent_chats.py +0 -0
  91. {langroid-0.20.1 → langroid-0.21.0}/langroid/parsing/code-parsing.md +0 -0
  92. {langroid-0.20.1 → langroid-0.21.0}/langroid/parsing/code_parser.py +0 -0
  93. {langroid-0.20.1 → langroid-0.21.0}/langroid/parsing/config.py +0 -0
  94. {langroid-0.20.1 → langroid-0.21.0}/langroid/parsing/document_parser.py +0 -0
  95. {langroid-0.20.1 → langroid-0.21.0}/langroid/parsing/image_text.py +0 -0
  96. {langroid-0.20.1 → langroid-0.21.0}/langroid/parsing/para_sentence_split.py +0 -0
  97. {langroid-0.20.1 → langroid-0.21.0}/langroid/parsing/parse_json.py +0 -0
  98. {langroid-0.20.1 → langroid-0.21.0}/langroid/parsing/parser.py +0 -0
  99. {langroid-0.20.1 → langroid-0.21.0}/langroid/parsing/repo_loader.py +0 -0
  100. {langroid-0.20.1 → langroid-0.21.0}/langroid/parsing/routing.py +0 -0
  101. {langroid-0.20.1 → langroid-0.21.0}/langroid/parsing/search.py +0 -0
  102. {langroid-0.20.1 → langroid-0.21.0}/langroid/parsing/spider.py +0 -0
  103. {langroid-0.20.1 → langroid-0.21.0}/langroid/parsing/table_loader.py +0 -0
  104. {langroid-0.20.1 → langroid-0.21.0}/langroid/parsing/url_loader.py +0 -0
  105. {langroid-0.20.1 → langroid-0.21.0}/langroid/parsing/url_loader_cookies.py +0 -0
  106. {langroid-0.20.1 → langroid-0.21.0}/langroid/parsing/urls.py +0 -0
  107. {langroid-0.20.1 → langroid-0.21.0}/langroid/parsing/utils.py +0 -0
  108. {langroid-0.20.1 → langroid-0.21.0}/langroid/parsing/web_search.py +0 -0
  109. {langroid-0.20.1 → langroid-0.21.0}/langroid/prompts/__init__.py +0 -0
  110. {langroid-0.20.1 → langroid-0.21.0}/langroid/prompts/chat-gpt4-system-prompt.md +0 -0
  111. {langroid-0.20.1 → langroid-0.21.0}/langroid/prompts/dialog.py +0 -0
  112. {langroid-0.20.1 → langroid-0.21.0}/langroid/prompts/prompts_config.py +0 -0
  113. {langroid-0.20.1 → langroid-0.21.0}/langroid/prompts/templates.py +0 -0
  114. {langroid-0.20.1 → langroid-0.21.0}/langroid/py.typed +0 -0
  115. {langroid-0.20.1 → langroid-0.21.0}/langroid/pydantic_v1/__init__.py +0 -0
  116. {langroid-0.20.1 → langroid-0.21.0}/langroid/pydantic_v1/main.py +0 -0
  117. {langroid-0.20.1 → langroid-0.21.0}/langroid/utils/.chainlit/config.toml +0 -0
  118. {langroid-0.20.1 → langroid-0.21.0}/langroid/utils/.chainlit/translations/en-US.json +0 -0
  119. {langroid-0.20.1 → langroid-0.21.0}/langroid/utils/__init__.py +0 -0
  120. {langroid-0.20.1 → langroid-0.21.0}/langroid/utils/algorithms/__init__.py +0 -0
  121. {langroid-0.20.1 → langroid-0.21.0}/langroid/utils/algorithms/graph.py +0 -0
  122. {langroid-0.20.1 → langroid-0.21.0}/langroid/utils/configuration.py +0 -0
  123. {langroid-0.20.1 → langroid-0.21.0}/langroid/utils/constants.py +0 -0
  124. {langroid-0.20.1 → langroid-0.21.0}/langroid/utils/docker.py +0 -0
  125. {langroid-0.20.1 → langroid-0.21.0}/langroid/utils/git_utils.py +0 -0
  126. {langroid-0.20.1 → langroid-0.21.0}/langroid/utils/globals.py +0 -0
  127. {langroid-0.20.1 → langroid-0.21.0}/langroid/utils/llms/__init__.py +0 -0
  128. {langroid-0.20.1 → langroid-0.21.0}/langroid/utils/llms/strings.py +0 -0
  129. {langroid-0.20.1 → langroid-0.21.0}/langroid/utils/logging.py +0 -0
  130. {langroid-0.20.1 → langroid-0.21.0}/langroid/utils/object_registry.py +0 -0
  131. {langroid-0.20.1 → langroid-0.21.0}/langroid/utils/output/__init__.py +0 -0
  132. {langroid-0.20.1 → langroid-0.21.0}/langroid/utils/output/citations.py +0 -0
  133. {langroid-0.20.1 → langroid-0.21.0}/langroid/utils/output/printing.py +0 -0
  134. {langroid-0.20.1 → langroid-0.21.0}/langroid/utils/output/status.py +0 -0
  135. {langroid-0.20.1 → langroid-0.21.0}/langroid/utils/pandas_utils.py +0 -0
  136. {langroid-0.20.1 → langroid-0.21.0}/langroid/utils/pydantic_utils.py +0 -0
  137. {langroid-0.20.1 → langroid-0.21.0}/langroid/utils/system.py +0 -0
  138. {langroid-0.20.1 → langroid-0.21.0}/langroid/utils/types.py +0 -0
  139. {langroid-0.20.1 → langroid-0.21.0}/langroid/utils/web/__init__.py +0 -0
  140. {langroid-0.20.1 → langroid-0.21.0}/langroid/utils/web/login.py +0 -0
  141. {langroid-0.20.1 → langroid-0.21.0}/langroid/vector_store/__init__.py +0 -0
  142. {langroid-0.20.1 → langroid-0.21.0}/langroid/vector_store/base.py +0 -0
  143. {langroid-0.20.1 → langroid-0.21.0}/langroid/vector_store/chromadb.py +0 -0
  144. {langroid-0.20.1 → langroid-0.21.0}/langroid/vector_store/lancedb.py +0 -0
  145. {langroid-0.20.1 → langroid-0.21.0}/langroid/vector_store/meilisearch.py +0 -0
  146. {langroid-0.20.1 → langroid-0.21.0}/langroid/vector_store/momento.py +0 -0
  147. {langroid-0.20.1 → langroid-0.21.0}/langroid/vector_store/qdrant_cloud.py +0 -0
  148. {langroid-0.20.1 → langroid-0.21.0}/langroid/vector_store/qdrantdb.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langroid
3
- Version: 0.20.1
3
+ Version: 0.21.0
4
4
  Summary: Harness LLMs with Multi-Agent Programming
5
5
  License: MIT
6
6
  Author: Prasad Chalasani
@@ -248,6 +248,9 @@ teacher_task.run()
248
248
  <details>
249
249
  <summary> <b>Click to expand</b></summary>
250
250
 
251
+ - **Nov 2024:**
252
+ - **[0.20.0](https://github.com/langroid/langroid/releases/tag/0.20.0)** Support for
253
+ ArangoDB Knowledge Graphs.
251
254
  - **Oct 2024:**
252
255
  - **[0.18.0]** [LLMConfig.async_stream_quiet](https://langroid.github.io/langroid/notes/async-streaming/) flag to
253
256
  turn off LLM output in async + stream mode.
@@ -135,6 +135,9 @@ teacher_task.run()
135
135
  <details>
136
136
  <summary> <b>Click to expand</b></summary>
137
137
 
138
+ - **Nov 2024:**
139
+ - **[0.20.0](https://github.com/langroid/langroid/releases/tag/0.20.0)** Support for
140
+ ArangoDB Knowledge Graphs.
138
141
  - **Oct 2024:**
139
142
  - **[0.18.0]** [LLMConfig.async_stream_quiet](https://langroid.github.io/langroid/notes/async-streaming/) flag to
140
143
  turn off LLM output in async + stream mode.
@@ -118,6 +118,7 @@ class ArangoChatAgent(ChatAgent):
118
118
  def init_state(self) -> None:
119
119
  super().init_state()
120
120
  self.current_retrieval_aql_query: str = ""
121
+ self.current_schema_params: ArangoSchemaTool = ArangoSchemaTool()
121
122
  self.num_tries = 0 # how many attempts to answer user question
122
123
 
123
124
  def user_response(
@@ -125,6 +126,8 @@ class ArangoChatAgent(ChatAgent):
125
126
  msg: Optional[str | ChatDocument] = None,
126
127
  ) -> Optional[ChatDocument]:
127
128
  response = super().user_response(msg)
129
+ if response is None:
130
+ return None
128
131
  response_str = response.content if response is not None else ""
129
132
  if response_str != "":
130
133
  self.num_tries = 0 # reset number of tries if user responds
@@ -165,7 +168,20 @@ class ArangoChatAgent(ChatAgent):
165
168
  """
166
169
  )
167
170
 
168
- return super().llm_response(message)
171
+ response = super().llm_response(message)
172
+ if (
173
+ response is not None
174
+ and self.config.chat_mode
175
+ and self.config.addressing_prefix in response.content
176
+ and self.has_tool_message_attempt(response)
177
+ ):
178
+ # response contains both a user-addressing and a tool, which
179
+ # is not allowed, so remove the user-addressing prefix
180
+ response.content = response.content.replace(
181
+ self.config.addressing_prefix, ""
182
+ )
183
+
184
+ return response
169
185
 
170
186
  def _validate_config(self) -> None:
171
187
  assert isinstance(self.config, ArangoChatAgentConfig)
@@ -363,6 +379,11 @@ class ArangoChatAgent(ChatAgent):
363
379
  """
364
380
  self.num_tries += 1
365
381
  query = msg.aql_query
382
+ if query == self.current_retrieval_aql_query:
383
+ return """
384
+ You have already tried this query, so you will get the same results again!
385
+ If you need to retry, please MODIFY the query to get different results.
386
+ """
366
387
  self.current_retrieval_aql_query = query
367
388
  logger.info(f"Executing AQL query: {query}")
368
389
  response = self.read_query(query)
@@ -399,6 +420,17 @@ class ArangoChatAgent(ChatAgent):
399
420
  else show all properties and example-docs.
400
421
  """
401
422
 
423
+ if (
424
+ msg is not None
425
+ and msg.collections == self.current_schema_params.collections
426
+ and msg.properties == self.current_schema_params.properties
427
+ ):
428
+ return """
429
+ You have already tried this schema TOOL, so you will get the same results
430
+ again! Please MODIFY the tool params `collections` or `properties` to get
431
+ different results.
432
+ """
433
+
402
434
  if msg is not None:
403
435
  collections = msg.collections
404
436
  properties = msg.properties
@@ -144,14 +144,17 @@ THEN make ANOTHER query, and so on, until you have the answer.
144
144
  RETRY-SUGGESTIONS:
145
145
  If you receive a null or other unexpected result,
146
146
  (a) make sure you use the available TOOLs correctly,
147
- (b) USE `{arango_schema_tool_name}` tool/function-call to get all collections,
148
- their attributes and graph definitions available in your ArangoDB database.
147
+ (b) learn more about the schema using EITHER:
148
+ - `{arango_schema_tool_name}` tool/function-call to find properties of specific
149
+ collections or other parts of the schema, OR
150
+ - `{aql_retrieval_tool_name}` tool/function-call to use AQL queries to
151
+ find specific parts of the schema.
149
152
  (c) Collection names are CASE-SENSITIVE -- make sure you adhere to the exact
150
153
  collection name you found in the schema.
151
154
  (d) see if you have made an assumption in your AQL query, and try another way,
152
155
  or use `{aql_retrieval_tool_name}` to explore the database contents before
153
156
  submitting your final query.
154
- (f) Try APPROXIMATE or PARTIAL MATCHES to strings in the user's query,
157
+ (e) Try APPROXIMATE or PARTIAL MATCHES to strings in the user's query,
155
158
  e.g. user may ask about "Godfather" instead of "The Godfather",
156
159
  or try using CASE-INSENSITIVE MATCHES.
157
160
 
@@ -17,6 +17,7 @@ from .base import (
17
17
  from .openai_gpt import (
18
18
  OpenAIChatModel,
19
19
  AnthropicModel,
20
+ GeminiModel,
20
21
  OpenAICompletionModel,
21
22
  OpenAIGPTConfig,
22
23
  OpenAIGPT,
@@ -41,6 +42,7 @@ __all__ = [
41
42
  "LLMResponse",
42
43
  "OpenAIChatModel",
43
44
  "AnthropicModel",
45
+ "GeminiModel",
44
46
  "OpenAICompletionModel",
45
47
  "OpenAIGPTConfig",
46
48
  "OpenAIGPT",
@@ -66,6 +66,7 @@ if "OLLAMA_HOST" in os.environ:
66
66
  else:
67
67
  OLLAMA_BASE_URL = "http://localhost:11434/v1"
68
68
 
69
+ GEMINI_BASE_URL = "https://generativelanguage.googleapis.com/v1beta/"
69
70
  OLLAMA_API_KEY = "ollama"
70
71
  DUMMY_API_KEY = "xxx"
71
72
 
@@ -92,6 +93,14 @@ class OpenAIChatModel(str, Enum):
92
93
  O1_MINI = "o1-mini"
93
94
 
94
95
 
96
+ class GeminiModel(str, Enum):
97
+ """Enum for Gemini models"""
98
+
99
+ GEMINI_1_5_FLASH = "gemini-1.5-flash"
100
+ GEMINI_1_5_FLASH_8B = "gemini-1.5-flash-8b"
101
+ GEMINI_1_5_PRO = "gemini-1.5-pro"
102
+
103
+
95
104
  class OpenAICompletionModel(str, Enum):
96
105
  """Enum for OpenAI Completion models"""
97
106
 
@@ -503,6 +512,7 @@ class OpenAIGPT(LanguageModel):
503
512
 
504
513
  self.is_groq = self.config.chat_model.startswith("groq/")
505
514
  self.is_cerebras = self.config.chat_model.startswith("cerebras/")
515
+ self.is_gemini = self.config.chat_model.startswith("gemini/")
506
516
 
507
517
  if self.is_groq:
508
518
  self.config.chat_model = self.config.chat_model.replace("groq/", "")
@@ -524,6 +534,11 @@ class OpenAIGPT(LanguageModel):
524
534
  api_key=self.api_key,
525
535
  )
526
536
  else:
537
+ if self.is_gemini:
538
+ self.config.chat_model = self.config.chat_model.replace("gemini/", "")
539
+ self.api_key = os.getenv("GEMINI_API_KEY", DUMMY_API_KEY)
540
+ self.api_base = GEMINI_BASE_URL
541
+
527
542
  self.client = OpenAI(
528
543
  api_key=self.api_key,
529
544
  base_url=self.api_base,
@@ -623,7 +638,13 @@ class OpenAIGPT(LanguageModel):
623
638
  Currently main troublemaker is o1* series.
624
639
  """
625
640
  match self.config.chat_model:
626
- case OpenAIChatModel.O1_MINI | OpenAIChatModel.O1_PREVIEW:
641
+ case (
642
+ OpenAIChatModel.O1_MINI
643
+ | OpenAIChatModel.O1_PREVIEW
644
+ | GeminiModel.GEMINI_1_5_FLASH
645
+ | GeminiModel.GEMINI_1_5_FLASH_8B
646
+ | GeminiModel.GEMINI_1_5_PRO
647
+ ):
627
648
  return {"max_tokens": "max_completion_tokens"}
628
649
  case _:
629
650
  return {}
@@ -1229,13 +1250,10 @@ class OpenAIGPT(LanguageModel):
1229
1250
  cost = 0.0
1230
1251
  prompt_tokens = 0
1231
1252
  completion_tokens = 0
1232
- if not cached and not self.get_stream():
1253
+ if not cached and not self.get_stream() and response["usage"] is not None:
1233
1254
  prompt_tokens = response["usage"]["prompt_tokens"]
1234
1255
  completion_tokens = response["usage"]["completion_tokens"]
1235
- cost = self._cost_chat_model(
1236
- response["usage"]["prompt_tokens"],
1237
- response["usage"]["completion_tokens"],
1238
- )
1256
+ cost = self._cost_chat_model(prompt_tokens, completion_tokens)
1239
1257
 
1240
1258
  return LLMTokenUsage(
1241
1259
  prompt_tokens=prompt_tokens, completion_tokens=completion_tokens, cost=cost
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "langroid"
3
- version = "0.20.1"
3
+ version = "0.21.0"
4
4
  description = "Harness LLMs with Multi-Agent Programming"
5
5
  authors = ["Prasad Chalasani <pchalasani@gmail.com>"]
6
6
  readme = "README.md"
File without changes
File without changes
File without changes
File without changes