langroid 0.16.1__tar.gz → 0.16.2__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 (144) hide show
  1. {langroid-0.16.1 → langroid-0.16.2}/PKG-INFO +1 -1
  2. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/chat_agent.py +1 -0
  3. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/task.py +24 -7
  4. {langroid-0.16.1 → langroid-0.16.2}/langroid/language_models/base.py +9 -1
  5. {langroid-0.16.1 → langroid-0.16.2}/langroid/language_models/openai_gpt.py +13 -7
  6. {langroid-0.16.1 → langroid-0.16.2}/pyproject.toml +1 -1
  7. {langroid-0.16.1 → langroid-0.16.2}/LICENSE +0 -0
  8. {langroid-0.16.1 → langroid-0.16.2}/README.md +0 -0
  9. {langroid-0.16.1 → langroid-0.16.2}/langroid/__init__.py +0 -0
  10. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/__init__.py +0 -0
  11. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/base.py +0 -0
  12. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/batch.py +0 -0
  13. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/callbacks/__init__.py +0 -0
  14. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/callbacks/chainlit.py +0 -0
  15. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/chat_document.py +0 -0
  16. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/helpers.py +0 -0
  17. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/junk +0 -0
  18. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/openai_assistant.py +0 -0
  19. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/special/__init__.py +0 -0
  20. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/special/doc_chat_agent.py +0 -0
  21. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/special/lance_doc_chat_agent.py +0 -0
  22. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/special/lance_rag/__init__.py +0 -0
  23. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/special/lance_rag/critic_agent.py +0 -0
  24. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/special/lance_rag/lance_rag_task.py +0 -0
  25. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/special/lance_rag/query_planner_agent.py +0 -0
  26. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/special/lance_tools.py +0 -0
  27. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/special/neo4j/__init__.py +0 -0
  28. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/special/neo4j/csv_kg_chat.py +0 -0
  29. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/special/neo4j/neo4j_chat_agent.py +0 -0
  30. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/special/neo4j/utils/__init__.py +0 -0
  31. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/special/neo4j/utils/system_message.py +0 -0
  32. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/special/relevance_extractor_agent.py +0 -0
  33. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/special/retriever_agent.py +0 -0
  34. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/special/sql/__init__.py +0 -0
  35. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/special/sql/sql_chat_agent.py +0 -0
  36. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/special/sql/utils/__init__.py +0 -0
  37. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/special/sql/utils/description_extractors.py +0 -0
  38. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/special/sql/utils/populate_metadata.py +0 -0
  39. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/special/sql/utils/system_message.py +0 -0
  40. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/special/sql/utils/tools.py +0 -0
  41. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/special/table_chat_agent.py +0 -0
  42. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/structured_message.py +0 -0
  43. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/tool_message.py +0 -0
  44. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/tools/__init__.py +0 -0
  45. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/tools/duckduckgo_search_tool.py +0 -0
  46. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/tools/extract_tool.py +0 -0
  47. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/tools/generator_tool.py +0 -0
  48. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/tools/google_search_tool.py +0 -0
  49. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/tools/metaphor_search_tool.py +0 -0
  50. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/tools/note_tool.py +0 -0
  51. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/tools/orchestration.py +0 -0
  52. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/tools/recipient_tool.py +0 -0
  53. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/tools/retrieval_tool.py +0 -0
  54. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/tools/rewind_tool.py +0 -0
  55. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/tools/run_python_code.py +0 -0
  56. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/tools/segment_extract_tool.py +0 -0
  57. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent/typed_task.py +0 -0
  58. {langroid-0.16.1 → langroid-0.16.2}/langroid/agent_config.py +0 -0
  59. {langroid-0.16.1 → langroid-0.16.2}/langroid/cachedb/__init__.py +0 -0
  60. {langroid-0.16.1 → langroid-0.16.2}/langroid/cachedb/base.py +0 -0
  61. {langroid-0.16.1 → langroid-0.16.2}/langroid/cachedb/momento_cachedb.py +0 -0
  62. {langroid-0.16.1 → langroid-0.16.2}/langroid/cachedb/redis_cachedb.py +0 -0
  63. {langroid-0.16.1 → langroid-0.16.2}/langroid/embedding_models/__init__.py +0 -0
  64. {langroid-0.16.1 → langroid-0.16.2}/langroid/embedding_models/base.py +0 -0
  65. {langroid-0.16.1 → langroid-0.16.2}/langroid/embedding_models/clustering.py +0 -0
  66. {langroid-0.16.1 → langroid-0.16.2}/langroid/embedding_models/models.py +0 -0
  67. {langroid-0.16.1 → langroid-0.16.2}/langroid/embedding_models/protoc/__init__.py +0 -0
  68. {langroid-0.16.1 → langroid-0.16.2}/langroid/embedding_models/protoc/embeddings.proto +0 -0
  69. {langroid-0.16.1 → langroid-0.16.2}/langroid/embedding_models/protoc/embeddings_pb2.py +0 -0
  70. {langroid-0.16.1 → langroid-0.16.2}/langroid/embedding_models/protoc/embeddings_pb2.pyi +0 -0
  71. {langroid-0.16.1 → langroid-0.16.2}/langroid/embedding_models/protoc/embeddings_pb2_grpc.py +0 -0
  72. {langroid-0.16.1 → langroid-0.16.2}/langroid/embedding_models/remote_embeds.py +0 -0
  73. {langroid-0.16.1 → langroid-0.16.2}/langroid/exceptions.py +0 -0
  74. {langroid-0.16.1 → langroid-0.16.2}/langroid/language_models/.chainlit/config.toml +0 -0
  75. {langroid-0.16.1 → langroid-0.16.2}/langroid/language_models/.chainlit/translations/en-US.json +0 -0
  76. {langroid-0.16.1 → langroid-0.16.2}/langroid/language_models/__init__.py +0 -0
  77. {langroid-0.16.1 → langroid-0.16.2}/langroid/language_models/azure_openai.py +0 -0
  78. {langroid-0.16.1 → langroid-0.16.2}/langroid/language_models/config.py +0 -0
  79. {langroid-0.16.1 → langroid-0.16.2}/langroid/language_models/mock_lm.py +0 -0
  80. {langroid-0.16.1 → langroid-0.16.2}/langroid/language_models/prompt_formatter/__init__.py +0 -0
  81. {langroid-0.16.1 → langroid-0.16.2}/langroid/language_models/prompt_formatter/base.py +0 -0
  82. {langroid-0.16.1 → langroid-0.16.2}/langroid/language_models/prompt_formatter/hf_formatter.py +0 -0
  83. {langroid-0.16.1 → langroid-0.16.2}/langroid/language_models/prompt_formatter/llama2_formatter.py +0 -0
  84. {langroid-0.16.1 → langroid-0.16.2}/langroid/language_models/utils.py +0 -0
  85. {langroid-0.16.1 → langroid-0.16.2}/langroid/mytypes.py +0 -0
  86. {langroid-0.16.1 → langroid-0.16.2}/langroid/parsing/__init__.py +0 -0
  87. {langroid-0.16.1 → langroid-0.16.2}/langroid/parsing/agent_chats.py +0 -0
  88. {langroid-0.16.1 → langroid-0.16.2}/langroid/parsing/code-parsing.md +0 -0
  89. {langroid-0.16.1 → langroid-0.16.2}/langroid/parsing/code_parser.py +0 -0
  90. {langroid-0.16.1 → langroid-0.16.2}/langroid/parsing/config.py +0 -0
  91. {langroid-0.16.1 → langroid-0.16.2}/langroid/parsing/document_parser.py +0 -0
  92. {langroid-0.16.1 → langroid-0.16.2}/langroid/parsing/image_text.py +0 -0
  93. {langroid-0.16.1 → langroid-0.16.2}/langroid/parsing/para_sentence_split.py +0 -0
  94. {langroid-0.16.1 → langroid-0.16.2}/langroid/parsing/parse_json.py +0 -0
  95. {langroid-0.16.1 → langroid-0.16.2}/langroid/parsing/parser.py +0 -0
  96. {langroid-0.16.1 → langroid-0.16.2}/langroid/parsing/repo_loader.py +0 -0
  97. {langroid-0.16.1 → langroid-0.16.2}/langroid/parsing/routing.py +0 -0
  98. {langroid-0.16.1 → langroid-0.16.2}/langroid/parsing/search.py +0 -0
  99. {langroid-0.16.1 → langroid-0.16.2}/langroid/parsing/spider.py +0 -0
  100. {langroid-0.16.1 → langroid-0.16.2}/langroid/parsing/table_loader.py +0 -0
  101. {langroid-0.16.1 → langroid-0.16.2}/langroid/parsing/url_loader.py +0 -0
  102. {langroid-0.16.1 → langroid-0.16.2}/langroid/parsing/url_loader_cookies.py +0 -0
  103. {langroid-0.16.1 → langroid-0.16.2}/langroid/parsing/urls.py +0 -0
  104. {langroid-0.16.1 → langroid-0.16.2}/langroid/parsing/utils.py +0 -0
  105. {langroid-0.16.1 → langroid-0.16.2}/langroid/parsing/web_search.py +0 -0
  106. {langroid-0.16.1 → langroid-0.16.2}/langroid/prompts/__init__.py +0 -0
  107. {langroid-0.16.1 → langroid-0.16.2}/langroid/prompts/chat-gpt4-system-prompt.md +0 -0
  108. {langroid-0.16.1 → langroid-0.16.2}/langroid/prompts/dialog.py +0 -0
  109. {langroid-0.16.1 → langroid-0.16.2}/langroid/prompts/prompts_config.py +0 -0
  110. {langroid-0.16.1 → langroid-0.16.2}/langroid/prompts/templates.py +0 -0
  111. {langroid-0.16.1 → langroid-0.16.2}/langroid/py.typed +0 -0
  112. {langroid-0.16.1 → langroid-0.16.2}/langroid/pydantic_v1/__init__.py +0 -0
  113. {langroid-0.16.1 → langroid-0.16.2}/langroid/pydantic_v1/main.py +0 -0
  114. {langroid-0.16.1 → langroid-0.16.2}/langroid/utils/.chainlit/config.toml +0 -0
  115. {langroid-0.16.1 → langroid-0.16.2}/langroid/utils/.chainlit/translations/en-US.json +0 -0
  116. {langroid-0.16.1 → langroid-0.16.2}/langroid/utils/__init__.py +0 -0
  117. {langroid-0.16.1 → langroid-0.16.2}/langroid/utils/algorithms/__init__.py +0 -0
  118. {langroid-0.16.1 → langroid-0.16.2}/langroid/utils/algorithms/graph.py +0 -0
  119. {langroid-0.16.1 → langroid-0.16.2}/langroid/utils/configuration.py +0 -0
  120. {langroid-0.16.1 → langroid-0.16.2}/langroid/utils/constants.py +0 -0
  121. {langroid-0.16.1 → langroid-0.16.2}/langroid/utils/docker.py +0 -0
  122. {langroid-0.16.1 → langroid-0.16.2}/langroid/utils/globals.py +0 -0
  123. {langroid-0.16.1 → langroid-0.16.2}/langroid/utils/llms/__init__.py +0 -0
  124. {langroid-0.16.1 → langroid-0.16.2}/langroid/utils/llms/strings.py +0 -0
  125. {langroid-0.16.1 → langroid-0.16.2}/langroid/utils/logging.py +0 -0
  126. {langroid-0.16.1 → langroid-0.16.2}/langroid/utils/object_registry.py +0 -0
  127. {langroid-0.16.1 → langroid-0.16.2}/langroid/utils/output/__init__.py +0 -0
  128. {langroid-0.16.1 → langroid-0.16.2}/langroid/utils/output/citations.py +0 -0
  129. {langroid-0.16.1 → langroid-0.16.2}/langroid/utils/output/printing.py +0 -0
  130. {langroid-0.16.1 → langroid-0.16.2}/langroid/utils/output/status.py +0 -0
  131. {langroid-0.16.1 → langroid-0.16.2}/langroid/utils/pandas_utils.py +0 -0
  132. {langroid-0.16.1 → langroid-0.16.2}/langroid/utils/pydantic_utils.py +0 -0
  133. {langroid-0.16.1 → langroid-0.16.2}/langroid/utils/system.py +0 -0
  134. {langroid-0.16.1 → langroid-0.16.2}/langroid/utils/types.py +0 -0
  135. {langroid-0.16.1 → langroid-0.16.2}/langroid/utils/web/__init__.py +0 -0
  136. {langroid-0.16.1 → langroid-0.16.2}/langroid/utils/web/login.py +0 -0
  137. {langroid-0.16.1 → langroid-0.16.2}/langroid/vector_store/__init__.py +0 -0
  138. {langroid-0.16.1 → langroid-0.16.2}/langroid/vector_store/base.py +0 -0
  139. {langroid-0.16.1 → langroid-0.16.2}/langroid/vector_store/chromadb.py +0 -0
  140. {langroid-0.16.1 → langroid-0.16.2}/langroid/vector_store/lancedb.py +0 -0
  141. {langroid-0.16.1 → langroid-0.16.2}/langroid/vector_store/meilisearch.py +0 -0
  142. {langroid-0.16.1 → langroid-0.16.2}/langroid/vector_store/momento.py +0 -0
  143. {langroid-0.16.1 → langroid-0.16.2}/langroid/vector_store/qdrant_cloud.py +0 -0
  144. {langroid-0.16.1 → langroid-0.16.2}/langroid/vector_store/qdrantdb.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langroid
