docs: def field_schema(
      field: Field,
      *,
      by_alias: bool = True,
      model_name_map: Dict[Type['main.BaseModel'], str],
      ref_prefix: Optional[str] = None,
  ) -> Tuple[Dict[str, Any], Dict[str, Any]]:
      """
      Process a Pydantic field and return a tuple with a JSON Schema for it as the first item.
      Also return a dictionary of definitions with models as keys and their schemas as values. If the passed field
      is a model and has sub-models, and those sub-models don't have overrides (as ``title``, ``default``, etc), they
      will be included in the definitions and referenced in the schema instead of included recursively.
  
      :param field: a Pydantic ``Field``
      :param by_alias: use the defined alias (if any) in the returned schema
      :param model_name_map: used to generate the JSON Schema references to other models included in the definitions
      :param ref_prefix: the JSON Pointer prefix to use for references to other schemas, if None, the default of
        #/definitions/ will be used
      :return: tuple of the schema for this field and additional definitions
      """
      ref_prefix = ref_prefix or default_prefix
      schema_overrides = False
      schema = cast('Schema', field.schema)
      s = dict(title=schema.title or field.alias.title())
      if schema.title:
          schema_overrides = True
  
      if schema.description:
          s['description'] = schema.description
          schema_overrides = True
  
      if not field.required and field.default is not None:
          s['default'] = encode_default(field.default)
          schema_overrides = True
  
      validation_schema = get_field_schema_validations(field)
      if validation_schema:
          s.update(validation_schema)
          schema_overrides = True
  
      f_schema, f_definitions = field_type_schema(
          field,
          by_alias=by_alias,
          model_name_map=model_name_map,
          schema_overrides=schema_overrides,
          ref_prefix=ref_prefix,
      )
      # $ref will only be returned when there are no schema_overrides
      if '$ref' in f_schema:
          return f_schema, f_definitions
      else:
          s.update(f_schema)
          return s, f_definitions