Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@
from llama_index.core.instrumentation.events.embedding import (
EmbeddingEndEvent,
EmbeddingStartEvent,
SparseEmbeddingEndEvent,
SparseEmbeddingStartEvent,
)
from llama_index.core.instrumentation.events.llm import (
LLMChatEndEvent,
Expand Down Expand Up @@ -521,6 +523,11 @@ def _(self, event: EmbeddingStartEvent) -> None:
if not self._span_kind:
self._span_kind = EMBEDDING

@_process_event.register
def _(self, event: SparseEmbeddingStartEvent) -> None:
if not self._span_kind:
self._span_kind = EMBEDDING

@_process_event.register
def _(self, event: EmbeddingEndEvent) -> None:
i = self._list_attr_len[EMBEDDING_EMBEDDINGS]
Expand All @@ -530,6 +537,17 @@ def _(self, event: EmbeddingEndEvent) -> None:
i += 1
self._list_attr_len[EMBEDDING_EMBEDDINGS] = i

@_process_event.register
def _(self, event: SparseEmbeddingEndEvent) -> None:
# Sparse embedding vectors use Dict[int, float] (token-id → weight) which
# has no matching EMBEDDING_VECTOR semantic convention (expects List[float]).
# Record the text chunks so the span is not empty; skip the vectors.
i = self._list_attr_len[EMBEDDING_EMBEDDINGS]
for text in event.chunks:
self[f"{EMBEDDING_EMBEDDINGS}.{i}.{EMBEDDING_TEXT}"] = text
i += 1
self._list_attr_len[EMBEDDING_EMBEDDINGS] = i

@_process_event.register
def _(self, event: StreamChatStartEvent) -> None:
if not self._span_kind:
Expand Down Expand Up @@ -685,6 +703,25 @@ def _(self, event: GetResponseEndEvent) -> None:
return
self._process_response_text_type(event.response)

try:
from workflows import (
SpanCancelledEvent as _SpanCancelledEvent,
WorkflowRunOutputEvent as _WorkflowRunOutputEvent,
WorkflowStepOutputEvent as _WorkflowStepOutputEvent,
)

@_process_event.register
def _(self, event: _WorkflowStepOutputEvent) -> None: ... # type: ignore[misc]

@_process_event.register
def _(self, event: _WorkflowRunOutputEvent) -> None: ... # type: ignore[misc]

@_process_event.register
def _(self, event: _SpanCancelledEvent) -> None: ... # type: ignore[misc]

except ImportError:
pass

def _extract_token_counts(self, response: Union[ChatResponse, CompletionResponse]) -> None:
if raw := getattr(response, "raw", None):
usage = raw.get("usage") if isinstance(raw, Mapping) else getattr(raw, "usage", None)
Expand Down
Loading