feat: add pricing table and cost calculation in telemetry emitter

This commit is contained in:
2026-07-21 00:54:10 -04:00
parent abb65c2324
commit d66299210b
4 changed files with 250 additions and 3 deletions
+6 -1
View File
@@ -22,6 +22,7 @@ from polygateway.middleware.cache import CacheMW
from polygateway.middleware.retry import RetryMW
from polygateway.middleware.structured import StructuredMW
from polygateway.middleware.telemetry import TelemetryEmitter, TelemetryMW
from polygateway.pricing import PricingTable
from polygateway.providers import get_provider
from polygateway.sources import LeastInflightSelector, RoundRobinSelector, SourceCooldownMemo
from polygateway.transports.openai_compat import OpenAICompatTransport
@@ -68,6 +69,7 @@ class GatewayClient:
backpressure: BackpressurePolicy,
quota_full: str = "wait",
telemetry: TelemetryRecorder | None = None,
pricing: PricingTable | None = None,
cache: CacheBackend | None = None,
cache_namespace: str | None = None,
cache_ttl_s: int | None = None,
@@ -78,7 +80,7 @@ class GatewayClient:
sleep: Any = asyncio.sleep,
rng: Any = random.random,
) -> None:
emitter = TelemetryEmitter(telemetry) if telemetry is not None else None
emitter = TelemetryEmitter(telemetry, pricing=pricing) if telemetry is not None else None
terminal = RetryMW(
scope=scope,
sources=sources,
@@ -207,6 +209,9 @@ class GatewayClient:
backpressure=settings.backpressure,
quota_full=settings.quota_full,
telemetry=telemetry if telemetry is not None else _build_telemetry(settings),
pricing=PricingTable.from_file(settings.pricing_path)
if settings.pricing_path is not None
else None,
cache=cache if cache is not None else _build_cache(settings),
cache_namespace=settings.cache_namespace,
cache_ttl_s=settings.cache_ttl_s,