mirror of
				https://github.com/explosion/spaCy.git
				synced 2025-10-31 16:07:41 +03:00 
			
		
		
		
	* initial commit * update for v0.4.0 * Apply suggestions from code review * Fix formatting * Apply suggestions from code review * Update website/docs/api/large-language-models.mdx * Update website/docs/api/large-language-models.mdx * update usage page * Apply suggestions from review * Apply suggestions from review * fix links * fix relative links * Apply suggestions from code review Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com> * Apply suggestions from review * Add section on Llama 2. Format. --------- Co-authored-by: Raphael Mitsch <r.mitsch@outlook.com> Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
		
			
				
	
	
		
			1489 lines
		
	
	
		
			86 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			1489 lines
		
	
	
		
			86 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ---
 | |
| title: Large Language Models
 | |
| teaser: Integrating LLMs into structured NLP pipelines
 | |
| menu:
 | |
|   - ['Config', 'config']
 | |
|   - ['Tasks', 'tasks']
 | |
|   - ['Models', 'models']
 | |
|   - ['Cache', 'cache']
 | |
|   - ['Various Functions', 'various-functions']
 | |
| ---
 | |
| 
 | |
| [The spacy-llm package](https://github.com/explosion/spacy-llm) integrates Large
 | |
| Language Models (LLMs) into spaCy, featuring a modular system for **fast
 | |
| prototyping** and **prompting**, and turning unstructured responses into
 | |
| **robust outputs** for various NLP tasks, **no training data** required.
 | |
| 
 | |
| ## Config {id="config"}
 | |
| 
 | |
| `spacy-llm` exposes a `llm` factory that accepts the following configuration
 | |
| options:
 | |
| 
 | |
| | Argument         | Description                                                                                             |
 | |
| | ---------------- | ------------------------------------------------------------------------------------------------------- |
 | |
| | `task`           | An LLMTask can generate prompts and parse LLM responses. See [docs](#tasks). ~~Optional[LLMTask]~~      |
 | |
| | `model`          | Callable querying a specific LLM API. See [docs](#models). ~~Callable[[Iterable[Any]], Iterable[Any]]~~ |
 | |
| | `cache`          | Cache to use for caching prompts and responses per doc (batch). See [docs](#cache). ~~Cache~~           |
 | |
| | `save_io`        | Whether to save prompts/responses within `Doc.user_data["llm_io"]`. ~~bool~~                            |
 | |
| | `validate_types` | Whether to check if signatures of configured model and task are consistent. ~~bool~~                    |
 | |
| 
 | |
| An `llm` component is defined by two main settings:
 | |
| 
 | |
| - A [**task**](#tasks), defining the prompt to send to the LLM as well as the
 | |
|   functionality to parse the resulting response back into structured fields on
 | |
|   the [Doc](/api/doc) objects.
 | |
| - A [**model**](#models) defining the model and how to connect to it. Note that
 | |
|   `spacy-llm` supports both access to external APIs (such as OpenAI) as well as
 | |
|   access to self-hosted open-source LLMs (such as using Dolly through Hugging
 | |
|   Face).
 | |
| 
 | |
| Moreover, `spacy-llm` exposes a customizable [**caching**](#cache) functionality
 | |
| to avoid running the same document through an LLM service (be it local or
 | |
| through a REST API) more than once.
 | |
| 
 | |
| Finally, you can choose to save a stringified version of LLM prompts/responses
 | |
| within the `Doc.user_data["llm_io"]` attribute by setting `save_io` to `True`.
 | |
| `Doc.user_data["llm_io"]` is a dictionary containing one entry for every LLM
 | |
| component within the `nlp` pipeline. Each entry is itself a dictionary, with two
 | |
| keys: `prompt` and `response`.
 | |
| 
 | |
| A note on `validate_types`: by default, `spacy-llm` checks whether the
 | |
| signatures of the `model` and `task` callables are consistent with each other
 | |
| and emits a warning if they don't. `validate_types` can be set to `False` if you
 | |
| want to disable this behavior.
 | |
| 
 | |
| ### Tasks {id="tasks"}
 | |
| 
 | |
| A _task_ defines an NLP problem or question, that will be sent to the LLM via a
 | |
| prompt. Further, the task defines how to parse the LLM's responses back into
 | |
| structured information. All tasks are registered in the `llm_tasks` registry.
 | |
| 
 | |
| #### task.generate_prompts {id="task-generate-prompts"}
 | |
| 
 | |
| Takes a collection of documents, and returns a collection of "prompts", which
 | |
| can be of type `Any`. Often, prompts are of type `str` - but this is not
 | |
| enforced to allow for maximum flexibility in the framework.
 | |
| 
 | |
| | Argument    | Description                              |
 | |
| | ----------- | ---------------------------------------- |
 | |
| | `docs`      | The input documents. ~~Iterable[Doc]~~   |
 | |
| | **RETURNS** | The generated prompts. ~~Iterable[Any]~~ |
 | |
| 
 | |
| #### task.parse_responses {id="task-parse-responses"}
 | |
| 
 | |
| Takes a collection of LLM responses and the original documents, parses the
 | |
| responses into structured information, and sets the annotations on the
 | |
| documents. The `parse_responses` function is free to set the annotations in any
 | |
| way, including `Doc` fields like `ents`, `spans` or `cats`, or using custom
 | |
| defined fields.
 | |
| 
 | |
| The `responses` are of type `Iterable[Any]`, though they will often be `str`
 | |
| objects. This depends on the return type of the [model](#models).
 | |
| 
 | |
| | Argument    | Description                                |
 | |
| | ----------- | ------------------------------------------ |
 | |
| | `docs`      | The input documents. ~~Iterable[Doc]~~     |
 | |
| | `responses` | The generated prompts. ~~Iterable[Any]~~   |
 | |
| | **RETURNS** | The annotated documents. ~~Iterable[Doc]~~ |
 | |
| 
 | |
| #### spacy.Summarization.v1 {id="summarization-v1"}
 | |
| 
 | |
| The `spacy.Summarization.v1` task supports both zero-shot and few-shot
 | |
| prompting.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.task]
 | |
| > @llm_tasks = "spacy.Summarization.v1"
 | |
| > examples = null
 | |
| > max_n_words = null
 | |
| > ```
 | |
| 
 | |
| | Argument      | Description                                                                                                                                                                                                                        |
 | |
| | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `template`    | Custom prompt template to send to LLM model. Default templates for each task are located in the `spacy_llm/tasks/templates` directory. Defaults to [summarization.jinja](./spacy_llm/tasks/templates/summarization.jinja). ~~str~~ |
 | |
| | `examples`    | Optional function that generates examples for few-shot learning. Defaults to `None`. ~~Optional[Callable[[], Iterable[Any]]]~~                                                                                                     |
 | |
| | `max_n_words` | Maximum number of words to be used in summary. Note that this should not expected to work exactly. Defaults to `None`. ~~Optional[int]~~                                                                                           |
 | |
| | `field`       | Name of extension attribute to store summary in (i. e. the summary will be available in `doc._.{field}`). Defaults to `summary`. ~~str~~                                                                                           |
 | |
| 
 | |
| The summarization task prompts the model for a concise summary of the provided
 | |
| text. It optionally allows to limit the response to a certain number of tokens -
 | |
| note that this requirement will be included in the prompt, but the task doesn't
 | |
| perform a hard cut-off. It's hence possible that your summary exceeds
 | |
| `max_n_words`.
 | |
| 
 | |
| To perform [few-shot learning](/usage/large-langauge-models#few-shot-prompts),
 | |
| you can write down a few examples in a separate file, and provide these to be
 | |
| injected into the prompt to the LLM. The default reader `spacy.FewShotReader.v1`
 | |
| supports `.yml`, `.yaml`, `.json` and `.jsonl`.
 | |
| 
 | |
| ```yaml
 | |
| - text: >
 | |
|     The United Nations, referred to informally as the UN, is an
 | |
|     intergovernmental organization whose stated purposes are  to maintain
 | |
|     international peace and security, develop friendly relations among nations,
 | |
|     achieve international cooperation, and serve as a centre for harmonizing the
 | |
|     actions of nations. It is the world's largest international organization.
 | |
|     The UN is headquartered on international territory in New York City, and the
 | |
|     organization has other offices in Geneva, Nairobi, Vienna, and The Hague,
 | |
|     where the International Court of Justice is headquartered.\n\n The UN was
 | |
|     established after World War II with the aim of preventing future world wars,
 | |
|     and succeeded the League of  Nations, which was characterized as
 | |
|     ineffective.
 | |
|   summary:
 | |
|     'The UN is an international organization that promotes global peace,
 | |
|     cooperation, and harmony. Established after WWII, its purpose is to prevent
 | |
|     future world wars.'
 | |
| ```
 | |
| 
 | |
| ```ini
 | |
| [components.llm.task]
 | |
| @llm_tasks = "spacy.Summarization.v1"
 | |
| max_n_words = 20
 | |
| [components.llm.task.examples]
 | |
| @misc = "spacy.FewShotReader.v1"
 | |
| path = "summarization_examples.yml"
 | |
| ```
 | |
| 
 | |
| #### spacy.NER.v2 {id="ner-v2"}
 | |
| 
 | |
| The built-in NER task supports both zero-shot and few-shot prompting. This
 | |
| version also supports explicitly defining the provided labels with custom
 | |
| descriptions.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.task]
 | |
| > @llm_tasks = "spacy.NER.v2"
 | |
| > labels = ["PERSON", "ORGANISATION", "LOCATION"]
 | |
| > examples = null
 | |
| > ```
 | |
| 
 | |
| | Argument                  | Description                                                                                                                                                                                                                                                         |
 | |
| | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `labels`                  | List of labels or str of comma-separated list of labels. ~~Union[List[str], str]~~                                                                                                                                                                                  |
 | |
| | `template`                | Custom prompt template to send to LLM model. Default templates for each task are located in the `spacy_llm/tasks/templates` directory. Defaults to [ner.v2.jinja](https://github.com/explosion/spacy-llm/blob/main/spacy_llm/tasks/templates/ner.v2.jinja). ~~str~~ |
 | |
| | `label_definitions`       | Optional dict mapping a label to a description of that label. These descriptions are added to the prompt to help instruct the LLM on what to extract. Defaults to `None`. ~~Optional[Dict[str, str]]~~                                                              |
 | |
| | `examples`                | Optional function that generates examples for few-shot learning. Defaults to `None`. ~~Optional[Callable[[], Iterable[Any]]]~~                                                                                                                                      |
 | |
| | `normalizer`              | Function that normalizes the labels as returned by the LLM. If `None`, defaults to `spacy.LowercaseNormalizer.v1`. Defaults to `None`. ~~Optional[Callable[[str], str]]~~                                                                                           |
 | |
| | `alignment_mode`          | Alignment mode in case the LLM returns entities that do not align with token boundaries. Options are `"strict"`, `"contract"` or `"expand"`. Defaults to `"contract"`. ~~str~~                                                                                      |
 | |
| | `case_sensitive_matching` | Whether to search without case sensitivity. Defaults to `False`. ~~bool~~                                                                                                                                                                                           |
 | |
| | `single_match`            | Whether to match an entity in the LLM's response only once (the first hit) or multiple times. Defaults to `False`. ~~bool~~                                                                                                                                         |
 | |
| 
 | |
| The NER task implementation doesn't currently ask the LLM for specific offsets,
 | |
| but simply expects a list of strings that represent the enties in the document.
 | |
| This means that a form of string matching is required. This can be configured by
 | |
| the following parameters:
 | |
| 
 | |
| - The `single_match` parameter is typically set to `False` to allow for multiple
 | |
|   matches. For instance, the response from the LLM might only mention the entity
 | |
|   "Paris" once, but you'd still want to mark it every time it occurs in the
 | |
|   document.
 | |
| - The case-sensitive matching is typically set to `False` to be robust against
 | |
|   case variances in the LLM's output.
 | |
| - The `alignment_mode` argument is used to match entities as returned by the LLM
 | |
|   to the tokens from the original `Doc` - specifically it's used as argument in
 | |
|   the call to [`doc.char_span()`](/api/doc#char_span). The `"strict"` mode will
 | |
|   only keep spans that strictly adhere to the given token boundaries.
 | |
|   `"contract"` will only keep those tokens that are fully within the given
 | |
|   range, e.g. reducing `"New Y"` to `"New"`. Finally, `"expand"` will expand the
 | |
|   span to the next token boundaries, e.g. expanding `"New Y"` out to
 | |
|   `"New York"`.
 | |
| 
 | |
| To perform [few-shot learning](/usage/large-langauge-models#few-shot-prompts),
 | |
| you can write down a few examples in a separate file, and provide these to be
 | |
| injected into the prompt to the LLM. The default reader `spacy.FewShotReader.v1`
 | |
| supports `.yml`, `.yaml`, `.json` and `.jsonl`.
 | |
| 
 | |
| ```yaml
 | |
| - text: Jack and Jill went up the hill.
 | |
|   entities:
 | |
|     PERSON:
 | |
|       - Jack
 | |
|       - Jill
 | |
|     LOCATION:
 | |
|       - hill
 | |
| - text: Jack fell down and broke his crown.
 | |
|   entities:
 | |
|     PERSON:
 | |
|       - Jack
 | |
| ```
 | |
| 
 | |
| ```ini
 | |
| [components.llm.task]
 | |
| @llm_tasks = "spacy.NER.v2"
 | |
| labels = PERSON,ORGANISATION,LOCATION
 | |
| [components.llm.task.examples]
 | |
| @misc = "spacy.FewShotReader.v1"
 | |
| path = "ner_examples.yml"
 | |
| ```
 | |
| 
 | |
| > Label descriptions can also be used with explicit examples to give as much
 | |
| > info to the LLM model as possible.
 | |
| 
 | |
| You can also write definitions for each label and provide them via the
 | |
| `label_definitions` argument. This lets you tell the LLM exactly what you're
 | |
| looking for rather than relying on the LLM to interpret its task given just the
 | |
| label name. Label descriptions are freeform so you can write whatever you want
 | |
| here, but through some experiments a brief description along with some examples
 | |
| and counter examples seems to work quite well.
 | |
| 
 | |
| ```ini
 | |
| [components.llm.task]
 | |
| @llm_tasks = "spacy.NER.v2"
 | |
| labels = PERSON,SPORTS_TEAM
 | |
| [components.llm.task.label_definitions]
 | |
| PERSON = "Extract any named individual in the text."
 | |
| SPORTS_TEAM = "Extract the names of any professional sports team. e.g. Golden State Warriors, LA Lakers, Man City, Real Madrid"
 | |
| ```
 | |
| 
 | |
| #### spacy.NER.v1 {id="ner-v1"}
 | |
| 
 | |
| The original version of the built-in NER task supports both zero-shot and
 | |
| few-shot prompting.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.task]
 | |
| > @llm_tasks = "spacy.NER.v1"
 | |
| > labels = PERSON,ORGANISATION,LOCATION
 | |
| > examples = null
 | |
| > ```
 | |
| 
 | |
| | Argument                  | Description                                                                                                                                                                    |
 | |
| | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
 | |
| | `labels`                  | Comma-separated list of labels. ~~str~~                                                                                                                                        |
 | |
| | `examples`                | Optional function that generates examples for few-shot learning. Defaults to `None`. ~~Optional[Callable[[], Iterable[Any]]]~~                                                 |
 | |
| | `normalizer`              | Function that normalizes the labels as returned by the LLM. If `None`, defaults to `spacy.LowercaseNormalizer.v1`. ~~Optional[Callable[[str], str]]~~                          |
 | |
| | `alignment_mode`          | Alignment mode in case the LLM returns entities that do not align with token boundaries. Options are `"strict"`, `"contract"` or `"expand"`. Defaults to `"contract"`. ~~str~~ |
 | |
| | `case_sensitive_matching` | Whether to search without case sensitivity. Defaults to `False`. ~~bool~~                                                                                                      |
 | |
| | `single_match`            | Whether to match an entity in the LLM's response only once (the first hit) or multiple times. Defaults to `False`. ~~bool~~                                                    |
 | |
| 
 | |
| The NER task implementation doesn't currently ask the LLM for specific offsets,
 | |
| but simply expects a list of strings that represent the enties in the document.
 | |
| This means that a form of string matching is required. This can be configured by
 | |
| the following parameters:
 | |
| 
 | |
| - The `single_match` parameter is typically set to `False` to allow for multiple
 | |
|   matches. For instance, the response from the LLM might only mention the entity
 | |
|   "Paris" once, but you'd still want to mark it every time it occurs in the
 | |
|   document.
 | |
| - The case-sensitive matching is typically set to `False` to be robust against
 | |
|   case variances in the LLM's output.
 | |
| - The `alignment_mode` argument is used to match entities as returned by the LLM
 | |
|   to the tokens from the original `Doc` - specifically it's used as argument in
 | |
|   the call to [`doc.char_span()`](/api/doc#char_span). The `"strict"` mode will
 | |
|   only keep spans that strictly adhere to the given token boundaries.
 | |
|   `"contract"` will only keep those tokens that are fully within the given
 | |
|   range, e.g. reducing `"New Y"` to `"New"`. Finally, `"expand"` will expand the
 | |
|   span to the next token boundaries, e.g. expanding `"New Y"` out to
 | |
|   `"New York"`.
 | |
| 
 | |
| To perform [few-shot learning](/usage/large-langauge-models#few-shot-prompts),
 | |
| you can write down a few examples in a separate file, and provide these to be
 | |
| injected into the prompt to the LLM. The default reader `spacy.FewShotReader.v1`
 | |
| supports `.yml`, `.yaml`, `.json` and `.jsonl`.
 | |
| 
 | |
| ```yaml
 | |
| - text: Jack and Jill went up the hill.
 | |
|   entities:
 | |
|     PERSON:
 | |
|       - Jack
 | |
|       - Jill
 | |
|     LOCATION:
 | |
|       - hill
 | |
| - text: Jack fell down and broke his crown.
 | |
|   entities:
 | |
|     PERSON:
 | |
|       - Jack
 | |
| ```
 | |
| 
 | |
| ```ini
 | |
| [components.llm.task]
 | |
| @llm_tasks = "spacy.NER.v1"
 | |
| labels = PERSON,ORGANISATION,LOCATION
 | |
| [components.llm.task.examples]
 | |
| @misc = "spacy.FewShotReader.v1"
 | |
| path = "ner_examples.yml"
 | |
| ```
 | |
| 
 | |
| #### spacy.SpanCat.v2 {id="spancat-v2"}
 | |
| 
 | |
| The built-in SpanCat task is a simple adaptation of the NER task to support
 | |
| overlapping entities and store its annotations in `doc.spans`.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.task]
 | |
| > @llm_tasks = "spacy.SpanCat.v2"
 | |
| > labels = ["PERSON", "ORGANISATION", "LOCATION"]
 | |
| > examples = null
 | |
| > ```
 | |
| 
 | |
| | Argument                  | Description                                                                                                                                                                                                                                                                   |
 | |
| | ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `labels`                  | List of labels or str of comma-separated list of labels. ~~Union[List[str], str]~~                                                                                                                                                                                            |
 | |
| | `template`                | Custom prompt template to send to LLM model. Default templates for each task are located in the `spacy_llm/tasks/templates` directory. Defaults to [`spancat.v2.jinja`](https://github.com/explosion/spacy-llm/blob/main/spacy_llm/tasks/templates/spancat.v2.jinja). ~~str~~ |
 | |
| | `label_definitions`       | Optional dict mapping a label to a description of that label. These descriptions are added to the prompt to help instruct the LLM on what to extract. Defaults to `None`. ~~Optional[Dict[str, str]]~~                                                                        |
 | |
| | `spans_key`               | Key of the `Doc.spans` dict to save the spans under. Defaults to `"sc"`. ~~str~~                                                                                                                                                                                              |
 | |
| | `examples`                | Optional function that generates examples for few-shot learning. Defaults to `None`. ~~Optional[Callable[[], Iterable[Any]]]~~                                                                                                                                                |
 | |
| | `normalizer`              | Function that normalizes the labels as returned by the LLM. If `None`, defaults to `spacy.LowercaseNormalizer.v1`. ~~Optional[Callable[[str], str]]~~                                                                                                                         |
 | |
| | `alignment_mode`          | Alignment mode in case the LLM returns entities that do not align with token boundaries. Options are `"strict"`, `"contract"` or `"expand"`. Defaults to `"contract"`. ~~str~~                                                                                                |
 | |
| | `case_sensitive_matching` | Whether to search without case sensitivity. Defaults to `False`. ~~bool~~                                                                                                                                                                                                     |
 | |
| | `single_match`            | Whether to match an entity in the LLM's response only once (the first hit) or multiple times. Defaults to `False`. ~~bool~~                                                                                                                                                   |
 | |
| 
 | |
| Except for the `spans_key` parameter, the SpanCat task reuses the configuration
 | |
| from the NER task. Refer to [its documentation](#ner-v2) for more insight.
 | |
| 
 | |
| #### spacy.SpanCat.v1 {id="spancat-v1"}
 | |
| 
 | |
| The original version of the built-in SpanCat task is a simple adaptation of the
 | |
| v1 NER task to support overlapping entities and store its annotations in
 | |
| `doc.spans`.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.task]
 | |
| > @llm_tasks = "spacy.SpanCat.v1"
 | |
| > labels = PERSON,ORGANISATION,LOCATION
 | |
| > examples = null
 | |
| > ```
 | |
| 
 | |
| | Argument                  | Description                                                                                                                                                                    |
 | |
| | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
 | |
| | `labels`                  | Comma-separated list of labels. ~~str~~                                                                                                                                        |
 | |
| | `spans_key`               | Key of the `Doc.spans` dict to save the spans under. Defaults to `"sc"`. ~~str~~                                                                                               |
 | |
| | `examples`                | Optional function that generates examples for few-shot learning. Defaults to `None`. ~~Optional[Callable[[], Iterable[Any]]]~~                                                 |
 | |
| | `normalizer`              | Function that normalizes the labels as returned by the LLM. If `None`, defaults to `spacy.LowercaseNormalizer.v1`. ~~Optional[Callable[[str], str]]~~                          |
 | |
| | `alignment_mode`          | Alignment mode in case the LLM returns entities that do not align with token boundaries. Options are `"strict"`, `"contract"` or `"expand"`. Defaults to `"contract"`. ~~str~~ |
 | |
| | `case_sensitive_matching` | Whether to search without case sensitivity. Defaults to `False`. ~~bool~~                                                                                                      |
 | |
| | `single_match`            | Whether to match an entity in the LLM's response only once (the first hit) or multiple times. Defaults to `False`. ~~bool~~                                                    |
 | |
| 
 | |
| Except for the `spans_key` parameter, the SpanCat task reuses the configuration
 | |
| from the NER task. Refer to [its documentation](#ner-v1) for more insight.
 | |
| 
 | |
| #### spacy.TextCat.v3 {id="textcat-v3"}
 | |
| 
 | |
| Version 3 (the most recent) of the built-in TextCat task supports both zero-shot
 | |
| and few-shot prompting. It allows setting definitions of labels. Those
 | |
| definitions are included in the prompt.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.task]
 | |
| > @llm_tasks = "spacy.TextCat.v3"
 | |
| > labels = ["COMPLIMENT", "INSULT"]
 | |
| > label_definitions = {
 | |
| >   "COMPLIMENT": "a polite expression of praise or admiration.",
 | |
| >   "INSULT": "a disrespectful or scornfully abusive remark or act."
 | |
| > }
 | |
| > examples = null
 | |
| > ```
 | |
| 
 | |
| | Argument            | Description                                                                                                                                                                                                                                                             |
 | |
| | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `labels`            | List of labels or str of comma-separated list of labels. ~~Union[List[str], str]~~                                                                                                                                                                                      |
 | |
| | `label_definitions` | Dictionary of label definitions. Included in the prompt, if set. Defaults to `None`. ~~Optional[Dict[str, str]]~~                                                                                                                                                       |
 | |
| | `template`          | Custom prompt template to send to LLM model. Default templates for each task are located in the `spacy_llm/tasks/templates` directory. Defaults to [`textcat.jinja`](https://github.com/explosion/spacy-llm/blob/main/spacy_llm/tasks/templates/textcat.jinja). ~~str~~ |
 | |
| | `examples`          | Optional function that generates examples for few-shot learning. Defaults to `None`. ~~Optional[Callable[[], Iterable[Any]]]~~                                                                                                                                          |
 | |
| | `normalizer`        | Function that normalizes the labels as returned by the LLM. If `None`, falls back to `spacy.LowercaseNormalizer.v1`. Defaults to `None`. ~~Optional[Callable[[str], str]]~~                                                                                             |
 | |
| | `exclusive_classes` | If set to `True`, only one label per document should be valid. If set to `False`, one document can have multiple labels. Defaults to `False`. ~~bool~~                                                                                                                  |
 | |
| | `allow_none`        | When set to `True`, allows the LLM to not return any of the given label. The resulting dict in `doc.cats` will have `0.0` scores for all labels. Defaults to `True`. ~~bool~~                                                                                           |
 | |
| | `verbose`           | If set to `True`, warnings will be generated when the LLM returns invalid responses. Defaults to `False`. ~~bool~~                                                                                                                                                      |
 | |
| 
 | |
| To perform [few-shot learning](/usage/large-langauge-models#few-shot-prompts),
 | |
| you can write down a few examples in a separate file, and provide these to be
 | |
| injected into the prompt to the LLM. The default reader `spacy.FewShotReader.v1`
 | |
| supports `.yml`, `.yaml`, `.json` and `.jsonl`.
 | |
| 
 | |
| ```json
 | |
| [
 | |
|   {
 | |
|     "text": "You look great!",
 | |
|     "answer": "Compliment"
 | |
|   },
 | |
|   {
 | |
|     "text": "You are not very clever at all.",
 | |
|     "answer": "Insult"
 | |
|   }
 | |
| ]
 | |
| ```
 | |
| 
 | |
| ```ini
 | |
| [components.llm.task]
 | |
| @llm_tasks = "spacy.TextCat.v3"
 | |
| labels = ["COMPLIMENT", "INSULT"]
 | |
| label_definitions = {
 | |
|   "COMPLIMENT": "a polite expression of praise or admiration.",
 | |
|   "INSULT": "a disrespectful or scornfully abusive remark or act."
 | |
| }
 | |
| [components.llm.task.examples]
 | |
| @misc = "spacy.FewShotReader.v1"
 | |
| path = "textcat_examples.json"
 | |
| ```
 | |
| 
 | |
| #### spacy.TextCat.v2 {id="textcat-v2"}
 | |
| 
 | |
| Version 2 of the built-in TextCat task supports both zero-shot and few-shot
 | |
| prompting and includes an improved prompt template.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.task]
 | |
| > @llm_tasks = "spacy.TextCat.v2"
 | |
| > labels = ["COMPLIMENT", "INSULT"]
 | |
| > examples = null
 | |
| > ```
 | |
| 
 | |
| | Argument            | Description                                                                                                                                                                                                                                                             |
 | |
| | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `labels`            | List of labels or str of comma-separated list of labels. ~~Union[List[str], str]~~                                                                                                                                                                                      |
 | |
| | `template`          | Custom prompt template to send to LLM model. Default templates for each task are located in the `spacy_llm/tasks/templates` directory. Defaults to [`textcat.jinja`](https://github.com/explosion/spacy-llm/blob/main/spacy_llm/tasks/templates/textcat.jinja). ~~str~~ |
 | |
| | `examples`          | Optional function that generates examples for few-shot learning. Defaults to `None`. ~~Optional[Callable[[], Iterable[Any]]]~~                                                                                                                                          |
 | |
| | `normalizer`        | Function that normalizes the labels as returned by the LLM. If `None`, falls back to `spacy.LowercaseNormalizer.v1`. ~~Optional[Callable[[str], str]]~~                                                                                                                 |
 | |
| | `exclusive_classes` | If set to `True`, only one label per document should be valid. If set to `False`, one document can have multiple labels. Defaults to `False`. ~~bool~~                                                                                                                  |
 | |
| | `allow_none`        | When set to `True`, allows the LLM to not return any of the given label. The resulting dict in `doc.cats` will have `0.0` scores for all labels. Defaults to `True`. ~~bool~~                                                                                           |
 | |
| | `verbose`           | If set to `True`, warnings will be generated when the LLM returns invalid responses. Defaults to `False`. ~~bool~~                                                                                                                                                      |
 | |
| 
 | |
| To perform [few-shot learning](/usage/large-langauge-models#few-shot-prompts),
 | |
| you can write down a few examples in a separate file, and provide these to be
 | |
| injected into the prompt to the LLM. The default reader `spacy.FewShotReader.v1`
 | |
| supports `.yml`, `.yaml`, `.json` and `.jsonl`.
 | |
| 
 | |
| ```json
 | |
| [
 | |
|   {
 | |
|     "text": "You look great!",
 | |
|     "answer": "Compliment"
 | |
|   },
 | |
|   {
 | |
|     "text": "You are not very clever at all.",
 | |
|     "answer": "Insult"
 | |
|   }
 | |
| ]
 | |
| ```
 | |
| 
 | |
| ```ini
 | |
| [components.llm.task]
 | |
| @llm_tasks = "spacy.TextCat.v2"
 | |
| labels = ["COMPLIMENT", "INSULT"]
 | |
| [components.llm.task.examples]
 | |
| @misc = "spacy.FewShotReader.v1"
 | |
| path = "textcat_examples.json"
 | |
| ```
 | |
| 
 | |
| #### spacy.TextCat.v1 {id="textcat-v1"}
 | |
| 
 | |
| Version 1 of the built-in TextCat task supports both zero-shot and few-shot
 | |
| prompting.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.task]
 | |
| > @llm_tasks = "spacy.TextCat.v1"
 | |
| > labels = COMPLIMENT,INSULT
 | |
| > examples = null
 | |
| > ```
 | |
| 
 | |
| | Argument            | Description                                                                                                                                                                   |
 | |
| | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `labels`            | Comma-separated list of labels. ~~str~~                                                                                                                                       |
 | |
| | `examples`          | Optional function that generates examples for few-shot learning. Deafults to `None`. ~~Optional[Callable[[], Iterable[Any]]]~~                                                |
 | |
| | `normalizer`        | Function that normalizes the labels as returned by the LLM. If `None`, falls back to `spacy.LowercaseNormalizer.v1`. ~~Optional[Callable[[str], str]]~~                       |
 | |
| | `exclusive_classes` | If set to `True`, only one label per document should be valid. If set to `False`, one document can have multiple labels. Deafults to `False`. ~~bool~~                        |
 | |
| | `allow_none`        | When set to `True`, allows the LLM to not return any of the given label. The resulting dict in `doc.cats` will have `0.0` scores for all labels. Deafults to `True`. ~~bool~~ |
 | |
| | `verbose`           | If set to `True`, warnings will be generated when the LLM returns invalid responses. Deafults to `False`. ~~bool~~                                                            |
 | |
| 
 | |
| To perform [few-shot learning](/usage/large-langauge-models#few-shot-prompts),
 | |
| you can write down a few examples in a separate file, and provide these to be
 | |
| injected into the prompt to the LLM. The default reader `spacy.FewShotReader.v1`
 | |
| supports `.yml`, `.yaml`, `.json` and `.jsonl`.
 | |
| 
 | |
| ```json
 | |
| [
 | |
|   {
 | |
|     "text": "You look great!",
 | |
|     "answer": "Compliment"
 | |
|   },
 | |
|   {
 | |
|     "text": "You are not very clever at all.",
 | |
|     "answer": "Insult"
 | |
|   }
 | |
| ]
 | |
| ```
 | |
| 
 | |
| ```ini
 | |
| [components.llm.task]
 | |
| @llm_tasks = "spacy.TextCat.v2"
 | |
| labels = COMPLIMENT,INSULT
 | |
| [components.llm.task.examples]
 | |
| @misc = "spacy.FewShotReader.v1"
 | |
| path = "textcat_examples.json"
 | |
| ```
 | |
| 
 | |
| #### spacy.REL.v1 {id="rel-v1"}
 | |
| 
 | |
| The built-in REL task supports both zero-shot and few-shot prompting. It relies
 | |
| on an upstream NER component for entities extraction.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.task]
 | |
| > @llm_tasks = "spacy.REL.v1"
 | |
| > labels = ["LivesIn", "Visits"]
 | |
| > ```
 | |
| 
 | |
| | Argument            | Description                                                                                                                                                                                                                                                     |
 | |
| | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `labels`            | List of labels or str of comma-separated list of labels. ~~Union[List[str], str]~~                                                                                                                                                                              |
 | |
| | `template`          | Custom prompt template to send to LLM model. Default templates for each task are located in the `spacy_llm/tasks/templates` directory. Defaults to [`rel.jinja`](https://github.com/explosion/spacy-llm/blob/main/spacy_llm/tasks/templates/rel.jinja). ~~str~~ |
 | |
| | `label_description` | Dictionary providing a description for each relation label. Defaults to `None`. ~~Optional[Dict[str, str]]~~                                                                                                                                                    |
 | |
| | `examples`          | Optional function that generates examples for few-shot learning. Defaults to `None`. ~~Optional[Callable[[], Iterable[Any]]]~~                                                                                                                                  |
 | |
| | `normalizer`        | Function that normalizes the labels as returned by the LLM. If `None`, falls back to `spacy.LowercaseNormalizer.v1`. Defaults to `None`. ~~Optional[Callable[[str], str]]~~                                                                                     |
 | |
| | `verbose`           | If set to `True`, warnings will be generated when the LLM returns invalid responses. Defaults to `False`. ~~bool~~                                                                                                                                              |
 | |
| 
 | |
| To perform [few-shot learning](/usage/large-langauge-models#few-shot-prompts),
 | |
| you can write down a few examples in a separate file, and provide these to be
 | |
| injected into the prompt to the LLM. The default reader `spacy.FewShotReader.v1`
 | |
| supports `.yml`, `.yaml`, `.json` and `.jsonl`.
 | |
| 
 | |
| ```json
 | |
| {"text": "Laura bought a house in Boston with her husband Mark.", "ents": [{"start_char": 0, "end_char": 5, "label": "PERSON"}, {"start_char": 24, "end_char": 30, "label": "GPE"}, {"start_char": 48, "end_char": 52, "label": "PERSON"}], "relations": [{"dep": 0, "dest": 1, "relation": "LivesIn"}, {"dep": 2, "dest": 1, "relation": "LivesIn"}]}
 | |
| {"text": "Michael travelled through South America by bike.", "ents": [{"start_char": 0, "end_char": 7, "label": "PERSON"}, {"start_char": 26, "end_char": 39, "label": "LOC"}], "relations": [{"dep": 0, "dest": 1, "relation": "Visits"}]}
 | |
| ```
 | |
| 
 | |
| ```ini
 | |
| [components.llm.task]
 | |
| @llm_tasks = "spacy.REL.v1"
 | |
| labels = ["LivesIn", "Visits"]
 | |
| [components.llm.task.examples]
 | |
| @misc = "spacy.FewShotReader.v1"
 | |
| path = "rel_examples.jsonl"
 | |
| ```
 | |
| 
 | |
| Note: the REL task relies on pre-extracted entities to make its prediction.
 | |
| Hence, you'll need to add a component that populates `doc.ents` with recognized
 | |
| spans to your spaCy pipeline and put it _before_ the REL component.
 | |
| 
 | |
| #### spacy.Lemma.v1 {id="lemma-v1"}
 | |
| 
 | |
| The `Lemma.v1` task lemmatizes the provided text and updates the `lemma_`
 | |
| attribute in the doc's tokens accordingly.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.task]
 | |
| > @llm_tasks = "spacy.Lemma.v1"
 | |
| > examples = null
 | |
| > ```
 | |
| 
 | |
| | Argument   | Description                                                                                                                                                                                                                                                       |
 | |
| | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `template` | Custom prompt template to send to LLM model. Default templates for each task are located in the `spacy_llm/tasks/templates` directory. Defaults to [lemma.jinja](https://github.com/explosion/spacy-llm/blob/main/spacy_llm/tasks/templates/lemma.jinja). ~~str~~ |
 | |
| | `examples` | Optional function that generates examples for few-shot learning. Defaults to `None`. ~~Optional[Callable[[], Iterable[Any]]]~~                                                                                                                                    |
 | |
| 
 | |
| `Lemma.v1` prompts the LLM to lemmatize the passed text and return the
 | |
| lemmatized version as a list of tokens and their corresponding lemma. E. g. the
 | |
| text `I'm buying ice cream for my friends` should invoke the response
 | |
| 
 | |
| ```
 | |
| I: I
 | |
| 'm: be
 | |
| buying: buy
 | |
| ice: ice
 | |
| cream: cream
 | |
| for: for
 | |
| my: my
 | |
| friends: friend
 | |
| .: .
 | |
| ```
 | |
| 
 | |
| If for any given text/doc instance the number of lemmas returned by the LLM
 | |
| doesn't match the number of tokens from the pipeline's tokenizer, no lemmas are
 | |
| stored in the corresponding doc's tokens. Otherwise the tokens `.lemma_`
 | |
| property is updated with the lemma suggested by the LLM.
 | |
| 
 | |
| To perform [few-shot learning](/usage/large-langauge-models#few-shot-prompts),
 | |
| you can write down a few examples in a separate file, and provide these to be
 | |
| injected into the prompt to the LLM. The default reader `spacy.FewShotReader.v1`
 | |
| supports `.yml`, `.yaml`, `.json` and `.jsonl`.
 | |
| 
 | |
| ```yaml
 | |
| - text: I'm buying ice cream.
 | |
|   lemmas:
 | |
|     - 'I': 'I'
 | |
|     - "'m": 'be'
 | |
|     - 'buying': 'buy'
 | |
|     - 'ice': 'ice'
 | |
|     - 'cream': 'cream'
 | |
|     - '.': '.'
 | |
| 
 | |
| - text: I've watered the plants.
 | |
|   lemmas:
 | |
|     - 'I': 'I'
 | |
|     - "'ve": 'have'
 | |
|     - 'watered': 'water'
 | |
|     - 'the': 'the'
 | |
|     - 'plants': 'plant'
 | |
|     - '.': '.'
 | |
| ```
 | |
| 
 | |
| ```ini
 | |
| [components.llm.task]
 | |
| @llm_tasks = "spacy.Lemma.v1"
 | |
| [components.llm.task.examples]
 | |
| @misc = "spacy.FewShotReader.v1"
 | |
| path = "lemma_examples.yml"
 | |
| ```
 | |
| 
 | |
| #### spacy.Sentiment.v1 {id="sentiment-v1"}
 | |
| 
 | |
| Performs sentiment analysis on provided texts. Scores between 0 and 1 are stored
 | |
| in `Doc._.sentiment` - the higher, the more positive. Note in cases of parsing
 | |
| issues (e. g. in case of unexpected LLM responses) the value might be `None`.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.task]
 | |
| > @llm_tasks = "spacy.Sentiment.v1"
 | |
| > examples = null
 | |
| > ```
 | |
| 
 | |
| | Argument   | Description                                                                                                                                                                                                                |
 | |
| | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `template` | Custom prompt template to send to LLM model. Default templates for each task are located in the `spacy_llm/tasks/templates` directory. Defaults to [sentiment.jinja](./spacy_llm/tasks/templates/sentiment.jinja). ~~str~~ |
 | |
| | `examples` | Optional function that generates examples for few-shot learning. Defaults to `None`. ~~Optional[Callable[[], Iterable[Any]]]~~                                                                                             |
 | |
| | `field`    | Name of extension attribute to store summary in (i. e. the summary will be available in `doc._.{field}`). Defaults to `sentiment`. ~~str~~                                                                                 |
 | |
| 
 | |
| To perform [few-shot learning](/usage/large-langauge-models#few-shot-prompts),
 | |
| you can write down a few examples in a separate file, and provide these to be
 | |
| injected into the prompt to the LLM. The default reader `spacy.FewShotReader.v1`
 | |
| supports `.yml`, `.yaml`, `.json` and `.jsonl`.
 | |
| 
 | |
| ```yaml
 | |
| - text: 'This is horrifying.'
 | |
|   score: 0
 | |
| - text: 'This is underwhelming.'
 | |
|   score: 0.25
 | |
| - text: 'This is ok.'
 | |
|   score: 0.5
 | |
| - text: "I'm looking forward to this!"
 | |
|   score: 1.0
 | |
| ```
 | |
| 
 | |
| ```ini
 | |
| [components.llm.task]
 | |
| @llm_tasks = "spacy.Sentiment.v1"
 | |
| [components.llm.task.examples]
 | |
| @misc = "spacy.FewShotReader.v1"
 | |
| path = "sentiment_examples.yml"
 | |
| ```
 | |
| 
 | |
| #### spacy.NoOp.v1 {id="noop-v1"}
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.task]
 | |
| > @llm_tasks = "spacy.NoOp.v1"
 | |
| > ```
 | |
| 
 | |
| This task is only useful for testing - it tells the LLM to do nothing, and does
 | |
| not set any fields on the `docs`.
 | |
| 
 | |
| ### Models {id="models"}
 | |
| 
 | |
| A _model_ defines which LLM model to query, and how to query it. It can be a
 | |
| simple function taking a collection of prompts (consistent with the output type
 | |
| of `task.generate_prompts()`) and returning a collection of responses
 | |
| (consistent with the expected input of `parse_responses`). Generally speaking,
 | |
| it's a function of type `Callable[[Iterable[Any]], Iterable[Any]]`, but specific
 | |
| implementations can have other signatures, like
 | |
| `Callable[[Iterable[str]], Iterable[str]]`.
 | |
| 
 | |
| #### API Keys {id="api-keys"}
 | |
| 
 | |
| Note that when using hosted services, you have to ensure that the proper API
 | |
| keys are set as environment variables as described by the corresponding
 | |
| provider's documentation.
 | |
| 
 | |
| E. g. when using OpenAI, you have to get an API key from openai.com, and ensure
 | |
| that the keys are set as environmental variables:
 | |
| 
 | |
| ```shell
 | |
| export OPENAI_API_KEY="sk-..."
 | |
| export OPENAI_API_ORG="org-..."
 | |
| ```
 | |
| 
 | |
| For Cohere it's
 | |
| 
 | |
| ```shell
 | |
| export CO_API_KEY="..."
 | |
| ```
 | |
| 
 | |
| and for Anthropic
 | |
| 
 | |
| ```shell
 | |
| export ANTHROPIC_API_KEY="..."
 | |
| ```
 | |
| 
 | |
| #### spacy.GPT-4.v1 {id="gpt-4"}
 | |
| 
 | |
| OpenAI's `gpt-4` model family.
 | |
| 
 | |
| > #### Example config:
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.model]
 | |
| > @llm_models = "spacy.GPT-4.v1"
 | |
| > name = "gpt-4"
 | |
| > config = {"temperature": 0.3}
 | |
| > ```
 | |
| 
 | |
| | Argument    | Description                                                                                                                                                 |
 | |
| | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `name`      | Model name, i. e. any supported variant for this particular model. Defaults to `"gpt-4"`. ~~Literal["gpt-4", "gpt-4-0314", "gpt-4-32k", "gpt-4-32k-0314"]~~ |
 | |
| | `config`    | Further configuration passed on to the model. Defaults to `{}`. ~~Dict[Any, Any]~~                                                                          |
 | |
| | `strict`    | If `True`, raises an error if the LLM API returns a malformed response. Otherwise, return the error responses as is. Defaults to `True`. ~~bool~~           |
 | |
| | `max_tries` | Max. number of tries for API request. Defaults to `3`. ~~int~~                                                                                              |
 | |
| | `timeout`   | Timeout for API request in seconds. Defaults to `30`. ~~int~~                                                                                               |
 | |
| 
 | |
| #### spacy.GPT-3-5.v1 {id="gpt-3-5"}
 | |
| 
 | |
| OpenAI's `gpt-3-5` model family.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.model]
 | |
| > @llm_models = "spacy.GPT-3-5.v1"
 | |
| > name = "gpt-3.5-turbo"
 | |
| > config = {"temperature": 0.3}
 | |
| > ```
 | |
| 
 | |
| | Argument    | Description                                                                                                                                                                                         |
 | |
| | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `name`      | Model name, i. e. any supported variant for this particular model. Defaults to `"gpt-3.5-turbo"`. ~~Literal["gpt-3.5-turbo", "gpt-3.5-turbo-16k", "gpt-3.5-turbo-0613", "gpt-3.5-turbo-0613-16k"]~~ |
 | |
| | `config`    | Further configuration passed on to the model. Defaults to `{}`. ~~Dict[Any, Any]~~                                                                                                                  |
 | |
| | `strict`    | If `True`, raises an error if the LLM API returns a malformed response. Otherwise, return the error responses as is. Defaults to `True`. ~~bool~~                                                   |
 | |
| | `max_tries` | Max. number of tries for API request. Defaults to `3`. ~~int~~                                                                                                                                      |
 | |
| | `timeout`   | Timeout for API request in seconds. Defaults to `30`. ~~int~~                                                                                                                                       |
 | |
| 
 | |
| #### spacy.Text-Davinci.v1 {id="text-davinci"}
 | |
| 
 | |
| OpenAI's `text-davinci` model family.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.model]
 | |
| > @llm_models = "spacy.Text-Davinci.v1"
 | |
| > name = "text-davinci-003"
 | |
| > config = {"temperature": 0.3}
 | |
| > ```
 | |
| 
 | |
| | Argument    | Description                                                                                                                                              |
 | |
| | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `name`      | Model name, i. e. any supported variant for this particular model. Defaults to `"text-davinci-003"`. ~~Literal["text-davinci-002", "text-davinci-003"]~~ |
 | |
| | `config`    | Further configuration passed on to the model. Defaults to `{}`. ~~Dict[Any, Any]~~                                                                       |
 | |
| | `strict`    | If `True`, raises an error if the LLM API returns a malformed response. Otherwise, return the error responses as is. Defaults to `True`. ~~bool~~        |
 | |
| | `max_tries` | Max. number of tries for API request. Defaults to `3`. ~~int~~                                                                                           |
 | |
| | `timeout`   | Timeout for API request in seconds. Defaults to `30`. ~~int~~                                                                                            |
 | |
| 
 | |
| #### spacy.Code-Davinci.v1 {id="code-davinci"}
 | |
| 
 | |
| OpenAI's `code-davinci` model family.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.model]
 | |
| > @llm_models = "spacy.Code-Davinci.v1"
 | |
| > name = "code-davinci-002"
 | |
| > config = {"temperature": 0.3}
 | |
| > ```
 | |
| 
 | |
| | Argument    | Description                                                                                                                                       |
 | |
| | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `name`      | Model name, i. e. any supported variant for this particular model. Defaults to `"code-davinci-002"`. ~~Literal["code-davinci-002"]~~              |
 | |
| | `config`    | Further configuration passed on to the model. Defaults to `{}`. ~~Dict[Any, Any]~~                                                                |
 | |
| | `strict`    | If `True`, raises an error if the LLM API returns a malformed response. Otherwise, return the error responses as is. Defaults to `True`. ~~bool~~ |
 | |
| | `max_tries` | Max. number of tries for API request. Defaults to `3`. ~~int~~                                                                                    |
 | |
| | `timeout`   | Timeout for API request in seconds. Defaults to `30`. ~~int~~                                                                                     |
 | |
| 
 | |
| #### spacy.Text-Curie.v1 {id="text-curie"}
 | |
| 
 | |
| OpenAI's `text-curie` model family.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.model]
 | |
| > @llm_models = "spacy.Text-Curie.v1"
 | |
| > name = "text-curie-001"
 | |
| > config = {"temperature": 0.3}
 | |
| > ```
 | |
| 
 | |
| | Argument    | Description                                                                                                                                       |
 | |
| | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `name`      | Model name, i. e. any supported variant for this particular model. Defaults to `"text-curie-001"`. ~~Literal["text-curie-001"]~~                  |
 | |
| | `config`    | Further configuration passed on to the model. Defaults to `{}`. ~~Dict[Any, Any]~~                                                                |
 | |
| | `strict`    | If `True`, raises an error if the LLM API returns a malformed response. Otherwise, return the error responses as is. Defaults to `True`. ~~bool~~ |
 | |
| | `max_tries` | Max. number of tries for API request. Defaults to `3`. ~~int~~                                                                                    |
 | |
| | `timeout`   | Timeout for API request in seconds. Defaults to `30`. ~~int~~                                                                                     |
 | |
| 
 | |
| #### spacy.Text-Babbage.v1 {id="text-babbage"}
 | |
| 
 | |
| OpenAI's `text-babbage` model family.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.model]
 | |
| > @llm_models = "spacy.Text-Babbage.v1"
 | |
| > name = "text-babbage-001"
 | |
| > config = {"temperature": 0.3}
 | |
| > ```
 | |
| 
 | |
| | Argument    | Description                                                                                                                                       |
 | |
| | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `name`      | Model name, i. e. any supported variant for this particular model. Defaults to `"text-babbage-001"`. ~~Literal["text-babbage-001"]~~              |
 | |
| | `config`    | Further configuration passed on to the model. Defaults to `{}`. ~~Dict[Any, Any]~~                                                                |
 | |
| | `strict`    | If `True`, raises an error if the LLM API returns a malformed response. Otherwise, return the error responses as is. Defaults to `True`. ~~bool~~ |
 | |
| | `max_tries` | Max. number of tries for API request. Defaults to `3`. ~~int~~                                                                                    |
 | |
| | `timeout`   | Timeout for API request in seconds. Defaults to `30`. ~~int~~                                                                                     |
 | |
| 
 | |
| #### spacy.Text-Ada.v1 {id="text-ada"}
 | |
| 
 | |
| OpenAI's `text-ada` model family.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.model]
 | |
| > @llm_models = "spacy.Text-Ada.v1"
 | |
| > name = "text-ada-001"
 | |
| > config = {"temperature": 0.3}
 | |
| > ```
 | |
| 
 | |
| | Argument    | Description                                                                                                                                       |
 | |
| | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `name`      | Model name, i. e. any supported variant for this particular model. Defaults to `"text-ada-001"`. ~~Literal["text-ada-001"]~~                      |
 | |
| | `config`    | Further configuration passed on to the model. Defaults to `{}`. ~~Dict[Any, Any]~~                                                                |
 | |
| | `strict`    | If `True`, raises an error if the LLM API returns a malformed response. Otherwise, return the error responses as is. Defaults to `True`. ~~bool~~ |
 | |
| | `max_tries` | Max. number of tries for API request. Defaults to `3`. ~~int~~                                                                                    |
 | |
| | `timeout`   | Timeout for API request in seconds. Defaults to `30`. ~~int~~                                                                                     |
 | |
| 
 | |
| #### spacy.Davinci.v1 {id="davinci"}
 | |
| 
 | |
| OpenAI's `davinci` model family.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.model]
 | |
| > @llm_models = "spacy.Davinci.v1 "
 | |
| > name = "davinci"
 | |
| > config = {"temperature": 0.3}
 | |
| > ```
 | |
| 
 | |
| | Argument    | Description                                                                                                                                       |
 | |
| | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `name`      | Model name, i. e. any supported variant for this particular model. Defaults to `"davinci"`. ~~Literal["davinci"]~~                                |
 | |
| | `config`    | Further configuration passed on to the model. Defaults to `{}`. ~~Dict[Any, Any]~~                                                                |
 | |
| | `strict`    | If `True`, raises an error if the LLM API returns a malformed response. Otherwise, return the error responses as is. Defaults to `True`. ~~bool~~ |
 | |
| | `max_tries` | Max. number of tries for API request. Defaults to `3`. ~~int~~                                                                                    |
 | |
| | `timeout`   | Timeout for API request in seconds. Defaults to `30`. ~~int~~                                                                                     |
 | |
| 
 | |
| #### spacy.Curie.v1 {id="curie"}
 | |
| 
 | |
| OpenAI's `curie` model family.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.model]
 | |
| > @llm_models = "spacy.Curie.v1 "
 | |
| > name = "curie"
 | |
| > config = {"temperature": 0.3}
 | |
| > ```
 | |
| 
 | |
| | Argument    | Description                                                                                                                                       |
 | |
| | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `name`      | Model name, i. e. any supported variant for this particular model. Defaults to `"curie"`. ~~Literal["curie"]~~                                    |
 | |
| | `config`    | Further configuration passed on to the model. Defaults to `{}`. ~~Dict[Any, Any]~~                                                                |
 | |
| | `strict`    | If `True`, raises an error if the LLM API returns a malformed response. Otherwise, return the error responses as is. Defaults to `True`. ~~bool~~ |
 | |
| | `max_tries` | Max. number of tries for API request. Defaults to `3`. ~~int~~                                                                                    |
 | |
| | `timeout`   | Timeout for API request in seconds. Defaults to `30`. ~~int~~                                                                                     |
 | |
| 
 | |
| #### spacy.Babbage.v1 {id="babbage"}
 | |
| 
 | |
| OpenAI's `babbage` model family.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.model]
 | |
| > @llm_models = "spacy.Babbage.v1 "
 | |
| > name = "babbage"
 | |
| > config = {"temperature": 0.3}
 | |
| > ```
 | |
| 
 | |
| | Argument    | Description                                                                                                                                       |
 | |
| | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `name`      | Model name, i. e. any supported variant for this particular model. Defaults to `"babbage"`. ~~Literal["babbage"]~~                                |
 | |
| | `config`    | Further configuration passed on to the model. Defaults to `{}`. ~~Dict[Any, Any]~~                                                                |
 | |
| | `strict`    | If `True`, raises an error if the LLM API returns a malformed response. Otherwise, return the error responses as is. Defaults to `True`. ~~bool~~ |
 | |
| | `max_tries` | Max. number of tries for API request. Defaults to `3`. ~~int~~                                                                                    |
 | |
| | `timeout`   | Timeout for API request in seconds. Defaults to `30`. ~~int~~                                                                                     |
 | |
| 
 | |
| #### spacy.Ada.v1 {id="ada"}
 | |
| 
 | |
| OpenAI's `ada` model family.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.model]
 | |
| > @llm_models = "spacy.Ada.v1 "
 | |
| > name = "ada"
 | |
| > config = {"temperature": 0.3}
 | |
| > ```
 | |
| 
 | |
| | Argument    | Description                                                                                                                                       |
 | |
| | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `name`      | Model name, i. e. any supported variant for this particular model. Defaults to `"ada"`. ~~Literal["ada"]~~                                        |
 | |
| | `config`    | Further configuration passed on to the model. Defaults to `{}`. ~~Dict[Any, Any]~~                                                                |
 | |
| | `strict`    | If `True`, raises an error if the LLM API returns a malformed response. Otherwise, return the error responses as is. Defaults to `True`. ~~bool~~ |
 | |
| | `max_tries` | Max. number of tries for API request. Defaults to `3`. ~~int~~                                                                                    |
 | |
| | `timeout`   | Timeout for API request in seconds. Defaults to `30`. ~~int~~                                                                                     |
 | |
| 
 | |
| #### spacy.Command.v1 {id="command"}
 | |
| 
 | |
| Cohere's `command` model family.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.model]
 | |
| > @llm_models = "spacy.Command.v1 "
 | |
| > name = "command"
 | |
| > config = {"temperature": 0.3}
 | |
| > ```
 | |
| 
 | |
| | Argument    | Description                                                                                                                                                                     |
 | |
| | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `name`      | Model name, i. e. any supported variant for this particular model. Defaults to `"command"`. ~~Literal["command", "command-light", "command-light-nightly", "command-nightly"]~~ |
 | |
| | `config`    | Further configuration passed on to the model. Defaults to `{}`. ~~Dict[Any, Any]~~                                                                                              |
 | |
| | `strict`    | If `True`, raises an error if the LLM API returns a malformed response. Otherwise, return the error responses as is. Defaults to `True`. ~~bool~~                               |
 | |
| | `max_tries` | Max. number of tries for API request. Defaults to `3`. ~~int~~                                                                                                                  |
 | |
| | `timeout`   | Timeout for API request in seconds. Defaults to `30`. ~~int~~                                                                                                                   |
 | |
| 
 | |
| #### spacy.Claude-2.v1 {id="claude-2"}
 | |
| 
 | |
| Anthropic's `claude-2` model family.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.model]
 | |
| > @llm_models = "spacy.Claude-2.v1 "
 | |
| > name = "claude-2"
 | |
| > config = {"temperature": 0.3}
 | |
| > ```
 | |
| 
 | |
| | Argument    | Description                                                                                                                                       |
 | |
| | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `name`      | Model name, i. e. any supported variant for this particular model. Defaults to `"claude-2"`. ~~Literal["claude-2", "claude-2-100k"]~~             |
 | |
| | `config`    | Further configuration passed on to the model. Defaults to `{}`. ~~Dict[Any, Any]~~                                                                |
 | |
| | `strict`    | If `True`, raises an error if the LLM API returns a malformed response. Otherwise, return the error responses as is. Defaults to `True`. ~~bool~~ |
 | |
| | `max_tries` | Max. number of tries for API request. Defaults to `3`. ~~int~~                                                                                    |
 | |
| | `timeout`   | Timeout for API request in seconds. Defaults to `30`. ~~int~~                                                                                     |
 | |
| 
 | |
| #### spacy.Claude-1.v1 {id="claude-1"}
 | |
| 
 | |
| Anthropic's `claude-1` model family.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.model]
 | |
| > @llm_models = "spacy.Claude-1.v1 "
 | |
| > name = "claude-1"
 | |
| > config = {"temperature": 0.3}
 | |
| > ```
 | |
| 
 | |
| | Argument    | Description                                                                                                                                       |
 | |
| | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `name`      | Model name, i. e. any supported variant for this particular model. Defaults to `"claude-1"`. ~~Literal["claude-1", "claude-1-100k"]~~             |
 | |
| | `config`    | Further configuration passed on to the model. Defaults to `{}`. ~~Dict[Any, Any]~~                                                                |
 | |
| | `strict`    | If `True`, raises an error if the LLM API returns a malformed response. Otherwise, return the error responses as is. Defaults to `True`. ~~bool~~ |
 | |
| | `max_tries` | Max. number of tries for API request. Defaults to `3`. ~~int~~                                                                                    |
 | |
| | `timeout`   | Timeout for API request in seconds. Defaults to `30`. ~~int~~                                                                                     |
 | |
| 
 | |
| #### spacy.Claude-instant-1.v1 {id="claude-instant-1"}
 | |
| 
 | |
| Anthropic's `claude-instant-1` model family.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.model]
 | |
| > @llm_models = "spacy.Claude-instant-1.v1 "
 | |
| > name = "claude-instant-1"
 | |
| > config = {"temperature": 0.3}
 | |
| > ```
 | |
| 
 | |
| | Argument    | Description                                                                                                                                                   |
 | |
| | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `name`      | Model name, i. e. any supported variant for this particular model. Defaults to `"claude-instant-1"`. ~~Literal["claude-instant-1", "claude-instant-1-100k"]~~ |
 | |
| | `config`    | Further configuration passed on to the model. Defaults to `{}`. ~~Dict[Any, Any]~~                                                                            |
 | |
| | `strict`    | If `True`, raises an error if the LLM API returns a malformed response. Otherwise, return the error responses as is. Defaults to `True`. ~~bool~~             |
 | |
| | `max_tries` | Max. number of tries for API request. Defaults to `3`. ~~int~~                                                                                                |
 | |
| | `timeout`   | Timeout for API request in seconds. Defaults to `30`. ~~int~~                                                                                                 |
 | |
| 
 | |
| #### spacy.Claude-instant-1-1.v1 {id="claude-instant-1-1"}
 | |
| 
 | |
| Anthropic's `claude-instant-1.1` model family.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.model]
 | |
| > @llm_models = "spacy.Claude-instant-1-1.v1 "
 | |
| > name = "claude-instant-1.1"
 | |
| > config = {"temperature": 0.3}
 | |
| > ```
 | |
| 
 | |
| | Argument    | Description                                                                                                                                                         |
 | |
| | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `name`      | Model name, i. e. any supported variant for this particular model. Defaults to `"claude-instant-1.1"`. ~~Literal["claude-instant-1.1", "claude-instant-1.1-100k"]~~ |
 | |
| | `config`    | Further configuration passed on to the model. Defaults to `{}`. ~~Dict[Any, Any]~~                                                                                  |
 | |
| | `strict`    | If `True`, raises an error if the LLM API returns a malformed response. Otherwise, return the error responses as is. Defaults to `True`. ~~bool~~                   |
 | |
| | `max_tries` | Max. number of tries for API request. Defaults to `3`. ~~int~~                                                                                                      |
 | |
| | `timeout`   | Timeout for API request in seconds. Defaults to `30`. ~~int~~                                                                                                       |
 | |
| 
 | |
| #### spacy.Claude-1-0.v1 {id="claude-1-0"}
 | |
| 
 | |
| Anthropic's `claude-1.0` model family.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.model]
 | |
| > @llm_models = "spacy.Claude-1-0.v1 "
 | |
| > name = "claude-1.0"
 | |
| > config = {"temperature": 0.3}
 | |
| > ```
 | |
| 
 | |
| | Argument    | Description                                                                                                                                       |
 | |
| | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `name`      | Model name, i. e. any supported variant for this particular model. Defaults to `"claude-1.0"`. ~~Literal["claude-1.0"]~~                          |
 | |
| | `config`    | Further configuration passed on to the model. Defaults to `{}`. ~~Dict[Any, Any]~~                                                                |
 | |
| | `strict`    | If `True`, raises an error if the LLM API returns a malformed response. Otherwise, return the error responses as is. Defaults to `True`. ~~bool~~ |
 | |
| | `max_tries` | Max. number of tries for API request. Defaults to `3`. ~~int~~                                                                                    |
 | |
| | `timeout`   | Timeout for API request in seconds. Defaults to `30`. ~~int~~                                                                                     |
 | |
| 
 | |
| #### spacy.Claude-1-2.v1 {id="claude-1-2"}
 | |
| 
 | |
| Anthropic's `claude-1.2` model family.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.model]
 | |
| > @llm_models = "spacy.Claude-1-2.v1 "
 | |
| > name = "claude-1.2"
 | |
| > config = {"temperature": 0.3}
 | |
| > ```
 | |
| 
 | |
| | Argument    | Description                                                                                                                                       |
 | |
| | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `name`      | Model name, i. e. any supported variant for this particular model. Defaults to `"claude-1.2"`. ~~Literal["claude-1.2"]~~                          |
 | |
| | `config`    | Further configuration passed on to the model. Defaults to `{}`. ~~Dict[Any, Any]~~                                                                |
 | |
| | `strict`    | If `True`, raises an error if the LLM API returns a malformed response. Otherwise, return the error responses as is. Defaults to `True`. ~~bool~~ |
 | |
| | `max_tries` | Max. number of tries for API request. Defaults to `3`. ~~int~~                                                                                    |
 | |
| | `timeout`   | Timeout for API request in seconds. Defaults to `30`. ~~int~~                                                                                     |
 | |
| 
 | |
| #### spacy.Claude-1-3.v1 {id="claude-1-3"}
 | |
| 
 | |
| Anthropic's `claude-1.3` model family.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.model]
 | |
| > @llm_models = "spacy.Claude-1-3.v1 "
 | |
| > name = "claude-1.3"
 | |
| > config = {"temperature": 0.3}
 | |
| > ```
 | |
| 
 | |
| | Argument    | Description                                                                                                                                       |
 | |
| | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `name`      | Model name, i. e. any supported variant for this particular model. Defaults to `"claude-1.3"`. ~~Literal["claude-1.3", "claude-1.3-100k"]~~       |
 | |
| | `config`    | Further configuration passed on to the model. Defaults to `{}`. ~~Dict[Any, Any]~~                                                                |
 | |
| | `strict`    | If `True`, raises an error if the LLM API returns a malformed response. Otherwise, return the error responses as is. Defaults to `True`. ~~bool~~ |
 | |
| | `max_tries` | Max. number of tries for API request. Defaults to `3`. ~~int~~                                                                                    |
 | |
| | `timeout`   | Timeout for API request in seconds. Defaults to `30`. ~~int~~                                                                                     |
 | |
| 
 | |
| #### spacy.Dolly.v1 {id="dolly"}
 | |
| 
 | |
| To use this model, ideally you have a GPU enabled and have installed
 | |
| `transformers`, `torch` and CUDA in your virtual environment. This allows you to
 | |
| have the setting `device=cuda:0` in your config, which ensures that the model is
 | |
| loaded entirely on the GPU (and fails otherwise).
 | |
| 
 | |
| You can do so with
 | |
| 
 | |
| ```shell
 | |
| python -m pip install "spacy-llm[transformers]" "transformers[sentencepiece]"
 | |
| ```
 | |
| 
 | |
| If you don't have access to a GPU, you can install `accelerate` and
 | |
| set`device_map=auto` instead, but be aware that this may result in some layers
 | |
| getting distributed to the CPU or even the hard drive, which may ultimately
 | |
| result in extremely slow queries.
 | |
| 
 | |
| ```shell
 | |
| python -m pip install "accelerate>=0.16.0,<1.0"
 | |
| ```
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.model]
 | |
| > @llm_models = "spacy.Dolly.v1"
 | |
| > name = "dolly-v2-3b"
 | |
| > ```
 | |
| 
 | |
| | Argument      | Description                                                                                                                                    |
 | |
| | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `name`        | The name of a Dolly model that is supported (e. g. "dolly-v2-3b" or "dolly-v2-12b"). ~~Literal["dolly-v2-3b", "dolly-v2-7b", "dolly-v2-12b"]~~ |
 | |
| | `config_init` | Further configuration passed on to the construction of the model with `transformers.pipeline()`. Defaults to `{}`. ~~Dict[str, Any]~~          |
 | |
| | `config_run`  | Further configuration used during model inference. Defaults to `{}`. ~~Dict[str, Any]~~                                                        |
 | |
| 
 | |
| Supported models (see the
 | |
| [Databricks models page](https://huggingface.co/databricks) on Hugging Face for
 | |
| details):
 | |
| 
 | |
| - `"databricks/dolly-v2-3b"`
 | |
| - `"databricks/dolly-v2-7b"`
 | |
| - `"databricks/dolly-v2-12b"`
 | |
| 
 | |
| Note that Hugging Face will download this model the first time you use it - you
 | |
| can
 | |
| [define the cached directory](https://huggingface.co/docs/huggingface_hub/main/en/guides/manage-cache)
 | |
| by setting the environmental variable `HF_HOME`.
 | |
| 
 | |
| #### spacy.Llama2.v1 {id="llama2"}
 | |
| 
 | |
| To use this model, ideally you have a GPU enabled and have installed
 | |
| `transformers`, `torch` and CUDA in your virtual environment. This allows you to
 | |
| have the setting `device=cuda:0` in your config, which ensures that the model is
 | |
| loaded entirely on the GPU (and fails otherwise).
 | |
| 
 | |
| You can do so with
 | |
| 
 | |
| ```shell
 | |
| python -m pip install "spacy-llm[transformers]" "transformers[sentencepiece]"
 | |
| ```
 | |
| 
 | |
| If you don't have access to a GPU, you can install `accelerate` and
 | |
| set`device_map=auto` instead, but be aware that this may result in some layers
 | |
| getting distributed to the CPU or even the hard drive, which may ultimately
 | |
| result in extremely slow queries.
 | |
| 
 | |
| ```shell
 | |
| python -m pip install "accelerate>=0.16.0,<1.0"
 | |
| ```
 | |
| 
 | |
| Note that the chat models variants of Llama 2 are currently not supported. This
 | |
| is because they need a particular prompting setup and don't add any discernible
 | |
| benefits in the use case of `spacy-llm` (i. e. no interactive chat) compared the
 | |
| completion model variants.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.model]
 | |
| > @llm_models = "spacy.Llama2.v1"
 | |
| > name = "llama2-7b-hf"
 | |
| > ```
 | |
| 
 | |
| | Argument      | Description                                                                                                                                            |
 | |
| | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
 | |
| | `name`        | The name of a Llama 2 model variant that is supported. Defaults to `"Llama-2-7b-hf"`. ~~Literal["Llama-2-7b-hf", "Llama-2-13b-hf", "Llama-2-70b-hf"]~~ |
 | |
| | `config_init` | Further configuration passed on to the construction of the model with `transformers.pipeline()`. Defaults to `{}`. ~~Dict[str, Any]~~                  |
 | |
| | `config_run`  | Further configuration used during model inference. Defaults to `{}`. ~~Dict[str, Any]~~                                                                |
 | |
| 
 | |
| Note that Hugging Face will download this model the first time you use it - you
 | |
| can
 | |
| [define the cache directory](https://huggingface.co/docs/huggingface_hub/main/en/guides/manage-cache)
 | |
| by setting the environmental variable `HF_HOME`.
 | |
| 
 | |
| #### spacy.Falcon.v1 {id="falcon"}
 | |
| 
 | |
| To use this model, ideally you have a GPU enabled and have installed
 | |
| `transformers`, `torch` and CUDA in your virtual environment. This allows you to
 | |
| have the setting `device=cuda:0` in your config, which ensures that the model is
 | |
| loaded entirely on the GPU (and fails otherwise).
 | |
| 
 | |
| You can do so with
 | |
| 
 | |
| ```shell
 | |
| python -m pip install "spacy-llm[transformers]" "transformers[sentencepiece]"
 | |
| ```
 | |
| 
 | |
| If you don't have access to a GPU, you can install `accelerate` and
 | |
| set`device_map=auto` instead, but be aware that this may result in some layers
 | |
| getting distributed to the CPU or even the hard drive, which may ultimately
 | |
| result in extremely slow queries.
 | |
| 
 | |
| ```shell
 | |
| python -m pip install "accelerate>=0.16.0,<1.0"
 | |
| ```
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.model]
 | |
| > @llm_models = "spacy.Falcon.v1"
 | |
| > name = "falcon-7b"
 | |
| > ```
 | |
| 
 | |
| | Argument      | Description                                                                                                                                                              |
 | |
| | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
 | |
| | `name`        | The name of a Falcon model variant that is supported. Defaults to `"7b-instruct"`. ~~Literal["falcon-rw-1b", "falcon-7b", "falcon-7b-instruct", "falcon-40b-instruct"]~~ |
 | |
| | `config_init` | Further configuration passed on to the construction of the model with `transformers.pipeline()`. Defaults to `{}`. ~~Dict[str, Any]~~                                    |
 | |
| | `config_run`  | Further configuration used during model inference. Defaults to `{}`. ~~Dict[str, Any]~~                                                                                  |
 | |
| 
 | |
| Note that Hugging Face will download this model the first time you use it - you
 | |
| can
 | |
| [define the cache directory](https://huggingface.co/docs/huggingface_hub/main/en/guides/manage-cache)
 | |
| by setting the environmental variable `HF_HOME`.
 | |
| 
 | |
| #### spacy.StableLM.v1 {id="stablelm"}
 | |
| 
 | |
| To use this model, ideally you have a GPU enabled and have installed
 | |
| `transformers`, `torch` and CUDA in your virtual environment.
 | |
| 
 | |
| You can do so with
 | |
| 
 | |
| ```shell
 | |
| python -m pip install "spacy-llm[transformers]" "transformers[sentencepiece]"
 | |
| ```
 | |
| 
 | |
| If you don't have access to a GPU, you can install `accelerate` and
 | |
| set`device_map=auto` instead, but be aware that this may result in some layers
 | |
| getting distributed to the CPU or even the hard drive, which may ultimately
 | |
| result in extremely slow queries.
 | |
| 
 | |
| ```shell
 | |
| python -m pip install "accelerate>=0.16.0,<1.0"
 | |
| ```
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.model]
 | |
| > @llm_models = "spacy.StableLM.v1"
 | |
| > name = "stablelm-tuned-alpha-7b"
 | |
| > ```
 | |
| 
 | |
| | Argument      | Description                                                                                                                                                                                             |
 | |
| | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `name`        | The name of a StableLM model that is supported (e. g. "stablelm-tuned-alpha-7b"). ~~Literal["stablelm-base-alpha-3b", "stablelm-base-alpha-7b", "stablelm-tuned-alpha-3b", "stablelm-tuned-alpha-7b"]~~ |
 | |
| | `config_init` | Further configuration passed on to the construction of the model with `transformers.AutoModelForCausalLM.from_pretrained()`. Defaults to `{}`. ~~Dict[str, Any]~~                                       |
 | |
| | `config_run`  | Further configuration used during model inference. Defaults to `{}`. ~~Dict[str, Any]~~                                                                                                                 |
 | |
| 
 | |
| See the
 | |
| [Stability AI StableLM GitHub repo](https://github.com/Stability-AI/StableLM/#stablelm-alpha)
 | |
| for details.
 | |
| 
 | |
| Note that Hugging Face will download this model the first time you use it - you
 | |
| can
 | |
| [define the cached directory](https://huggingface.co/docs/huggingface_hub/main/en/guides/manage-cache)
 | |
| by setting the environmental variable `HF_HOME`.
 | |
| 
 | |
| #### spacy.OpenLLaMA.v1 {id="openllama"}
 | |
| 
 | |
| To use this model, ideally you have a GPU enabled and have installed
 | |
| 
 | |
| - `transformers[sentencepiece]`
 | |
| - `torch`
 | |
| - CUDA in your virtual environment.
 | |
| 
 | |
| You can do so with
 | |
| 
 | |
| ```shell
 | |
| python -m pip install "spacy-llm[transformers]" "transformers[sentencepiece]"
 | |
| ```
 | |
| 
 | |
| If you don't have access to a GPU, you can install `accelerate` and
 | |
| set`device_map=auto` instead, but be aware that this may result in some layers
 | |
| getting distributed to the CPU or even the hard drive, which may ultimately
 | |
| result in extremely slow queries.
 | |
| 
 | |
| ```shell
 | |
| python -m pip install "accelerate>=0.16.0,<1.0"
 | |
| ```
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.model]
 | |
| > @llm_models = "spacy.OpenLLaMA.v1"
 | |
| > name = "open_llama_3b"
 | |
| > ```
 | |
| 
 | |
| | Argument      | Description                                                                                                                                                       |
 | |
| | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `name`        | The name of a OpenLLaMA model that is supported. ~~Literal["open_llama_3b", "open_llama_7b", "open_llama_7b_v2", "open_llama_13b"]~~                              |
 | |
| | `config_init` | Further configuration passed on to the construction of the model with `transformers.AutoModelForCausalLM.from_pretrained()`. Defaults to `{}`. ~~Dict[str, Any]~~ |
 | |
| | `config_run`  | Further configuration used during model inference. Defaults to `{}`. ~~Dict[str, Any]~~                                                                           |
 | |
| 
 | |
| See the
 | |
| [OpenLM Research OpenLLaMA GitHub repo](https://github.com/openlm-research/open_llama)
 | |
| for details.
 | |
| 
 | |
| Note that Hugging Face will download this model the first time you use it - you
 | |
| can
 | |
| [define the cached directory](https://huggingface.co/docs/huggingface_hub/main/en/guides/manage-cache)
 | |
| by setting the environmental variable `HF_HOME`.
 | |
| 
 | |
| #### LangChain models {id="langchain-models"}
 | |
| 
 | |
| To use [LangChain](https://github.com/hwchase17/langchain) for the API retrieval
 | |
| part, make sure you have installed it first:
 | |
| 
 | |
| ```shell
 | |
| python -m pip install "langchain==0.0.191"
 | |
| # Or install with spacy-llm directly
 | |
| python -m pip install "spacy-llm[extras]"
 | |
| ```
 | |
| 
 | |
| Note that LangChain currently only supports Python 3.9 and beyond.
 | |
| 
 | |
| LangChain models in `spacy-llm` work slightly differently. `langchain`'s models
 | |
| are parsed automatically, each LLM class in `langchain` has one entry in
 | |
| `spacy-llm`'s registry. As `langchain`'s design has one class per API and not
 | |
| per model, this results in registry entries like `langchain.OpenAI.v1` - i. e.
 | |
| there is one registry entry per API and not per model (family), as for the REST-
 | |
| and HuggingFace-based entries.
 | |
| 
 | |
| The name of the model to be used has to be passed in via the `name` attribute.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.model]
 | |
| > @llm_models = "langchain.OpenAI.v1"
 | |
| > name = "gpt-3.5-turbo"
 | |
| > query = {"@llm_queries": "spacy.CallLangChain.v1"}
 | |
| > config = {"temperature": 0.3}
 | |
| > ```
 | |
| 
 | |
| | Argument | Description                                                                                                                                                           |
 | |
| | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | |
| | `name`   | The name of a mdodel supported by LangChain for this API. ~~str~~                                                                                                     |
 | |
| | `config` | Configuration passed on to the LangChain model. Defaults to `{}`. ~~Dict[Any, Any]~~                                                                                  |
 | |
| | `query`  | Function that executes the prompts. If `None`, defaults to `spacy.CallLangChain.v1`. ~~Optional[Callable[["langchain.llms.BaseLLM", Iterable[Any]], Iterable[Any]]]~~ |
 | |
| 
 | |
| The default `query` (`spacy.CallLangChain.v1`) executes the prompts by running
 | |
| `model(text)` for each given textual prompt.
 | |
| 
 | |
| ### Cache {id="cache"}
 | |
| 
 | |
| Interacting with LLMs, either through an external API or a local instance, is
 | |
| costly. Since developing an NLP pipeline generally means a lot of exploration
 | |
| and prototyping, `spacy-llm` implements a built-in cache to avoid reprocessing
 | |
| the same documents at each run that keeps batches of documents stored on disk.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.cache]
 | |
| > @llm_misc = "spacy.BatchCache.v1"
 | |
| > path = "path/to/cache"
 | |
| > batch_size = 64
 | |
| > max_batches_in_mem = 4
 | |
| > ```
 | |
| 
 | |
| | Argument             | Description                                                                                                                                      |
 | |
| | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
 | |
| | `path`               | Cache directory. If `None`, no caching is performed, and this component will act as a NoOp. Defaults to `None`. ~~Optional[Union[str, Path]]~~   |
 | |
| | `batch_size`         | Number of docs in one batch (file). Once a batch is full, it will be peristed to disk. Defaults to 64. ~~int~~                                   |
 | |
| | `max_batches_in_mem` | Max. number of batches to hold in memory. Allows you to limit the effect on your memory if you're handling a lot of docs. Defaults to 4. ~~int~~ |
 | |
| 
 | |
| When retrieving a document, the `BatchCache` will first figure out what batch
 | |
| the document belongs to. If the batch isn't in memory it will try to load the
 | |
| batch from disk and then move it into memory.
 | |
| 
 | |
| Note that since the cache is generated by a registered function, you can also
 | |
| provide your own registered function returning your own cache implementation. If
 | |
| you wish to do so, ensure that your cache object adheres to the `Protocol`
 | |
| defined in `spacy_llm.ty.Cache`.
 | |
| 
 | |
| ### Various functions {id="various-functions"}
 | |
| 
 | |
| #### spacy.FewShotReader.v1 {id="fewshotreader-v1"}
 | |
| 
 | |
| This function is registered in spaCy's `misc` registry, and reads in examples
 | |
| from a `.yml`, `.yaml`, `.json` or `.jsonl` file. It uses
 | |
| [`srsly`](https://github.com/explosion/srsly) to read in these files and parses
 | |
| them depending on the file extension.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.task.examples]
 | |
| > @misc = "spacy.FewShotReader.v1"
 | |
| > path = "ner_examples.yml"
 | |
| > ```
 | |
| 
 | |
| | Argument | Description                                                                                     |
 | |
| | -------- | ----------------------------------------------------------------------------------------------- |
 | |
| | `path`   | Path to an examples file with suffix `.yml`, `.yaml`, `.json` or `.jsonl`. ~~Union[str, Path]~~ |
 | |
| 
 | |
| #### spacy.FileReader.v1 {id="filereader-v1"}
 | |
| 
 | |
| This function is registered in spaCy's `misc` registry, and reads a file
 | |
| provided to the `path` to return a `str` representation of its contents. This
 | |
| function is typically used to read
 | |
| [Jinja](https://jinja.palletsprojects.com/en/3.1.x/) files containing the prompt
 | |
| template.
 | |
| 
 | |
| > #### Example config
 | |
| >
 | |
| > ```ini
 | |
| > [components.llm.task.template]
 | |
| > @misc = "spacy.FileReader.v1"
 | |
| > path = "ner_template.jinja2"
 | |
| > ```
 | |
| 
 | |
| | Argument | Description                                       |
 | |
| | -------- | ------------------------------------------------- |
 | |
| | `path`   | Path to the file to be read. ~~Union[str, Path]~~ |
 | |
| 
 | |
| #### Normalizer functions {id="normalizer-functions"}
 | |
| 
 | |
| These functions provide simple normalizations for string comparisons, e.g.
 | |
| between a list of specified labels and a label given in the raw text of the LLM
 | |
| response. They are registered in spaCy's `misc` registry and have the signature
 | |
| `Callable[[str], str]`.
 | |
| 
 | |
| - `spacy.StripNormalizer.v1`: only apply `text.strip()`
 | |
| - `spacy.LowercaseNormalizer.v1`: applies `text.strip().lower()` to compare
 | |
|   strings in a case-insensitive way.
 |