Eashan Kaushik cc5db09702
Customer Support Assistant v1.1 (#112)
* feat(customer-support): updated code

* Delete 02-use-cases/customer-support-assistant/Dockerfile

Signed-off-by: Eashan Kaushik <50113394+EashanKaushik@users.noreply.github.com>

* Update .gitignore

Signed-off-by: Eashan Kaushik <50113394+EashanKaushik@users.noreply.github.com>

* identity

* /app/customersupport/agentcore/runtime_iam_role name changed issue#154

Signed-off-by: Eashan Kaushik <50113394+EashanKaushik@users.noreply.github.com>

* Update README.md

Signed-off-by: Eashan Kaushik <50113394+EashanKaushik@users.noreply.github.com>

* Update README.md

Signed-off-by: Eashan Kaushik <50113394+EashanKaushik@users.noreply.github.com>

* Update README.md

Signed-off-by: Eashan Kaushik <50113394+EashanKaushik@users.noreply.github.com>

---------

Signed-off-by: Eashan Kaushik <50113394+EashanKaushik@users.noreply.github.com>
2025-07-28 13:45:12 -04:00

101 lines
3.0 KiB
Python

from .agent import CustomerSupport
from contextvars import ContextVar
from typing import Optional
import asyncio
class CustomerSupportContext:
"""Context Manager for Customer Support Assistant"""
# Global state for tokens that persist across agent calls
_google_token: Optional[str] = None
_gateway_token: Optional[str] = None
_response_queue: Optional[asyncio.Queue] = None
_agent: Optional[CustomerSupport] = None
# Context variables for application state
_google_token_ctx: ContextVar[Optional[str]] = ContextVar(
"google_token", default=None
)
_gateway_token_ctx: ContextVar[Optional[str]] = ContextVar(
"gateway_token", default=None
)
_response_queue_ctx: ContextVar[Optional[asyncio.Queue]] = ContextVar(
"response_queue", default=None
)
_agent_ctx: ContextVar[Optional[CustomerSupport]] = ContextVar(
"agent", default=None
)
@classmethod
def get_google_token_ctx(
cls,
) -> Optional[str]:
# First try to get from global state for persistence across calls
if cls._google_token:
return cls._google_token
try:
return cls._google_token_ctx.get()
except LookupError:
return None
@classmethod
def set_google_token_ctx(cls, token: str) -> None:
# Set both global state and context variable
cls._google_token = token
cls._google_token_ctx.set(token)
@classmethod
def get_response_queue_ctx(
cls,
) -> Optional[asyncio.Queue]:
# First try to get from global state for persistence across calls
if cls._response_queue:
return cls._response_queue
try:
return cls._response_queue_ctx.get()
except LookupError:
return None
@classmethod
def set_response_queue_ctx(cls, queue: asyncio.Queue) -> None:
# Set both global state and context variable
cls._response_queue = queue
cls._response_queue_ctx.set(queue)
@classmethod
def get_gateway_token_ctx(
cls,
) -> Optional[str]:
# First try to get from global state for persistence across calls
if cls._gateway_token:
return cls._gateway_token
try:
return cls._gateway_token_ctx.get()
except LookupError:
return None
@classmethod
def set_gateway_token_ctx(cls, token: str) -> None:
# Set both global state and context variable
cls._gateway_token = token
cls._gateway_token_ctx.set(token)
@classmethod
def get_agent_ctx(
cls,
) -> Optional[CustomerSupport]:
# First try to get from global state for persistence across calls
if cls._agent:
return cls._agent
try:
return cls._agent_ctx.get()
except LookupError:
return None
@classmethod
def set_agent_ctx(cls, agent: CustomerSupport) -> None:
# Set both global state and context variable
cls._agent = agent
cls._agent_ctx.set(agent)