fromJson static method

ResponseEvent fromJson(
  1. Map<String, dynamic> json
)

Implementation

static ResponseEvent fromJson(Map<String, dynamic> json) {
  final type = json['type'] as String?;
  if (type == null) {
    throw ArgumentError('Event JSON is missing a "type" field.');
  }

  switch (type) {
    // ────────── Core response lifecycle ──────────
    case 'response.created':
      return ResponseCreated.fromJson(json);
    case 'response.in_progress':
      return ResponseInProgress.fromJson(json);
    case 'response.completed':
      return ResponseCompleted.fromJson(json);
    case 'response.failed':
      return ResponseFailed.fromJson(json);
    case 'response.incomplete':
      return ResponseIncomplete.fromJson(json);
    case 'response.queued':
      return ResponseQueued.fromJson(json);

    // ────────── Output-item level ──────────
    case 'response.output_item.added':
      return ResponseOutputItemAdded.fromJson(json);
    case 'response.output_item.done':
      return ResponseOutputItemDone.fromJson(json);

    // ────────── Content-part level ──────────
    case 'response.content_part.added':
      return ResponseContentPartAdded.fromJson(json);
    case 'response.content_part.done':
      return ResponseContentPartDone.fromJson(json);

    // ────────── Text streaming ──────────
    case 'response.output_text.delta':
      return ResponseOutputTextDelta.fromJson(json);
    case 'response.output_text.done':
      return ResponseOutputTextDone.fromJson(json);

    // ────────── Refusal streaming ──────────
    case 'response.refusal.delta':
      return ResponseRefusalDelta.fromJson(json);
    case 'response.refusal.done':
      return ResponseRefusalDone.fromJson(json);

    // ────────── Function-call arguments streaming ──────────
    case 'response.function_call_arguments.delta':
      return ResponseFunctionCallArgumentsDelta.fromJson(json);
    case 'response.function_call_arguments.done':
      return ResponeFunctionCallArgumentsDone.fromJson(json);

    // ────────── File-search lifecycle ──────────
    case 'response.file_search_call.in_progress':
      return ResponseFileSearchCallInProgress.fromJson(json);
    case 'response.file_search_call.searching':
      return ResponseFileSearchCallSearching.fromJson(json);
    case 'response.file_search_call.completed':
      return ResponseFileSearchCallCompleted.fromJson(json);

    // ────────── Web-search lifecycle ──────────
    case 'response.web_search_call.in_progress':
      return ResponseWebSearchCallInProgress.fromJson(json);
    case 'response.web_search_call.searching':
      return ResponseWebSearchCallSearching.fromJson(json);
    case 'response.web_search_call.completed':
      return ResponseWebSearchCallCompleted.fromJson(json);

    // ────────── Image-generation lifecycle ──────────
    case 'response.image_generation_call.in_progress':
      return ResponseImageGenerationCallInProgress.fromJson(json);
    case 'response.image_generation_call.generating':
      return ResponseImageGenerationCallGenerating.fromJson(json);
    case 'response.image_generation_call.completed':
      return ResponseImageGenerationCallCompleted.fromJson(json);
    case 'response.image_generation_call.partial_image':
      return ResponseImageGenerationCallPartialImage.fromJson(json);

    // ────────── Reasoning summary parts & text ──────────
    case 'response.reasoning_summary_part.added':
      return ResponseReasoningSummaryPartAdded.fromJson(json);
    case 'response.reasoning_summary_part.done':
      return ResponseReasoningSummaryPartDone.fromJson(json);
    case 'response.reasoning_summary_text.delta':
      return ResponseReasoningSummaryTextDelta.fromJson(json);
    case 'response.reasoning_summary_text.done':
      return ResponseReasoningSummaryTextDone.fromJson(json);

    // ────────── Reasoning content streaming ──────────
    case 'response.reasoning.delta':
      return ResponseReasoningDelta.fromJson(json);
    case 'response.reasoning.done':
      return ResponseReasoningDone.fromJson(json);
    case 'response.reasoning_summary.delta':
      return ResponseReasoningSummaryDelta.fromJson(json);
    case 'response.reasoning_summary.done':
      return ResponseReasoningSummaryDone.fromJson(json);

    // ────────── Output-text annotations ──────────
    case 'response.output_text.annotation.added':
      return ResponseTextAnnotationAdded.fromJson(json);

    // ────────── MCP tool-call lifecycle & arg streaming ──────────
    case 'response.mcp_call_arguments.delta':
      return ResponseMcpCallArgumentsDelta.fromJson(json);
    case 'response.mcp_call_arguments.done':
      return ResponseMcpCallArgumentsDone.fromJson(json);
    case 'response.mcp_call.in_progress':
      return ResponseMcpCallInProgress.fromJson(json);
    case 'response.mcp_call.completed':
      return ResponseMcpCallCompleted.fromJson(json);
    case 'response.mcp_call.failed':
      return ResponseMcpCallFailed.fromJson(json);

    // ────────── MCP list-tools lifecycle ──────────
    case 'response.mcp_list_tools.in_progress':
      return ResponseMcpListToolsInProgress.fromJson(json);
    case 'response.mcp_list_tools.completed':
      return ResponseMcpListToolsCompleted.fromJson(json);
    case 'response.mcp_list_tools.failed':
      return ResponseMcpListToolsFailed.fromJson(json);

    // ────────── Code-interpreter code streaming ──────────
    case 'response.code_interpreter_call_code.delta':
      return ResponseCodeInterpreterCallCodeDelta.fromJson(json);
    case 'response.code_interpreter_call_code.done':
      return ResponseCodeInterpreterCallCodeDone.fromJson(json);

    // ────────── Code-interpreter call lifecycle ──────────
    case 'response.code_interpreter_call.interpreting':
      return ResponseCodeInterpreterCallInterpreting.fromJson(json);
    case 'response.code_interpreter_call.in_progress':
      return ResponseCodeInterpreterCallInProgress.fromJson(json);
    case 'response.code_interpreter_call.completed':
      return ResponseCodeInterpreterCallCompleted.fromJson(json);

    // ────────── Generic stream-level error ──────────
    case 'error':
      return ErrorEvent.fromJson(json["error"]);

    // ────────── Unknown type ──────────
    default:
      return OtherResponseEvent(json);
  }
}