ag2 0.4b1__py3-none-any.whl → 0.4.1__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.

Potentially problematic release.


This version of ag2 might be problematic. Click here for more details.

Files changed (78) hide show
  1. {ag2-0.4b1.dist-info → ag2-0.4.1.dist-info}/METADATA +13 -9
  2. ag2-0.4.1.dist-info/RECORD +158 -0
  3. autogen/agentchat/contrib/agent_builder.py +1 -0
  4. autogen/agentchat/contrib/agent_eval/agent_eval.py +107 -0
  5. autogen/agentchat/contrib/agent_eval/criterion.py +47 -0
  6. autogen/agentchat/contrib/agent_eval/critic_agent.py +47 -0
  7. autogen/agentchat/contrib/agent_eval/quantifier_agent.py +42 -0
  8. autogen/agentchat/contrib/agent_eval/subcritic_agent.py +48 -0
  9. autogen/agentchat/contrib/agent_eval/task.py +43 -0
  10. autogen/agentchat/contrib/captainagent/tools/__init__.py +0 -0
  11. autogen/agentchat/contrib/captainagent/tools/data_analysis/calculate_correlation.py +41 -0
  12. autogen/agentchat/contrib/captainagent/tools/data_analysis/calculate_skewness_and_kurtosis.py +29 -0
  13. autogen/agentchat/contrib/captainagent/tools/data_analysis/detect_outlier_iqr.py +29 -0
  14. autogen/agentchat/contrib/captainagent/tools/data_analysis/detect_outlier_zscore.py +29 -0
  15. autogen/agentchat/contrib/captainagent/tools/data_analysis/explore_csv.py +22 -0
  16. autogen/agentchat/contrib/captainagent/tools/data_analysis/shapiro_wilk_test.py +31 -0
  17. autogen/agentchat/contrib/captainagent/tools/information_retrieval/arxiv_download.py +26 -0
  18. autogen/agentchat/contrib/captainagent/tools/information_retrieval/arxiv_search.py +55 -0
  19. autogen/agentchat/contrib/captainagent/tools/information_retrieval/extract_pdf_image.py +54 -0
  20. autogen/agentchat/contrib/captainagent/tools/information_retrieval/extract_pdf_text.py +39 -0
  21. autogen/agentchat/contrib/captainagent/tools/information_retrieval/get_wikipedia_text.py +22 -0
  22. autogen/agentchat/contrib/captainagent/tools/information_retrieval/get_youtube_caption.py +35 -0
  23. autogen/agentchat/contrib/captainagent/tools/information_retrieval/image_qa.py +61 -0
  24. autogen/agentchat/contrib/captainagent/tools/information_retrieval/optical_character_recognition.py +62 -0
  25. autogen/agentchat/contrib/captainagent/tools/information_retrieval/perform_web_search.py +48 -0
  26. autogen/agentchat/contrib/captainagent/tools/information_retrieval/scrape_wikipedia_tables.py +34 -0
  27. autogen/agentchat/contrib/captainagent/tools/information_retrieval/transcribe_audio_file.py +22 -0
  28. autogen/agentchat/contrib/captainagent/tools/information_retrieval/youtube_download.py +36 -0
  29. autogen/agentchat/contrib/captainagent/tools/math/calculate_circle_area_from_diameter.py +22 -0
  30. autogen/agentchat/contrib/captainagent/tools/math/calculate_day_of_the_week.py +19 -0
  31. autogen/agentchat/contrib/captainagent/tools/math/calculate_fraction_sum.py +29 -0
  32. autogen/agentchat/contrib/captainagent/tools/math/calculate_matrix_power.py +32 -0
  33. autogen/agentchat/contrib/captainagent/tools/math/calculate_reflected_point.py +17 -0
  34. autogen/agentchat/contrib/captainagent/tools/math/complex_numbers_product.py +26 -0
  35. autogen/agentchat/contrib/captainagent/tools/math/compute_currency_conversion.py +24 -0
  36. autogen/agentchat/contrib/captainagent/tools/math/count_distinct_permutations.py +28 -0
  37. autogen/agentchat/contrib/captainagent/tools/math/evaluate_expression.py +29 -0
  38. autogen/agentchat/contrib/captainagent/tools/math/find_continuity_point.py +35 -0
  39. autogen/agentchat/contrib/captainagent/tools/math/fraction_to_mixed_numbers.py +40 -0
  40. autogen/agentchat/contrib/captainagent/tools/math/modular_inverse_sum.py +23 -0
  41. autogen/agentchat/contrib/captainagent/tools/math/simplify_mixed_numbers.py +37 -0
  42. autogen/agentchat/contrib/captainagent/tools/math/sum_of_digit_factorials.py +16 -0
  43. autogen/agentchat/contrib/captainagent/tools/math/sum_of_primes_below.py +16 -0
  44. autogen/agentchat/contrib/captainagent/tools/requirements.txt +10 -0
  45. autogen/agentchat/contrib/captainagent/tools/tool_description.tsv +34 -0
  46. autogen/agentchat/contrib/captainagent.py +3 -0
  47. autogen/agentchat/contrib/graph_rag/document.py +6 -0
  48. autogen/agentchat/contrib/graph_rag/falkor_graph_query_engine.py +55 -20
  49. autogen/agentchat/contrib/graph_rag/falkor_graph_rag_capability.py +81 -0
  50. autogen/agentchat/contrib/graph_rag/graph_query_engine.py +7 -1
  51. autogen/agentchat/contrib/graph_rag/graph_rag_capability.py +12 -4
  52. autogen/agentchat/contrib/retrieve_user_proxy_agent.py +7 -3
  53. autogen/agentchat/contrib/swarm_agent.py +69 -20
  54. autogen/agentchat/contrib/tool_retriever.py +6 -0
  55. autogen/coding/base.py +2 -2
  56. autogen/coding/docker_commandline_code_executor.py +2 -2
  57. autogen/coding/factory.py +2 -2
  58. autogen/coding/func_with_reqs.py +2 -2
  59. autogen/coding/jupyter/base.py +2 -2
  60. autogen/coding/jupyter/docker_jupyter_server.py +2 -2
  61. autogen/coding/jupyter/embedded_ipython_code_executor.py +2 -2
  62. autogen/coding/jupyter/jupyter_client.py +2 -2
  63. autogen/coding/jupyter/jupyter_code_executor.py +2 -2
  64. autogen/coding/jupyter/local_jupyter_server.py +2 -2
  65. autogen/coding/local_commandline_code_executor.py +2 -2
  66. autogen/coding/markdown_code_extractor.py +2 -2
  67. autogen/coding/utils.py +2 -2
  68. autogen/oai/bedrock.py +6 -0
  69. autogen/oai/cerebras.py +6 -0
  70. autogen/oai/ollama.py +6 -0
  71. autogen/oai/openai_utils.py +1 -0
  72. autogen/token_count_utils.py +2 -0
  73. autogen/version.py +1 -1
  74. ag2-0.4b1.dist-info/RECORD +0 -115
  75. {ag2-0.4b1.dist-info → ag2-0.4.1.dist-info}/LICENSE +0 -0
  76. {ag2-0.4b1.dist-info → ag2-0.4.1.dist-info}/NOTICE.md +0 -0
  77. {ag2-0.4b1.dist-info → ag2-0.4.1.dist-info}/WHEEL +0 -0
  78. {ag2-0.4b1.dist-info → ag2-0.4.1.dist-info}/top_level.txt +0 -0
