Skip to content

Commit 0611264

Browse files
authored
Merge pull request #907 from Mirascope/fix-bedrock-env-vars
Fix bedrock env vars
2 parents e31fa18 + 3d244e5 commit 0611264

File tree

4 files changed

+93
-4
lines changed

4 files changed

+93
-4
lines changed

mirascope/core/bedrock/_utils/_setup_call.py

+14-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from __future__ import annotations
44

5+
import os
56
from collections.abc import AsyncGenerator, Awaitable, Callable, Coroutine, Generator
67
from functools import wraps
78
from typing import Any, ParamSpec, cast, overload
@@ -223,12 +224,23 @@ def setup_call(
223224

224225
call_kwargs |= cast(BedrockCallKwargs, {"modelId": model, "messages": messages})
225226

227+
env_vars = {}
228+
if access_key_id := os.getenv("AWS_ACCESS_KEY_ID"):
229+
env_vars["aws_access_key_id"] = access_key_id
230+
if secret_access_key := os.getenv("AWS_SECRET_ACCESS_KEY"):
231+
env_vars["aws_secret_access_key"] = secret_access_key
232+
if session_token := os.getenv("AWS_SESSION_TOKEN"):
233+
env_vars["aws_session_token"] = session_token
234+
if region_name := os.getenv("AWS_REGION_NAME"):
235+
env_vars["region_name"] = region_name
236+
if profile_name := os.getenv("AWS_PROFILE"):
237+
env_vars["profile_name"] = profile_name
226238
if client is None:
227239
if fn_is_async(fn):
228-
session = get_session()
240+
session = get_session(env_vars=env_vars)
229241
_client = _AsyncBedrockRuntimeWrappedClient(session, model)
230242
else:
231-
session = Session()
243+
session = Session(**env_vars)
232244
_client = session.client("bedrock-runtime")
233245
else:
234246
_client = client

pyproject.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "mirascope"
3-
version = "1.21.2"
3+
version = "1.21.3"
44
description = "LLM abstractions that aren't obstructions"
55
readme = "README.md"
66
license = { file = "LICENSE" }

tests/core/bedrock/_utils/test_setup_call.py

+77
Original file line numberDiff line numberDiff line change
@@ -493,3 +493,80 @@ async def fake_stream():
493493
mock_client.converse_stream.assert_called_once_with(param2="value2")
494494

495495
mock_session.create_client.assert_called_once_with("bedrock-runtime")
496+
497+
498+
@patch("mirascope.core.bedrock._utils._setup_call.Session")
499+
@patch("mirascope.core.bedrock._utils._setup_call.get_session")
500+
@patch("mirascope.core.bedrock._utils._setup_call._utils", new_callable=MagicMock)
501+
def test_setup_call_env_vars(
502+
mock_utils: MagicMock,
503+
mock_get_session: MagicMock,
504+
mock_session_class: MagicMock,
505+
mock_base_setup_call: MagicMock,
506+
monkeypatch: pytest.MonkeyPatch,
507+
) -> None:
508+
"""Test that environment variables are properly passed to Session and get_session."""
509+
mock_utils.setup_call = mock_base_setup_call
510+
mock_base_setup_call.return_value[1] = [
511+
{"role": "user", "content": [{"text": "user test"}]},
512+
]
513+
mock_base_setup_call.return_value[3] = {}
514+
515+
# Set environment variables
516+
monkeypatch.setenv("AWS_ACCESS_KEY_ID", "test_access_key")
517+
monkeypatch.setenv("AWS_SECRET_ACCESS_KEY", "test_secret_key")
518+
monkeypatch.setenv("AWS_SESSION_TOKEN", "test_session_token")
519+
monkeypatch.setenv("AWS_REGION_NAME", "us-west-2")
520+
monkeypatch.setenv("AWS_PROFILE", "test_profile")
521+
522+
# Test sync client creation with env vars
523+
setup_call(
524+
model="anthropic.claude-v2",
525+
client=None,
526+
fn=MagicMock(),
527+
fn_args={},
528+
dynamic_config=None,
529+
tools=None,
530+
json_mode=False,
531+
call_params={},
532+
response_model=None,
533+
stream=False,
534+
)
535+
536+
# Verify Session was called with expected env vars
537+
mock_session_class.assert_called_once_with(
538+
aws_access_key_id="test_access_key",
539+
aws_secret_access_key="test_secret_key",
540+
aws_session_token="test_session_token",
541+
region_name="us-west-2",
542+
profile_name="test_profile",
543+
)
544+
545+
# Test async client creation with env vars
546+
async def async_fn(): ...
547+
548+
mock_session_class.reset_mock()
549+
550+
setup_call(
551+
model="anthropic.claude-v2",
552+
client=None,
553+
fn=async_fn,
554+
fn_args={},
555+
dynamic_config=None,
556+
tools=None,
557+
json_mode=False,
558+
call_params={},
559+
response_model=None,
560+
stream=False,
561+
)
562+
563+
# Verify get_session was called with expected env vars
564+
mock_get_session.assert_called_with(
565+
env_vars={
566+
"aws_access_key_id": "test_access_key",
567+
"aws_secret_access_key": "test_secret_key",
568+
"aws_session_token": "test_session_token",
569+
"region_name": "us-west-2",
570+
"profile_name": "test_profile",
571+
}
572+
)

uv.lock

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)