class_docstr: Generator based on a Hugging Face model.
  This component provides an interface to generate text using a Hugging Face model that runs locally.
  
  Usage example:
  ```python
  from haystack.components.generators import HuggingFaceLocalGenerator
  
  generator = HuggingFaceLocalGenerator(model="google/flan-t5-large",
                                        task="text2text-generation",
                                        generation_kwargs={
                                          "max_new_tokens": 100,
                                          "temperature": 0.9,
                                          })
  
  print(generator.run("Who is the best American actor?"))
  # {'replies': ['John Cusack']}
  ```
docstr: :param model: The name or path of a Hugging Face model for text generation,
      for example, "google/flan-t5-large".
      If the model is also specified in the `huggingface_pipeline_kwargs`, this parameter will be ignored.
  :param task: The task for the Hugging Face pipeline.
      Possible values are "text-generation" and "text2text-generation".
      Generally, decoder-only models like GPT support "text-generation",
      while encoder-decoder models like T5 support "text2text-generation".
      If the task is also specified in the `huggingface_pipeline_kwargs`, this parameter will be ignored.
      If not specified, the component will attempt to infer the task from the model name,
      calling the Hugging Face Hub API.
  :param device: The device on which the model is loaded. (e.g., "cpu", "cuda:0").
      If `device` or `device_map` is specified in the `huggingface_pipeline_kwargs`,
      this parameter will be ignored.
  :param token: The token to use as HTTP bearer authorization for remote files.
      If True, will use the token generated when running huggingface-cli login (stored in ~/.huggingface).
      If the token is also specified in the `huggingface_pipeline_kwargs`, this parameter will be ignored.
  :param generation_kwargs: A dictionary containing keyword arguments to customize text generation.
      Some examples: `max_length`, `max_new_tokens`, `temperature`, `top_k`, `top_p`,...
      See Hugging Face's documentation for more information:
      - https://huggingface.co/docs/transformers/main/en/generation_strategies#customize-text-generation
      - https://huggingface.co/docs/transformers/main/en/main_classes/text_generation#transformers.GenerationConfig
  :param huggingface_pipeline_kwargs: Dictionary containing keyword arguments used to initialize the
      Hugging Face pipeline for text generation.
      These keyword arguments provide fine-grained control over the Hugging Face pipeline.
      In case of duplication, these kwargs override `model`, `task`, `device`, and `token` init parameters.
      See Hugging Face's [documentation](https://huggingface.co/docs/transformers/en/main_classes/pipelines#transformers.pipeline.task)
      for more information on the available kwargs.
      In this dictionary, you can also include `model_kwargs` to specify the kwargs
      for model initialization:
      https://huggingface.co/docs/transformers/en/main_classes/model#transformers.PreTrainedModel.from_pretrained
  :param stop_words: A list of stop words. If any one of the stop words is generated, the generation is stopped.
      If you provide this parameter, you should not specify the `stopping_criteria` in `generation_kwargs`.
      For some chat models, the output includes both the new text and the original prompt.
      In these cases, it's important to make sure your prompt has no stop words.