@@ -1,3 +1,9 @@
1
+ # Copyright (c) 2023 - 2024, Owners of https://github.com/ag2ai
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+ #
5
+ # Portions derived from https://github.com/microsoft/autogen are under the MIT License.
6
+ # SPDX-License-Identifier: MIT
1
7
  from dataclasses import dataclass, field
2
8
  from typing import List, Optional, Protocol
3
9
 
@@ -20,7 +26,7 @@ class GraphStoreQueryResult:
20
26
  class GraphQueryEngine(Protocol):
21
27
  """An abstract base class that represents a graph query engine on top of a underlying graph database.
22
28
 
23
- This interface defines the basic methods for graph rag.
29
+ This interface defines the basic methods for graph-based RAG.
24
30
  """
25
31
 
26
32
  def init_db(self, input_doc: List[Document] | None = None):
@@ -1,3 +1,9 @@
1
+ # Copyright (c) 2023 - 2024, Owners of https://github.com/ag2ai
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+ #
5
+ # Portions derived from https://github.com/microsoft/autogen are under the MIT License.
6
+ # SPDX-License-Identifier: MIT
1
7
  from autogen.agentchat.contrib.capabilities.agent_capability import AgentCapability
2
8
  from autogen.agentchat.conversable_agent import ConversableAgent
3
9
 
@@ -6,9 +12,9 @@ from .graph_query_engine import GraphQueryEngine
6
12
 
7
13
  class GraphRagCapability(AgentCapability):
8
14
  """
9
- A graph rag capability uses a graph query engine to give a conversable agent the graph rag ability.
15
+ A graph-based RAG capability uses a graph query engine to give a conversable agent the graph-based RAG ability.
10
16
 
11
- An agent class with graph rag capability could
17
+ An agent class with graph-based RAG capability could
12
18
  1. create a graph in the underlying database with input documents.
13
19
  2. retrieved relevant information based on messages received by the agent.
14
20
  3. generate answers from retrieved information and send messages back.
@@ -49,8 +55,10 @@ class GraphRagCapability(AgentCapability):
49
55
 
50
56
  def __init__(self, query_engine: GraphQueryEngine):
51
57
  """
52
- initialize graph rag capability with a graph query engine
58
+ Initialize graph-based RAG capability with a graph query engine
53
59
  """
54
60
  ...
55
61
 
56
- def add_to_agent(self, agent: ConversableAgent): ...
62
+ def add_to_agent(self, agent: ConversableAgent):
63
+ """Add the capability to an agent"""
64
+ ...
@@ -261,9 +261,6 @@ class RetrieveUserProxyAgent(UserProxyAgent):
261
261
  self._task = self._retrieve_config.get("task", "default")
262
262
  self._vector_db = self._retrieve_config.get("vector_db", "chroma")
263
263
  self._db_config = self._retrieve_config.get("db_config", {})
264
- self._client = self._retrieve_config.get("client", None)
265
- if self._client is None:
266
- self._client = chromadb.Client()
267
264
  self._docs_path = self._retrieve_config.get("docs_path", None)
268
265
  self._extra_docs = self._retrieve_config.get("extra_docs", False)
269
266
  self._new_docs = self._retrieve_config.get("new_docs", True)
@@ -311,6 +308,13 @@ class RetrieveUserProxyAgent(UserProxyAgent):
311
308
  if "embedding_function" in self._retrieve_config:
312
309
  self._db_config["embedding_function"] = self._embedding_function
313
310
  self._vector_db = VectorDBFactory.create_vector_db(db_type=self._vector_db, **self._db_config)
311
+ self._client = self._retrieve_config.get("client", None)
312
+ if self._client is None and hasattr(self._vector_db, "client"):
313
+ # Since the client arg is deprecated, let's check
314
+ # if the `vector_db` instance has a 'client' attribute.
315
+ self._client = getattr(self._vector_db, "client", None)
316
+ if self._client is None:
317
+ self._client = chromadb.Client()
314
318
  self.register_reply(Agent, RetrieveUserProxyAgent._generate_retrieve_user_reply, position=2)
315
319
  self.register_hook(
316
320
  hookable_method="process_message_before_send",
@@ -1,6 +1,7 @@
1
1
  # Copyright (c) 2023 - 2024, Owners of https://github.com/ag2ai
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
+ import copy
4
5
  import json
5
6
  from dataclasses import dataclass
6
7
  from enum import Enum
@@ -44,6 +45,10 @@ class ON_CONDITION:
44
45
  agent: "SwarmAgent"
45
46
  condition: str = ""
46
47
 
48
+ # Ensure that agent is a SwarmAgent
49
+ def __post_init__(self):
50
+ assert isinstance(self.agent, SwarmAgent), "Agent must be a SwarmAgent"
51
+
47
52
 
48
53
  def initiate_swarm_chat(
49
54
  initial_agent: "SwarmAgent",
@@ -80,7 +85,12 @@ def initiate_swarm_chat(
80
85
  SwarmAgent: Last speaker.
81
86
  """
