Skip to content

Commit

Permalink
Merge branch 'favorite' into dev
Browse files Browse the repository at this point in the history
  • Loading branch information
AAClause committed Mar 30, 2024
2 parents 1e7913b + 76c5b7d commit 3ffe6dd
Show file tree
Hide file tree
Showing 4 changed files with 321 additions and 507 deletions.
8 changes: 4 additions & 4 deletions addon/doc/ru/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@

Чтобы ещё больше улучшить взаимодействие с интерфейсом, обратите внимание на следующее:

- Многострочные поля "Система", "История" и "Подсказка" оснащены контекстными меню, содержащими команды, которые можно быстро выполнить с помощью сочетаний клавиш.
- Многострочные поля "Системная подсказка", "История" и "Подсказка" оснащены контекстными меню, содержащими команды, которые можно быстро выполнить с помощью сочетаний клавиш.
Эти сочетания клавиш активны, когда соответствующее поле находится в фокусе.
Например, клавиши "j" и "k" позволяют переходить к предыдущему и следующему сообщениям соответственно, когда фокус находится в поле "История".

Expand All @@ -62,13 +62,13 @@

Вы можете переключаться между этими двумя режимами в любое время во время сеанса.

#### О поле `Система`
#### О поле `Системная подсказка`

Поле `Система` предназначено для тонкой настройки поведения и личности модели ИИ в соответствии с вашими конкретными ожиданиями.
Поле `Системная подсказка` предназначено для тонкой настройки поведения и личности модели ИИ в соответствии с вашими конкретными ожиданиями.

- **Подсказка по умолчанию**: При установке дополнение включает в себя системную подсказку, готовую к использованию.
- **Настройка**: У вас есть возможность персонализировать системную подсказку, изменяя текст непосредственно в поле. Дополнение запомнит последнюю использованную вами системную подсказку и автоматически загрузит её при следующем запуске диалога. Это поведение можно отключить в настройках.
- **Возможность сброса**: Хотите вернуться к стандартной конфигурации? Просто воспользуйтесь контекстным меню, чтобы без труда вернуть поле `Система` к значению по умолчанию.
- **Возможность сброса**: Хотите вернуться к стандартной конфигурации? Просто воспользуйтесь контекстным меню, чтобы без труда вернуть поле `Системная подсказка` к значению по умолчанию.

Пожалуйста, помните, что системная подсказка включена во входные данные модели ИИ и потребляет токены соответствующим образом.

Expand Down
6 changes: 3 additions & 3 deletions addon/globalPlugins/openai/apikeymanager.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

AVAILABLE_PROVIDERS = [
"OpenAI",
"OpenRouter",
"MistralAI"
"MistralAI",
"OpenRouter"
]

