ag2 0.6.1__tar.gz → 0.7.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.

Potentially problematic release.


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

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ag2
3
- Version: 0.6.1
3
+ Version: 0.7.0
4
4
  Summary: Alias package for pyautogen
5
5
  Home-page: https://github.com/ag2ai/ag2
6
6
  Author: Chi Wang & Qingyun Wu
@@ -12,41 +12,41 @@ Classifier: License :: OSI Approved :: Apache Software License
12
12
  Classifier: Operating System :: OS Independent
13
13
  Requires-Python: >=3.9,<3.14
14
14
  Description-Content-Type: text/markdown
15
- Provides-Extra: anthropic
16
- Provides-Extra: autobuild
17
- Provides-Extra: bedrock
15
+ Provides-Extra: test
18
16
  Provides-Extra: blendsearch
19
- Provides-Extra: captainagent
20
- Provides-Extra: cerebras
21
- Provides-Extra: cohere
22
- Provides-Extra: cosmosdb
23
- Provides-Extra: gemini
24
- Provides-Extra: graph
25
- Provides-Extra: graph-rag-falkor-db
26
- Provides-Extra: groq
27
- Provides-Extra: interop
28
- Provides-Extra: interop-crewai
29
- Provides-Extra: interop-langchain
30
- Provides-Extra: interop-pydantic-ai
31
- Provides-Extra: jupyter-executor
32
- Provides-Extra: lmm
33
- Provides-Extra: long-context
34
17
  Provides-Extra: mathchat
35
- Provides-Extra: mistral
36
- Provides-Extra: neo4j
37
- Provides-Extra: ollama
38
- Provides-Extra: redis
39
18
  Provides-Extra: retrievechat
40
- Provides-Extra: retrievechat-mongodb
41
19
  Provides-Extra: retrievechat-pgvector
20
+ Provides-Extra: retrievechat-mongodb
42
21
  Provides-Extra: retrievechat-qdrant
22
+ Provides-Extra: graph-rag-falkor-db
23
+ Provides-Extra: autobuild
24
+ Provides-Extra: captainagent
43
25
  Provides-Extra: teachable
44
- Provides-Extra: test
26
+ Provides-Extra: lmm
27
+ Provides-Extra: graph
28
+ Provides-Extra: gemini
45
29
  Provides-Extra: together
46
- Provides-Extra: twilio
47
- Provides-Extra: types
48
- Provides-Extra: websockets
49
30
  Provides-Extra: websurfer
31
+ Provides-Extra: redis
32
+ Provides-Extra: cosmosdb
33
+ Provides-Extra: websockets
34
+ Provides-Extra: jupyter-executor
35
+ Provides-Extra: types
36
+ Provides-Extra: long-context
37
+ Provides-Extra: anthropic
38
+ Provides-Extra: cerebras
39
+ Provides-Extra: mistral
40
+ Provides-Extra: groq
41
+ Provides-Extra: cohere
42
+ Provides-Extra: ollama
43
+ Provides-Extra: bedrock
44
+ Provides-Extra: twilio
45
+ Provides-Extra: interop-crewai
46
+ Provides-Extra: interop-langchain
47
+ Provides-Extra: interop-pydantic-ai
48
+ Provides-Extra: interop
49
+ Provides-Extra: neo4j
50
50
  License-File: LICENSE
51
51
  License-File: NOTICE.md
52
52
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ag2
3
- Version: 0.6.1
3
+ Version: 0.7.0
4
4
  Summary: Alias package for pyautogen
5
5
  Home-page: https://github.com/ag2ai/ag2
6
6
  Author: Chi Wang & Qingyun Wu
@@ -12,41 +12,41 @@ Classifier: License :: OSI Approved :: Apache Software License
12
12
  Classifier: Operating System :: OS Independent
13
13
  Requires-Python: >=3.9,<3.14
14
14
  Description-Content-Type: text/markdown
15
- Provides-Extra: anthropic
16
- Provides-Extra: autobuild
17
- Provides-Extra: bedrock
15
+ Provides-Extra: test
18
16
  Provides-Extra: blendsearch
