charge method

Future<void> charge(
  1. String text, {
  2. required String key,
})

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);
  }
}