code: def psi(
      ctx,
      role: Role,
      input_data: cpn.dataframe_input(roles=[GUEST, HOST]),
      protocol: cpn.parameter(
          type=str, default="ecdh_psi", optional=True
      ),
      curve_type: cpn.parameter(
          type=str, default="curve25519", optional=True
      ),
      output_data: cpn.dataframe_output(roles=[GUEST, HOST]),
  ):
      input_data = input_data.read()
      input_data_count = input_data.shape[0]
      intersect_data = psi_run(ctx, input_data, protocol, curve_type)
      summary = {
          "input_count": input_data_count,
          "intersect_count": intersect_data.shape[0],
          "intersect_rate": intersect_data.shape[0] / input_data_count,
          "method": "curve25519",
      }
      ctx.metrics.log_metrics(summary, "summary")
      output_data.write(intersect_data)
  
label_desc: Use image node_id 1 for calling a global function with example usage: psi(ctx, role, input_data, protocol, curve_type, output_data) without return types