19
- Provides-Extra: captainagent
20
- Provides-Extra: cerebras
21
- Provides-Extra: cohere
22
- Provides-Extra: cosmosdb
23
- Provides-Extra: gemini
24
- Provides-Extra: graph
25
- Provides-Extra: graph-rag-falkor-db
26
- Provides-Extra: groq
27
- Provides-Extra: interop
28
- Provides-Extra: interop-crewai
29
- Provides-Extra: interop-langchain
30
- Provides-Extra: interop-pydantic-ai
31
- Provides-Extra: jupyter-executor
32
- Provides-Extra: lmm
33
- Provides-Extra: long-context
34
17
  Provides-Extra: mathchat
35
- Provides-Extra: mistral
36
- Provides-Extra: neo4j
37
- Provides-Extra: ollama
38
- Provides-Extra: redis
39
18
  Provides-Extra: retrievechat
40
- Provides-Extra: retrievechat-mongodb
41
19
  Provides-Extra: retrievechat-pgvector
20
+ Provides-Extra: retrievechat-mongodb
42
21
  Provides-Extra: retrievechat-qdrant
22
+ Provides-Extra: graph-rag-falkor-db
23
+ Provides-Extra: autobuild
24
+ Provides-Extra: captainagent
43
25
  Provides-Extra: teachable
44
- Provides-Extra: test
26
+ Provides-Extra: lmm
27
+ Provides-Extra: graph
28
+ Provides-Extra: gemini
45
29
  Provides-Extra: together
46
- Provides-Extra: twilio
47
- Provides-Extra: types
48
- Provides-Extra: websockets
49
30
  Provides-Extra: websurfer
31
+ Provides-Extra: redis
32
+ Provides-Extra: cosmosdb
33
+ Provides-Extra: websockets
34
+ Provides-Extra: jupyter-executor
35
+ Provides-Extra: types
36
+ Provides-Extra: long-context
37
+ Provides-Extra: anthropic
38
+ Provides-Extra: cerebras
39
+ Provides-Extra: mistral
40
+ Provides-Extra: groq
41
+ Provides-Extra: cohere
42
+ Provides-Extra: ollama
43
+ Provides-Extra: bedrock
44
+ Provides-Extra: twilio
45
+ Provides-Extra: interop-crewai
46
+ Provides-Extra: interop-langchain
47
+ Provides-Extra: interop-pydantic-ai
48
+ Provides-Extra: interop
49
+ Provides-Extra: neo4j
50
50
  License-File: LICENSE
51
51
  License-File: NOTICE.md
52
52
 
@@ -2,7 +2,6 @@ LICENSE
2
2
  NOTICE.md
3
3
  README.md
4
4
  pyproject.toml
5
- setup.py
6
5
  setup_ag2.py
7
6
  ag2.egg-info/PKG-INFO
8
7
  ag2.egg-info/SOURCES.txt
@@ -11,7 +10,6 @@ ag2.egg-info/requires.txt
11
10
  ag2.egg-info/top_level.txt
12
11
  test/test_browser_utils.py
13
12
  test/test_code_utils.py
14
- test/test_function_utils.py
15
13
  test/test_graph_utils.py
16
14
  test/test_logging.py
17
15
  test/test_notebook.py
