@@ -70,17 +70,18 @@ a2a = [
7070 " starlette>=0.46.2,<1.0.0" ,
7171]
7272
73- bidi = [
74- " aws_sdk_bedrock_runtime; python_version>='3.12'" ,
73+ bidi-io = [
7574 " prompt_toolkit>=3.0.0,<4.0.0" ,
7675 " pyaudio>=0.2.13,<1.0.0" ,
77- " smithy-aws-core>=0.0.1; python_version>='3.12'" ,
7876]
7977bidi-gemini = [" google-genai>=1.32.0,<2.0.0" ]
78+ bidi-nova = [
79+ " aws_sdk_bedrock_runtime; python_version>='3.12'" ,
80+ " smithy-aws-core>=0.0.1; python_version>='3.12'" ,
81+ ]
8082bidi-openai = [" websockets>=15.0.0,<16.0.0" ]
8183
82- all = [" strands-agents[a2a,anthropic,docs,gemini,litellm,llamaapi,mistral,ollama,openai,writer,sagemaker,otel]" ]
83- bidi-all = [" strands-agents[a2a,bidi,bidi-gemini,bidi-openai,docs,otel]" ]
84+ all = [" strands-agents[a2a,anthropic,bidi-io,bidi-gemini,bidi-openai,docs,gemini,litellm,llamaapi,mistral,ollama,openai,writer,sagemaker,otel]" ]
8485
8586dev = [
8687 " commitizen>=4.4.0,<5.0.0" ,
@@ -130,7 +131,7 @@ format-fix = [
130131]
131132lint-check = [
132133 " ruff check" ,
133- " mypy ./ src"
134+ " mypy -p src"
134135]
135136lint-fix = [
136137 " ruff check --fix"
@@ -204,16 +205,10 @@ warn_no_return = true
204205warn_unreachable = true
205206follow_untyped_imports = true
206207ignore_missing_imports = false
207- exclude = [" src/strands/experimental/bidi" ]
208-
209- [[tool .mypy .overrides ]]
210- module = [" strands.experimental.bidi.*" ]
211- follow_imports = " skip"
212208
213209[tool .ruff ]
214210line-length = 120
215211include = [" examples/**/*.py" , " src/**/*.py" , " tests/**/*.py" , " tests_integ/**/*.py" ]
216- exclude = [" src/strands/experimental/bidi/**/*.py" , " tests/strands/experimental/bidi/**/*.py" , " tests_integ/bidi/**/*.py" ]
217212
218213[tool .ruff .lint ]
219214select = [
@@ -236,16 +231,14 @@ convention = "google"
236231[tool .pytest .ini_options ]
237232testpaths = [" tests" ]
238233asyncio_default_fixture_loop_scope = " function"
239- addopts = " --ignore=tests/strands/experimental/bidi --ignore=tests_integ/bidi"
240-
234+ addopts = " --ignore=tests/strands/experimental/bidi/models/test_nova_sonic.py --ignore=tests_integ/bidi"
241235
242236[tool .coverage .run ]
243237branch = true
244238source = [" src" ]
245239context = " thread"
246240parallel = true
247241concurrency = [" thread" , " multiprocessing" ]
248- omit = [" src/strands/experimental/bidi/*" ]
249242
250243[tool .coverage .report ]
251244show_missing = true
@@ -275,48 +268,3 @@ style = [
275268 [" text" , " " ],
276269 [" disabled" , " fg:#858585 italic" ]
277270]
278-
279- # =========================
280- # Bidi development configs
281- # =========================
282-
283- [tool .hatch .envs .bidi ]
284- dev-mode = true
285- features = [" dev" , " bidi-all" ]
286- installer = " uv"
287-
288- [tool .hatch .envs .bidi .scripts ]
289- prepare = [
290- " hatch run bidi-lint:format-fix" ,
291- " hatch run bidi-lint:quality-fix" ,
292- " hatch run bidi-lint:type-check" ,
293- " hatch run bidi-test:test-cov" ,
294- ]
295-
296- [tools .hatch .envs .bidi-lint ]
297- template = " bidi"
298-
299- [tool .hatch .envs .bidi-lint .scripts ]
300- format-check = " format-fix --check"
301- format-fix = " ruff format {args} --target-version py312 ./src/strands/experimental/bidi/**/*.py"
302- quality-check = " ruff check {args} --target-version py312 ./src/strands/experimental/bidi/**/*.py"
303- quality-fix = " quality-check --fix"
304- type-check = " mypy {args} --python-version 3.12 ./src/strands/experimental/bidi/**/*.py"
305-
306- [tool .hatch .envs .bidi-test ]
307- template = " bidi"
308-
309- [tool .hatch .envs .bidi-test .scripts ]
310- test = " pytest {args} tests/strands/experimental/bidi"
311- test-cov = """
312- test \
313- --cov=strands.experimental.bidi \
314- --cov-config= \
315- --cov-branch \
316- --cov-report=term-missing \
317- --cov-report=xml:build/coverage/bidi-coverage.xml \
318- --cov-report=html:build/coverage/bidi-html
319- """
320-
321- [[tool .hatch .envs .bidi-test .matrix ]]
322- python = [" 3.13" , " 3.12" ]
0 commit comments