onLLMCall method

  1. @override
Future<void> onLLMCall({
  1. required Trial trial,
  2. required List<LLMMessage> requestMessages,
  3. required ModelConfig modelConfig,
  4. required ModelMessage? response,
  5. required Duration duration,
  6. Object? error,
})
override

Called for each LLM call. response is null on errors.

Implementation

@override
Future<void> onLLMCall({
  required Trial trial,
  required List<LLMMessage> requestMessages,
  required ModelConfig modelConfig,
  required ModelMessage? response,
  required Duration duration,
  Object? error,
}) async {
  final traceId = _traceIdFor(trial);
  final endTime = DateTime.now();
  final startTime = endTime.subtract(duration);
  final usage = response?.usage;

  _client.enqueue(
    LangfuseEvent(
      id: _uuid.v4(),
      type: 'generation-create',
      timestamp: startTime,
      body: {
        'id': _uuid.v4(),
        'traceId': traceId,
        'environment': config.environment,
        'name': 'llm.${modelConfig.model}',
        'startTime': startTime.toUtc().toIso8601String(),
        'endTime': endTime.toUtc().toIso8601String(),
        'model': modelConfig.model,
        'modelParameters': _modelParameters(modelConfig),
        'input': requestMessages.map((m) => m.toJson()).toList(),
        if (response != null) 'output': response.toJson(),
        if (usage != null)
          'usage': {
            'input': usage.promptTokens,
            'output': usage.completionTokens,
            'total': usage.totalTokens,
            'unit': 'TOKENS',
          },
        if (error != null) ...{
          'level': 'ERROR',
          'statusMessage': error.toString(),
        },
      },
    ),
  );
}