Центр знаний
API для модов и расширений
Локальное API, доступное внутри модов через объект api.
Структура мода
Класс Mod и папка mods/
Хуки
Перехват событий чата и файлов
Методы API
ask_ai, команды, кнопки, поиск
Примеры
Готовые моды для старта
Ничего не найдено — попробуйте другой запрос.
01 · Основы
Структура мода
Каждый мод — отдельный .py файл в папке mods/, обязательно содержащий класс Mod:
class Mod:
name = "Example Mod"
version = "1.0"
author = "Your Name"
description = "Простой пример мода"
def on_init(self, api):
self.api = api
api.add_sidebar_button("Example", self.on_button_click, icon="🔧")
def on_button_click(self):
self.api.add_message("Привет от мода!", is_user=False)
def register_commands(self):
return {"hello": self.cmd_hello}
def cmd_hello(self, args, state):
return f"Hello, {state.user_name or 'user'}!"
02 · События
Хуки (перехватчики событий)
| Метод | Вызывается | Возвращает |
|---|---|---|
on_init(api) | при загрузке мода | — |
register_commands() | при регистрации команд | {"command": callback} |
on_user_message(msg, state) | после сообщения пользователя, до генерации AI | str (подмена ответа) или None |
on_before_generate(messages, state) | перед запросом в Ollama | изменённый messages |
on_after_generate(response, state) | после ответа от Ollama | изменённый response |
on_file_upload(filename, content) | после загрузки файла | — |
on_web_search(query, results) | после веб-поиска | — |
03 · API
Методы API
Доступны через api в on_init.
api.ask_ai(prompt, system=None)
Синхронный запрос к AI (без стриминга).
api.add_message(text, is_user=False)
Добавляет сообщение в чат (только отображение).
api.send_user_message(text)
Имитирует отправку сообщения от пользователя.
api.register_command(name, func)
Регистрирует команду. func принимает (args, state).
api.add_sidebar_button(text, callback, icon=None)
Добавляет кнопку на левую панель.
api.get_file_index()
Возвращает объект FileIndex для доступа к загруженным файлам.
api.search_memory(query, limit=5)
Поиск в долговременной памяти (memvid).
api.web_search(query)
Выполняет поиск через DuckDuckGo.
04 · Практика
Примеры модов
Калькулятор
# mods/calc_mod.py
import re
class Mod:
name = "Calc Mod"
version = "1.0"
def register_commands(self):
return {"calc": self.calc}
def calc(self, args, state):
expr = " ".join(args)
if not re.fullmatch(r'[\d+\-*/(). ]+', expr):
return "Ошибка: недопустимые символы"
try:
return f"Результат: {eval(expr)}"
except:
return "Неверное выражение"
Перехват погоды
# mods/weather_mod.py
class Mod:
name = "Weather Hint"
def on_user_message(self, user_message, state):
if "погода" in user_message.lower():
return "Не забудьте включить Web Search или спросить подробнее про город."
return None
Кнопка очистки
# mods/clear_btn_mod.py
class Mod:
name = "Clear Button"
def on_init(self, api):
self.api = api
api.add_sidebar_button("Очистить чат", self.clear_chat, icon="🧹")
def clear_chat(self):
self.api.add_message("Чат очищен командой мода.", is_user=False)
Важные замечания
- Моды выполняются в том же потоке, что и GUI — не блокируйте надолго.
- Для долгих операций используйте
QThread. - Не пытайтесь импортировать внутренние модули (
app.py) — используйтеapi. - Моды хранятся в папке
mods/и загружаются автоматически при запуске. - Ошибки загрузки выводятся в консоль.
Исполнитель: Ерохов Кирилл Александрович, самозанятый. ИНН 780162653155.
По вопросам оплаты и доступа: rufindsruf@gmail.com