@@ -0,0 +1,106 @@
1
+ pyautogen==0.7.0
2
+
3
+ [anthropic]
4
+ pyautogen[anthropic]==0.7.0
5
+
6
+ [autobuild]
7
+ pyautogen[autobuild]==0.7.0
8
+
9
+ [bedrock]
10
+ pyautogen[bedrock]==0.7.0
11
+
12
+ [blendsearch]
13
+ pyautogen[blendsearch]==0.7.0
14
+
15
+ [captainagent]
16
+ pyautogen[captainagent]==0.7.0
17
+
18
+ [cerebras]
19
+ pyautogen[cerebras]==0.7.0
20
+
21
+ [cohere]
22
+ pyautogen[cohere]==0.7.0
23
+
24
+ [cosmosdb]
25
+ pyautogen[cosmosdb]==0.7.0
26
+
27
+ [gemini]
28
+ pyautogen[gemini]==0.7.0
29
+
30
+ [graph]
31
+ pyautogen[graph]==0.7.0
32
+
33
+ [graph-rag-falkor-db]
34
+ pyautogen[graph-rag-falkor-db]==0.7.0
35
+
36
+ [groq]
37
+ pyautogen[groq]==0.7.0
38
+
39
+ [interop]
40
+ pyautogen[interop]==0.7.0
41
+
42
+ [interop-crewai]
43
+ pyautogen[interop-crewai]==0.7.0
44
+
45
+ [interop-langchain]
46
+ pyautogen[interop-langchain]==0.7.0
47
+
48
+ [interop-pydantic-ai]
49
+ pyautogen[interop-pydantic-ai]==0.7.0
50
+
51
+ [jupyter-executor]
52
+ pyautogen[jupyter-executor]==0.7.0
53
+
54
+ [lmm]
55
+ pyautogen[lmm]==0.7.0
56
+
57
+ [long-context]
58
+ pyautogen[long-context]==0.7.0
59
+
60
+ [mathchat]
61
+ pyautogen[mathchat]==0.7.0
62
+
63
+ [mistral]
64
+ pyautogen[mistral]==0.7.0
65
+
66
+ [neo4j]
67
+ pyautogen[neo4j]==0.7.0
68
+
69
+ [ollama]
70
+ pyautogen[ollama]==0.7.0
71
+
72
+ [redis]
73
+ pyautogen[redis]==0.7.0
74
+
75
+ [retrievechat]
76
+ pyautogen[retrievechat]==0.7.0
77
+
78
+ [retrievechat-mongodb]
79
+ pyautogen[retrievechat-mongodb]==0.7.0
80
+
81
+ [retrievechat-pgvector]
82
+ pyautogen[retrievechat-pgvector]==0.7.0
83
+
84
+ [retrievechat-qdrant]
85
+ pyautogen[retrievechat-qdrant]==0.7.0
86
+
87
+ [teachable]
88
+ pyautogen[teachable]==0.7.0
89
+
90
+ [test]
91
+ pyautogen[test]==0.7.0
92
+
93
+ [together]
94
+ pyautogen[together]==0.7.0
95
+
96
+ [twilio]
97
+ pyautogen[twilio]==0.7.0
98
+
99
+ [types]
100
+ pyautogen[types]==0.7.0
101
+
102
+ [websockets]
103
+ pyautogen[websockets]==0.7.0
104
+
105
+ [websurfer]
106
+ pyautogen[websurfer]==0.7.0
@@ -0,0 +1,311 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [metadata]
6
+ license_file = "LICENSE"
7
+ description-file = "README.md"
8
+
9
+ [project]
10
+ name = "pyautogen"
11
+ description = "A programming framework for agentic AI"
12
+ readme = "README.md"
13
+ authors = [
14
+ {name = "Chi Wang", email = "support@ag2.ai"},
15
+ {name = "Qingyun Wu", email = "support@ag2.ai"},
16
+ ]
17
+
18
+ keywords = [
19
+ "ai",
20
+ "agent",
21
+ "autogen",
22
+ "ag2",
23
+ "pyautogen",
24
+ "ag2.ai",
25
+ "ag2ai",
26
+ "agentic"
27
+ ]
28
+
29
+ requires-python = ">=3.9,<3.14"
30
+
31
+ dynamic = ["version"]
32
+
33
+ classifiers = [
34
+ "Development Status :: 5 - Production/Stable",
35
+ "License :: OSI Approved :: Apache Software License",
36
+ "Programming Language :: Python",
37
+ "Programming Language :: Python :: Implementation :: CPython",
38
+ "Programming Language :: Python :: 3",
39
+ "Programming Language :: Python :: 3 :: Only",
40
+ "Programming Language :: Python :: 3.9",
41
+ "Programming Language :: Python :: 3.10",
42
+ "Programming Language :: Python :: 3.11",
43
+ "Programming Language :: Python :: 3.12",
44
+ "Programming Language :: Python :: 3.13",
45
+ "Operating System :: OS Independent",
46
+ "Topic :: Software Development :: Libraries :: Application Frameworks",
47
+ "Topic :: Software Development :: Libraries :: Python Modules",
48
+ "Topic :: Software Development :: Libraries",
49
+ "Topic :: Software Development",
50
+ "Intended Audience :: Developers",
51
+ "Intended Audience :: Information Technology",
52
+ ]
53
+
54
+ dependencies = [
55
+ "openai>=1.58",
56
+ "diskcache",
57
+ "termcolor",
58
+ "flaml",
59
+ # numpy is installed by flaml, but we want to pin the version to below 2.x (see https://github.com/microsoft/autogen/issues/1960)
60
+ "numpy>=2.1; python_version>='3.13'", # numpy 2.1+ required for Python 3.13
61
+ "numpy>=1.24.0,<2.0.0; python_version<'3.13'", # numpy 1.24+ for older Python versions
62
+ "python-dotenv",
63
+ "tiktoken",
64
+ # Disallowing 2.6.0 can be removed when this is fixed https://github.com/pydantic/pydantic/issues/8705
65
+ "pydantic>=1.10,<3,!=2.6.0", # could be both V1 and V2
66
+ "docker",
67
+ "packaging",
68
+ "websockets>=14,<15",
69
+ "asyncer==0.0.8",
70
+ "fast_depends>=2.4.12,<3",
71
+ ]
72
+
73
+ [project.optional-dependencies]
74
+ # public distributions
75
+ jupyter-executor = [
76
+ "jupyter-kernel-gateway",
77
+ "websocket-client",
78
+ "requests",
79
+ "jupyter-client>=8.6.0",
80
+ "ipykernel>=6.29.0",
81
+ ]
82
+
83
+ retrievechat = [
84
+ "protobuf==4.25.3",
85
+ "chromadb==0.5.3",
86
+ "sentence_transformers",
87
+ "pypdf",
88
+ "ipython",
89
+ "beautifulsoup4",
90
+ "markdownify",
91
+ ]
92
+
93
+ retrievechat-pgvector = [
94
+ "pyautogen[retrievechat]",
95
+ "pgvector>=0.2.5",
96
+ "psycopg[binary]>=3.1.18; platform_system=='Windows' or platform_system=='Darwin'",
97
+ "psycopg>=3.1.18; platform_system=='Linux'",
98
+ ]
99
+
100
+ retrievechat-mongodb = [
101
+ "pyautogen[retrievechat]",
102
+ "pymongo>=4.0.0",
103
+ ]
104
+
105
+ retrievechat-qdrant = [
106
+ "pyautogen[retrievechat]",
107
+ "qdrant_client",
108
+ "fastembed>=0.3.1",
109
+ ]
110
+
111
+ graph-rag-falkor-db = [
112
+ "graphrag_sdk==0.3.3",
113
+ "falkordb>=1.0.10"
114
+ ]
115
+
116
+ neo4j = [
117
+ "docx2txt==0.8",
118
+ "llama-index==0.12.5",
119
+ "llama-index-graph-stores-neo4j==0.4.2",
120
+ "llama-index-core==0.12.5",
121
+ "llama-index-readers-web==0.3.3",
122
+ ]
123
+
124
+ # used for agentchat_realtime_swarm notebook and realtime agent twilio demo
125
+ twilio = [
126
+ "fastapi>=0.115.0,<1",
127
+ "uvicorn>=0.30.6,<1",
128
+ "twilio>=9.3.2"
129
+ ]
130
+
131
+ interop-crewai = [
132
+ "crewai[tools]>=0.86,<1; python_version>='3.10' and python_version<'3.13'",
133
+ "weaviate-client==4.10.2; python_version>='3.10' and python_version<'3.13'",
134
+ ]
135
+ interop-langchain = ["langchain-community>=0.3.12,<1"]
136
+ interop-pydantic-ai = ["pydantic-ai==0.0.13"]
137
+ interop =[
138
+ "pyautogen[interop-crewai, interop-langchain, interop-pydantic-ai]",
139
+ ]
140
+
141
+ types = [
142
+ "mypy==1.9.0",
143
+ "pyautogen[test, jupyter-executor, interop]",
144
+ ]
145
+
146
+ # pysqlite3-binary used so it doesn't need to compile pysqlite3
147
+ autobuild = ["chromadb", "sentence-transformers", "huggingface-hub", "pysqlite3-binary"]
148
+
149
+ blendsearch = ["flaml[blendsearch]"]
150
+ mathchat = ["sympy", "pydantic==1.10.9", "wolframalpha"]
151
+ captainagent = ["pyautogen[autobuild]", "pandas"]
152
+ teachable = ["chromadb"]
153
+ lmm = ["replicate", "pillow"]
154
+ graph = ["networkx", "matplotlib"]
155
+ gemini = [
156
+ "google-generativeai>=0.5,<1",
157
+ "google-cloud-aiplatform",
158
+ "google-auth",
159
+ "pillow",
160
+ "pydantic",
161
+ "jsonschema",
162
+ ]
163
+ together = ["together>=1.2"]
164
+ websurfer = ["beautifulsoup4", "markdownify", "pdfminer.six", "pathvalidate"]
165
+ redis = ["redis"]
166
+ cosmosdb = ["azure-cosmos>=4.2.0"]
167
+ websockets = ["websockets>=14.0,<15"]
168
+ long-context = ["llmlingua<0.3"]
169
+ anthropic = ["anthropic[vertex]>=0.23.1"]
170
+ cerebras = ["cerebras_cloud_sdk>=1.0.0"]
171
+ mistral = ["mistralai>=1.0.1"]
172
+ groq = ["groq>=0.9.0"]
173
+ cohere = ["cohere>=5.5.8"]
174
+ ollama = ["ollama>=0.3.3", "fix_busted_json>=0.0.18"]
175
+ bedrock = ["boto3>=1.34.149"]
176
+
177
+ # dev dependencies
178
+ test = [
179
+ "ipykernel",
180
+ "nbconvert",
181
+ "nbformat",
182
+ "pre-commit",
183
+ "pytest-cov>=5",
184
+ "pytest-asyncio",
185
+ "pytest>=8,<9",
186
+ "pandas",
187
+ "fastapi>=0.115.0,<1",
188
+ ]
189
+
190
+ [project.urls]
191
+ Homepage = "https://ag2.ai/"
192
+ Documentation = "https://docs.ag2.ai/docs/Home"
193
+ Tracker = "https://github.com/ag2ai/ag2/issues"
194
+ Source = "https://github.com/ag2ai/ag2"
195
+ Discord = "https://discord.gg/pAbnFJrkgZ"
196
+
197
+ [tool.hatch.version]
198
+ path = "autogen/version.py"
199
+
200
+ [tool.hatch.build]
201
+ skip-excluded-dirs = true
202
+ exclude = ["/test", "/notebook"]
203
+
204
+ [tool.hatch.build.targets.wheel]
205
+ packages = ["autogen"]
206
+ only-include = ["autogen", "autogen/agentchat/contrib/captainagent/tools"]
207
+
208
+ [tool.hatch.build.targets.sdist]
209
+ exclude = ["test", "notebook"]
210
+
211
+ [tool.hatch.build.targets.wheel.sources]
212
+ "autogen" = "autogen"
213
+ "autogen/agentchat/contrib/captainagent/tools" = "autogen/agentchat/contrib/captainagent/tools"
214
+
215
+
216
+ [tool.pytest.ini_options]
217
+ addopts = '--cov=. --cov-append --cov-branch --cov-report=xml -m "not conda"'
218
+ markers = ["conda: test related to conda forge distribution"]
219
+
220
+ [tool.black]
221
+ # https://github.com/psf/black
222
+ line-length = 120
223
+ exclude = "(.eggs|.git|.hg|.mypy_cache|.venv|_build|buck-out|build|dist)"
224
+
225
+
226
+ [tool.ruff]
227
+ line-length = 120
228
+
229
+ [tool.ruff.lint]
230
+ # Enable Pyflakes `E` and `F` codes by default.
231
+ select = [
232
+ "E",
233
+ "W", # see: https://pypi.org/project/pycodestyle
234
+ "F", # see: https://pypi.org/project/pyflakes
235
+ # "D", # see: https://pypi.org/project/pydocstyle
236
+ # "N", # see: https://pypi.org/project/pep8-naming
237
+ # "S", # see: https://pypi.org/project/flake8-bandit
238
+ "I", # see: https://pypi.org/project/isort/
239
+ ]
240
+ ignore = ["E501", "F401", "F403", "C901"]
241
+
242
+ # Exclude a variety of commonly ignored directories.
243
+ exclude = [
244
+ ".eggs",
245
+ ".git",
246
+ ".mypy_cache",
247
+ ".ruff_cache",
248
+ "__pypackages__",
249
+ "_build",
250
+ "build",
251
+ "dist",
252
+ "docs",
253
+ # This file needs to be either upgraded or removed and therefore should be
254
+ # ignore from type checking for now
255
+ "math_utils\\.py$",
256
+ "**/cap/py/autogencap/proto/*",
257
+ ]
258
+ unfixable = ["F401"]
259
+
260
+ [tool.ruff.lint.mccabe]
261
+ # Unlike Flake8, default to a complexity level of 10.
262
+ max-complexity = 10
263
+
264
+ [tool.mypy]
265
+ files = [
266
+ "autogen/logger",
267
+ "autogen/exception_utils.py",
268
+ "autogen/coding",
269
+ "autogen/oai/openai_utils.py",
270
+ "autogen/_pydantic.py",
271
+ "autogen/io",
272
+ "autogen/tools",
273
+ "autogen/interop",
274
+ "autogen/agentchat/realtime_agent",
275
+ "autogen/messages",
276
+ "test/test_pydantic.py",
277
+ "test/io",
278
+ "test/tools",
279
+ "test/interop",
280
+ "test/agentchat/realtime_agent",
281
+ "test/messages",
282
+ ]
283
+ exclude = [
284
+ "autogen/math_utils\\.py",
285
+ "autogen/oai/completion\\.py",
286
+ "autogen/agentchat/contrib/compressible_agent\\.py",
287
+ "autogen/agentchat/contrib/math_user_proxy_agent.py",
288
+ "autogen/oai/openai_utils.py",
289
+ ]
290
+
291
+ strict = true
292
+ ignore_missing_imports = true
293
+ install_types = true
294
+ non_interactive = true
295
+ plugins = ["pydantic.mypy"]
296
+
297
+ # remove after all files in the repo are fixed
298
+ follow_imports = "silent"
299
+
300
+ # from https://blog.wolt.com/engineering/2021/09/30/professional-grade-mypy-configuration/
301
+ disallow_untyped_defs = true
302
+ no_implicit_optional = true
303
+ check_untyped_defs = true
304
+ warn_return_any = true
305
+ show_error_codes = true
306
+
307
+ warn_unused_ignores = false
308
+
309
+ disallow_incomplete_defs = true
310
+ disallow_untyped_decorators = true
311
+ disallow_any_unimported = true
@@ -10,11 +10,10 @@ import hashlib
10
10
  import math
