# PostgreSQL functions that answer questions about text

One extension. Ask questions in any query.

## Install

| Channel |
| --- |
| `CREATE EXTENSION thinkthen;` |

Set `THINKTHEN_API_KEY` in the environment.

## A first call

*refund.json, a file the sample reads*

```
{
  "decide": "Does the customer ask for a refund?",
  "threshold": "0.2:0.8"
}
```

```
CREATE TABLE tickets (id int, body text);
INSERT INTO tickets VALUES
    (1, 'Please refund my order. It arrived broken.'),
    (2, 'Thanks for the quick help yesterday!'),
    (3, 'I want to send this back.');

WITH judged AS (
    SELECT
        id,
        body,
        thinkthen_decide('@refund.json', body) AS is_refund
    FROM tickets
)
SELECT id, body FROM judged
WHERE is_refund IS NULL;
```

*What PostgreSQL printed*

```
 id |           body            
----+---------------------------
  3 | I want to send this back.
(1 row)
```

Not sure comes back as `NULL`. Branch on it and send those cases to a person. Each [function page](/functions/) shows its PostgreSQL call.

## Run facts

`thinkthen_usage()` gives the totals for the process.

## Errors

A failed call raises its named error. `thinkthen_try_details` returns a failure as `jsonb` instead.

## Settings and recording

`SET thinkthen.record` writes a recording to a folder. `SET thinkthen.replay` answers from that recording with no connection. The [Settings](/install/settings/) page lists every setting.

## What is different in PostgreSQL

- A question file carries a band. The not-sure rows come back NULL, and a person reads them.
- pg_cancel_backend and statement_timeout stop a call. A request already sent still completes and is billed.

On GitHub: [github.com/botassembly/thinkthen](https://github.com/botassembly/thinkthen)
