2025-07-21 11:34:00 -04:00
|
|
|
from agent_config.context import (
|
|
|
|
get_response_queue_ctx,
|
|
|
|
set_gateway_token_ctx,
|
|
|
|
set_response_queue_ctx,
|
|
|
|
)
|
|
|
|
from agent_config.access_token import get_gateway_access_token
|
|
|
|
from agent_config.agent_task import agent_task
|
|
|
|
from agent_config.streaming_queue import StreamingQueue
|
|
|
|
from bedrock_agentcore.runtime import BedrockAgentCoreApp
|
|
|
|
from scripts.utils import get_ssm_parameter
|
2025-07-16 14:07:30 -04:00
|
|
|
import asyncio
|
|
|
|
import logging
|
2025-07-21 11:34:00 -04:00
|
|
|
import os
|
|
|
|
import uuid
|
2025-07-16 14:07:30 -04:00
|
|
|
|
|
|
|
# Environment flags
|
|
|
|
os.environ["STRANDS_OTEL_ENABLE_CONSOLE_EXPORT"] = "true"
|
|
|
|
os.environ["STRANDS_TOOL_CONSOLE_MODE"] = "enabled"
|
|
|
|
|
|
|
|
os.environ["KNOWLEDGE_BASE_ID"] = get_ssm_parameter(
|
|
|
|
"/app/customersupport/knowledge_base/knowledge_base_id"
|
|
|
|
)
|
|
|
|
|
|
|
|
# Logging setup
|
|
|
|
logging.basicConfig(level=logging.INFO)
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
# Bedrock app and global agent instance
|
|
|
|
app = BedrockAgentCoreApp()
|
|
|
|
|
2025-07-21 11:34:00 -04:00
|
|
|
set_response_queue_ctx(StreamingQueue())
|
2025-07-16 14:07:30 -04:00
|
|
|
|
|
|
|
|
|
|
|
@app.entrypoint
|
|
|
|
async def invoke(payload, context):
|
2025-07-21 11:34:00 -04:00
|
|
|
response_queue = get_response_queue_ctx()
|
|
|
|
set_gateway_token_ctx(await get_gateway_access_token())
|
|
|
|
|
2025-07-16 14:07:30 -04:00
|
|
|
user_message = payload["prompt"]
|
|
|
|
actor_id = payload["actor_id"]
|
|
|
|
|
|
|
|
session_id = context.session_id or str(uuid.uuid4())
|
|
|
|
|
|
|
|
task = asyncio.create_task(
|
|
|
|
agent_task(
|
|
|
|
user_message=user_message,
|
|
|
|
session_id=session_id,
|
|
|
|
actor_id=actor_id,
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
async def stream_output():
|
|
|
|
async for item in response_queue.stream():
|
|
|
|
yield item
|
|
|
|
await task # Ensure task completion
|
|
|
|
|
|
|
|
return stream_output()
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
app.run()
|