82
87
  assert isinstance(initial_agent, SwarmAgent), "initial_agent must be a SwarmAgent"
83
- assert all(isinstance(agent, SwarmAgent) for agent in agents), "agents must be a list of SwarmAgents"
88
+ assert all(isinstance(agent, SwarmAgent) for agent in agents), "Agents must be a list of SwarmAgents"
89
+ # Ensure all agents in hand-off after-works are in the passed in agents list
90
+ for agent in agents:
91
+ if agent.after_work is not None:
92
+ if isinstance(agent.after_work.agent, SwarmAgent):
93
+ assert agent.after_work.agent in agents, "Agent in hand-off must be in the agents list"
84
94
 
85
95
  context_variables = context_variables or {}
86
96
  if isinstance(messages, str):
@@ -175,9 +185,12 @@ def initiate_swarm_chat(
175
185
  last_message = messages[0]
176
186
 
177
187
  if "name" in last_message:
178
- if "name" in swarm_agent_names:
188
+ if last_message["name"] in swarm_agent_names:
179
189
  # If there's a name in the message and it's a swarm agent, use that
180
190
  last_agent = groupchat.agent_by_name(name=last_message["name"])
191
+ elif user_agent and last_message["name"] == user_agent.name:
192
+ # If the user agent is passed in and is the first message
193
+ last_agent = user_agent
181
194
  else:
182
195
  raise ValueError(f"Invalid swarm agent name in last message: {last_message['name']}")
183
196
  else:
@@ -260,9 +273,13 @@ class SwarmAgent(ConversableAgent):
260
273
  )
261
274
 
262
275
  if isinstance(functions, list):
276
+ if not all(isinstance(func, Callable) for func in functions):
277
+ raise TypeError("All elements in the functions list must be callable")
263
278
  self.add_functions(functions)
264
279
  elif isinstance(functions, Callable):
265
280
  self.add_single_function(functions)
281
+ elif functions is not None:
282
+ raise TypeError("Functions must be a callable or a list of callables")
266
283
 
267
284
  self.after_work = None
268
285
 
@@ -299,11 +316,18 @@ class SwarmAgent(ConversableAgent):
299
316
  1. register the function with the agent
300
317
  2. register the schema with the agent, description set to the condition
