> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bigdata.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Inline Attribution Formatter

<Warning>
  We are sunsetting our SDKs and will no longer add new features, security patches, bug fixes, or technical support for them. To access the latest capabilities and ongoing improvements, we encourage you to migrate to our [Research Service RESTful API](/api-rest/workflows/introduction).

  SDK support will officially end on **December 31, 2026**. On this date, the underlying endpoints used by the SDKs and related documentation will be decommissioned.

  To avoid any disruption to your services, please ensure your migration is complete by that date.

  For migration assistance, please contact us at [support@bigdata.com](mailto:support@bigdata.com).
</Warning>

Chat answers contain inline attributions and uses
`DefaultFormatter` by default.

Example:

```python theme={null}
# Create a new chat
chat = bigdata.chat.new("Pfizer company analysis", formatter=DefaultFormatter())

# Ask a question
response = chat.ask("Evaluate the experience and reputation of the management team of Pfizer")
```

Output:

```Output theme={null}
## Pfizer's Management Team

### CEO and Chairman: Dr. Albert Bourla
- Dr. Bourla has been the Chairman and CEO of Pfizer since 2019 `:ref[13]`  
- He is a Doctor of Veterinary Medicine and holds a Ph.D. from the Veterinary School of Aristotle University `:ref[13]`  
- In 2022, he was named the Genesis Prize Laureate, often referred to as the "Jewish Nobel Prize" `:ref[13]`  
...
```

`DefaultFormatter` adds inline attributes as a
`` `:ref[index]` `` where `index` is an index of
inline attribution element in `sources` property in
`ChatInteraction`

There are two formatters available at the moment and it is also possible
to [create custom formatter](#create-a-custom-formatter)

1. DefaultFormatter
2. MarkdownLinkFormatter

# How to configure it

You can configure the inline attribution formatter at different levels:

* When chat is created
* When getting existing chat
* When getting list of chats
* When making `chat.ask` request

## When chat is created

```python theme={null}
from bigdata_client.models.chat import MarkdownLinkFormatter

chat = bigdata.chat.new("Pfizer company analysis", formatter=MarkdownLinkFormatter())

# all following chat.ask calls will use formatter we set when creating chat
response = chat.ask("Evaluate the experience and reputation of the management team of Pfizer")
print(response.answer)
```

## When getting existing chat

```python theme={null}
from bigdata_client.models.chat import MarkdownLinkFormatter

# Get existing chat
chat_id = chat.id

chat = bigdata.chat.get(chat_id, formatter=MarkdownLinkFormatter())

# All chat interactions will be formatted using provided formatter
for interaction in chat.interactions:
    # answer will be formatted with formatter
    print(interaction.answer)

# All following chat.ask calls will use formatter we set when fetching chat
response = chat.ask("Evaluate the experience and reputation of the management team of Pfizer")
print(response.answer)
```

## When getting list of available chats

```python theme={null}
from bigdata_client.models.chat import MarkdownLinkFormatter

# Get list of chats
chats = bigdata.chat.list(formatter=MarkdownLinkFormatter())

# All chat interactions will be formatted using provided formatter, let's focus only in our first chat
for interaction in chats[0].interactions:
    # answer will be formatted with formatter
    print(interaction.answer)

# All following chat.ask calls will use formatter we set when fetching chat list
```

## When making `chat.ask` request

In case it's necessary to chage formatter only for one
`chat.ask` call there is a possibility:

```python theme={null}
# Create a new chat
chat = bigdata.chat.new("Pfizer company analysis")

# This specific call to chat.ask will use MarkdownLinkFormatter
response = chat.ask(
    "Evaluate the experience and reputation of the management team of Pfizer",
    formatter=MarkdownLinkFormatter()
)
print(response.answer)

# All following chat.ask calls will use formatter we set when creating chat
response = chat.ask("Evaluate the experience and reputation of the management team of Pfizer")
print(response.answer)
```

# Create a custom formatter

It is possible to create custom inline attribution formatter.

All inline attribution formatters extend abstract class
`InlineAttributionFormatter`

It is necessary to implement `format` method.

Here an example how to create custom formatter:

```python theme={null}
from bigdata_client.models.chat import InlineAttributionFormatter, ChatSource

class HtmlLinkFormatter(InlineAttributionFormatter):
    def format(self, index: int, attribution: ChatSource) -> str:
        a_text = attribution.headline
        a_href = attribution.url
        return f'<a href="{a_href}">{a_text}</a>'

# Create a new chat using custom formatter
chat = bigdata.chat.new("Pfizer company analysis", formatter=HtmlLinkFormatter())
response = chat.ask("Evaluate the experience and reputation of the management team of Pfizer")
print(response.answer)
```

Output:

```Output theme={null}
## Pfizer's Management Team

Pfizer's management team is led by a highly experienced and respected group of executives:

### Albert Bourla, Chairman and Chief Executive Officer
- Joined Pfizer in 1993 and has held various leadership roles, including Group President of Pfizer's Innovative Health business <a href="https://www.linkedin.com/in/albert-bourla">Albert Bourla - Chief Executive Officer - Pfizer</a> 
- Became CEO in 2019 and was named the Genesis Prize Laureate in 2022 <a href="https://www.linkedin.com/in/albert-bourla">Albert Bourla - Chief Executive Officer - Pfizer</a> 
```