_managers = {}
Expand All @@ -24,7 +24,7 @@ def __init__(
self.data_dir = data_dir
self.provider = provider
self.api_key_path = os.path.join(
data_dir,
data_dir,
f"{provider}.key"
)
self.api_key_org_path = os.path.join(
Expand Down
100 changes: 70 additions & 30 deletions addon/globalPlugins/openai/maindialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -546,7 +546,6 @@ def __init__(
)
self.previousPrompt = None
self._lastSystem = None
self._model_ids = [model.id for model in self._models]
if self.conf["saveSystem"]:
# If the user has chosen to save the system prompt, use the last system prompt used by the user as the default value, otherwise use the default system prompt.
if "system" in self.data:
Expand Down Expand Up @@ -727,25 +726,7 @@ def __init__(
self.modelsListCtrl.Bind(wx.EVT_CONTEXT_MENU, self.onModelContextMenu)
self.modelsListCtrl.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self.onModelContextMenu)
self.modelsListCtrl.Bind(wx.EVT_RIGHT_UP, self.onModelContextMenu)

for i, model in enumerate(self._models):
self.modelsListCtrl.InsertItem(i, model.name)
self.modelsListCtrl.SetItem(i, 1, model.provider)
self.modelsListCtrl.SetItem(i, 2, model.id)
self.modelsListCtrl.SetItem(i, 3, str(model.contextWindow))
self.modelsListCtrl.SetItem(
i,
4,
str(model.maxOutputToken) if model.maxOutputToken > 1 else ""
)
model_id = conf["modelVision" if self.pathList else "model"]
model_index = self._getModelIndex(model_id)
self.modelsListCtrl.SetItemState(
model_index,
wx.LIST_STATE_SELECTED | wx.LIST_STATE_FOCUSED,
wx.LIST_STATE_SELECTED | wx.LIST_STATE_FOCUSED
)
self.modelsListCtrl.EnsureVisible(model_index)
self._refreshModelsList()
mainSizer.Add(modelsLabel, 0, wx.ALL, 5)
mainSizer.Add(self.modelsListCtrl, 0, wx.ALL, 5)

Expand Down Expand Up @@ -1035,11 +1016,65 @@ def showModelDetails(self, evt=None):
True
)

def _getModelIndex(self, model_id):
for i, model in enumerate(self._models):
if model.id == model_id:
return i
return -1

def _refreshModelsList(self, model_to_select=None):
self.modelsListCtrl.DeleteAllItems()
favorite_models = self.data.get("favorite_models", [])
self._models = sorted(
self._models,
key=lambda model: (
not model.id in favorite_models,
apikeymanager.AVAILABLE_PROVIDERS.index(model.provider),
model.id.lower()
),
reverse=False
)
for i, model in enumerate(self._models):
self.modelsListCtrl.InsertItem(i, model.name)
self.modelsListCtrl.SetItem(i, 1, model.provider)
self.modelsListCtrl.SetItem(i, 2, model.id)
self.modelsListCtrl.SetItem(i, 3, str(model.contextWindow))
self.modelsListCtrl.SetItem(
i,
4,
str(model.maxOutputToken) if model.maxOutputToken > 1 else ""
)
model_id = model_to_select or self.conf["modelVision" if self.pathList else "model"]
model_index = self._getModelIndex(model_id)
if model_index == -1:
model_index = 0
self.modelsListCtrl.SetItemState(
model_index,
wx.LIST_STATE_SELECTED | wx.LIST_STATE_FOCUSED,
wx.LIST_STATE_SELECTED | wx.LIST_STATE_FOCUSED
)
self.modelsListCtrl.EnsureVisible(model_index)

def onFavoriteModel(self, evt):
model = self.getCurrentModel()
if not "favorite_models" in self.data:
self.data["favorite_models"] = []
if model.id in self.data.get("favorite_models", []):
self.data["favorite_models"].remove(model.id)
else:
self.data["favorite_models"].append(model.id)
self.saveData(True)
self._refreshModelsList(model.id)

def onModelKeyDown(self, evt):
if evt.GetKeyCode() == wx.WXK_SPACE:
self.showModelDetails()
if evt.GetModifiers() == wx.MOD_SHIFT:
self.onFavoriteModel(evt)
elif evt.GetModifiers() == wx.MOD_NONE:
self.showModelDetails()
else:
evt.Skip()

def onSubmit(self, evt):
if not self.promptTextCtrl.GetValue().strip() and not self.pathList:
self.promptTextCtrl.SetFocus()
Expand Down Expand Up @@ -1615,15 +1650,6 @@ def onPromptContextMenu(self, evt):
self.promptTextCtrl.PopupMenu(menu)
menu.Destroy()

def onModelContextMenu(self, evt):
menu = wx.Menu()
item_id = wx.NewIdRef()
menu.Append(item_id, _("Show model details") + " (Space)")
self.Bind(wx.EVT_MENU, self.showModelDetails, id=item_id)
menu.AppendSeparator()
self.modelsListCtrl.PopupMenu(menu)
menu.Destroy()

def onSetFocus(self, evt):
self.lastFocusedItem = evt.GetEventObject()
evt.Skip()
Expand Down Expand Up @@ -1666,6 +1692,20 @@ def message(
if onPromptFieldOnly:
self.focusHistoryBrl()

def onModelContextMenu(self, evt):
menu = wx.Menu()
item_id = wx.NewIdRef()
menu.Append(item_id, _("Show model &details") + " (Space)")
self.Bind(wx.EVT_MENU, self.showModelDetails, id=item_id)
isFavorite = self.getCurrentModel().id in self.data.get("favorite_models", [])
item_id = wx.NewIdRef()
label = _("Add to &favorites") if not isFavorite else _("Remove from &favorites")
menu.Append(item_id, f"{label} (Shift+Space)")
self.Bind(wx.EVT_MENU, self.onFavoriteModel, id=item_id)
menu.AppendSeparator()
self.modelsListCtrl.PopupMenu(menu)
menu.Destroy()

def onImageDescription(self, evt):
"""
Display a menu to select the source of the image.
Expand Down
Loading

0 comments on commit 3ffe6dd

Please sign in to comment.