---
# System prepended metadata

title: Untitled

---

есть три роли:
- system - систмные инструкции
- user - обычный юзер
- assistant - то что бот отвечает юзеру


- [x] Reset conversation with the `/reset` command
- [x] (NEW!) Get personal token usage statistics and cost per day/month via the `/stats` command - by [@AlexHTW](https://github.com/AlexHTW)



#### Budgets
| Parameter             | Description                                                                                                                                                                                                                                                                                                                                                                               | Default value      |
|-----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------|
| `BUDGET_PERIOD`       | Determines the time frame all budgets are applied to. Available periods: `daily` *(resets budget every day)*, `monthly` *(resets budgets on the first of each month)*, `all-time` *(never resets budget)*. See the [Budget Manual](https://github.com/n3d1117/chatgpt-telegram-bot/discussions/184) for more information                                                                  | `monthly`          |
| `USER_BUDGETS`        | A comma-separated list of $-amounts per user from list `ALLOWED_TELEGRAM_USER_IDS` to set custom usage limit of OpenAI API costs for each. For `*`- user lists the first `USER_BUDGETS` value is given to every user. **Note**: by default, *no limits* for any user (`*`). See the [Budget Manual](https://github.com/n3d1117/chatgpt-telegram-bot/discussions/184) for more information | `*`                |
| `GUEST_BUDGET`        | $-amount as usage limit for all guest users. Guest users are users in group chats that are not in the `ALLOWED_TELEGRAM_USER_IDS` list. Value is ignored if no usage limits are set in user budgets (`USER_BUDGETS`=`*`). See the [Budget Manual](https://github.com/n3d1117/chatgpt-telegram-bot/discussions/184) for more information                                                   | `100.0`            |

Check out the [Budget Manual](https://github.com/n3d1117/chatgpt-telegram-bot/discussions/184) for possible budget configurations.



#### Additional optional configuration options
| Parameter                          | Description                                                                                                                                                                                                                                            | Default value                      |
|------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------|
| `PROXY`                            | Proxy to be used for OpenAI and Telegram bot (e.g. `http://localhost:8080`)                                                                                                                                                                            | -                                  |
| `OPENAI_MODEL`                     | The OpenAI model to use for generating responses                                                                                                                                                                                                       | `gpt-3.5-turbo`                    |
| `ASSISTANT_PROMPT`                 | A system message that sets the tone and controls the behavior of the assistant                                                                                                                                                                         | `You are a helpful assistant.`     |
| `SHOW_USAGE`                       | Whether to show OpenAI token usage information after each response                                                                                                                                                                                     | `false`                            |
| `MAX_TOKENS`                       | Upper bound on how many tokens the ChatGPT API will return                                                                                                                                                                                             | `1200` for GPT-3, `2400` for GPT-4 |
| `MAX_HISTORY_SIZE`                 | Max number of messages to keep in memory, after which the conversation will be summarised to avoid excessive token usage                                                                                                                               | `15`                               |
| `TEMPERATURE`                      | Number between 0 and 2. Higher values will make the output more random                                                                                                                                                                                 | `1.0`                              |
| `SUMMARY_TEMPERATURE`              |               SUMMARY_TEMPERATURE                                                                                                                                                                | `1.0`                              |
| `PRESENCE_PENALTY`                 | Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far                                                                                                                                       | `0.0`                              |
| `FREQUENCY_PENALTY`                | Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far                                                                                                                                  | `0.0`                              |
| `GROUP_TRIGGER_KEYWORD`            | If set, the bot in group chats will only respond to messages that start with this keyword                                                                                                                                                              | -                                  |


SHOW_USAGE - show usage in every message
SUMMARY_TOKENS - сейчас это коряво работает я подставляю это число в SUMMARY_PROMPT и модель сама понимает сколько слов надо юзать
    по хорошему это надо протестить и указывать в АПИ запросе ОпенИИ

PROMPT_TOKEN_PRICE_1K
COMPLETION_TOKEN_PRICE_1K
цены за 1000 токенов


SEMANTIC_DB_TOP_K
SEMANTIC_DB_MIN_SCORE
это для механизма подсказок
сколько их подтягивать из БД и какой минимальный скор должен быть у подсказки чтобы она попала в список



## Алгоритм ответа

- Бот получает все update из чаат
- если это команда /get итп он отдает ответ по команде
- если обычное сообщение то начинает обработку

### Личка

- бот подтягивает из БД историю всего диалога (хранится не более MAX_HISTORY_SIZE сообщений) - CONVERSATION
- бот подтягивает из векторБД все подсказки для этого диалога
- он объединяет ASSISTANCE_PROMPT + CONVERSATION + подсказки + сообщение юзера в одну простыню
- если она сильно большая то запускает саммарезирующую модель которая делает из истории summary
- после самарезации по хорошему нужно еще проверять что мы по токенам попадаем нужно потестить на больших текстах
- отправляет в опенАИ и показывает юзеру ответ

### Группа

важно выставить MAX_HISTORY_SIZE = 0

- бот подтягивает из БД историю по цепочки replied_to - CONVERSATION
- бот подтягивает из векторБД все подсказки для этого диалога
- он объединяет ASSISTANCE_PROMPT + CONVERSATION + подсказки + сообщение юзера в одну простыню
- если она сильно большая то запускает саммарезирующую модель которая делает из истории summary
- после самарезации по хорошему нужно еще проверять что мы по токенам попадаем нужно потестить на больших текстах
- отправляет в опенАИ и показывает юзеру ответ



## Как работает механизм подсказок

### Что я понимаю под подсказкой

это более подробная инфа по какому-то вопросу

для каждой подсказки мы можем выделить индексируемую часть (назовем это топик) и часть которую будем отдавать боту (пояснение)

сейчас у нас топик совпадает с пояснением - это нормально но можно поиграться

например если у нас все ВОПРОС-ОТВЕТ
то топик можно сделать ВОПРОС а пояснение это ВОПРОС+ОТВЕТ

либо мы можем гпт4 попросить под каждый вопрос-ответ написать топик чтобы поиск лучше работал

поиск работает так
по топику спец модель нам выдает вектор в многомерном пространстве (типа как смыслов)
если интересно можешь погуглить про Word2Vec и Senternce2Vec 
по вектору мы ищем ближайшие вектора в БД и отдаем боту


### Как работает Самери

SUMMARY_PROMPT - промпт для суммирования истории разговора, в нем может быть {SUMMARY_TOKENS} которая она будет подставлять

LAST_MESSAGES_TO_SUMMARY_N - сколько последних сообщений оставлять as-is после саммери, берутся сообщения от бота и от юзера
    вообще с этим параметром надо поаккуратнее быть не устанавливать его сильно большим иначе мы упремся в ограничение по токенам от которого не спасет даже самери
    лучше потратить время на то чтобы задать подбробный SUMMARY_PROMPT чтобы он по умному брал правильный контекст и даже написать ему "дословно включи последние Н сообщений"
LAST_MESSAGES_TO_SUMMARY_CUTOFF - сколько от каждого такого сообщения отрезать симоволов с начала
    вдруг юзер там настрогал простыню, мы просто не можем ее всю включить мы отрежем первые 100 символов - вообще
    это экстремальный кейс. Вряд ли предполагается что юзеры шлют простыню


мы даем боту SUMMARY_PROMPT + историю диалога и просим ужать историю до SUMMARY_TOKENS токенов