301
318
  """
319
+ # Ensure that hand_to is a list or ON_CONDITION or AFTER_WORK
320
+ if not isinstance(hand_to, (list, ON_CONDITION, AFTER_WORK)):
321
+ raise ValueError("hand_to must be a list of ON_CONDITION or AFTER_WORK")
322
+
302
323
  if isinstance(hand_to, (ON_CONDITION, AFTER_WORK)):
303
324
  hand_to = [hand_to]
304
325
 
305
326
  for transit in hand_to:
306
327
  if isinstance(transit, AFTER_WORK):
328
+ assert isinstance(
329
+ transit.agent, (AfterWorkOption, SwarmAgent, str, Callable)
330
+ ), "Invalid After Work value"
307
331
  self.after_work = transit
308
332
  elif isinstance(transit, ON_CONDITION):
309
333
 
@@ -340,8 +364,21 @@ class SwarmAgent(ConversableAgent):
340
364
 
341
365
  message = messages[-1]
342
366
  if "tool_calls" in message:
343
- # 1. add context_variables to the tool call arguments
344
- for tool_call in message["tool_calls"]:
367
+
368
+ tool_call_count = len(message["tool_calls"])
369
+
370
+ # Loop through tool calls individually (so context can be updated after each function call)
371
+ next_agent = None
372
+ tool_responses_inner = []
373
+ contents = []
374
+ for index in range(tool_call_count):
375
+
376
+ # Deep copy to ensure no changes to messages when we insert the context variables
377
+ message_copy = copy.deepcopy(message)
378
+
379
+ # 1. add context_variables to the tool call arguments
380
+ tool_call = message_copy["tool_calls"][index]
381
+
345
382
  if tool_call["type"] == "function":
346
383
  function_name = tool_call["function"]["name"]
347
384
 
@@ -349,28 +386,40 @@ class SwarmAgent(ConversableAgent):
349
386
  if function_name in self._function_map:
350
387
  func = self._function_map[function_name] # Get the original function
351
388
 
352
- # Check if function has context_variables parameter
389
+ # Inject the context variables into the tool call if it has the parameter
353
390
  sig = signature(func)
354
391
  if __CONTEXT_VARIABLES_PARAM_NAME__ in sig.parameters:
392
+
355
393
  current_args = json.loads(tool_call["function"]["arguments"])
356
394
  current_args[__CONTEXT_VARIABLES_PARAM_NAME__] = self._context_variables
357
- # Update the tool call with new arguments
358
395
  tool_call["function"]["arguments"] = json.dumps(current_args)
359
396
 
360
- # 2. generate tool calls reply
361
- _, tool_message = self.generate_tool_calls_reply([message])
362
-
363
- # 3. update context_variables and next_agent, convert content to string
364
- for tool_response in tool_message["tool_responses"]:
365
- content = tool_response.get("content")
366
- if isinstance(content, SwarmResult):
367
- if content.context_variables != {}:
368
- self._context_variables.update(content.context_variables)
369
- if content.agent is not None:
370
- self._next_agent = content.agent
371
- elif isinstance(content, Agent):
372
- self._next_agent = content
373
- tool_response["content"] = str(tool_response["content"])
397
+ # Ensure we are only executing the one tool at a time
398
+ message_copy["tool_calls"] = [tool_call]
399
+
400
+ # 2. generate tool calls reply
401
+ _, tool_message = self.generate_tool_calls_reply([message_copy])
402
+
403
+ # 3. update context_variables and next_agent, convert content to string
404
+ for tool_response in tool_message["tool_responses"]:
405
+ content = tool_response.get("content")
406
+ if isinstance(content, SwarmResult):
407
+ if content.context_variables != {}:
408
+ self._context_variables.update(content.context_variables)
409
+ if content.agent is not None:
410
+ next_agent = content.agent
411
+ elif isinstance(content, Agent):
412
+ next_agent = content
413
+
414
+ tool_responses_inner.append(tool_response)
415
+ contents.append(str(tool_response["content"]))
416
+
417
+ self._next_agent = next_agent
418
+
419
+ # Put the tool responses and content strings back into the response message
420
+ # Caters for multiple tool calls
421
+ tool_message["tool_responses"] = tool_responses_inner
422
+ tool_message["content"] = "\n".join(contents)
374
423
 
375
424
  return True, tool_message
376
425
  return False, None
@@ -1,3 +1,9 @@
1
+ # Copyright (c) 2023 - 2024, Owners of https://github.com/ag2ai
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+ #
5
+ # Portions derived from https://github.com/microsoft/autogen are under the MIT License.
6
+ # SPDX-License-Identifier: MIT
1
7
  import importlib.util
2
8
  import inspect
3
9
  import os
autogen/coding/base.py CHANGED
@@ -1,8 +1,8 @@
1
- # Copyright (c) 2023 - 2024, Owners of https://github.com/autogen-ai
1
+ # Copyright (c) 2023 - 2024, Owners of https://github.com/ag2ai
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
  #
5
- # Original portions of this file are derived from https://github.com/microsoft/autogen under the MIT License.
5
+ # Portions derived from https://github.com/microsoft/autogen are under the MIT License.
6
6
  # SPDX-License-Identifier: MIT
7
7
  from __future__ import annotations
8
8
 
@@ -1,8 +1,8 @@
1
- # Copyright (c) 2023 - 2024, Owners of https://github.com/autogen-ai
1
+ # Copyright (c) 2023 - 2024, Owners of https://github.com/ag2ai
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
  #
5
- # Original portions of this file are derived from https://github.com/microsoft/autogen under the MIT License.
5
+ # Portions derived from https://github.com/microsoft/autogen are under the MIT License.
6
6
  # SPDX-License-Identifier: MIT
7
7
  from __future__ import annotations
8
8
 
autogen/coding/factory.py CHANGED
@@ -1,8 +1,8 @@
1
- # Copyright (c) 2023 - 2024, Owners of https://github.com/autogen-ai
1
+ # Copyright (c) 2023 - 2024, Owners of https://github.com/ag2ai
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
  #
5
- # Original portions of this file are derived from https://github.com/microsoft/autogen under the MIT License.
5
+ # Portions derived from https://github.com/microsoft/autogen are under the MIT License.
6
6
  # SPDX-License-Identifier: MIT
7
7
  from .base import CodeExecutionConfig, CodeExecutor
8
8
 
@@ -1,8 +1,8 @@
1
- # Copyright (c) 2023 - 2024, Owners of https://github.com/autogen-ai
1
+ # Copyright (c) 2023 - 2024, Owners of https://github.com/ag2ai
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
  #
5
- # Original portions of this file are derived from https://github.com/microsoft/autogen under the MIT License.
5
+ # Portions derived from https://github.com/microsoft/autogen are under the MIT License.
6
6
  # SPDX-License-Identifier: MIT
7
7
  from __future__ import annotations
8
8
 
@@ -1,8 +1,8 @@
1
- # Copyright (c) 2023 - 2024, Owners of https://github.com/autogen-ai
1
+ # Copyright (c) 2023 - 2024, Owners of https://github.com/ag2ai
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
  #
5
- # Original portions of this file are derived from https://github.com/microsoft/autogen under the MIT License.
5
+ # Portions derived from https://github.com/microsoft/autogen are under the MIT License.
6
6
  # SPDX-License-Identifier: MIT
7
7
  from dataclasses import dataclass
8
8
  from typing import Optional, Protocol, runtime_checkable
@@ -1,8 +1,8 @@
1
- # Copyright (c) 2023 - 2024, Owners of https://github.com/autogen-ai
1
+ # Copyright (c) 2023 - 2024, Owners of https://github.com/ag2ai
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
  #
5
- # Original portions of this file are derived from https://github.com/microsoft/autogen under the MIT License.
5
+ # Portions derived from https://github.com/microsoft/autogen are under the MIT License.
6
6
  # SPDX-License-Identifier: MIT
7
7
  from __future__ import annotations
8
8
 
@@ -1,8 +1,8 @@
1
- # Copyright (c) 2023 - 2024, Owners of https://github.com/autogen-ai
1
+ # Copyright (c) 2023 - 2024, Owners of https://github.com/ag2ai
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
  #
5
- # Original portions of this file are derived from https://github.com/microsoft/autogen under the MIT License.
5
+ # Portions derived from https://github.com/microsoft/autogen are under the MIT License.
6
6
  # SPDX-License-Identifier: MIT
7
7
  import base64
8
8
  import json
@@ -1,8 +1,8 @@
1
- # Copyright (c) 2023 - 2024, Owners of https://github.com/autogen-ai
1
+ # Copyright (c) 2023 - 2024, Owners of https://github.com/ag2ai
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
  #
5
- # Original portions of this file are derived from https://github.com/microsoft/autogen under the MIT License.
5
+ # Portions derived from https://github.com/microsoft/autogen are under the MIT License.
6
6
  # SPDX-License-Identifier: MIT
7
7
  from __future__ import annotations
8
8
 
@@ -1,8 +1,8 @@
1
- # Copyright (c) 2023 - 2024, Owners of https://github.com/autogen-ai
1
+ # Copyright (c) 2023 - 2024, Owners of https://github.com/ag2ai
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
  #
5
- # Original portions of this file are derived from https://github.com/microsoft/autogen under the MIT License.
5
+ # Portions derived from https://github.com/microsoft/autogen are under the MIT License.
6
6
  # SPDX-License-Identifier: MIT
7
7
  import base64
8
8
  import json
@@ -1,8 +1,8 @@
1
- # Copyright (c) 2023 - 2024, Owners of https://github.com/autogen-ai
1
+ # Copyright (c) 2023 - 2024, Owners of https://github.com/ag2ai
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
  #
5
- # Original portions of this file are derived from https://github.com/microsoft/autogen under the MIT License.
5
+ # Portions derived from https://github.com/microsoft/autogen are under the MIT License.
6
6
  # SPDX-License-Identifier: MIT
7
7
  from __future__ import annotations
8
8
 
@@ -1,8 +1,8 @@
1
- # Copyright (c) 2023 - 2024, Owners of https://github.com/autogen-ai
1
+ # Copyright (c) 2023 - 2024, Owners of https://github.com/ag2ai
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
  #
5
- # Original portions of this file are derived from https://github.com/microsoft/autogen under the MIT License.
5
+ # Portions derived from https://github.com/microsoft/autogen are under the MIT License.
6
6
  # SPDX-License-Identifier: MIT
7
7
  import logging
8
8
  import os
@@ -1,8 +1,8 @@
1
- # Copyright (c) 2023 - 2024, Owners of https://github.com/autogen-ai
1
+ # Copyright (c) 2023 - 2024, Owners of https://github.com/ag2ai
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
  #
5
- # Original portions of this file are derived from https://github.com/microsoft/autogen under the MIT License.
5
+ # Portions derived from https://github.com/microsoft/autogen are under the MIT License.
6
6
  # SPDX-License-Identifier: MIT
7
7
  import re
8
8
  from typing import Any, Dict, List, Optional, Union
autogen/coding/utils.py CHANGED
@@ -1,8 +1,8 @@
1
- # Copyright (c) 2023 - 2024, Owners of https://github.com/autogen-ai
1
+ # Copyright (c) 2023 - 2024, Owners of https://github.com/ag2ai
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
  #
5
- # Original portions of this file are derived from https://github.com/microsoft/autogen under the MIT License.
5
+ # Portions derived from https://github.com/ag2ai/ag2 are under the MIT License.
6
6
  # SPDX-License-Identifier: MIT
7
7
  # Will return the filename relative to the workspace path
8
8
  import re
autogen/oai/bedrock.py CHANGED
@@ -1,3 +1,9 @@
1
+ # Copyright (c) 2023 - 2024, Owners of https://github.com/ag2ai
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+ #
5
+ # Portions derived from https://github.com/microsoft/autogen are under the MIT License.
6
+ # SPDX-License-Identifier: MIT
1
7
  """
