Skip to content

Commit 652fd2e

Browse files
committed
add llama support
1 parent 71a2b37 commit 652fd2e

File tree

1 file changed

+32
-16
lines changed

1 file changed

+32
-16
lines changed

langfuse/llama_index/_event_handler.py

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
StateType,
77
)
88
from langfuse.utils import _get_timestamp
9-
from langfuse.model import ModelUsage
109
from ._context import InstrumentorContext
1110
from uuid import uuid4 as create_uuid
1211

@@ -119,12 +118,12 @@ def update_generation_from_end_event(
119118
}
120119

121120
self._get_generation_client(event.span_id).update(
122-
usage=usage, end_time=_get_timestamp()
121+
usage=usage, usage_details=usage, end_time=_get_timestamp()
123122
)
124123

125124
def _parse_token_usage(
126125
self, response: Union[ChatResponse, CompletionResponse]
127-
) -> Optional[ModelUsage]:
126+
) -> Optional[dict]:
128127
if (
129128
(raw := getattr(response, "raw", None))
130129
and hasattr(raw, "get")
@@ -154,15 +153,15 @@ def _get_generation_client(self, id: str) -> StatefulGenerationClient:
154153

155154
def _parse_usage_from_mapping(
156155
usage: Union[object, Mapping[str, Any]],
157-
) -> ModelUsage:
156+
):
158157
if isinstance(usage, Mapping):
159158
return _get_token_counts_from_mapping(usage)
160159

161160
return _parse_usage_from_object(usage)
162161

163162

164-
def _parse_usage_from_object(usage: object) -> ModelUsage:
165-
model_usage: ModelUsage = {
163+
def _parse_usage_from_object(usage: object):
164+
model_usage = {
166165
"unit": None,
167166
"input": None,
168167
"output": None,
@@ -179,26 +178,43 @@ def _parse_usage_from_object(usage: object) -> ModelUsage:
179178
if (total_tokens := getattr(usage, "total_tokens", None)) is not None:
180179
model_usage["total"] = total_tokens
181180

181+
if (
182+
prompt_tokens_details := getattr(usage, "prompt_tokens_details", None)
183+
) is not None and isinstance(prompt_tokens_details, dict):
184+
for key, value in prompt_tokens_details.items():
185+
model_usage[f"input_{key}"] = value
186+
187+
if (
188+
completion_tokens_details := getattr(usage, "completion_tokens_details", None)
189+
) is not None and isinstance(completion_tokens_details, dict):
190+
for key, value in completion_tokens_details.items():
191+
model_usage[f"output_{key}"] = value
192+
182193
return model_usage
183194

184195

185196
def _get_token_counts_from_mapping(
186197
usage_mapping: Mapping[str, Any],
187-
) -> ModelUsage:
188-
model_usage: ModelUsage = {
189-
"unit": None,
190-
"input": None,
191-
"output": None,
192-
"total": None,
193-
"input_cost": None,
194-
"output_cost": None,
195-
"total_cost": None,
196-
}
198+
):
199+
model_usage = {}
200+
197201
if (prompt_tokens := usage_mapping.get("prompt_tokens")) is not None:
198202
model_usage["input"] = prompt_tokens
199203
if (completion_tokens := usage_mapping.get("completion_tokens")) is not None:
200204
model_usage["output"] = completion_tokens
201205
if (total_tokens := usage_mapping.get("total_tokens")) is not None:
202206
model_usage["total"] = total_tokens
203207

208+
if (
209+
prompt_tokens_details := usage_mapping.get("prompt_tokens_details")
210+
) is not None and isinstance(prompt_tokens_details, dict):
211+
for key, value in prompt_tokens_details.items():
212+
model_usage[f"input_{key}"] = value
213+
214+
if (
215+
completion_tokens_details := usage_mapping.get("completion_tokens_details")
216+
) is not None and isinstance(completion_tokens_details, dict):
217+
for key, value in completion_tokens_details.items():
218+
model_usage[f"output_{key}"] = value
219+
204220
return model_usage

0 commit comments

Comments
 (0)