trading_agent.requests.user_request_responder
¶
Records the user's response to a desk's request and hands it to the desk as a new message.
The web page and Telegram both answer through this class, so a request answered in one place shows as answered in the other.
Typical usage example:
responder = UserRequestResponder(store, event_bus, desks) responder.answer_question(request_id, [{'selected': ['Wait'], 'other': ''}], 'web')
UserRequestResponder
¶
Answers questions, decides plans and permissions, and dismisses requests on the user's behalf.
Creates the responder.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
store
|
UserRequestStore
|
Where requests are kept. |
required |
event_bus
|
EventBus
|
Where each response is published. |
required |
desks
|
Mapping[str, DeskRuntime]
|
The running desks, keyed by name, which receive the responses. |
required |
tool_registries
|
Mapping[str, ToolRegistry] | None
|
Each desk's tools, which run a call the user allows; None when permissions are not used. |
None
|
grants
|
PermissionGrants | None
|
Where "Always allow" is saved; None when permissions are not used. |
None
|
Source code in src/trading_agent/requests/user_request_responder.py
answer_question
¶
Records the answers to a question request and tells the desk.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
request_id
|
str
|
The request. |
required |
answers
|
Sequence[dict[str, Any]]
|
One {"selected": [labels], "other": text} per question. |
required |
via
|
str
|
"web", "terminal" or "telegram". |
required |
Returns:
| Type | Description |
|---|---|
UserRequest
|
The answered request. |
Raises:
| Type | Description |
|---|---|
UserRequestError
|
The request does not exist or is no longer pending. |
ValueError
|
The request is not a question, or the answers do not fit it. |
Source code in src/trading_agent/requests/user_request_responder.py
decide_plan
¶
Records the decision on a plan and tells the desk.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
request_id
|
str
|
The request. |
required |
decision
|
str
|
"approve" or "revise". |
required |
feedback
|
str
|
What should change, or a note with an approval. |
required |
via
|
str
|
"web", "terminal" or "telegram". |
required |
Returns:
| Type | Description |
|---|---|
UserRequest
|
The decided request. |
Raises:
| Type | Description |
|---|---|
UserRequestError
|
The request does not exist or is no longer pending. |
ValueError
|
The request is not a plan, or the decision is not valid. |
Source code in src/trading_agent/requests/user_request_responder.py
decide_permission
async
¶
Records the decision on a held call, runs the call when it is allowed, and tells the desk.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
request_id
|
str
|
The request. |
required |
decision
|
str
|
"allow_once", "always_allow" or "deny". |
required |
reason
|
str
|
Why it was denied, or a note; may be empty. |
required |
via
|
str
|
"web", "terminal" or "telegram". |
required |
Returns:
| Type | Description |
|---|---|
UserRequest
|
The decided request. |
Raises:
| Type | Description |
|---|---|
UserRequestError
|
The request does not exist, is no longer pending, or has expired. |
ValueError
|
The request is not a permission request, the decision is not valid, or the desk's tools are not known. |
Source code in src/trading_agent/requests/user_request_responder.py
report_expired
¶
Tells the desk that a request lapsed without an answer.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
request
|
UserRequest
|
The request, already saved as expired. |
required |
Source code in src/trading_agent/requests/user_request_responder.py
dismiss
¶
Closes a request without answering it, and tells the desk to use its own judgment.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
request_id
|
str
|
The request. |
required |
via
|
str
|
"web", "terminal" or "telegram". |
required |
Returns:
| Type | Description |
|---|---|
UserRequest
|
The dismissed request. |
Raises:
| Type | Description |
|---|---|
UserRequestError
|
The request does not exist or is no longer pending. |