> For the complete documentation index, see [llms.txt](https://docs.bespokelabs.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.bespokelabs.ai/bespoke-curator/getting-started/key-concepts.md).

# Key Concepts

## Key Components of curator.LLM

Conceptually, `curator.LLM` has two important methods, `prompt` and `parse`.

```python
class Poem(BaseModel):
    poem: str = Field(description="A poem.")


class Poems(BaseModel):
    poems_list: List[Poem] = Field(description="A list of poems.")
    
class Poet(curator.LLM):
    response_format = Poems
​
    def prompt(self, input: Dict) -> str:
        return f"Write two poems about {input['topic']}."
​
    def parse(self, input: Dict, response: Poems) -> Dict:
        return [{"topic": input["topic"], "poem": p.poem} for p in response.poems]

```

### prompt

This calls an LLM on each row of the input dataset in parallel.

1. Takes a dataset row as input
2. Returns the prompt for the LLM.

### parse

Converts LLM output into structured data by adding it back to the dataset.

1. Takes two arguments:
   * Input row (this was given to the LLM).
   * LLM's response (in response\_format --- string or Pydantic)
2. Returns new rows (in list of dictionaries)

### Returns

A \`CuratorResponse\` instance which holds information about the run in python object. It consists of dataset, statistics (performance, token usage, cost), viewer link attributes.

## Data Flow Example

Input Dataset:&#x20;

```
Row A 
Row B 
```

Processing by curator.LLM:&#x20;

```
Row A → prompt(A) → Response R1 → parse(A, R1) → [C, D] 
Row B → prompt(B) → Response R2 → parse(B, R2) → [E, F]
```

Output Dataset:&#x20;

```
Row C 
Row D 
Row E 
Row F
```

In this example:

* The two input rows (A and B) are processed in parallel to prompt the LLM
* Each generates a response (R1 and R2)
* The parse function converts each response into (multiple) new rows (C, D, E, F)
* The final dataset contains all generated rows

You can chain `LLM` objects together to iteratively build up a dataset.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.bespokelabs.ai/bespoke-curator/getting-started/key-concepts.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
