docs: def model_schema(
      model: Type['main.BaseModel'], by_alias: bool = True, ref_prefix: Optional[str] = None
  ) -> Dict[str, Any]:
      """
      Generate a JSON Schema for one model. With all the sub-models defined in the ``definitions`` top-level
      JSON key.
  
      :param model: a Pydantic model (a class that inherits from BaseModel)
      :param by_alias: generate the schemas using the aliases defined, if any
      :param ref_prefix: the JSON Pointer prefix for schema references with ``$ref``, if None, will be set to the
        default of ``#/definitions/``. Update it if you want the schemas to reference the definitions somewhere
        else, e.g. for OpenAPI use ``#/components/schemas/``. The resulting generated schemas will still be at the
        top-level key ``definitions``, so you can extract them from there. But all the references will have the set
        prefix.
      :return: dict with the JSON Schema for the passed ``model``
      """
      ref_prefix = ref_prefix or default_prefix
      flat_models = get_flat_models_from_model(model)
      model_name_map = get_model_name_map(flat_models)
      m_schema, m_definitions = model_process_schema(
          model, by_alias=by_alias, model_name_map=model_name_map, ref_prefix=ref_prefix
      )
      if m_definitions:
          m_schema.update({'definitions': m_definitions})
      return m_schema