code: def __init__(
      self,
      model: str = "google/flan-t5-base",
      task: Optional[
          Literal["text-generation", "text2text-generation"]
      ] = None,
      device: Optional[str] = None,
      token: Optional[Union[str, bool]] = None,
      generation_kwargs: Optional[Dict[str, Any]] = None,
      huggingface_pipeline_kwargs: Optional[Dict[str, Any]] = None,
      stop_words: Optional[List[str]] = None,
  ):
      """
      :param model: The name or path of a Hugging Face model for text generation,
          for example, "google/flan-t5-large".
          If the model is also specified in the `huggingface_pipeline_kwargs`, this parameter will be ignored.
      :param task: The task for the Hugging Face pipeline.
          Possible values are "text-generation" and "text2text-generation".
          Generally, decoder-only models like GPT support "text-generation",
          while encoder-decoder models like T5 support "text2text-generation".
          If the task is also specified in the `huggingface_pipeline_kwargs`, this parameter will be ignored.
          If not specified, the component will attempt to infer the task from the model name,
          calling the Hugging Face Hub API.
      :param device: The device on which the model is loaded. (e.g., "cpu", "cuda:0").
          If `device` or `device_map` is specified in the `huggingface_pipeline_kwargs`,
          this parameter will be ignored.
      :param token: The token to use as HTTP bearer authorization for remote files.
          If True, will use the token generated when running huggingface-cli login (stored in ~/.huggingface).
          If the token is also specified in the `huggingface_pipeline_kwargs`, this parameter will be ignored.
      :param generation_kwargs: A dictionary containing keyword arguments to customize text generation.
          Some examples: `max_length`, `max_new_tokens`, `temperature`, `top_k`, `top_p`,...
          See Hugging Face's documentation for more information:
          - https://huggingface.co/docs/transformers/main/en/generation_strategies#customize-text-generation
          - https://huggingface.co/docs/transformers/main/en/main_classes/text_generation#transformers.GenerationConfig
      :param huggingface_pipeline_kwargs: Dictionary containing keyword arguments used to initialize the
          Hugging Face pipeline for text generation.
          These keyword arguments provide fine-grained control over the Hugging Face pipeline.
          In case of duplication, these kwargs override `model`, `task`, `device`, and `token` init parameters.
          See Hugging Face's [documentation](https://huggingface.co/docs/transformers/en/main_classes/pipelines#transformers.pipeline.task)
          for more information on the available kwargs.
          In this dictionary, you can also include `model_kwargs` to specify the kwargs
          for model initialization:
          https://huggingface.co/docs/transformers/en/main_classes/model#transformers.PreTrainedModel.from_pretrained
      :param stop_words: A list of stop words. If any one of the stop words is generated, the generation is stopped.
          If you provide this parameter, you should not specify the `stopping_criteria` in `generation_kwargs`.
          For some chat models, the output includes both the new text and the original prompt.
          In these cases, it's important to make sure your prompt has no stop words.
      """
      torch_and_transformers_import.check()
  
      huggingface_pipeline_kwargs = huggingface_pipeline_kwargs or {}
      generation_kwargs = generation_kwargs or {}
  
      # check if the huggingface_pipeline_kwargs contain the essential parameters
      # otherwise, populate them with values from other init parameters
      huggingface_pipeline_kwargs.setdefault("model", model)
      huggingface_pipeline_kwargs.setdefault("token", token)
      if (
          device is not None
          and "device" not in huggingface_pipeline_kwargs
          and "device_map" not in huggingface_pipeline_kwargs
      ):
          huggingface_pipeline_kwargs["device"] = device
  
      # task identification and validation
      if task is None:
          if "task" in huggingface_pipeline_kwargs:
              task = huggingface_pipeline_kwargs["task"]
          elif isinstance(huggingface_pipeline_kwargs["model"], str):
              task = model_info(
                  huggingface_pipeline_kwargs["model"],
                  token=huggingface_pipeline_kwargs["token"],
              ).pipeline_tag
  
      if task not in SUPPORTED_TASKS:
          raise ValueError(
              f"Task '{task}' is not supported. "
              f"The supported tasks are: {', '.join(SUPPORTED_TASKS)}."
          )
      huggingface_pipeline_kwargs["task"] = task
  
      # if not specified, set return_full_text to False for text-generation
      # only generated text is returned (excluding prompt)
      if task == "text-generation":
          generation_kwargs.setdefault("return_full_text", False)
  
      if stop_words and "stopping_criteria" in generation_kwargs:
          raise ValueError(
              "Found both the `stop_words` init parameter and the `stopping_criteria` key in `generation_kwargs`. "
              "Please specify only one of them."
          )
  
      self.huggingface_pipeline_kwargs = huggingface_pipeline_kwargs
      self.generation_kwargs = generation_kwargs
      self.stop_words = stop_words
      self.pipeline = None
      self.stopping_criteria_list = None
  
file_path: haystack/haystack/components/generators/hugging_face_local.py
imports: import logging
  from typing import Any, Dict, List, Literal, Optional, Union
  from haystack import component, default_to_dict, default_from_dict
  from haystack.components.generators.hf_utils import StopWordsCriteria
  from haystack.lazy_imports import LazyImport
label_desc: Use image node_id 1 to create a new HuggingFaceLocalGenerator object  with example: obj = HuggingFaceLocalGenerator(model, task, device, token, generation_kwargs, huggingface_pipeline_kwargs, stop_words)