# Copyright (c) Microsoft. All rights reserved.

"""Convenient helpers for creating spans / traces.

All emitters operate in two modes, switchable via the `propagate` parameter.
The emitters first [`SpanCreationRequest`][mantisdk.SpanCreationRequest] object, then:

1. When `propagate` is True, this creation request will be propagated to the active tracer
   and a [`Span`][mantisdk.Span] instance will be created (possibly deferred).
2. When `propagate` is False, the creation request will be returned directly. Useful for cases
   when you don't have a tracer but you want to create a creation request for later use.
"""

from .annotation import emit_annotation, operation
from .exception import emit_exception
from .message import emit_message, get_message_value
from .object import emit_object, get_object_value
from .reward import (
    emit_reward,
    find_final_reward,
    find_reward_spans,
    get_reward_value,
    get_rewards_from_span,
    is_reward_span,
    reward,
)

__all__ = [
    "reward",
    "operation",
    "emit_reward",
    "get_reward_value",
    "get_rewards_from_span",
    "is_reward_span",
    "find_reward_spans",
    "find_final_reward",
    "emit_message",
    "emit_object",
    "emit_exception",
    "emit_annotation",
    "get_message_value",
    "get_object_value",
]