2
8
  Create a compatible client for the Amazon Bedrock Converse API.
3
9
 
autogen/oai/cerebras.py CHANGED
@@ -1,3 +1,9 @@
1
+ # Copyright (c) 2023 - 2024, Owners of https://github.com/ag2ai
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+ #
5
+ # Portions derived from https://github.com/microsoft/autogen are under the MIT License.
6
+ # SPDX-License-Identifier: MIT
1
7
  """Create an OpenAI-compatible client using Cerebras's API.
2
8
 
3
9
  Example:
autogen/oai/ollama.py CHANGED
@@ -1,3 +1,9 @@
1
+ # Copyright (c) 2023 - 2024, Owners of https://github.com/ag2ai
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+ #
5
+ # Portions derived from https://github.com/microsoft/autogen are under the MIT License.
6
+ # SPDX-License-Identifier: MIT
1
7
  """Create an OpenAI-compatible client using Ollama's API.
2
8
 
3
9
  Example:
@@ -35,6 +35,7 @@ OAI_PRICE1K = {
35
35
  "gpt-4o": (0.005, 0.015),
36
36
  "gpt-4o-2024-05-13": (0.005, 0.015),
37
37
  "gpt-4o-2024-08-06": (0.0025, 0.01),
38
+ "gpt-4o-2024-11-20": (0.0025, 0.01),
38
39
  # gpt-4-turbo
39
40
  "gpt-4-turbo-2024-04-09": (0.01, 0.03),
40
41
  # gpt-4
@@ -56,6 +56,7 @@ def get_max_token_limit(model: str = "gpt-3.5-turbo-0613") -> int:
56
56
  "gpt-4o": 128000,
57
57
  "gpt-4o-2024-05-13": 128000,
58
58
  "gpt-4o-2024-08-06": 128000,
59
+ "gpt-4o-2024-11-20": 128000,
59
60
  "gpt-4o-mini": 128000,
60
61
  "gpt-4o-mini-2024-07-18": 128000,
61
62
  }
@@ -131,6 +132,7 @@ def _num_token_from_messages(messages: Union[List, Dict], model="gpt-3.5-turbo-0
131
132
  "gpt-4o",
132
133
  "gpt-4o-2024-05-13",
133
134
  "gpt-4o-2024-08-06",
135
+ "gpt-4o-2024-11-20",
134
136
  "gpt-4o-mini",
135
137
  "gpt-4o-mini-2024-07-18",
136
138
  }:
autogen/version.py CHANGED
@@ -4,4 +4,4 @@
4
4
  #
5
5
  # Portions derived from https://github.com/microsoft/autogen are under the MIT License.
6
6
  # SPDX-License-Identifier: MIT
