charge method
Charges for embedding text under key, or throws
DVSemanticBudgetExceeded before anything is embedded.
Implementation
Future<void> charge(String text, {required String key}) async {
final DVMeterOutcome outcome =
await meters.record(tokens, estimateTokens(text), idempotencyKey: key);
if (!outcome.admitted) {
final String tenant = const DVTenants().currentTenant;
DVObservability.log(
'Embedding refused: the budget on ${tokens.name} is spent.',
level: DVLogLevel.warn,
code: 'DV-SEMANTIC-007',
context: <String, Object?>{'meter': tokens.name, 'tenant': tenant},
);
throw DVSemanticBudgetExceeded(tenant: tenant, meter: tokens.name);
}
}