Spaces:
Sleeping
Sleeping
Download src/elbench/basic_education_runtime/spend_callback.py from adelevett/ELBench-live: direct link, hf CLI and curl.
- Browser
- Download file 1.11 kB
-
https://huggingface.co/spaces/adelevett/ELBench-live/resolve/main/src/elbench/basic_education_runtime/spend_callback.py
- Command line
-
hf download hf://spaces/adelevett/ELBench-live/src/elbench/basic_education_runtime/spend_callback.py
-
curl -L -o spend_callback.py https://huggingface.co/spaces/adelevett/ELBench-live/resolve/main/src/elbench/basic_education_runtime/spend_callback.py
1.11 kB
| """LangChain hook that applies the run's spending limits to basic-education runtime calls.""" | |
| from __future__ import annotations | |
| from langchain_core.callbacks import BaseCallbackHandler | |
| from langchain_core.outputs import LLMResult | |
| from elbench.utils import spend | |
| class SpendCallback(BaseCallbackHandler): | |
| """Checks the run's spending limit before each call and records what the call cost.""" | |
| raise_error = True | |
| def __init__(self, role: str) -> None: | |
| self.role = role | |
| def on_chat_model_start(self, serialized, messages, **kwargs) -> None: | |
| spend.check(self.role) | |
| def on_llm_end(self, response: LLMResult, **kwargs) -> None: | |
| usage = (response.llm_output or {}).get("token_usage") | |
| if not usage: | |
| for generations in response.generations: | |
| for generation in generations: | |
| message = getattr(generation, "message", None) | |
| usage = getattr(message, "usage_metadata", None) | |
| if usage: | |
| break | |
| spend.record(self.role, dict(usage) if usage else None) | |