Skip to content

Commit e6a2ae8

Browse files
refactor(examples): compact agentcore run.py and test class
Co-Authored-By: mesutoezdil <versusfinem@gmail.com>
1 parent 9cb7c91 commit e6a2ae8

2 files changed

Lines changed: 15 additions & 71 deletions

File tree

examples/zero-code-examples/agentcore/run.py

Lines changed: 7 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,9 @@
11
"""Run a dice agent using AWS AgentCore with OTLP export.
22
3-
Shows how to send AgentCore traces to agentevals without using the
4-
agentevals SDK. The OTLP exporter points at the local receiver endpoint.
5-
6-
AgentCore runs on Strands Agents with Amazon Bedrock models. This example
7-
sets up OTel via StrandsTelemetry and adds the OTLP exporter to the tracer
8-
provider before running the agent.
9-
103
Prerequisites:
114
1. pip install -r requirements.txt
125
2. agentevals serve --dev
13-
3. AWS credentials configured (aws configure, env vars, or IAM role)
14-
4. Amazon Nova Pro model access enabled in your AWS account
6+
3. AWS credentials configured and Nova Pro model access enabled
157
168
Usage:
179
python examples/zero-code-examples/agentcore/run.py
@@ -36,11 +28,7 @@
3628
def roll_die(sides: int = 6) -> dict:
3729
"""Roll a die with the given number of sides."""
3830
result = random.randint(1, sides)
39-
return {
40-
"sides": sides,
41-
"result": result,
42-
"message": f"Rolled a {sides}-sided die and got {result}",
43-
}
31+
return {"sides": sides, "result": result, "message": f"Rolled a {sides}-sided die and got {result}"}
4432

4533

4634
@tool
@@ -58,42 +46,27 @@ def main():
5846
if not os.getenv("AWS_DEFAULT_REGION"):
5947
print("AWS_DEFAULT_REGION not set.")
6048
return
61-
6249
endpoint = os.environ.get("OTEL_EXPORTER_OTLP_ENDPOINT", "http://localhost:4318")
6350
print(f"OTLP endpoint: {endpoint}")
64-
6551
os.environ.setdefault(
6652
"OTEL_RESOURCE_ATTRIBUTES",
6753
"agentevals.eval_set_id=agentcore_eval,agentevals.session_name=agentcore-zero-code",
6854
)
69-
7055
telemetry = StrandsTelemetry()
7156
telemetry.tracer_provider.add_span_processor(
7257
BatchSpanProcessor(OTLPSpanExporter(), schedule_delay_millis=1000)
7358
)
74-
7559
agent = Agent(
7660
model=BedrockModel(model_id="us.amazon.nova-pro-v1:0"),
7761
tools=[roll_die, check_prime],
78-
system_prompt=(
79-
"You are a helpful assistant that can roll dice and check if numbers are prime. "
80-
"Use roll_die with the right number of sides when asked. "
81-
"Use check_prime when asked about prime numbers."
82-
),
62+
system_prompt="You are a helpful assistant. Use roll_die when asked to roll dice. Use check_prime when asked about prime numbers.",
8363
name="dice_agent",
8464
)
8565

86-
test_queries = [
87-
"Hi! Can you help me?",
88-
"Roll a 20-sided die for me",
89-
"Is the number you rolled prime?",
90-
]
91-
92-
for i, query in enumerate(test_queries, 1):
93-
print(f"\n[{i}/{len(test_queries)}] User: {query}")
94-
result = agent(query)
95-
print(f" Agent: {result}")
96-
66+
queries = ["Hi! Can you help me?", "Roll a 20-sided die for me", "Is the number you rolled prime?"]
67+
for i, query in enumerate(queries, 1):
68+
print(f"\n[{i}/{len(queries)}] User: {query}")
69+
print(f" Agent: {agent(query)}")
9770
print()
9871
telemetry.tracer_provider.force_flush()
9972
print("All traces flushed to OTLP receiver.")

tests/integration/test_live_agents.py

Lines changed: 8 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -370,70 +370,41 @@ def test_session_visible_via_api(self, live_servers):
370370
assert session_name in session_ids
371371

372372

373+
_AGENTCORE_ENV = {"OTEL_SEMCONV_STABILITY_OPT_IN": "gen_ai_latest_experimental"}
374+
_AGENTCORE_SCRIPT = "examples/zero-code-examples/agentcore/run.py"
375+
376+
373377
@_skip_no_aws
374378
class TestAgentCoreZeroCode:
375-
"""Run the AWS AgentCore zero-code OTLP example and verify session grouping."""
376-
377379
def test_session_created_spans_only(self, live_servers):
378380
main_port, otlp_http_port, mgr = live_servers
379381
session_name = "e2e-agentcore"
380-
381-
result = _run_agent(
382-
"examples/zero-code-examples/agentcore/run.py",
383-
otlp_http_port,
384-
session_name,
385-
extra_env={
386-
"OTEL_SEMCONV_STABILITY_OPT_IN": "gen_ai_latest_experimental",
387-
},
388-
)
382+
result = _run_agent(_AGENTCORE_SCRIPT, otlp_http_port, session_name, extra_env=_AGENTCORE_ENV, timeout=60)
389383
assert result.returncode == 0, f"Agent failed:\nstdout: {result.stdout}\nstderr: {result.stderr}"
390-
391384
wait_for_session_complete_sync(mgr, session_name, timeout=60)
392385
session = mgr.sessions[session_name]
393-
394386
assert session.is_complete
395387
assert session.source == "otlp"
396388
assert len(session.spans) > 0, "Expected spans from LLM calls"
397389

398390
def test_invocations_extracted(self, live_servers):
399391
main_port, otlp_http_port, mgr = live_servers
400392
session_name = "e2e-agentcore-inv"
401-
402-
result = _run_agent(
403-
"examples/zero-code-examples/agentcore/run.py",
404-
otlp_http_port,
405-
session_name,
406-
extra_env={
407-
"OTEL_SEMCONV_STABILITY_OPT_IN": "gen_ai_latest_experimental",
408-
},
409-
)
393+
result = _run_agent(_AGENTCORE_SCRIPT, otlp_http_port, session_name, extra_env=_AGENTCORE_ENV, timeout=60)
410394
assert result.returncode == 0, f"Agent failed:\nstdout: {result.stdout}\nstderr: {result.stderr}"
411-
412395
wait_for_session_complete_sync(mgr, session_name, timeout=60)
413396
session = mgr.sessions[session_name]
414-
415397
assert len(session.invocations) > 0, "Expected extracted invocations"
416398

417399
def test_session_visible_via_api(self, live_servers):
418400
main_port, otlp_http_port, mgr = live_servers
419401
session_name = "e2e-agentcore-api"
420-
421-
result = _run_agent(
422-
"examples/zero-code-examples/agentcore/run.py",
423-
otlp_http_port,
424-
session_name,
425-
extra_env={
426-
"OTEL_SEMCONV_STABILITY_OPT_IN": "gen_ai_latest_experimental",
427-
},
428-
)
402+
result = _run_agent(_AGENTCORE_SCRIPT, otlp_http_port, session_name, extra_env=_AGENTCORE_ENV, timeout=60)
429403
assert result.returncode == 0
430-
431404
wait_for_session_complete_sync(mgr, session_name, timeout=60)
432-
433405
resp = httpx.get(f"http://127.0.0.1:{main_port}/api/streaming/sessions")
434406
assert resp.status_code == 200
435-
session_ids = [s["sessionId"] for s in resp.json()["data"]]
436-
assert session_name in session_ids
407+
assert session_name in [s["sessionId"] for s in resp.json()["data"]]
437408

438409

439410
@_skip_no_openai

0 commit comments

Comments
 (0)