11
11
  import os
12
12
  import re
13
- import sys
13
+ from tempfile import TemporaryDirectory
14
14
 
15
15
  import pytest
16
16
  import requests
17
- from agentchat.test_assistant_agent import KEY_LOC # noqa: E402
18
17
 
19
18
  BLOG_POST_URL = "https://docs.ag2.ai/blog/2023-04-21-LLM-tuning-math"
20
19
  BLOG_POST_TITLE = "Does Model and Inference Parameter Matter in LLM Applications? - A Case Study for MATH - AG2"
@@ -49,26 +48,26 @@ else:
49
48
  skip_bing = False
50
49
 
51
50
 
52
- def _rm_folder(path):
53
- """Remove all the regular files in a folder, then deletes the folder. Assumes a flat file structure, with no subdirectories."""
54
- for fname in os.listdir(path):
55
- fpath = os.path.join(path, fname)
56
- if os.path.isfile(fpath):
57
- os.unlink(fpath)
58
- os.rmdir(path)
51
+ # def _rm_folder(path):
52
+ # """Remove all the regular files in a folder, then deletes the folder. Assumes a flat file structure, with no subdirectories."""
53
+ # for fname in os.listdir(path):
54
+ # fpath = os.path.join(path, fname)
55
+ # if os.path.isfile(fpath):
56
+ # os.unlink(fpath)
57
+ # os.rmdir(path)
58
+
59
+
60
+ @pytest.fixture
61
+ def downloads_folder():
62
+ with TemporaryDirectory() as downloads_folder:
63
+ yield downloads_folder
59
64
 
60
65
 
61
66
  @pytest.mark.skipif(
62
67
  skip_all,
63
68
  reason="do not run if dependency is not installed",
64
69
  )
65
- def test_simple_text_browser():
66
- # Create a downloads folder (removing any leftover ones from prior tests)
67
- downloads_folder = os.path.join(KEY_LOC, "downloads")
68
- if os.path.isdir(downloads_folder):
69
- _rm_folder(downloads_folder)
70
- os.mkdir(downloads_folder)
71
-
70
+ def test_simple_text_browser(downloads_folder: str):
72
71
  # Instantiate the browser
73
72
  user_agent = "python-requests/" + requests.__version__
74
73
  viewport_size = 1024
@@ -151,9 +150,6 @@ def test_simple_text_browser():
151
150
  viewport = browser.visit_page(PDF_URL)
152
151
  assert PDF_STRING in viewport
153
152
 
154
- # Clean up
155
- _rm_folder(downloads_folder)
156
-
157
153
 
158
154
  @pytest.mark.skipif(
159
155
  skip_all or skip_bing,