3
- Version: 0.16.1
3
+ Version: 0.16.2
4
4
  Summary: Harness LLMs with Multi-Agent Programming
5
5
  License: MIT
6
6
  Author: Prasad Chalasani
@@ -226,6 +226,7 @@ class ChatAgent(Agent):
226
226
  self.llm is not None
227
227
  and isinstance(self.llm, OpenAIGPT)
228
228
  and self.llm.is_openai_chat_model()
229
+ and self.llm.supports_functions_or_tools()
229
230
  )
230
231
 
231
232
  def set_system_message(self, msg: str) -> None:
@@ -98,6 +98,12 @@ class TaskConfig(BaseModel):
98
98
  (Search for "SEND_TO" in the examples/ dir to see how this is used.)
99
99
  allow_subtask_multi_oai_tools (bool): whether to allow multiple OpenAI
100
100
  tool-calls to be sent to a sub-task.
101
+ recognize_string_signals (bool): whether to recognize string-based signaling
102
+ like DONE, SEND_TO, PASS, etc. Default is True, but note that we don't need
103
+ to use string-based signaling, and it is recommended to use the
104
+ new Orchestration tools instead (see agent/tools/orchestration.py),
105
+ e.g. DoneTool, SendTool, etc.
106
+
101
107
  """
102
108
 
103
109
  inf_loop_cycle_len: int = 10
@@ -107,6 +113,7 @@ class TaskConfig(BaseModel):
107
113
  logs_dir: str = "logs"
108
114
  addressing_prefix: str = ""
109
115
  allow_subtask_multi_oai_tools: bool = True
116
+ recognize_string_signals: bool = True
110
117
 
111
118
 
112
119
  class Task:
@@ -1363,7 +1370,10 @@ class Task:
1363
1370
  else:
1364
1371
  # e must be this agent's Entity (LLM, AGENT or USER)
1365
1372
  return self.agent.response_template(e=e, tool_messages=[result])
1366
- # if result content starts with @name, set recipient to name
1373
+ if not self.config.recognize_string_signals:
1374
+ # ignore all string-based signaling/routing
1375
+ return result
1376
+ # parse various routing/addressing strings in result
1367
1377
  is_pass, recipient, content = parse_routing(
1368
1378
  result,
1369
1379
  addressing_prefix=self.config.addressing_prefix,
@@ -1490,7 +1500,7 @@ class Task:
1490
1500
 
1491
1501
  content = result_msg.content if result_msg else ""
1492
1502
  content_any = result_msg.content_any if result_msg else None
1493
- if DONE in content:
1503
+ if DONE in content and self.config.recognize_string_signals:
1494
1504
  # assuming it is of the form "DONE: <content>"
1495
1505
  content = content.replace(DONE, "").strip()
1496
1506
  oai_tool_calls = result_msg.oai_tool_calls if result_msg else None
@@ -1556,12 +1566,14 @@ class Task:
1556
1566
  Returns:
1557
1567
  bool: True if msg is (equivalent to) empty or None, False otherwise
1558
1568
  """
