Skip to content

send_message

send_message(
    agent_space_id: AgentSpaceIdentifier,
    execution_id: ChatExecutionId,
    content: MessageContent,
    *,
    config_overrides: Optional[DevOpsAgentClientConfig] = None,
    context: Optional[SendMessageContext] = None,
    user_id: Optional[ResourceId] = None,
    asset_ids: Optional[AssetIdList] = None,
    model_tier: Optional[str] = None,
) -> Generator[SendMessageResponse]

Sends a chat message and streams the response for the specified agent space execution

Parameters:

  • agent_space_id (AgentSpaceIdentifier) –

    The agent space identifier

  • execution_id (ChatExecutionId) –

    The execution identifier for the chat session

  • content (MessageContent) –

    The user message content

  • context (Optional[SendMessageContext], default: None ) –

    Optional context for the message

  • user_id (Optional[ResourceId], default: None ) –

    User identifier. This field is deprecated and will be ignored — the service resolves user identity from the authenticated session.

  • asset_ids (Optional[AssetIdList], default: None ) –

    Optional list of asset identifiers to attach to the message

  • model_tier (Optional[str], default: None ) –

    Optional model tier selection. Valid values: smart, balanced, fast. Absent or unrecognized values default to balanced.

Raises:

Source code in docs_src/capo_devops_agent/_services/dev_ops_agent.py
@contextmanager
def send_message(
    self,
    agent_space_id: "capo_devops_agent.types.agent_space_identifier.AgentSpaceIdentifier",
    execution_id: "capo_devops_agent.types.chat_execution_id.ChatExecutionId",
    content: "capo_devops_agent.types.message_content.MessageContent",
    *,
    config_overrides: Optional[DevOpsAgentClientConfig] = None,
    context: Optional[
        "capo_devops_agent.types.send_message_context.SendMessageContext"
    ] = None,
    user_id: Optional["capo_devops_agent.types.resource_id.ResourceId"] = None,
    asset_ids: Optional["capo_devops_agent.types.asset_id_list.AssetIdList"] = None,
    model_tier: Optional[str] = None,
) -> "Generator[capo_devops_agent.types.send_message_response.SendMessageResponse]":
    """<p>Sends a chat message and streams the response for the specified agent space execution</p>

    Args:
        agent_space_id: <p>The agent space identifier</p>
        execution_id: <p>The execution identifier for the chat session</p>
        content: <p>The user message content</p>
        context: <p>Optional context for the message</p>
        user_id: <p>User identifier. This field is deprecated and will be ignored — the service resolves user identity from the authenticated session.</p>
        asset_ids: <p>Optional list of asset identifiers to attach to the message</p>
        model_tier: <p>Optional model tier selection. Valid values: smart, balanced, fast. Absent or unrecognized values default to balanced.</p>

    Raises:
        capo_devops_agent.errors.access_denied_exception.AccessDeniedException: <p>Access to the requested resource is denied due to insufficient permissions.</p>
        capo_devops_agent.errors.conflict_exception.ConflictException: <p>The request conflicts with the current state of the resource.</p>
        capo_devops_agent.errors.content_size_exceeded_exception.ContentSizeExceededException: <p>This exception is thrown when the content size exceeds the allowed limit.</p>
        capo_devops_agent.errors.internal_server_exception.InternalServerException: <p>This exception is thrown when an unexpected error occurs in the processing of a request.</p>
        capo_devops_agent.errors.invalid_parameter_exception.InvalidParameterException: <p>One or more parameters provided in the request are invalid.</p>
        capo_devops_agent.errors.resource_not_found_exception.ResourceNotFoundException: <p>The requested resource could not be found.</p>
        capo_devops_agent.errors.service_quota_exceeded_exception.ServiceQuotaExceededException: <p>The request would exceed the service quota limit.</p>
        capo_devops_agent.errors.throttling_exception.ThrottlingException: <p>The request was throttled due to too many requests. Please slow down and try again.</p>
        capo_devops_agent.errors.validation_exception.ValidationException: <p>The input fails to satisfy the constraints specified by the service.</p>
        capo_devops_agent.errors.UnknownServiceError: The service returned an error code this client does not model.
    """

    def _handler(
        req: "OperationRequest[capo_devops_agent.types.send_message_request.SendMessageRequest]",
    ) -> OperationResponse[
        "capo_devops_agent.types.send_message_response.SendMessageResponse"
    ]:
        import capo_devops_agent._operations.dev_ops_agent.send_message

        output, http_response = (
            capo_devops_agent._operations.dev_ops_agent.send_message.send_message(
                req.options, req.input
            )
        )
        return OperationResponse(output=output, response=http_response)

    def _redact_output(
        output: "capo_devops_agent.types.send_message_response.SendMessageResponse",
    ) -> dict[str, Any]:
        import capo_devops_agent.types.send_message_response

        return capo_devops_agent.types.send_message_response.redact_sensitive(
            output
        )

    interceptors_, options_ = self.operation_options(
        config_overrides,
        OperationLogging("SendMessage", redact_output=_redact_output),
    )
    input_: capo_devops_agent.types.send_message_request.SendMessageRequest = {
        "agent_space_id": agent_space_id,
        "execution_id": execution_id,
        "content": content,
    }
    if context is not None:
        input_["context"] = context
    if user_id is not None:
        input_["user_id"] = user_id
    if asset_ids is not None:
        input_["asset_ids"] = asset_ids
    if model_tier is not None:
        input_["model_tier"] = model_tier

    response = execute_pipeline(
        OperationRequest(input=input_, options=options_),
        handler=_handler,
        interceptors=list(interceptors_),
    )
    try:
        yield response.output
    finally:
        response.response.close()