fromGeminiPart function

  1. @visibleForTesting
Part fromGeminiPart(
  1. Part p
)

Implementation

@visibleForTesting
Part fromGeminiPart(gcl.Part p) {
  final metadata = <String, dynamic>{
    if (p.thoughtSignature != null) 'thoughtSignature': p.thoughtSignature,
  };

  if (p.text != null) {
    if (p.thought == true) {
      return ReasoningPart(reasoning: p.text!, metadata: metadata);
    }
    return TextPart(text: p.text!, metadata: metadata);
  }
  if (p.functionCall != null) {
    return ToolRequestPart(
      toolRequest: ToolRequest(
        ref: p.functionCall!.id == '' ? null : p.functionCall!.id,
        name: _fromGeminiToolName(p.functionCall!.name ?? ''),
        input: p.functionCall!.args,
      ),
      metadata: metadata,
    );
  }
  if (p.codeExecutionResult != null) {
    return CustomPart(
      custom: {'codeExecutionResult': p.codeExecutionResult!.toJson()},
      metadata: metadata,
    );
  }
  if (p.executableCode != null) {
    return CustomPart(
      custom: {'executableCode': p.executableCode!.toJson()},
      metadata: metadata,
    );
  }
  if (p.inlineData != null) {
    final mimeType = p.inlineData!.mimeType;
    final data = p.inlineData!.data;
    if (data != null) {
      return MediaPart(
        media: Media(url: 'data:$mimeType;base64,$data', contentType: mimeType),
        metadata: metadata,
      );
    }
  }
  if (p.fileData != null) {
    final mimeType = p.fileData!.mimeType;
    final fileUri = p.fileData!.fileUri;
    if (fileUri != null) {
      return MediaPart(
        media: Media(url: fileUri, contentType: mimeType),
        metadata: metadata,
      );
    }
  }
  throw UnimplementedError('Unsupported part type: ${p.toJson()}');
}