code: def complete_abstract_value(
          self,
          return_type: GraphQLAbstractType,
          field_nodes: List[FieldNode],
          info: GraphQLResolveInfo,
          path: ResponsePath,
          result: Any,
      ) -> AwaitableOrValue[Any]:
          
          resolve_type_fn = return_type.resolve_type or self.type_resolver
          runtime_type = resolve_type_fn(result, info, return_type)  # type: ignore
  
          if isawaitable(runtime_type):
  
              async def await_complete_object_value():
                  value = self.complete_object_value(
                      self.ensure_valid_runtime_type(
                          await runtime_type, return_type, field_nodes, info, result
                      ),
                      field_nodes,
                      info,
                      path,
                      result,
                  )
                  if isawaitable(value):
                      return await value
                  return value
  
              return await_complete_object_value()
          runtime_type = cast(Optional[Union[GraphQLObjectType, str]], runtime_type)
  
          return self.complete_object_value(
              self.ensure_valid_runtime_type(
                  runtime_type, return_type, field_nodes, info, result
              ),
              field_nodes,
              info,
              path,
              result,
          )
docs: Complete an abstract value.
  
          Complete a value of an abstract type by determining the runtime object type of
          that value, then complete the value for that type.