1569
+ # if ignoring string-based signaling, set pass_str to ""
1570
+ pass_str = PASS if self.config.recognize_string_signals else ""
1559
1571
  return (
1560
1572
  msg is None
1561
- or (isinstance(msg, str) and msg.strip() in [PASS, ""])
1573
+ or (isinstance(msg, str) and msg.strip() in [pass_str, ""])
1562
1574
  or (
1563
1575
  isinstance(msg, ChatDocument)
1564
- and msg.content.strip() in [PASS, ""]
1576
+ and msg.content.strip() in [pass_str, ""]
1565
1577
  and msg.function_call is None
1566
1578
  and msg.oai_tool_calls is None
1567
1579
  and msg.oai_tool_id2result is None
@@ -1574,12 +1586,13 @@ class Task:
1574
1586
  ) -> bool:
1575
1587
  """Is the task done based on the response from the given responder?"""
1576
1588
 
1589
+ allow_done_string = self.config.recognize_string_signals
1577
1590
  response_says_done = result is not None and (
1578
- (isinstance(result, str) and DONE in result)
1591
+ (isinstance(result, str) and DONE in result and allow_done_string)
1579
1592
  or (
1580
1593
  isinstance(result, ChatDocument)
1581
1594
  and (
1582
- DONE in result.content
1595
+ (DONE in result.content and allow_done_string)
1583
1596
  or any(
1584
1597
  isinstance(t, (DoneTool, AgentDoneTool, FinalResultTool))
1585
1598
  for t in result.tool_messages
@@ -1697,10 +1710,14 @@ class Task:
1697
1710
  if self._is_kill():
1698
1711
  return (True, StatusCode.KILL)
1699
1712
  result = result or self.pending_message
1713
+ allow_done_string = self.config.recognize_string_signals
1700
1714
  # An entity decided task is done, either via DoneTool,
1701
1715
  # or by explicitly saying DONE
1702
1716
  done_result = result is not None and (
1703
- DONE in (result.content if isinstance(result, str) else result.content)
1717
+ (
1718
+ DONE in (result.content if isinstance(result, str) else result.content)
1719
+ and allow_done_string
1720
+ )
1704
1721
  or any(
1705
1722
  isinstance(t, (DoneTool, AgentDoneTool, FinalResultTool))
1706
1723
  for t in result.tool_messages
@@ -201,16 +201,24 @@ class LLMMessage(BaseModel):
201
201
  # link to corresponding chat document, for provenance/rewind purposes
202
202
  chat_document_id: str = ""
203
203
 
204
- def api_dict(self) -> Dict[str, Any]:
204
+ def api_dict(self, has_system_role: bool = True) -> Dict[str, Any]:
205
205
  """
206
206
  Convert to dictionary for API request, keeping ONLY
207
207
  the fields that are expected in an API call!
208
208
  E.g., DROP the tool_id, since it is only for use in the Assistant API,
209
209
  not the completion API.
210
+
211
+ Args:
212
+ has_system_role: whether the message has a system role (if not,
213
+ set to "user" role)
210
214
  Returns:
211
215
  dict: dictionary representation of LLM message
212
216
  """
213
217
  d = self.dict()
218
+ # if there is a key k = "role" with value "system", change to "user"
219
+ # in case has_system_role is False
220
+ if not has_system_role and "role" in d and d["role"] == "system":
221
+ d["role"] = "user"
214
222
  # drop None values since API doesn't accept them
215
223
  dict_no_none = {k: v for k, v in d.items() if v is not None}
216
224
  if "name" in dict_no_none and dict_no_none["name"] == "":
@@ -592,6 +592,12 @@ class OpenAIGPT(LanguageModel):
592
592
  openai_chat_models = [e.value for e in OpenAIChatModel]
593
593
  return self.config.chat_model in openai_chat_models
594
594
 
595
+ def supports_functions_or_tools(self) -> bool:
596
+ return self.is_openai_chat_model() and self.config.chat_model not in [
597
+ OpenAIChatModel.O1_MINI,
598
+ OpenAIChatModel.O1_PREVIEW,
599
+ ]
600
+
595
601
  def is_openai_completion_model(self) -> bool:
596
602
  openai_completion_models = [e.value for e in OpenAICompletionModel]
597
603
  return self.config.completion_model in openai_completion_models
@@ -1463,12 +1469,6 @@ class OpenAIGPT(LanguageModel):
1463
1469
  else:
1464
1470
  llm_messages = messages
1465
1471
 
1466
- # for models that don't support system msg, change SYSTEM role to USER
1467
- if self.config.chat_model in NON_SYSTEM_MESSAGE_MODELS:
1468
- for i, m in enumerate(llm_messages):
1469
- if m.role == Role.SYSTEM:
1470
- llm_messages[i].role = Role.USER
1471
-
1472
1472
  # Azure uses different parameters. It uses ``engine`` instead of ``model``
1473
1473
  # and the value should be the deployment_name not ``self.config.chat_model``
1474
1474
  chat_model = self.config.chat_model
@@ -1478,7 +1478,13 @@ class OpenAIGPT(LanguageModel):
1478
1478
 
1479
1479
  args: Dict[str, Any] = dict(
1480
1480
  model=chat_model,
1481
- messages=[m.api_dict() for m in llm_messages],
1481
+ messages=[
1482
+ m.api_dict(
1483
+ has_system_role=self.config.chat_model
1484
+ not in NON_SYSTEM_MESSAGE_MODELS
1485
+ )
1486
+ for m in (llm_messages)
1487
+ ],
1482
1488
  max_tokens=max_tokens,
1483
1489
  stream=self.get_stream(),
1484
1490
  )
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "langroid"
3
- version = "0.16.1"
3
+ version = "0.16.2"
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
File without changes