7
- __version__ = "0.4b1"
7
+ __version__ = "0.4.1"
@@ -1,115 +0,0 @@
1
- autogen/__init__.py,sha256=eNsTdCkF0qnFdptTUXK9T7Vx7SbUVjvIt3ryRdsyCL4,491
2
- autogen/_pydantic.py,sha256=HRc_pCb9puuh4uOyVzeJPNm__XSYbLQ26Gnc5xXgQU8,3409
3
- autogen/browser_utils.py,sha256=DiDUvsiSkTFItU_tOqTQAbeg3E8Br9SX2cd2P-zOipM,11939
4
- autogen/code_utils.py,sha256=NS2QrVxpVQo2e5QNndXy6mRmtfv_zHs4ZHl-MMib4z4,29835
5
- autogen/exception_utils.py,sha256=WEdeVlc_otHXgWQZ-lqaHdezXdrl3Q4M-qfpBv4eiE0,1581
6
- autogen/formatting_utils.py,sha256=lhNmim0G6Vmlrz6D-ra6u0YRt7wP98nSGubRYJ3717Q,1913
7
- autogen/function_utils.py,sha256=6wTb2LxTzGveMk360JerU9l7hA497alMet8q2o9BqDo,12245
8
- autogen/graph_utils.py,sha256=Bszgh51Pdpuc2o05IX6aa7uCD_p1BCqYVaipozStQlE,6416
9
- autogen/math_utils.py,sha256=gXgTqhT1BssQ4EjPPd9tXlHgKuftuSu5DYW-lxgMx4s,10274
10
- autogen/retrieve_utils.py,sha256=CndQ0lr7dsRGLltudqp-O_dC_4NgO6fmhzka8iXLa-g,19600
11
- autogen/runtime_logging.py,sha256=iAJO_oddNfItIghNlTv060Ld0NybK52SzL7qu3n0vRw,4837
12
- autogen/token_count_utils.py,sha256=z9HMEYf9DWr3IJah-PyzIwU_vr64_NF_6U0WCFI1L7s,10240
13
- autogen/types.py,sha256=zkSwYEfDePIsuk03IgutDPwb1QlFK-rAu23uYvQKrXE,601
14
- autogen/version.py,sha256=4LnAqSTAUIszZcTSEdMLr0I4xotjCK6n6PWKmBUHhWY,248
15
- autogen/agentchat/__init__.py,sha256=GhEKIablUdEaWlW8i7VpHwtzIVOl6N9sgbnAcT-X9jw,1091
16
- autogen/agentchat/agent.py,sha256=r3jjZbVGkms4a8FTOXzyiQQ7PcMPVBj8zwbSJ-siwXg,4764
17
- autogen/agentchat/assistant_agent.py,sha256=cEaYk15yyeRSE3LaguDThxzZFgTWiPJ1SxTvAvK6t68,5548
18
- autogen/agentchat/chat.py,sha256=F7WNQc_feDg0pXwkqG0ER74jy_zRzj6NO7MVNwEQcPM,12484
19
- autogen/agentchat/conversable_agent.py,sha256=T-lnzd8BVTvgujjRsUJ1N1KrLo2ojQ7HG6l-CCnEVAA,139387
20
- autogen/agentchat/groupchat.py,sha256=2kzT4nf_Yexuq8YqcmJSX9TA2QoTv9yZXZ8W5Q3NpA8,83877
21
- autogen/agentchat/user_proxy_agent.py,sha256=c-RG-Sb_O3p3QnePkOVepVI5olyfKOlsM9SQaEOcthw,7307
22
- autogen/agentchat/utils.py,sha256=Y-FjMcwiJuO-WsgLDuXep_IU2absAMwQulCKs9QdHVc,8036
23
- autogen/agentchat/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
- autogen/agentchat/contrib/agent_builder.py,sha256=z08C5-zpAXqKliX0vSdhphHr1w43YqENjYK6uhjKYdY,32699
25
- autogen/agentchat/contrib/agent_optimizer.py,sha256=dSsRIcYwZXxTWIGn_0gUl-zvDnWgOSQKyImzmkE6UPQ,22446
26
- autogen/agentchat/contrib/captainagent.py,sha256=ir079N3lk_xphZjrus8WZntZT2maCuJUj7anRbKaOkU,25500
27
- autogen/agentchat/contrib/gpt_assistant_agent.py,sha256=5aNsw8HJQKw5KumHRZekT2smnHR9e4PLRvIZzfsNPQw,25146
28
- autogen/agentchat/contrib/img_utils.py,sha256=XEnLKeWOXoD1IiWf8IT1A3QiUE8ZEdZrjxUaJwR1WVY,14276
29
- autogen/agentchat/contrib/llamaindex_conversable_agent.py,sha256=BSfjG4fDXjG4jpBmyAso5k1dK8JJPYWoNuL4LiYl-EM,4535
30
- autogen/agentchat/contrib/llava_agent.py,sha256=pVKcwa_16Pg6lBfGJ6JXWUH-nAUtgW05q6KdhDESass,6330
31
- autogen/agentchat/contrib/math_user_proxy_agent.py,sha256=Q6YI8Z3M4Ndcp8ruMtpEr16rxLi4ZnIKKnYD8ujv33I,19938
32
- autogen/agentchat/contrib/multimodal_conversable_agent.py,sha256=vDYP6c3K1L6HaefG4gItGvlrbAa91KERJQTKZlMpe2c,5155
33
- autogen/agentchat/contrib/qdrant_retrieve_user_proxy_agent.py,sha256=mgKHvKbx5dcTRMlE4yg6K6DMmfVWuIxncNHdf987Ct4,19406
34
- autogen/agentchat/contrib/retrieve_assistant_agent.py,sha256=79igEA0r1eZYSuWKOCKkUwCV1c5yTWH295-L2-4ao4c,2424
35
- autogen/agentchat/contrib/retrieve_user_proxy_agent.py,sha256=kDEQ_HJ5nvbBmsCf-oyCnZGxzv3R0VawoLHKuNz5v4c,37069
36
- autogen/agentchat/contrib/society_of_mind_agent.py,sha256=lRF69C8ejcqPRGj5_fPtUs2NandyATw010OJB7OTdos,9087
37
- autogen/agentchat/contrib/swarm_agent.py,sha256=qeBV6XoBPdEGbJgSf2ZmpFEuDKmE1etee9X7hJNV7Bs,17032
38
- autogen/agentchat/contrib/text_analyzer_agent.py,sha256=WitXX--yoGh3Xq_jC_D85Unt7UCVPdhM4MzuVJxiRSg,3563
39
- autogen/agentchat/contrib/tool_retriever.py,sha256=WIOTdHOWR-JRscw9RJBRAuuSYqV97nhUhGw3yQ0J8sg,4304
40
- autogen/agentchat/contrib/web_surfer.py,sha256=kAqbfuyj_lK61VUhvVUM83CYs_Hsut6eKPy388LVwL8,14563
41
- autogen/agentchat/contrib/capabilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
- autogen/agentchat/contrib/capabilities/agent_capability.py,sha256=f6cBV4FcMvA7oZE1_o42RUUayC3KTkKOB7wW2fFEjso,771
43
- autogen/agentchat/contrib/capabilities/generate_images.py,sha256=B0n9bSNovYLcSMSYwtYAwOMnx77y52jucQtGZ4RbA60,12627
44
- autogen/agentchat/contrib/capabilities/teachability.py,sha256=6PUVPC-rCGH6D0r-xEzyXTAm8-OqjftvZFL8wmcpJ6U,19501
45
- autogen/agentchat/contrib/capabilities/text_compressors.py,sha256=xKQwv268AVZYKK-RdZMhNyjabT-6y-lJ7a1jxepFs4Q,3080
46
- autogen/agentchat/contrib/capabilities/transform_messages.py,sha256=RdzTnmlRS5aXA8dtxQky3P4rVlveU1aibeH40sXoKKQ,3708
47
- autogen/agentchat/contrib/capabilities/transforms.py,sha256=4a1Gb_8ol48l-g0B7V9Mqful6A9gCizSRayhR_HudwY,25637
48
- autogen/agentchat/contrib/capabilities/transforms_util.py,sha256=-OnVwZeHhmJhV-FkiOODpsAU8-gZkcJSwJMpctOyz8Y,4441
49
- autogen/agentchat/contrib/capabilities/vision_capability.py,sha256=XzKKLXOffNWAowgF0f2CS050fdRvVWT0ce7F68T1q5I,10058
50
- autogen/agentchat/contrib/graph_rag/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
- autogen/agentchat/contrib/graph_rag/document.py,sha256=yUR0_i9h5XaTiMLvV7--gjaUM9YOUB5N2LkK5-HXC5o,413
52
- autogen/agentchat/contrib/graph_rag/falkor_graph_query_engine.py,sha256=0qmPapOsj4qim2QYAgOqdH6HB5MzPrOcQpdL2AocLoc,2695
53
- autogen/agentchat/contrib/graph_rag/graph_query_engine.py,sha256=FnVJkKFopMvsqo-7YShaFQGGQ4tDbBVZIwb5me1g2DE,1537
54
- autogen/agentchat/contrib/graph_rag/graph_rag_capability.py,sha256=0aqzxxmtRduy9fXCutIeHICZMphijOnMInOdadAfWEE,1997
55
- autogen/agentchat/contrib/vectordb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
- autogen/agentchat/contrib/vectordb/base.py,sha256=50MchILyOfBHPuBg1G1nM2vIuzKfoQKssCXKvbMKruU,9151
57
- autogen/agentchat/contrib/vectordb/chromadb.py,sha256=2dFVBd_Icj_GJ4XOVC5D4LYNFXtzoDmXux-WuTW7EDw,13480
58
- autogen/agentchat/contrib/vectordb/mongodb.py,sha256=iD7ayIrTZ9V3xV0nOOWpQ3U8GWDDmVMB8wW_o5CKEtY,23192
59
- autogen/agentchat/contrib/vectordb/pgvectordb.py,sha256=RxTvZciJkT1oty4CFer-gVvGX0sRHp_xFgQPh0de6HM,39240
60
- autogen/agentchat/contrib/vectordb/qdrant.py,sha256=SVho_uZPfPjFamz2raPudx-wFOx1wNCf90UvK_TozcI,13823
61
- autogen/agentchat/contrib/vectordb/utils.py,sha256=skh86LXkbW5owCehkj887D7cIMxgT35Mk4vu75SWFIc,4435
62
- autogen/cache/__init__.py,sha256=uXnBVq_fGjRt5ypTrTtUuZ1KKFKOqR2iOiT27G0Az28,336
63
- autogen/cache/abstract_cache_base.py,sha256=lIx9XeFhgNGRrsC4ferOUmGxskyMBu1wC6KTvbjO9j8,2388
64
- autogen/cache/cache.py,sha256=BH3892nm3DO4q0HIDLNh--zp6vfefmyOqULJZmmRq8s,6408
65
- autogen/cache/cache_factory.py,sha256=xmTCC_GY2gc3MmxNzjzrH-V2vbsHYNoQwoAr6ifSQ08,3038
66
- autogen/cache/cosmos_db_cache.py,sha256=9BlJc3hmyAB16leb9MAfgnpX58eOpRadlh1P4FzRdzA,5797
67
- autogen/cache/disk_cache.py,sha256=fHWga6HmMBLvI9o8Et3vIgeqsEdKCNaHSXgrw0rSot8,3357
68
- autogen/cache/in_memory_cache.py,sha256=CXd8TRcCh4vOTgvLqUPKnQfN8fCEQJib5aR4RxZWBu4,1849
69
- autogen/cache/redis_cache.py,sha256=r6vzXbU8nZkqErcB0KiEI7v7D8icpuBq7ZM9oxnHFdA,4137
70
- autogen/coding/__init__.py,sha256=bbs19EUNBaAcISEavwfJssKS-_QIfNcTWKkM9u3wSTU,791
71
- autogen/coding/base.py,sha256=UN7AnCtAAqkrMSAfwN-PKh9u7wMPSmSRvPdb5nQh8Hk,3594
72
- autogen/coding/docker_commandline_code_executor.py,sha256=Yv4hL-VEC8VPt9smUfDTbSTbB3ONeptKlPtpZJsnAmI,9600
73
- autogen/coding/factory.py,sha256=u-OzGT2i04IOlC38XHEp4tVaQ4UCuzyQ7S5O0eyH02Q,1895
74
- autogen/coding/func_with_reqs.py,sha256=OXIftScn08abW6IxMA1_qCWw2w27x25J4mYn3HVqhOA,6399
75
- autogen/coding/local_commandline_code_executor.py,sha256=ZdYVFeIK-PmRdxs7jqZwX9unj7QSnuDAmU7x2HxJhbo,16748
76
- autogen/coding/markdown_code_extractor.py,sha256=_H6B93Y5CbC5artw6G7TcZGi_imJAKSQIajJb7s98ns,1595
77
- autogen/coding/utils.py,sha256=0TL1wYSShRtQvkgi8o_M1_CaBpxVdyEGv0QVttdn-gY,2110
78
- autogen/coding/jupyter/__init__.py,sha256=FfaEWT1EUW2l44rjmDDQmj60W76H-jIHmVSP1ZdouFc,795
79
- autogen/coding/jupyter/base.py,sha256=aQIYeL4PRE0awiUGfvDA_RO9UU00gs2aSlZVLMelY6w,1015
80
- autogen/coding/jupyter/docker_jupyter_server.py,sha256=or17u84l4NacCPEk_isLTUnCigdouvUFtgyqPBuGT5Y,5695
81
- autogen/coding/jupyter/embedded_ipython_code_executor.py,sha256=2DWAIYLjZGVrYP1AUopW14AKXqNwL3PwlcaMGLwrK-0,8088
82
- autogen/coding/jupyter/jupyter_client.py,sha256=8kIHjh2kD5Wh6Ci9uj8r3eq8qSdyZI-eqo4iZPy74II,8296
83
- autogen/coding/jupyter/jupyter_code_executor.py,sha256=0CVu18Uw2A3uUujCWxBkrxTKVzLRC41FNvTLuNiWXH8,6376
84
- autogen/coding/jupyter/local_jupyter_server.py,sha256=no8lLzm-3U2qwhlBDq4YqM7tDULCq8ANsHhsoCqZ934,6404
85
- autogen/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
86
- autogen/io/__init__.py,sha256=LARrer2Vn88okcf-EBq5zn6vAHt9yAs2rh3cl1_HdMM,561
87
- autogen/io/base.py,sha256=xIK9vTat6HHcwMndGNFcY17B3y62C8bRTk3tezf7A_w,3425
88
- autogen/io/console.py,sha256=lYzBsy7VWTsTP0Evxsd6tarVYR1v8btjItoCRxe3vg4,1407
89
- autogen/io/websockets.py,sha256=qK2DLDTx5rGtuhsRPpV-xleuLCBy4Oorpc5WggKHcf4,7264
90
- autogen/logger/__init__.py,sha256=1aNIdfAhzJjf8qJSqsgCCEbZcBGIcJdiXbS1G6iMns8,403
91
- autogen/logger/base_logger.py,sha256=boarsJGfgD_vZYqDROsHyauouQaLdeQkP9xMfJEMWWo,5159
92
- autogen/logger/file_logger.py,sha256=faApnlfmJ42x0JD5JDmOsBpNxMqwZY9HMJh6LGXMKYg,10402
93
- autogen/logger/logger_factory.py,sha256=RNr12g2pPTeBEJzeYrbp3KWeJxpZnEGvlufYiFeyq8A,941
94
- autogen/logger/logger_utils.py,sha256=-P3_YWBEFsTF8MgQ9oc5AqLb6fSdjDJZ8FOg5hs8oMM,1436
95
- autogen/logger/sqlite_logger.py,sha256=vkZtYLWKKGDHh0GCTbp_4PWBl9-yjhzii1cnQ7-lQkQ,16430
96
- autogen/oai/__init__.py,sha256=6HF5dNTEgwi-rM-A273XtVBSyvkIsKtNpccsoNXWdqY,911
97
- autogen/oai/anthropic.py,sha256=ibeH8-NLfeNDKpGdjJbh9dPoUWJGzBszguKaWzJJLzs,17249
98
- autogen/oai/bedrock.py,sha256=oTd7qWw3zfMhYLA2QUGoOiPNeA1hDG7ooaA-iqavRfI,23562
99
- autogen/oai/cerebras.py,sha256=7TrdvplPx5ATbFwSIvwqg_8Xmzkjsi2Hr9Q60w5uyZk,10669
100
- autogen/oai/client.py,sha256=HR8ATrTlNoSM8fr0fH9cmKR-lxr3Rd62kBI0aj-eoNg,52615
101
- autogen/oai/client_utils.py,sha256=W9RD6V3XPpelDqPwjG412go4qXfYWDPmKur68s-Siu0,7282
102
- autogen/oai/cohere.py,sha256=giMIRomeAEd3y0QsulmWYYLXXCfsqY0ojKG4UzwQ2SI,18513
103
- autogen/oai/completion.py,sha256=dT2LEjmRUMXx0UR7OKs6zYQH-cDtW5m0vWvwXXOjmvk,53652
104
- autogen/oai/gemini.py,sha256=YNrwGKwPVglfUhx2XPph9AbPN0b5IbPMaT0njWPEXjI,20595
105
- autogen/oai/groq.py,sha256=gpLe1UJZMtkJAks2mj40aksvMcQ0oBjgOxRuTVupG7s,11164
106
- autogen/oai/mistral.py,sha256=1xybwfihh6n2HyLlCNNebT01SYVIwNj9ClIms92ySak,11414
107
- autogen/oai/ollama.py,sha256=lKGvNdVoNhpvssYu-shrNPcMHczBX1kVktZe77c9zz0,25383
108
- autogen/oai/openai_utils.py,sha256=zZU1GFZsqy_dEYvt5UbCfRPh_i3nIFvGVnmF3kbTUvU,35162
109
- autogen/oai/together.py,sha256=AfEx2Dt4limeVvnCibtwvs9OuJkS1wcYFdA-P-gDzRw,13411
110
- ag2-0.4b1.dist-info/LICENSE,sha256=GEFQVNayAR-S_rQD5l8hPdgvgyktVdy4Bx5-v90IfRI,11384
111
- ag2-0.4b1.dist-info/METADATA,sha256=gGFTLvAIcn8UdRmqt52Z4lhmstqgjjK-AHXUMfNT6Gw,24897
112
- ag2-0.4b1.dist-info/NOTICE.md,sha256=ucvou1bE6i2s40qyuU9RL0TeIVG01VhXoQ59EngtEz4,1317
113
- ag2-0.4b1.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
114
- ag2-0.4b1.dist-info/top_level.txt,sha256=qRZ2MW8yuy0LtOLpeZndl4H1buusjxhwD6c9AXbVqKQ,8
115
- ag2-0.4b1.dist-info/RECORD,,
File without changes
File without changes
File without changes