contentBlock method

AnthropicMessageBuilder contentBlock(
  1. Map<String, dynamic> blockData
)

Direct content block

Implementation

AnthropicMessageBuilder contentBlock(Map<String, dynamic> blockData) {
  final type = blockData['type'] as String;

  switch (type) {
    case 'text':
      final text = blockData['text'] as String;
      final cacheData = blockData['cache_control'] as Map<String, dynamic>?;

      if (cacheData != null && cacheData['type'] == 'ephemeral') {
        final ttlString = cacheData['ttl'] as String?;
        final ttl = AnthropicCacheTtl.fromString(ttlString);
        // Use the new cache + text pattern
        cache(ttl: ttl);
        _builder.text(text);
        return this;
      } else {
        _builder.text(text);
        return this;
      }

    case 'tools':
      final toolsData = blockData['tools'] as List<dynamic>;
      final cacheData = blockData['cache_control'] as Map<String, dynamic>?;

      // Convert tool data back to Tool objects
      final tools = <Tool>[];
      for (final toolData in toolsData) {
        if (toolData is Map<String, dynamic>) {
          final function = toolData['function'] as Map<String, dynamic>;
          tools.add(Tool(
            toolType: toolData['type'] as String? ?? 'function',
            function: FunctionTool(
              name: function['name'] as String,
              description: function['description'] as String,
              parameters: ParametersSchema.fromJson(
                  function['parameters'] as Map<String, dynamic>),
            ),
          ));
        }
      }

      if (cacheData != null && cacheData['type'] == 'ephemeral') {
        final ttlString = cacheData['ttl'] as String?;
        final ttl = AnthropicCacheTtl.fromString(ttlString);
        // Use cache + tools pattern
        cache(ttl: ttl);
        _builder.tools(tools);
        return this;
      } else {
        _builder.tools(tools);
        return this;
      }

    default:
      _builder.text(blockData['text']?.toString() ?? '');
      return this;
  }
}