akashi_otel 0.3.0 copy "akashi_otel: ^0.3.0" to clipboard
akashi_otel: ^0.3.0 copied to clipboard

OpenTelemetry tracing for the Akashi agent framework. Implements Akashi's Tracer over the opentelemetry package to export the run/step/tool span tree.

example/akashi_otel_example.dart

// Wires an OtelTracer into an agent and prints the exported spans. Runs fully
// offline with a scripted model: `dart run example/akashi_otel_example.dart`.
import 'package:akashi/akashi.dart';
import 'package:akashi_otel/akashi_otel.dart';
import 'package:opentelemetry/sdk.dart' as otel;

/// A minimal exporter that prints each finished span's name and parent.
final class _PrintingExporter implements otel.SpanExporter {
  @override
  void export(List<otel.ReadOnlySpan> spans) {
    for (final span in spans) {
      print('span: ${span.name} (parent ${span.parentSpanId})');
    }
  }

  @override
  void forceFlush() {}
  @override
  void shutdown() {}
}

/// A scripted model: call a tool, then answer.
final class _ScriptedModel implements LanguageModel {
  _ScriptedModel(this._turns);
  final List<List<ModelStreamPart>> _turns;
  int _i = 0;
  @override
  String get providerId => 'fake';
  @override
  String get modelId => 'fake';
  @override
  Stream<ModelStreamPart> stream(ModelRequest request) async* {
    final turn = _i < _turns.length
        ? _turns[_i]
        : const [FinishPart(FinishReason.stop)];
    _i++;
    for (final part in turn) {
      yield part;
    }
  }

  @override
  Future<ModelResponse> generate(ModelRequest request) async =>
      throw UnimplementedError();
}

Future<void> main() async {
  final provider = otel.TracerProviderBase(
    processors: [otel.SimpleSpanProcessor(_PrintingExporter())],
  );
  final agent = ToolLoopAgent<Object?>(
    model: _ScriptedModel([
      [
        const ToolCallCompletePart(
          toolCallId: 'c1',
          toolName: 'ping',
          input: {},
        ),
        const FinishPart(FinishReason.stop),
      ],
      [const TextDeltaPart('pong'), const FinishPart(FinishReason.stop)],
    ]),
    tools: [
      tool<Map<String, Object?>, Object?>(
        name: 'ping',
        description: 'Returns pong.',
        inputSchema: Schema.raw<Map<String, Object?>>({
          'type': 'object',
        }, (j) => <String, Object?>{}),
        execute: (input, ctx) => 'pong',
      ),
    ],
    tracer: OtelTracer(provider.getTracer('akashi')),
  );

  await agent.run('ping the tool');
}
0
likes
160
points
32
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

OpenTelemetry tracing for the Akashi agent framework. Implements Akashi's Tracer over the opentelemetry package to export the run/step/tool span tree.

Repository (GitHub)
View/report issues

Topics

#ai #agents #llm #opentelemetry

License

MIT (license)

Dependencies

akashi, opentelemetry

More

Packages that depend on akashi_otel