/** Canonical OpenInference-over-OTLP attribute names used at trace boundaries. */
declare const OPENINFERENCE_SPAN_KIND = "openinference.span.kind";
declare const LLM_MODEL_NAME = "llm.model_name";
declare const LLM_INPUT_TOKENS = "llm.token_count.prompt";
declare const LLM_OUTPUT_TOKENS = "llm.token_count.completion";
declare const LLM_REASONING_TOKENS = "llm.token_count.reasoning";
declare const LLM_CACHED_TOKENS = "llm.token_count.prompt_cache_hit";
declare const LLM_CACHE_WRITE_TOKENS = "llm.token_count.prompt_cache_write";
/** Exact prompt context after summing mutually exclusive input/cache categories. */
declare const LLM_CONTEXT_TOKENS = "tangle.llm.context_tokens";
declare const LLM_COST_USD = "llm.cost_usd";
declare const TOOL_NAME = "tool.name";
declare const TOOL_ARGS_CAPTURED = "tool.args_captured";
declare const TOOL_LATENCY_MS = "tool.latency_ms";
declare const INPUT_VALUE = "input.value";
declare const OUTPUT_VALUE = "output.value";
declare const SPAN_KIND_ATTR_KEYS: readonly ["openinference.span.kind", "inference.observation_kind"];
declare const LLM_MODEL_ATTR_KEYS: readonly ["llm.model_name", "inference.llm.model_name", "llm.model", ...string[], "tangle.model"];
declare const LLM_INPUT_TOKEN_ATTR_KEYS: readonly ["llm.token_count.prompt", "inference.llm.input_tokens", "llm.input_tokens", ...string[], "tangle.tokens.in", "tokens.in"];
declare const LLM_OUTPUT_TOKEN_ATTR_KEYS: readonly ["llm.token_count.completion", "inference.llm.output_tokens", "llm.output_tokens", ...string[], "tangle.tokens.out", "tokens.out"];
/** Reasoning-token subset of output, when a producer exposes it separately. */
declare const LLM_REASONING_TOKEN_ATTR_KEYS: readonly ["llm.token_count.reasoning", "inference.llm.reasoning_tokens", "llm.reasoning_tokens", "gen_ai.usage.reasoning_tokens", "gen_ai.usage.reasoning_output_tokens", "reasoning_tokens", "reasoning_output_tokens", "tangle.tokens.reasoning", "gen_ai.usage.output_tokens_details.reasoning_tokens", "gen_ai.usage.completion_tokens_details.reasoning_tokens"];
declare const LLM_CACHED_TOKEN_ATTR_KEYS: readonly ["llm.token_count.prompt_cache_hit", "inference.llm.cached_tokens", "llm.cached_tokens", "gen_ai.usage.cached_tokens", "gen_ai.usage.prompt_tokens_details.cached_tokens", "gen_ai.usage.input_tokens_details.cached_tokens", "gen_ai.usage.cache_read_tokens", "gen_ai.usage.cache_read_input_tokens", "cache_read_tokens", "cache_read_input_tokens", "input_cache_read", "tangle.tokens.cached"];
declare const LLM_CACHE_WRITE_TOKEN_ATTR_KEYS: readonly ["llm.token_count.prompt_cache_write", "inference.llm.cache_write_tokens", "llm.cache_write_tokens", "gen_ai.usage.cache_creation_tokens", "gen_ai.usage.cache_creation_input_tokens", "cache_creation_tokens", "cache_creation_input_tokens", "input_cache_creation", "tangle.tokens.cache_write"];
declare const LLM_COST_ATTR_KEYS: readonly ["llm.cost_usd", "inference.llm.cost.total", "llm.cost.total", "gen_ai.usage.cost", "gen_ai.usage.cost_usd", "tangle.cost.usd", "cost.usd", "cost"];
/** Explicit run-total cost keys safe to preserve on an untyped span. */
declare const RUN_COST_ATTR_KEYS: readonly ["tangle.cost.usd", "cost.usd"];
declare const TOOL_NAME_ATTR_KEYS: readonly ["tool.name", "inference.tool.name"];
/** Read a numeric attribute, tolerating numeric strings; `null` if absent or invalid. */
declare function asNumber(value: unknown): number | null;
/** First finite numeric value across a list of candidate attribute keys. */
declare function firstNumberAttr(attributes: Record<string, unknown>, keys: readonly string[]): number | null;
/** Sum producer-supplied, mutually exclusive prompt-token categories. */
declare function contextInputTokens(usage: {
    inputTokens?: number | null;
    cachedTokens?: number | null;
    cacheWriteTokens?: number | null;
}): number | undefined;
interface LlmSpanOtlpInput {
    model?: string;
    inputTokens?: number;
    outputTokens?: number;
    reasoningTokens?: number;
    cachedTokens?: number;
    cacheWriteTokens?: number;
    costUsd?: number;
    finishReason?: string;
}
/** Write the canonical LLM attributes shared by trace producers. */
declare function applyLlmSpanOtlpAttributes(attributes: Record<string, unknown>, span: LlmSpanOtlpInput): void;

export { INPUT_VALUE, LLM_CACHED_TOKENS, LLM_CACHED_TOKEN_ATTR_KEYS, LLM_CACHE_WRITE_TOKENS, LLM_CACHE_WRITE_TOKEN_ATTR_KEYS, LLM_CONTEXT_TOKENS, LLM_COST_ATTR_KEYS, LLM_COST_USD, LLM_INPUT_TOKENS, LLM_INPUT_TOKEN_ATTR_KEYS, LLM_MODEL_ATTR_KEYS, LLM_MODEL_NAME, LLM_OUTPUT_TOKENS, LLM_OUTPUT_TOKEN_ATTR_KEYS, LLM_REASONING_TOKENS, LLM_REASONING_TOKEN_ATTR_KEYS, type LlmSpanOtlpInput, OPENINFERENCE_SPAN_KIND, OUTPUT_VALUE, RUN_COST_ATTR_KEYS, SPAN_KIND_ATTR_KEYS, TOOL_ARGS_CAPTURED, TOOL_LATENCY_MS, TOOL_NAME, TOOL_NAME_ATTR_KEYS, applyLlmSpanOtlpAttributes, asNumber, contextInputTokens, firstNumberAttr };
