Compare commits
35 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4b17601baf | ||
|
|
c994307954 | ||
|
|
a13ffd22f1 | ||
|
|
7b8f40e117 | ||
|
|
add4dad8c0 | ||
|
|
7faa805176 | ||
|
|
91651b918e | ||
|
|
725e0930fe | ||
|
|
93ba903fc8 | ||
|
|
56064831d3 | ||
|
|
4bdb813b64 | ||
|
|
ad69887e4a | ||
|
|
c8f148d1f8 | ||
|
|
365e39a20a | ||
|
|
48c2fd2e81 | ||
|
|
3a5dc568c5 | ||
|
|
a180f7a46c | ||
|
|
07a12ba41f | ||
|
|
dd5351a3de | ||
|
|
ae48a17301 | ||
|
|
9e19698788 | ||
|
|
323725df33 | ||
|
|
7c40420048 | ||
|
|
fac51aefb9 | ||
|
|
8f1fbc511a | ||
|
|
f0bf112faf | ||
|
|
b2a15b92cd | ||
|
|
9b71bbea2e | ||
|
|
2645ab3732 | ||
|
|
8672c4ac40 | ||
|
|
b8bfd54515 | ||
|
|
a29d245381 | ||
|
|
f57427e2c4 | ||
|
|
3631f06075 | ||
|
|
67a66f85da |
1
.github/FUNDING.yml
vendored
1
.github/FUNDING.yml
vendored
@@ -1,6 +1,7 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: jeffser # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||
ko_fi: jeffser
|
||||
#patreon: # Replace with a single Patreon username
|
||||
#open_collective: # Replace with a single Open Collective username
|
||||
#ko_fi: # Replace with a single Ko-fi username
|
||||
|
||||
20
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
20
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Something is wrong
|
||||
title: ''
|
||||
labels: bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: enhancement
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
6
data/com.jeffser.Alpaca.SearchProvider.ini.in
Normal file
6
data/com.jeffser.Alpaca.SearchProvider.ini.in
Normal file
@@ -0,0 +1,6 @@
|
||||
[Shell Search Provider]
|
||||
DesktopId=@appid@.desktop
|
||||
BusName=@appid@.SearchProvider
|
||||
ObjectPath=/com/jeffser/Alpaca/SearchProvider
|
||||
Version=2
|
||||
|
||||
3
data/com.jeffser.Alpaca.SearchProvider.service.in
Normal file
3
data/com.jeffser.Alpaca.SearchProvider.service.in
Normal file
@@ -0,0 +1,3 @@
|
||||
[D-BUS Service]
|
||||
Name=@appid@.SearchProvider
|
||||
Exec=@libexecdir@/alpaca_search_provider
|
||||
@@ -63,6 +63,40 @@
|
||||
<url type="homepage">https://github.com/Jeffser/Alpaca</url>
|
||||
<url type="donation">https://github.com/sponsors/Jeffser</url>
|
||||
<releases>
|
||||
<release version="0.9.2" date="2024-05-30">
|
||||
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.9.2</url>
|
||||
<description>
|
||||
<p>Fix</p>
|
||||
<ul>
|
||||
<li>Fixed: app didn't open if models tweaks wasn't present in the config files</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release version="0.9.1" date="2024-05-29">
|
||||
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.9.1</url>
|
||||
<description>
|
||||
<p>Big Update</p>
|
||||
<ul>
|
||||
<li>Changed multiple icons (paper airplane for the send button)</li>
|
||||
<li>Combined export / import chat buttons into a menu</li>
|
||||
<li>Added 'model tweaks' (temperature, seed, keep_alive)</li>
|
||||
<li>Fixed send / stop button</li>
|
||||
<li>Fixed app not checking if remote connection works when starting</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release version="0.9.0" date="2024-05-29">
|
||||
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.9.0</url>
|
||||
<description>
|
||||
<p>Daily Update</p>
|
||||
<ul>
|
||||
<li>Added text ellipsis to chat name so it doesn't change the button width</li>
|
||||
<li>New shortcut for creating a chat (CTRL+N)</li>
|
||||
<li>New message entry design</li>
|
||||
<li>Fixed: Can't rename the same chat multiple times</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release version="0.8.8" date="2024-05-28">
|
||||
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.8.8</url>
|
||||
<description>
|
||||
|
||||
@@ -33,4 +33,24 @@ test('Validate schema file',
|
||||
compile_schemas,
|
||||
args: ['--strict', '--dry-run', meson.current_source_dir()])
|
||||
|
||||
#service_conf = configuration_data()
|
||||
#service_conf.set('appid', application_id)
|
||||
#service_conf.set('libexecdir', join_paths(get_option('prefix'), get_option('bindir')))
|
||||
#configure_file(
|
||||
#input: 'com.jeffser.Alpaca.SearchProvider.service.in',
|
||||
#output: '@0@.SearchProvider.service'.format(application_id),
|
||||
#configuration: service_conf,
|
||||
#install_dir: join_paths(join_paths(get_option('prefix'), get_option('datadir')), 'dbus-1', 'services')
|
||||
#)
|
||||
|
||||
#search_provider_conf = configuration_data()
|
||||
#search_provider_conf.set('appid', application_id)
|
||||
#configure_file(
|
||||
#configuration: search_provider_conf,
|
||||
#input: files('com.jeffser.Alpaca.SearchProvider.ini.in'),
|
||||
#install_dir: join_paths(get_option('datadir'), 'gnome-shell', 'search-providers'),
|
||||
#output: '@0@.SearchProvider.ini'.format(application_id)
|
||||
#)
|
||||
|
||||
|
||||
subdir('icons')
|
||||
@@ -1,11 +1,12 @@
|
||||
project('Alpaca',
|
||||
version: '0.8.8',
|
||||
project('Alpaca', 'c',
|
||||
version: '0.9.2',
|
||||
meson_version: '>= 0.62.0',
|
||||
default_options: [ 'warning_level=2', 'werror=false', ],
|
||||
)
|
||||
|
||||
i18n = import('i18n')
|
||||
gnome = import('gnome')
|
||||
application_id = 'com.jeffser.Alpaca'
|
||||
|
||||
subdir('data')
|
||||
subdir('src')
|
||||
|
||||
515
po/alpaca.pot
515
po/alpaca.pot
File diff suppressed because it is too large
Load Diff
951
po/fr.po~
Normal file
951
po/fr.po~
Normal file
@@ -0,0 +1,951 @@
|
||||
# French translation for Alpaca
|
||||
#
|
||||
# Translate guideline :
|
||||
#
|
||||
# English French
|
||||
# to chat discuter
|
||||
# a chat une discussion
|
||||
#
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 0.8.7\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-05-29 16:15-0600\n"
|
||||
"PO-Revision-Date: 2024-05-28 21:02+0200\n"
|
||||
"Last-Translator: Louis Chauvet-Villaret <louischauvet0@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 3.4.4\n"
|
||||
|
||||
#: data/com.jeffser.Alpaca.desktop.in:3
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:7
|
||||
msgid "Alpaca"
|
||||
msgstr "Alpaca"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:8
|
||||
#, fuzzy
|
||||
msgid "Chat with local AI models"
|
||||
msgstr "Discutez avec des modèles d'IA fonctionnant localement grâce à Ollama"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:10
|
||||
msgid "An Ollama client"
|
||||
msgstr "Un client Ollama"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:11
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:357
|
||||
msgid "Features"
|
||||
msgstr "Fonctionnalités"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:13
|
||||
msgid "Built in Ollama instance"
|
||||
msgstr "Intégrée dans l'instance Ollama"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:14
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:359
|
||||
msgid "Talk to multiple models in the same conversation"
|
||||
msgstr "Discutez avec plusieurs modèles dans la même discussion"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:15
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:360
|
||||
msgid "Pull and delete models from the app"
|
||||
msgstr "Téléchargez et supprimez des modèles depuis l'application"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:16
|
||||
msgid "Have multiple conversations"
|
||||
msgstr "Ayez plusieurs discussions"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:17
|
||||
msgid "Image recognition (Only available with compatible models)"
|
||||
msgstr ""
|
||||
"Reconnaissance d'image (Uniquement disponible avec les modèles compatibles)"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:18
|
||||
msgid "Import and export chats"
|
||||
msgstr "Importez et exportez des discussions"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:20 src/window.ui:506
|
||||
msgid "Disclaimer"
|
||||
msgstr "Avertissement"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:21
|
||||
msgid ""
|
||||
"This project is not affiliated at all with Ollama, I'm not responsible for "
|
||||
"any damages to your device or software caused by running code given by any "
|
||||
"models."
|
||||
msgstr ""
|
||||
"Ce projet n'est aucunement affilié avec Ollama, et je ne suis aucunement "
|
||||
"responsable des dommages causés à votre appareil ou vos logiciels en "
|
||||
"exécutant du code donné par n'importe quel modèle."
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:24
|
||||
msgid "Jeffry Samuel Eduarte Rojas"
|
||||
msgstr "Jeffry Samuel Eduarte Rojas"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:50
|
||||
msgid "A conversation showing code highlight"
|
||||
msgstr "Une discussion montrant code avec de la coloration syntaxique"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:54
|
||||
msgid "A conversation involving multiple models"
|
||||
msgstr "Une discussion utilisant plusieurs modèles"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:58
|
||||
msgid "Managing models"
|
||||
msgstr "Gestion des modèles"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:69
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:274
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:331
|
||||
msgid "Big Update"
|
||||
msgstr "Mise à jour majeure"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:71
|
||||
msgid "Changed multiple icons (paper airplane for the send button)"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:72
|
||||
msgid "Combined export / import chat buttons into a menu"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:73
|
||||
msgid "Added 'model tweaks' (temperature, seed, keep_alive)"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:74
|
||||
msgid "Fixed send / stop button"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:75
|
||||
msgid "Fixed app not checking if remote connection works when starting"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:82
|
||||
#, fuzzy
|
||||
msgid "Daily Update"
|
||||
msgstr "Une autre mise à jour quotidienne"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:84
|
||||
msgid "Added text ellipsis to chat name so it doesn't change the button width"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:85
|
||||
msgid "New shortcut for creating a chat (CTRL+N)"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:86
|
||||
msgid "New message entry design"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:87
|
||||
msgid "Fixed: Can't rename the same chat multiple times"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:94
|
||||
msgid "The fix"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:96
|
||||
msgid ""
|
||||
"Fixed: Ollama instance keeps running on the background even when it is "
|
||||
"disabled"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:97
|
||||
msgid "Fixed: Can't pull models on the integrated instance"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:104
|
||||
#, fuzzy
|
||||
msgid "Quick tweaks"
|
||||
msgstr "Petites corrections"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:106
|
||||
msgid "Added progress bar to models that are being pulled"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:107
|
||||
msgid "Added size to tags when pulling a model"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:108
|
||||
#, fuzzy
|
||||
msgid "General optimizations on the background"
|
||||
msgstr "Optimisations générales"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:115
|
||||
msgid "Quick fixes"
|
||||
msgstr "Petites corrections"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:117
|
||||
msgid "Fixed: Scroll when message is received"
|
||||
msgstr "Correction: Défilement lors de la réception d'un message"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:118
|
||||
msgid "Fixed: Content doesn't change when creating a new chat"
|
||||
msgstr ""
|
||||
"Correction: Le contenu ne change pas lors de la création d'un nouveau chat"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:119
|
||||
msgid "Added 'Featured Models' page on welcome dialog"
|
||||
msgstr ""
|
||||
"Ajout de la page 'Modèles Suggérés' sur la fenêtre de dialogue d'accueil"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:126
|
||||
msgid "Nice Update"
|
||||
msgstr "Bonne mise à jour"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:128
|
||||
msgid "UI tweaks (Thanks Nokse22)"
|
||||
msgstr "Ajustement de l'interface utilisateur (Merci à Nokse22)"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:129
|
||||
msgid "General optimizations"
|
||||
msgstr "Optimisations générales"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:130
|
||||
msgid "Metadata fixes"
|
||||
msgstr "Correction des métadonnées"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:137
|
||||
msgid "Quick fix"
|
||||
msgstr "Petite correction"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:139
|
||||
msgid "Updated Spanish translation"
|
||||
msgstr "Mise à jour de la traduction Espagnol"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:140
|
||||
msgid "Added compatibility for PNG"
|
||||
msgstr "Ajout de la compatibilité pour les images PNG"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:147
|
||||
msgid "New Update"
|
||||
msgstr "Nouvelle mise à jour"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:149
|
||||
msgid "Updated model list"
|
||||
msgstr "Liste des modèles mise à jour"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:150
|
||||
msgid "Added image recognition to more models"
|
||||
msgstr "Ajout de la reconnaissance d'image à plus de modèles"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:151
|
||||
msgid "Added Brazilian Portuguese translation (Thanks Daimaar Stein)"
|
||||
msgstr "Ajout de la traduction en Portugais Brésilien (Merci à Daimaar Stein)"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:152
|
||||
msgid "Refined the general UI (Thanks Nokse22)"
|
||||
msgstr "Peaufinage de l'interface utilisateur (Merci à Nokse22)"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:153
|
||||
msgid "Added 'delete message' feature"
|
||||
msgstr "Ajout de l'option 'supprimer le message'"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:154
|
||||
msgid ""
|
||||
"Added metadata so that software distributors know that the app is compatible "
|
||||
"with mobile"
|
||||
msgstr ""
|
||||
"Ajout de métadonnées pour que les distributeurs de logiciels sachent que "
|
||||
"l'application est compatible avec les téléphones"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:155
|
||||
msgid ""
|
||||
"Changed 'send' shortcut to just the return/enter key (to add a new line use "
|
||||
"shift+return)"
|
||||
msgstr ""
|
||||
"Changement du raccourci 'envoyer' en une simple touche retour/entrée (pour "
|
||||
"ajouter une nouvelle ligne, utiliser shift+retour)"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:162
|
||||
msgid "Bug Fixes"
|
||||
msgstr "Résolution de bogues"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:164
|
||||
msgid "Fixed: Minor spelling mistake"
|
||||
msgstr "Corrigé: Petite faute d'orthographe"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:165
|
||||
msgid "Added 'mobile' as a supported form factor"
|
||||
msgstr "Ajout de la mise en page 'mobile'"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:166
|
||||
msgid "Fixed: 'Connection Error' dialog not working properly"
|
||||
msgstr ""
|
||||
"Correction: La boîte de dialogue « Erreur de connexion » ne fonctionnait pas "
|
||||
"correctement"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:167
|
||||
msgid "Fixed: App might freeze randomly on startup"
|
||||
msgstr ""
|
||||
"Correction: L'application pouvait se bloquer aléatoirement au démarrage"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:168
|
||||
msgid "Changed 'chats' label on sidebar for 'Alpaca'"
|
||||
msgstr "Changement du titre 'chats' de la barre latéral par 'Alpaca'"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:175
|
||||
msgid "Cool Update"
|
||||
msgstr "Mise à jour sympa"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:177
|
||||
msgid "Better design for chat window"
|
||||
msgstr "Meilleur design pour de fenêtre de discussion"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:178
|
||||
msgid "Better design for chat sidebar"
|
||||
msgstr "Meilleur design pour de la barre latérale"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:179
|
||||
msgid "Fixed remote connections"
|
||||
msgstr "Correction des connexions à distance"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:180
|
||||
msgid "Fixed Ollama restarting in loop"
|
||||
msgstr "Correction d'Ollama qui redémarrait en boucle"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:181
|
||||
msgid "Other cool backend stuff"
|
||||
msgstr "Autres trucs sympas en arrière-plan"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:188
|
||||
msgid "Huge Update"
|
||||
msgstr "Grande mise à jour"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:190
|
||||
msgid "Added Ollama as part of Alpaca, Ollama will run in a sandbox"
|
||||
msgstr ""
|
||||
"Ajout d'Ollama comme partie d'Alpaca, Ollama fonctionnera dans un bac à sable"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:191
|
||||
msgid "Added option to connect to remote instances (how it worked before)"
|
||||
msgstr ""
|
||||
"Ajout de l'option pour se connecter à des instances distantes (comme cela "
|
||||
"fonctionnait précédemment)"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:192
|
||||
msgid "Added option to import and export chats"
|
||||
msgstr "Ajout de l'option pour importer et exporter les discussions"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:193
|
||||
msgid "Added option to run Alpaca with Ollama in the background"
|
||||
msgstr "Ajout de l'option pour exécuter Alpaca avec Ollama en arrière-plan"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:194
|
||||
msgid "Added preferences dialog"
|
||||
msgstr "Ajout de la boite de dialogue des paramètres"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:195
|
||||
msgid "Changed the welcome dialog"
|
||||
msgstr "Changement de la boite de dialogue de bienvenue"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:197
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:214
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:226
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:245
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:266
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:282
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:298
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:312
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:322
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:340
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:362
|
||||
msgid "Please report any errors to the issues page, thank you."
|
||||
msgstr "Merci de reporter n'importe quel erreur sur la page des problèmes."
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:205
|
||||
msgid "Yet Another Daily Update"
|
||||
msgstr "Encore une autre mise à jour quotidienne"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:207
|
||||
msgid "Added better UI for 'Manage Models' dialog"
|
||||
msgstr ""
|
||||
"Ajout d'une meilleur interface utilisateur pour la boite de dialogue "
|
||||
"'Gestion des modèles'"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:208
|
||||
msgid "Added better UI for the chat sidebar"
|
||||
msgstr "Ajout d'une meilleur interface utilisateur pour la barre latérale"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:209
|
||||
msgid ""
|
||||
"Replaced model description with a button to open Ollama's website for the "
|
||||
"model"
|
||||
msgstr ""
|
||||
"Remplacement de la description du modèle par un bouton pour ouvrir le site "
|
||||
"web Ollama pour le modèle"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:210
|
||||
msgid "Added myself to the credits as the spanish translator"
|
||||
msgstr "Ajout de moi-même aux crédits en tant que traducteur espagnol"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:211
|
||||
msgid "Using XDG properly to get config folder"
|
||||
msgstr "Utilisation de XDG correctement pour avoir un dossier de configuration"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:212
|
||||
msgid "Update for translations"
|
||||
msgstr "Mise à jour concernant les traductions"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:222
|
||||
msgid "Quick Fix"
|
||||
msgstr "Petite correction"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:224
|
||||
msgid "The last update had some mistakes in the description of the update"
|
||||
msgstr ""
|
||||
"La dernière mise à jour avait quelques erreurs dans la description de la "
|
||||
"mise à jour"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:234
|
||||
msgid "Another Daily Update"
|
||||
msgstr "Une autre mise à jour quotidienne"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:236
|
||||
msgid "Added full Spanish translation"
|
||||
msgstr "Ajout de la traduction complète Espagnol"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:237
|
||||
msgid "Added support for background pulling of multiple models"
|
||||
msgstr ""
|
||||
"Ajout du support pour le téléchargement de plusieurs modèles en arrière-plan"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:238
|
||||
msgid "Added interrupt button"
|
||||
msgstr "Ajout d'un bouton d'interruptions"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:239
|
||||
msgid "Added basic shortcuts"
|
||||
msgstr "Ajout de raccourcis claviers simples"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:240
|
||||
msgid "Better translation support"
|
||||
msgstr "Meilleur support des traductions"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:241
|
||||
msgid ""
|
||||
"User can now leave chat name empty when creating a new one, it will add a "
|
||||
"placeholder name"
|
||||
msgstr ""
|
||||
"L'utilisateur peut maintenant quitter une discussion vide quand il en crée "
|
||||
"un nouvelle, cela va ajouter un nom de remplacement"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:242
|
||||
msgid "Better scalling for different window sizes"
|
||||
msgstr "Meilleure mise à l'échelle pour différente taille de fenêtre"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:243
|
||||
msgid "Fixed: Can't close app if first time setup fails"
|
||||
msgstr ""
|
||||
"Correction: Impossible de fermer l'application si la première configuration "
|
||||
"échouait"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:253
|
||||
msgid "Really Big Update"
|
||||
msgstr "Mise à jour vraiment majeure"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:255
|
||||
msgid "Added multiple chats support!"
|
||||
msgstr "Ajout du support de plusieurs discussions !"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:256
|
||||
msgid "Added Pango Markup support (bold, list, title, subtitle, monospace)"
|
||||
msgstr ""
|
||||
"Ajout du support de Pango Markup (gras, liste, titre, sous-titre, chasse-"
|
||||
"fixe)"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:257
|
||||
msgid "Added autoscroll if the user is at the bottom of the chat"
|
||||
msgstr ""
|
||||
"Ajout d'un défilement automatique si l'utilisateur est en haut d'une "
|
||||
"conersation"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:258
|
||||
msgid "Added support for multiple tags on a single model"
|
||||
msgstr "Ajout du support de plusieurs tag sur un seul modèle"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:259
|
||||
msgid "Added better model management dialog"
|
||||
msgstr "Ajout d'une meilleur boite de dialogue pour la gestion des modèles"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:260
|
||||
msgid "Added loading spinner when sending message"
|
||||
msgstr "Ajout d'un loader lors de m'envoie d'un message"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:261
|
||||
msgid "Added notifications if app is not active and a model pull finishes"
|
||||
msgstr ""
|
||||
"Ajout d'une notification si l'application n'est pas active et que le "
|
||||
"téléchargement d'un modèle est terminé"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:262
|
||||
msgid "Added new symbolic icon"
|
||||
msgstr "Ajout de nouveau icônes symboliques"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:263
|
||||
msgid "Added frame to message textview widget"
|
||||
msgstr "Ajout d'un cadre pour le widget des messages"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:264
|
||||
msgid "Fixed \"code blocks shouldn't be editable\""
|
||||
msgstr "Correction 'les blocs de codes ne peuvent pas être édité'"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:276
|
||||
msgid "Added code highlighting"
|
||||
msgstr "Ajout de coloration syntaxique du code"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:277
|
||||
msgid "Added image recognition (llava model)"
|
||||
msgstr "Ajout de la reconnaissance d'image (modèle llava)"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:278
|
||||
msgid "Added multiline prompt"
|
||||
msgstr "Ajout des prompts multilignes"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:279
|
||||
msgid "Fixed some small bugs"
|
||||
msgstr "Correction de petits bogues"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:280
|
||||
msgid "General optimization"
|
||||
msgstr "Optimisation générale"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:290
|
||||
msgid "Fixes and features"
|
||||
msgstr "Corrections et fonctionnalités"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:292
|
||||
msgid "Russian translation (thanks github/alexkdeveloper)"
|
||||
msgstr "Traduction Russe (Merci github/alexkdeveloper)"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:293
|
||||
msgid "Fixed: Cannot close app on first setup"
|
||||
msgstr ""
|
||||
"Correction: Impossible de fermer l'application lors de la première "
|
||||
"installation"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:294
|
||||
msgid "Fixed: Brand colors for Flathub"
|
||||
msgstr "Correction: Couleurs de la marque Flathub"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:295
|
||||
msgid "Fixed: App description"
|
||||
msgstr "Correction: Description de l'application"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:296
|
||||
msgid "Fixed: Only show 'save changes dialog' when you actually change the url"
|
||||
msgstr ""
|
||||
"Correction: N'afficher la boîte de dialogue « enregistrer les "
|
||||
"modifications » que lorsque l'url est réellement modifiée"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:306
|
||||
msgid "0.2.2 Bug fixes"
|
||||
msgstr "0.2.2 Corrections de bug"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:308
|
||||
msgid "Toast messages appearing behind dialogs"
|
||||
msgstr ""
|
||||
"Les messages de notifications apparaissaient derrière les boites de dialogue"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:309
|
||||
msgid "Local model list not updating when changing servers"
|
||||
msgstr ""
|
||||
"La liste des modèles locaux n'était pas mise à jour lors d'un changement de "
|
||||
"serveur"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:310
|
||||
msgid "Closing the setup dialog closes the whole app"
|
||||
msgstr ""
|
||||
"La fermeture de la boite de dialogue des paramètres fermait toute "
|
||||
"l'application"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:320
|
||||
msgid "0.2.1 Data saving fix"
|
||||
msgstr "0.2.1 Correction de la sauvegarde des données"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:321
|
||||
msgid ""
|
||||
"The app didn't save the config files and chat history to the right "
|
||||
"directory, this is now fixed"
|
||||
msgstr ""
|
||||
"L'application ne sauvegardais pas le fichier de configuration et "
|
||||
"l'historique de discussion dans le bon dossier, c'est maintenant corrigé"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:330
|
||||
msgid "0.2.0"
|
||||
msgstr "0.2.0"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:332
|
||||
msgid "New Features"
|
||||
msgstr "Nouvelles fonctionnalités"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:334
|
||||
msgid "Restore chat after closing the app"
|
||||
msgstr "Restaurer la discussion après avoir fermé l'application"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:335
|
||||
msgid "A button to clear the chat"
|
||||
msgstr "Un bouton pour effacer le chat"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:336
|
||||
msgid "Fixed multiple bugs involving how messages are shown"
|
||||
msgstr "Correction de plusieurs bogues concernant l'affichage des messages"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:337
|
||||
msgid "Added welcome dialog"
|
||||
msgstr "Ajout de la boite de dialogue de bienvenue"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:338
|
||||
msgid "More stability"
|
||||
msgstr "Plus de stabilité"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:348
|
||||
msgid "0.1.2 Quick fixes"
|
||||
msgstr "0.1.2 Petites corrections"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:349
|
||||
msgid ""
|
||||
"This release fixes some metadata needed to have a proper Flatpak application"
|
||||
msgstr ""
|
||||
"Cette version corrige quelques métadonnées pour avoir une application "
|
||||
"Flatpak correct"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:355
|
||||
msgid "0.1.1 Stable Release"
|
||||
msgstr "0.1.1 Version stable"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:356
|
||||
msgid "This is the first public version of Alpaca"
|
||||
msgstr "Ceci est la première version publique d'Alpaca"
|
||||
|
||||
#: src/window.py:53 src/window.py:670 src/window.py:675 src/window.py:735
|
||||
#: src/window.ui:681
|
||||
msgid "New Chat"
|
||||
msgstr "Nouvelle discussion"
|
||||
|
||||
#: src/window.py:98
|
||||
msgid "An error occurred"
|
||||
msgstr "Une erreur est survenue"
|
||||
|
||||
#: src/window.py:99
|
||||
msgid "Failed to connect to server"
|
||||
msgstr "Erreur de connexion au serveur"
|
||||
|
||||
#: src/window.py:100
|
||||
msgid "Could not list local models"
|
||||
msgstr "Impossible de lister les modèles locaux"
|
||||
|
||||
#: src/window.py:101
|
||||
msgid "Could not delete model"
|
||||
msgstr "Impossible de supprimer le modèle"
|
||||
|
||||
#: src/window.py:102
|
||||
msgid "Could not pull model"
|
||||
msgstr "Impossible de télécharger le modèle"
|
||||
|
||||
#: src/window.py:103
|
||||
msgid "Cannot open image"
|
||||
msgstr "Impossible d'ouvrir l'image"
|
||||
|
||||
#: src/window.py:104
|
||||
msgid "Cannot delete chat because it's the only one left"
|
||||
msgstr ""
|
||||
"Vous ne pouvez pas supprimer la discussion car c'est la seule qui reste"
|
||||
|
||||
#: src/window.py:105
|
||||
msgid "There was an error with the local Ollama instance, so it has been reset"
|
||||
msgstr ""
|
||||
"Une erreur est survenue avec l'instance local d'Ollama, elle a donc été "
|
||||
"reinitialisée"
|
||||
|
||||
#: src/window.py:108
|
||||
msgid "Please select a model before chatting"
|
||||
msgstr "Merci de sélectionner un modèle avant de discuter"
|
||||
|
||||
#: src/window.py:109
|
||||
msgid "Chat cannot be cleared while receiving a message"
|
||||
msgstr ""
|
||||
"La discussion ne peut pas être supprimé pendant la réception d'un message"
|
||||
|
||||
#: src/window.py:110
|
||||
msgid "That tag is already being pulled"
|
||||
msgstr "Ce tag est déjà en train d'être téléchargé"
|
||||
|
||||
#: src/window.py:111
|
||||
msgid "That tag has been pulled already"
|
||||
msgstr "Ce tag à déjà été télécharger"
|
||||
|
||||
#: src/window.py:112
|
||||
msgid "Code copied to the clipboard"
|
||||
msgstr "Code copié dans le presse-papier"
|
||||
|
||||
#: src/window.py:115
|
||||
msgid "Model deleted successfully"
|
||||
msgstr "Modèle supprimé avec succès"
|
||||
|
||||
#: src/window.py:116
|
||||
msgid "Model pulled successfully"
|
||||
msgstr "Modèle téléchargé avec succès"
|
||||
|
||||
#: src/window.py:117
|
||||
msgid "Chat exported successfully"
|
||||
msgstr "Discussion exportée avec succès"
|
||||
|
||||
#: src/window.py:118
|
||||
msgid "Chat imported successfully"
|
||||
msgstr "Discussion importée avec succès"
|
||||
|
||||
#: src/window.py:130
|
||||
msgid "Upload image"
|
||||
msgstr "Charger une image"
|
||||
|
||||
#: src/window.py:134 src/window.ui:179
|
||||
msgid "Only available on selected models"
|
||||
msgstr "Seulement disponible sur les modèles sélectionnés"
|
||||
|
||||
#: src/window.py:195
|
||||
msgid "Close"
|
||||
msgstr "Fermer"
|
||||
|
||||
#: src/window.py:196 src/window.ui:459
|
||||
msgid "Next"
|
||||
msgstr "Suivant"
|
||||
|
||||
#: src/window.py:243
|
||||
msgid "Pulling in the background..."
|
||||
msgstr "Téléchargement en arrière-plan..."
|
||||
|
||||
#: src/window.py:576
|
||||
msgid "Task Complete"
|
||||
msgstr "Tache terminée"
|
||||
|
||||
#: src/window.py:576
|
||||
msgid "Model '{}' pulled successfully."
|
||||
msgstr "Modèle '{}' téléchargé avec succès."
|
||||
|
||||
#: src/window.py:581
|
||||
msgid "Pull Model Error"
|
||||
msgstr "Erreur de téléchargement du modèle"
|
||||
|
||||
#: src/window.py:581
|
||||
msgid "Failed to pull model '{}' due to network error."
|
||||
msgstr ""
|
||||
"Échec du téléchargement du modèle '{}' à cause d'une erreur de connexion."
|
||||
|
||||
#: src/window.ui:39
|
||||
msgid "New chat"
|
||||
msgstr "Nouvelle discussion"
|
||||
|
||||
#: src/window.ui:80
|
||||
msgid "Toggle Sidebar"
|
||||
msgstr "Basculer la barre latérale"
|
||||
|
||||
#: src/window.ui:103 src/window.ui:374
|
||||
msgid "Manage models"
|
||||
msgstr "Gestion des modèles"
|
||||
|
||||
#: src/window.ui:117
|
||||
msgid "Menu"
|
||||
msgstr "Menu"
|
||||
|
||||
#: src/window.ui:266 src/window.ui:612 src/window.ui:675
|
||||
msgid "Preferences"
|
||||
msgstr "Paramètres"
|
||||
|
||||
#: src/window.ui:269 src/window.ui:659
|
||||
msgid "General"
|
||||
msgstr "Général"
|
||||
|
||||
#: src/window.ui:273
|
||||
msgid "Remote Connection"
|
||||
msgstr "Connexion à distance"
|
||||
|
||||
#: src/window.ui:274
|
||||
msgid "Manage a remote connection to Ollama"
|
||||
msgstr "Gérer une connexion à distance d'Ollama"
|
||||
|
||||
#: src/window.ui:277
|
||||
msgid "Use remote connection"
|
||||
msgstr "Utiliser une connexion à distance"
|
||||
|
||||
#: src/window.ui:283
|
||||
msgid "URL of remote instance"
|
||||
msgstr "URL de l'instance distante"
|
||||
|
||||
#: src/window.ui:291
|
||||
msgid "Behavior"
|
||||
msgstr "Comportement"
|
||||
|
||||
#: src/window.ui:292
|
||||
msgid "Manage Alpaca's Behavior"
|
||||
msgstr "Gérer le comportement d'Alpaca"
|
||||
|
||||
#: src/window.ui:295
|
||||
msgid "Run in background"
|
||||
msgstr "Exécution en arrière-plan"
|
||||
|
||||
#: src/window.ui:304
|
||||
msgid "Advanced Model Settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/window.ui:308
|
||||
msgid "Model Tweaks"
|
||||
msgstr ""
|
||||
|
||||
#: src/window.ui:309
|
||||
msgid "Manage the behavior of the AI models"
|
||||
msgstr ""
|
||||
|
||||
#: src/window.ui:314
|
||||
#, fuzzy
|
||||
msgid "Temperature"
|
||||
msgstr "Fonctionnalités"
|
||||
|
||||
#: src/window.ui:315
|
||||
msgid ""
|
||||
"The temperature of the model. Increasing the temperature will make the model "
|
||||
"answer more creatively. (Default: 0.8)"
|
||||
msgstr ""
|
||||
|
||||
#: src/window.ui:330
|
||||
msgid "Seed"
|
||||
msgstr ""
|
||||
|
||||
#: src/window.ui:331
|
||||
msgid ""
|
||||
"Sets the random number seed to use for generation. Setting this to a "
|
||||
"specific number will make the model generate the same text for the same "
|
||||
"prompt. (Default: 0 (random))"
|
||||
msgstr ""
|
||||
|
||||
#: src/window.ui:344
|
||||
msgid "keep_alive"
|
||||
msgstr ""
|
||||
|
||||
#: src/window.ui:345
|
||||
msgid "Keep Alive Time"
|
||||
msgstr ""
|
||||
|
||||
#: src/window.ui:443
|
||||
msgid "Previous"
|
||||
msgstr "Précédent"
|
||||
|
||||
#: src/window.ui:486
|
||||
msgid "Welcome to Alpaca"
|
||||
msgstr "Bienvenue sur Alpaca"
|
||||
|
||||
#: src/window.ui:487
|
||||
msgid "Powered by Ollama"
|
||||
msgstr "Fonctionne grâce à Ollama"
|
||||
|
||||
#: src/window.ui:490
|
||||
msgid "Ollama Website"
|
||||
msgstr "Site web d'Ollama"
|
||||
|
||||
#: src/window.ui:507
|
||||
msgid ""
|
||||
"Alpaca and its developers are not liable for any damages to devices or "
|
||||
"software resulting from the execution of code generated by an AI model. "
|
||||
"Please exercise caution and review the code carefully before running it."
|
||||
msgstr ""
|
||||
"Alpaca et ses développeurs ne sont pas responsables des dommages causés à "
|
||||
"votre appareil ou vos logiciels lors de l'exécution de code généré par les "
|
||||
"modèles d'IA. Merci de faire attention et de relire attentivement le code "
|
||||
"avant de l'exécuter."
|
||||
|
||||
#: src/window.ui:518
|
||||
msgid "Featured Models"
|
||||
msgstr "Modèles recommandés"
|
||||
|
||||
#: src/window.ui:519
|
||||
msgid ""
|
||||
"Alpaca works locally on your device, to start chatting you'll need an AI "
|
||||
"model, you can either pull models from this list or the 'Manage Models' menu "
|
||||
"later."
|
||||
msgstr ""
|
||||
"Alpaca fonctionne localement sur votre ordinateur, pour commencer à discuter "
|
||||
"vous aurez besoin d'un modèle d'IA, vous pouvez télécharger un modèle soit "
|
||||
"depuis cette liste soit depuis le menu 'Gérer les modèles' plus tard."
|
||||
|
||||
#: src/window.ui:529
|
||||
msgid "Built by Meta"
|
||||
msgstr "Développé par Meta"
|
||||
|
||||
#: src/window.ui:546
|
||||
msgid "Built by Google DeepMind"
|
||||
msgstr "Développé par Google DeepMind"
|
||||
|
||||
#: src/window.ui:563
|
||||
msgid "Built by Microsoft"
|
||||
msgstr "Développé par Microsoft"
|
||||
|
||||
#: src/window.ui:580
|
||||
msgid "Multimodal AI with image recognition"
|
||||
msgstr "IA multimodale avec reconnaissance d'image"
|
||||
|
||||
#: src/window.ui:608
|
||||
msgid "Clear Chat"
|
||||
msgstr "Supprimer la discussion"
|
||||
|
||||
#: src/window.ui:616
|
||||
msgid "Keyboard Shortcuts"
|
||||
msgstr "Raccourcis claviers"
|
||||
|
||||
#: src/window.ui:620
|
||||
msgid "About Alpaca"
|
||||
msgstr "À propos d'Alpaca"
|
||||
|
||||
#: src/window.ui:628
|
||||
#, fuzzy
|
||||
msgid "Export current chat"
|
||||
msgstr "Exporter la discussion"
|
||||
|
||||
#: src/window.ui:632
|
||||
msgid "Import chat"
|
||||
msgstr "Importer une discussion"
|
||||
|
||||
#: src/window.ui:663
|
||||
msgid "Close application"
|
||||
msgstr "Fermer l'application"
|
||||
|
||||
#: src/window.ui:669
|
||||
msgid "Clear chat"
|
||||
msgstr "Supprimer la discussion"
|
||||
|
||||
#: src/window.ui:687
|
||||
msgid "Show shortcuts window"
|
||||
msgstr "Voir les raccourcis clavier"
|
||||
|
||||
#: src/window.ui:694
|
||||
msgid "Editor"
|
||||
msgstr "Éditeur"
|
||||
|
||||
#: src/window.ui:698
|
||||
msgid "Copy"
|
||||
msgstr "Copier"
|
||||
|
||||
#: src/window.ui:704
|
||||
msgid "Paste"
|
||||
msgstr "Coller"
|
||||
|
||||
#: src/window.ui:710
|
||||
msgid "Insert new line"
|
||||
msgstr "Ajouter un ligne"
|
||||
|
||||
#: src/window.ui:716
|
||||
msgid "Send Message"
|
||||
msgstr "Envoyer le message"
|
||||
|
||||
#~ msgid "Remove"
|
||||
#~ msgstr "Supprimer"
|
||||
|
||||
#~ msgid "Send"
|
||||
#~ msgstr "Envoyer"
|
||||
|
||||
#~ msgid "Image"
|
||||
#~ msgstr "Image"
|
||||
509
po/pt_BR.po
509
po/pt_BR.po
File diff suppressed because it is too large
Load Diff
1074
po/pt_BR.po~
Normal file
1074
po/pt_BR.po~
Normal file
File diff suppressed because it is too large
Load Diff
@@ -3,6 +3,10 @@
|
||||
<gresource prefix="/com/jeffser/Alpaca">
|
||||
<file>style.css</file>
|
||||
<file>style-dark.css</file>
|
||||
<file alias="icons/scalable/status/library-symbolic.svg">icons/library-symbolic.svg</file>
|
||||
<file alias="icons/scalable/status/paper-plane-symbolic.svg">icons/paper-plane-symbolic.svg</file>
|
||||
<file alias="icons/scalable/status/globe-symbolic.svg">icons/globe-symbolic.svg</file>
|
||||
<file alias="icons/scalable/status/controls-big-symbolic.svg">icons/controls-big-symbolic.svg</file>
|
||||
<file preprocess="xml-stripblanks">window.ui</file>
|
||||
<file preprocess="xml-stripblanks">gtk/help-overlay.ui</file>
|
||||
</gresource>
|
||||
|
||||
111
src/alpaca_search_provider.in
Normal file
111
src/alpaca_search_provider.in
Normal file
@@ -0,0 +1,111 @@
|
||||
#!@PYTHON@
|
||||
|
||||
import sys
|
||||
from gi.repository import Gio, GLib
|
||||
|
||||
DBUS_NAME = "com.jeffser.Alpaca.SearchProvider"
|
||||
DBUS_OBJECT_PATH = "/com/jeffser/Alpaca/SearchProvider"
|
||||
DBUS_INTERFACE = "org.gnome.Shell.SearchProvider2"
|
||||
|
||||
class SearchProvider:
|
||||
def __init__(self):
|
||||
print("ALPACA __init__")
|
||||
self.connection = Gio.bus_get_sync(Gio.BusType.SESSION, None)
|
||||
if not self.connection:
|
||||
print("ALPACA Failed to get D-Bus connection")
|
||||
return
|
||||
|
||||
print("ALPACA D-Bus connection obtained")
|
||||
|
||||
interface_info = self.get_interface_info()
|
||||
self.registration_id = self.connection.register_object(DBUS_OBJECT_PATH, interface_info, self.handle_method_call, None)
|
||||
|
||||
if self.registration_id > 0:
|
||||
print(f"ALPACA Object registered with ID: {self.registration_id}")
|
||||
else:
|
||||
print("ALPACA Failed to register object")
|
||||
|
||||
def get_interface_info(self):
|
||||
print("ALPACA get_interface_info")
|
||||
xml = """
|
||||
<node>
|
||||
<interface name='org.gnome.Shell.SearchProvider2'>
|
||||
<method name='GetInitialResultSet'>
|
||||
<arg type='as' name='terms' direction='in'/>
|
||||
<arg type='as' name='results' direction='out'/>
|
||||
</method>
|
||||
<method name='GetSubsearchResultSet'>
|
||||
<arg type='as' name='previous_results' direction='in'/>
|
||||
<arg type='as' name='terms' direction='in'/>
|
||||
<arg type='as' name='results' direction='out'/>
|
||||
</method>
|
||||
<method name='GetResultMetas'>
|
||||
<arg type='as' name='identifiers' direction='in'/>
|
||||
<arg type='a{sv}' name='metas' direction='out'/>
|
||||
</method>
|
||||
<method name='ActivateResult'>
|
||||
<arg type='s' name='identifier' direction='in'/>
|
||||
<arg type='as' name='terms' direction='in'/>
|
||||
<arg type='i' name='timestamp' direction='in'/>
|
||||
</method>
|
||||
</interface>
|
||||
</node>
|
||||
"""
|
||||
return Gio.DBusNodeInfo.new_for_xml(xml).interfaces[0]
|
||||
|
||||
def handle_method_call(self, connection, sender, object_path, interface_name, method_name, parameters, invocation):
|
||||
print(f"ALPACA handle_method_call: {method_name}")
|
||||
if method_name == "GetInitialResultSet":
|
||||
self.handle_get_initial_result_set(invocation, parameters)
|
||||
elif method_name == "GetSubsearchResultSet":
|
||||
self.handle_get_subsearch_result_set(invocation, parameters)
|
||||
elif method_name == "GetResultMetas":
|
||||
self.handle_get_result_metas(invocation, parameters)
|
||||
elif method_name == "ActivateResult":
|
||||
self.handle_activate_result(invocation, parameters)
|
||||
|
||||
def handle_get_initial_result_set(self, invocation, parameters):
|
||||
print("ALPACA handle_get_initial_result_set")
|
||||
terms = parameters.unpack()[0]
|
||||
print(f"Initial search terms: {terms}")
|
||||
results = ["result1", "result2"]
|
||||
if "Alpaca" in terms:
|
||||
results.append("alpaca_placeholder_result")
|
||||
print(f"Returning results: {results}")
|
||||
invocation.return_value(GLib.Variant("(as)", [results]))
|
||||
|
||||
def handle_get_subsearch_result_set(self, invocation, parameters):
|
||||
print("ALPACA handle_get_subsearch_result_set")
|
||||
previous_results, terms = parameters.unpack()
|
||||
print(f"Subsearch terms: {terms}, previous results: {previous_results}")
|
||||
results = ["result3", "result4"]
|
||||
if "Alpaca" in terms:
|
||||
results.append("sub_alpaca_placeholder_result")
|
||||
print(f"Returning subsearch results: {results}")
|
||||
invocation.return_value(GLib.Variant("(as)", [results]))
|
||||
|
||||
def handle_get_result_metas(self, invocation, parameters):
|
||||
print("ALPACA handle_get_result_metas")
|
||||
identifiers = parameters.unpack()[0]
|
||||
print(f"Result metas for identifiers: {identifiers}")
|
||||
metas = []
|
||||
for identifier in identifiers:
|
||||
meta = {"name": GLib.Variant("s", "Placeholder result for " + identifier)}
|
||||
metas.append(GLib.Variant("a{sv}", meta))
|
||||
print(f"Returning metas: {metas}")
|
||||
invocation.return_value(GLib.Variant("(a{sv})", [metas]))
|
||||
|
||||
def handle_activate_result(self, invocation, parameters):
|
||||
print("ALPACA handle_activate_result")
|
||||
identifier, terms, timestamp = parameters.unpack()
|
||||
print(f"Activated result: {identifier}, terms: {terms}, timestamp: {timestamp}")
|
||||
invocation.return_value(None)
|
||||
|
||||
if __name__ == "__main__":
|
||||
provider = SearchProvider()
|
||||
if provider.registration_id > 0:
|
||||
loop = GLib.MainLoop()
|
||||
print("ALPACA Running main loop")
|
||||
loop.run()
|
||||
else:
|
||||
print("ALPACA Failed to start main loop due to object registration failure")
|
||||
@@ -57,7 +57,8 @@ def rename_chat_response(self, dialog, task, old_chat_name, entry, label_element
|
||||
if new_chat_name and (task is None or dialog.choose_finish(task) == "rename"):
|
||||
self.rename_chat(old_chat_name, new_chat_name, label_element)
|
||||
|
||||
def rename_chat(self, chat_name:str, label_element):
|
||||
def rename_chat(self, label_element):
|
||||
chat_name = label_element.get_parent().get_name()
|
||||
entry = Gtk.Entry()
|
||||
dialog = Adw.AlertDialog(
|
||||
heading=_("Rename Chat"),
|
||||
|
||||
2
src/icons/controls-big-symbolic.svg
Normal file
2
src/icons/controls-big-symbolic.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 0 16 16" width="16px"><g fill="#222222"><path d="m 4.550781 1 c -1.9375 0 -3.5 1.5625 -3.5 3.5 s 1.5625 3.5 3.5 3.5 h 7 c 1.941407 0 3.5 -1.5625 3.5 -3.5 s -1.558593 -3.5 -3.5 -3.5 z m 7 1 c 1.386719 0 2.5 1.113281 2.5 2.5 c 0 1.382812 -1.113281 2.5 -2.5 2.5 c -1.382812 0 -2.5 -1.117188 -2.5 -2.5 c 0 -1.386719 1.117188 -2.5 2.5 -2.5 z m 0 0"/><path d="m 4.550781 9 c -1.9375 0 -3.5 1.5625 -3.5 3.5 s 1.5625 3.5 3.5 3.5 h 7 c 1.941407 0 3.5 -1.5625 3.5 -3.5 s -1.558593 -3.5 -3.5 -3.5 z m 0 1 c 1.386719 0 2.5 1.113281 2.5 2.5 c 0 1.382812 -1.113281 2.5 -2.5 2.5 c -1.382812 0 -2.5 -1.117188 -2.5 -2.5 c 0 -1.386719 1.117188 -2.5 2.5 -2.5 z m 0 0" fill-opacity="0.35"/></g></svg>
|
||||
|
After Width: | Height: | Size: 785 B |
2
src/icons/globe-symbolic.svg
Normal file
2
src/icons/globe-symbolic.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 0 16 16" width="16px"><path d="m 7.5 0 c -4.128906 0 -7.5 3.371094 -7.5 7.5 s 3.371094 7.5 7.5 7.5 s 7.5 -3.371094 7.5 -7.5 s -3.371094 -7.5 -7.5 -7.5 z m 0 2 c 0.257812 0 0.503906 0.023438 0.75 0.054688 c 0.191406 0.261718 0.382812 0.59375 0.550781 1.027343 c 0.105469 0.277344 0.203125 0.585938 0.289063 0.917969 h -3.179688 c 0.085938 -0.332031 0.183594 -0.640625 0.289063 -0.917969 c 0.167969 -0.433593 0.359375 -0.765625 0.550781 -1.027343 c 0.246094 -0.03125 0.492188 -0.054688 0.75 -0.054688 z m -2.085938 0.40625 c -0.050781 0.109375 -0.105468 0.203125 -0.148437 0.316406 c -0.148437 0.386719 -0.269531 0.820313 -0.378906 1.277344 h -1.617188 c 0.570313 -0.691406 1.296875 -1.246094 2.144531 -1.59375 z m 4.171876 0 c 0.847656 0.347656 1.574218 0.902344 2.144531 1.59375 h -1.617188 c -0.109375 -0.457031 -0.230469 -0.890625 -0.378906 -1.277344 c -0.042969 -0.113281 -0.097656 -0.207031 -0.148437 -0.316406 z m -6.980469 2.59375 h 2.082031 c -0.097656 0.628906 -0.148438 1.300781 -0.167969 2 h -2.480469 c 0.0625 -0.714844 0.253907 -1.390625 0.566407 -2 z m 3.09375 0 h 3.601562 c 0.101563 0.617188 0.15625 1.292969 0.179688 2 h -3.960938 c 0.023438 -0.707031 0.078125 -1.382812 0.179688 -2 z m 4.613281 0 h 2.082031 c 0.3125 0.609375 0.503907 1.285156 0.566407 2 h -2.480469 c -0.019531 -0.699219 -0.070313 -1.371094 -0.167969 -2 z m -8.273438 3 h 2.480469 c 0.019531 0.699219 0.070313 1.375 0.167969 2 h -2.082031 c -0.3125 -0.609375 -0.503907 -1.285156 -0.566407 -2 z m 3.480469 0 h 3.960938 c -0.023438 0.707031 -0.078125 1.382812 -0.179688 2 h -3.601562 c -0.101563 -0.617188 -0.15625 -1.292969 -0.179688 -2 z m 4.960938 0 h 2.480469 c -0.0625 0.714844 -0.253907 1.390625 -0.566407 2 h -2.082031 c 0.097656 -0.625 0.148438 -1.300781 0.167969 -2 z m -7.210938 3 h 1.617188 c 0.109375 0.457031 0.230469 0.890625 0.378906 1.273438 c 0.042969 0.117187 0.097656 0.210937 0.148437 0.320312 c -0.847656 -0.347656 -1.574218 -0.902344 -2.144531 -1.59375 z m 2.640625 0 h 3.179688 c -0.085938 0.332031 -0.183594 0.640625 -0.289063 0.917969 c -0.167969 0.433593 -0.359375 0.765625 -0.550781 1.027343 c -0.246094 0.03125 -0.496094 0.054688 -0.75 0.054688 s -0.503906 -0.023438 -0.75 -0.054688 c -0.191406 -0.261718 -0.382812 -0.59375 -0.550781 -1.027343 c -0.105469 -0.277344 -0.203125 -0.585938 -0.289063 -0.917969 z m 4.203125 0 h 1.617188 c -0.570313 0.691406 -1.296875 1.246094 -2.144531 1.59375 c 0.050781 -0.109375 0.105468 -0.203125 0.148437 -0.320312 c 0.148437 -0.382813 0.269531 -0.816407 0.378906 -1.273438 z m 0 0" fill="#222222"/></svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
2
src/icons/library-symbolic.svg
Normal file
2
src/icons/library-symbolic.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 0 16 16" width="16px"><g fill="#222222"><path d="m 1.5 2 h 2 c 0.277344 0 0.5 0.222656 0.5 0.5 v 12 c 0 0.277344 -0.222656 0.5 -0.5 0.5 h -2 c -0.277344 0 -0.5 -0.222656 -0.5 -0.5 v -12 c 0 -0.277344 0.222656 -0.5 0.5 -0.5 z m 0 0"/><path d="m 5.5 4 h 1 c 0.277344 0 0.5 0.222656 0.5 0.5 v 10 c 0 0.277344 -0.222656 0.5 -0.5 0.5 h -1 c -0.277344 0 -0.5 -0.222656 -0.5 -0.5 v -10 c 0 -0.277344 0.222656 -0.5 0.5 -0.5 z m 0 0"/><path d="m 8.5 3 h 1 c 0.277344 0 0.5 0.222656 0.5 0.5 v 11 c 0 0.277344 -0.222656 0.5 -0.5 0.5 h -1 c -0.277344 0 -0.5 -0.222656 -0.5 -0.5 v -11 c 0 -0.277344 0.222656 -0.5 0.5 -0.5 z m 0 0"/><path d="m 10.707031 1.460938 l 0.964844 -0.261719 c 0.265625 -0.070313 0.539063 0.089843 0.613281 0.355469 l 3.363282 12.558593 c 0.070312 0.265625 -0.085938 0.539063 -0.351563 0.609375 l -0.96875 0.261719 c -0.265625 0.070313 -0.539063 -0.089844 -0.613281 -0.355469 l -3.363282 -12.554687 c -0.070312 -0.269531 0.085938 -0.542969 0.355469 -0.613281 z m 0 0"/></g></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
2
src/icons/paper-plane-symbolic.svg
Normal file
2
src/icons/paper-plane-symbolic.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 0 16 16" width="16px"><path d="m 15 8 l -14 -7 v 6 l 8 1 l -8 1 v 6 z m 0 0" fill="#222222"/></svg>
|
||||
|
After Width: | Height: | Size: 204 B |
@@ -47,7 +47,7 @@ class AlpacaApplication(Adw.Application):
|
||||
application_name='Alpaca',
|
||||
application_icon='com.jeffser.Alpaca',
|
||||
developer_name='Jeffry Samuel Eduarte Rojas',
|
||||
version='0.8.8',
|
||||
version='0.9.2',
|
||||
developers=['Jeffser https://jeffser.com'],
|
||||
designers=['Jeffser https://jeffser.com'],
|
||||
translator_credits='Alex K (Russian) https://github.com/alexkdeveloper\nJeffser (Spanish) https://jeffser.com\nDaimar Stein (Brazilian Portuguese) https://github.com/not-a-dev-stein\nLouis Chauvet-Villaret (French) https://github.com/loulou64490',
|
||||
|
||||
@@ -26,6 +26,15 @@ configure_file(
|
||||
install_mode: 'r-xr-xr-x'
|
||||
)
|
||||
|
||||
configure_file(
|
||||
input: 'alpaca_search_provider.in',
|
||||
output: 'alpaca_search_provider',
|
||||
configuration: conf,
|
||||
install: true,
|
||||
install_dir: get_option('bindir'),
|
||||
install_mode: 'r-xr-xr-x'
|
||||
)
|
||||
|
||||
alpaca_sources = [
|
||||
'__init__.py',
|
||||
'main.py',
|
||||
|
||||
@@ -2,6 +2,3 @@
|
||||
background-color: #343434;
|
||||
}
|
||||
|
||||
.message-text-view {
|
||||
background-color: #343434;
|
||||
}
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
.message-input {
|
||||
background-color: #EBEBEB;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.message-text-view {
|
||||
background-color: #EBEBEB;
|
||||
}
|
||||
.chat_row box.header {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
238
src/window.py
238
src/window.py
@@ -47,13 +47,16 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
||||
run_on_background = False
|
||||
remote_url = ""
|
||||
run_remote = False
|
||||
model_tweaks = {"temperature": 0.7, "seed": 0, "keep_alive": 5}
|
||||
local_models = []
|
||||
pulling_models = {}
|
||||
current_chat_elements = [] #Used for deleting
|
||||
chats = {"chats": {_("New Chat"): {"messages": []}}, "selected_chat": "New Chat"}
|
||||
attached_image = {"path": None, "base64": None}
|
||||
|
||||
#Elements
|
||||
temperature_spin = Gtk.Template.Child()
|
||||
seed_spin = Gtk.Template.Child()
|
||||
keep_alive_spin = Gtk.Template.Child()
|
||||
preferences_dialog = Gtk.Template.Child()
|
||||
shortcut_window : Gtk.ShortcutsWindow = Gtk.Template.Child()
|
||||
bot_message : Gtk.TextBuffer = None
|
||||
@@ -69,6 +72,7 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
||||
chat_window = Gtk.Template.Child()
|
||||
message_text_view = Gtk.Template.Child()
|
||||
send_button = Gtk.Template.Child()
|
||||
stop_button = Gtk.Template.Child()
|
||||
image_button = Gtk.Template.Child()
|
||||
file_filter_image = Gtk.Template.Child()
|
||||
file_filter_json = Gtk.Template.Child()
|
||||
@@ -82,8 +86,6 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
||||
|
||||
chat_list_box = Gtk.Template.Child()
|
||||
add_chat_button = Gtk.Template.Child()
|
||||
export_chat_button = Gtk.Template.Child()
|
||||
import_chat_button = Gtk.Template.Child()
|
||||
|
||||
loading_spinner = None
|
||||
|
||||
@@ -107,7 +109,8 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
||||
_("Chat cannot be cleared while receiving a message"),
|
||||
_("That tag is already being pulled"),
|
||||
_("That tag has been pulled already"),
|
||||
_("Code copied to the clipboard")
|
||||
_("Code copied to the clipboard"),
|
||||
_("Message copied to the clipboard")
|
||||
],
|
||||
"good": [
|
||||
_("Model deleted successfully"),
|
||||
@@ -130,59 +133,56 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
||||
else:
|
||||
self.image_button.set_sensitive(False)
|
||||
self.image_button.set_tooltip_text(_("Only available on selected models"))
|
||||
self.image_button.set_css_classes([])
|
||||
self.image_button.get_child().set_icon_name("image-x-generic-symbolic")
|
||||
self.image_button.set_css_classes(["circular"])
|
||||
self.attached_image = {"path": None, "base64": None}
|
||||
return False
|
||||
|
||||
@Gtk.Template.Callback()
|
||||
def stop_message(self, button=None):
|
||||
if self.loading_spinner: self.chat_container.remove(self.loading_spinner)
|
||||
if self.verify_if_image_can_be_used(): self.image_button.set_sensitive(True)
|
||||
self.image_button.set_css_classes(["circular"])
|
||||
self.attached_image = {"path": None, "base64": None}
|
||||
self.toggle_ui_sensitive(True)
|
||||
self.switch_send_stop_button()
|
||||
self.bot_message = None
|
||||
self.bot_message_box = None
|
||||
self.bot_message_view = None
|
||||
|
||||
@Gtk.Template.Callback()
|
||||
def send_message(self, button=None):
|
||||
if button and self.bot_message: #STOP BUTTON
|
||||
if self.loading_spinner: self.chat_container.remove(self.loading_spinner)
|
||||
if self.verify_if_image_can_be_used(): self.image_button.set_sensitive(True)
|
||||
self.image_button.set_css_classes([])
|
||||
self.image_button.get_child().set_icon_name("image-x-generic-symbolic")
|
||||
self.attached_image = {"path": None, "base64": None}
|
||||
self.toggle_ui_sensitive(True)
|
||||
self.send_button.set_css_classes(["suggested-action"])
|
||||
self.send_button.get_child().set_label("Send")
|
||||
self.send_button.get_child().set_icon_name("send-to-symbolic")
|
||||
self.bot_message = None
|
||||
self.bot_message_box = None
|
||||
self.bot_message_view = None
|
||||
else:
|
||||
if not self.message_text_view.get_buffer().get_text(self.message_text_view.get_buffer().get_start_iter(), self.message_text_view.get_buffer().get_end_iter(), False): return
|
||||
current_model = self.model_drop_down.get_selected_item()
|
||||
if current_model is None:
|
||||
self.show_toast("info", 0, self.main_overlay)
|
||||
return
|
||||
formated_datetime = datetime.now().strftime("%Y/%m/%d %H:%M")
|
||||
self.chats["chats"][self.chats["selected_chat"]]["messages"].append({
|
||||
"role": "user",
|
||||
"model": "User",
|
||||
"date": formated_datetime,
|
||||
"content": self.message_text_view.get_buffer().get_text(self.message_text_view.get_buffer().get_start_iter(), self.message_text_view.get_buffer().get_end_iter(), False)
|
||||
})
|
||||
data = {
|
||||
"model": current_model.get_string(),
|
||||
"messages": self.chats["chats"][self.chats["selected_chat"]]["messages"]
|
||||
}
|
||||
if self.verify_if_image_can_be_used() and self.attached_image["base64"] is not None:
|
||||
data["messages"][-1]["images"] = [self.attached_image["base64"]]
|
||||
self.send_button.set_css_classes(["destructive-action"])
|
||||
self.send_button.get_child().set_label("Stop")
|
||||
self.send_button.get_child().set_icon_name("edit-delete-symbolic")
|
||||
self.toggle_ui_sensitive(False)
|
||||
self.image_button.set_sensitive(False)
|
||||
if not self.message_text_view.get_buffer().get_text(self.message_text_view.get_buffer().get_start_iter(), self.message_text_view.get_buffer().get_end_iter(), False): return
|
||||
current_model = self.model_drop_down.get_selected_item()
|
||||
if current_model is None:
|
||||
self.show_toast("info", 0, self.main_overlay)
|
||||
return
|
||||
formated_datetime = datetime.now().strftime("%Y/%m/%d %H:%M")
|
||||
self.chats["chats"][self.chats["selected_chat"]]["messages"].append({
|
||||
"role": "user",
|
||||
"model": "User",
|
||||
"date": formated_datetime,
|
||||
"content": self.message_text_view.get_buffer().get_text(self.message_text_view.get_buffer().get_start_iter(), self.message_text_view.get_buffer().get_end_iter(), False)
|
||||
})
|
||||
data = {
|
||||
"model": current_model.get_string(),
|
||||
"messages": self.chats["chats"][self.chats["selected_chat"]]["messages"],
|
||||
"options": {"temperature": self.model_tweaks["temperature"], "seed": self.model_tweaks["seed"]},
|
||||
"keep_alive": f"{self.model_tweaks['keep_alive']}m"
|
||||
}
|
||||
if self.verify_if_image_can_be_used() and self.attached_image["base64"] is not None:
|
||||
data["messages"][-1]["images"] = [self.attached_image["base64"]]
|
||||
self.switch_send_stop_button()
|
||||
self.toggle_ui_sensitive(False)
|
||||
self.image_button.set_sensitive(False)
|
||||
|
||||
self.show_message(self.message_text_view.get_buffer().get_text(self.message_text_view.get_buffer().get_start_iter(), self.message_text_view.get_buffer().get_end_iter(), False), False, f"\n\n<small>{formated_datetime}</small>", self.attached_image["base64"])
|
||||
self.message_text_view.get_buffer().set_text("", 0)
|
||||
self.loading_spinner = Gtk.Spinner(spinning=True, margin_top=12, margin_bottom=12, hexpand=True)
|
||||
self.chat_container.append(self.loading_spinner)
|
||||
self.show_message("", True)
|
||||
self.show_message(self.message_text_view.get_buffer().get_text(self.message_text_view.get_buffer().get_start_iter(), self.message_text_view.get_buffer().get_end_iter(), False), False, f"\n\n<small>{formated_datetime}</small>", self.attached_image["base64"], id=len(self.chats["chats"][self.chats["selected_chat"]]["messages"])-1)
|
||||
self.message_text_view.get_buffer().set_text("", 0)
|
||||
self.loading_spinner = Gtk.Spinner(spinning=True, margin_top=12, margin_bottom=12, hexpand=True)
|
||||
self.chat_container.append(self.loading_spinner)
|
||||
self.show_message("", True, id=len(self.chats["chats"][self.chats["selected_chat"]]["messages"]))
|
||||
|
||||
thread = threading.Thread(target=self.run_message, args=(data['messages'], data['model']))
|
||||
thread.start()
|
||||
thread = threading.Thread(target=self.run_message, args=(data['messages'], data['model']))
|
||||
thread.start()
|
||||
|
||||
@Gtk.Template.Callback()
|
||||
def manage_models_button_activate(self, button=None):
|
||||
@@ -256,6 +256,16 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
||||
print("Closing app...")
|
||||
local_instance.stop()
|
||||
|
||||
@Gtk.Template.Callback()
|
||||
def model_spin_changed(self, spin):
|
||||
value = spin.get_value()
|
||||
if spin.get_name() != "temperature": value = round(value)
|
||||
else: value = round(value, 1)
|
||||
if self.model_tweaks[spin.get_name()] is not None and self.model_tweaks[spin.get_name()] != value:
|
||||
self.model_tweaks[spin.get_name()] = value
|
||||
print(self.model_tweaks)
|
||||
self.save_server_config()
|
||||
|
||||
def show_toast(self, message_type:str, message_id:int, overlay):
|
||||
if message_type not in self.toast_messages or message_id > len(self.toast_messages[message_type] or message_id < 0):
|
||||
message_type = "error"
|
||||
@@ -274,13 +284,20 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
||||
self.get_application().send_notification(None, notification)
|
||||
|
||||
def delete_message(self, message_element):
|
||||
message_index = self.current_chat_elements.index(message_element)
|
||||
del self.chats["chats"][self.chats["selected_chat"]]["messages"][message_index]
|
||||
self.chat_container.remove(message_element)
|
||||
del self.current_chat_elements[message_index]
|
||||
self.save_history()
|
||||
message_index = int(message_element.get_name())
|
||||
if message_index < len(self.chats["chats"][self.chats["selected_chat"]]["messages"]):
|
||||
self.chats["chats"][self.chats["selected_chat"]]["messages"][message_index] = None
|
||||
self.chat_container.remove(message_element)
|
||||
self.save_history()
|
||||
|
||||
def show_message(self, msg:str, bot:bool, footer:str=None, image_base64:str=None):
|
||||
def copy_message(self, message_element):
|
||||
message_index = int(message_element.get_name())
|
||||
print(message_index)
|
||||
clipboard = Gdk.Display().get_default().get_clipboard()
|
||||
clipboard.set(self.chats["chats"][self.chats["selected_chat"]]["messages"][message_index]["content"])
|
||||
self.show_toast("info", 5, self.main_overlay)
|
||||
|
||||
def show_message(self, msg:str, bot:bool, footer:str=None, image_base64:str=None, id:int=-1):
|
||||
message_text = Gtk.TextView(
|
||||
editable=False,
|
||||
focusable=True,
|
||||
@@ -299,10 +316,20 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
||||
delete_button = Gtk.Button(
|
||||
icon_name = "user-trash-symbolic",
|
||||
css_classes = ["flat", "circular", "delete-message-button"],
|
||||
valign="end",
|
||||
halign="end",
|
||||
|
||||
)
|
||||
copy_button = Gtk.Button(
|
||||
icon_name = "edit-copy-symbolic",
|
||||
css_classes = ["flat", "circular", "delete-message-button"],
|
||||
)
|
||||
|
||||
button_container = Gtk.Box(
|
||||
orientation=0,
|
||||
spacing=6,
|
||||
margin_end=6,
|
||||
margin_bottom=6,
|
||||
margin_end=6
|
||||
valign="end",
|
||||
halign="end"
|
||||
)
|
||||
|
||||
message_box = Gtk.Box(
|
||||
@@ -332,12 +359,15 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
||||
message_box.append(image)
|
||||
|
||||
message_box.append(message_text)
|
||||
self.current_chat_elements.append(Gtk.Overlay(css_classes=["message"]))
|
||||
self.current_chat_elements[-1].set_child(message_box)
|
||||
overlay = Gtk.Overlay(css_classes=["message"], name=id)
|
||||
overlay.set_child(message_box)
|
||||
|
||||
delete_button.connect("clicked", lambda button, element=self.current_chat_elements[-1]: self.delete_message(element))
|
||||
self.current_chat_elements[-1].add_overlay(delete_button)
|
||||
self.chat_container.append(self.current_chat_elements[-1])
|
||||
delete_button.connect("clicked", lambda button, element=overlay: self.delete_message(element))
|
||||
copy_button.connect("clicked", lambda button, element=overlay: self.copy_message(element))
|
||||
button_container.append(delete_button)
|
||||
button_container.append(copy_button)
|
||||
overlay.add_overlay(button_container)
|
||||
self.chat_container.append(overlay)
|
||||
|
||||
if bot:
|
||||
self.bot_message = message_buffer
|
||||
@@ -378,12 +408,15 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
||||
else:
|
||||
self.connection_error()
|
||||
|
||||
def save_server_config(self):
|
||||
with open(os.path.join(self.config_dir, "server.json"), "w+") as f:
|
||||
json.dump({'remote_url': self.remote_url, 'run_remote': self.run_remote, 'local_port': local_instance.port, 'run_on_background': self.run_on_background, 'model_tweaks': self.model_tweaks}, f)
|
||||
|
||||
def verify_connection(self):
|
||||
response = connection_handler.simple_get(connection_handler.url)
|
||||
if response['status'] == 'ok':
|
||||
if "Ollama is running" in response['text']:
|
||||
with open(os.path.join(self.config_dir, "server.json"), "w+") as f:
|
||||
json.dump({'remote_url': self.remote_url, 'run_remote': self.run_remote, 'local_port': local_instance.port, 'run_on_background': self.run_on_background}, f)
|
||||
self.save_server_config()
|
||||
self.update_list_local_models()
|
||||
return True
|
||||
return False
|
||||
@@ -429,7 +462,7 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
||||
|
||||
footer = None
|
||||
if part['text'].split("\n")[-1] == parts[-1]['text'].split("\n")[-1]:
|
||||
footer = "\n\n<small>" + part['text'].split('\n')[-1] + "</small>"
|
||||
footer = "\n<small>" + part['text'].split('\n')[-1] + "</small>"
|
||||
part['text'] = '\n'.join(part['text'].split("\n")[:-1])
|
||||
|
||||
part['text'] = part['text'].replace("\n* ", "\n• ")
|
||||
@@ -527,22 +560,24 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
||||
self.chats["chats"][self.chats["selected_chat"]]["messages"][-1]['content'] += data['message']['content']
|
||||
|
||||
def toggle_ui_sensitive(self, status):
|
||||
for element in [self.chat_list_box, self.export_chat_button, self.import_chat_button, self.add_chat_button]:
|
||||
for element in [self.chat_list_box, self.add_chat_button]:
|
||||
element.set_sensitive(status)
|
||||
|
||||
def switch_send_stop_button(self):
|
||||
self.stop_button.set_visible(self.send_button.get_visible())
|
||||
self.send_button.set_visible(not self.send_button.get_visible())
|
||||
|
||||
def run_message(self, messages, model):
|
||||
response = connection_handler.stream_post(f"{connection_handler.url}/api/chat", data=json.dumps({"model": model, "messages": messages}), callback=self.update_bot_message)
|
||||
GLib.idle_add(self.add_code_blocks)
|
||||
GLib.idle_add(self.send_button.set_css_classes, ["suggested-action"])
|
||||
GLib.idle_add(self.send_button.get_child().set_label, "Send")
|
||||
GLib.idle_add(self.send_button.get_child().set_icon_name, "send-to-symbolic")
|
||||
GLib.idle_add(self.switch_send_stop_button)
|
||||
GLib.idle_add(self.toggle_ui_sensitive, True)
|
||||
if self.verify_if_image_can_be_used(): GLib.idle_add(self.image_button.set_sensitive, True)
|
||||
GLib.idle_add(self.image_button.set_css_classes, [])
|
||||
GLib.idle_add(self.image_button.get_child().set_icon_name, "image-x-generic-symbolic")
|
||||
GLib.idle_add(self.image_button.set_css_classes, ["circular"])
|
||||
self.attached_image = {"path": None, "base64": None}
|
||||
if response['status'] == 'error':
|
||||
GLib.idle_add(self.connection_error)
|
||||
print(response)
|
||||
|
||||
def pull_model_update(self, data, model_name):
|
||||
if model_name in list(self.pulling_models.keys()):
|
||||
@@ -574,10 +609,10 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
||||
|
||||
def pull_model(self, model):
|
||||
if model in list(self.pulling_models.keys()):
|
||||
self.show_toast("info", 3, self.manage_models_overlay)
|
||||
self.show_toast("info", 2, self.manage_models_overlay)
|
||||
return
|
||||
if model in self.local_models:
|
||||
self.show_toast("info", 4, self.manage_models_overlay)
|
||||
self.show_toast("info", 3, self.manage_models_overlay)
|
||||
return
|
||||
self.pulling_model_list_box.set_visible(True)
|
||||
model_row = Adw.ActionRow(
|
||||
@@ -615,7 +650,7 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
||||
subtitle = "Image recognition" if model_info["image"] else None
|
||||
)
|
||||
link_button = Gtk.Button(
|
||||
icon_name = "web-browser-symbolic",
|
||||
icon_name = "globe-symbolic",
|
||||
vexpand = False,
|
||||
valign = 3,
|
||||
css_classes = ["success"]
|
||||
@@ -638,13 +673,14 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
||||
|
||||
def load_history_into_chat(self):
|
||||
for widget in list(self.chat_container): self.chat_container.remove(widget)
|
||||
for message in self.chats['chats'][self.chats["selected_chat"]]['messages']:
|
||||
if message['role'] == 'user':
|
||||
self.show_message(message['content'], False, f"\n\n<small>{message['date']}</small>", message['images'][0] if 'images' in message and len(message['images']) > 0 else None)
|
||||
else:
|
||||
self.show_message(message['content'], True, f"\n\n<small>{message['model']}\t|\t{message['date']}</small>")
|
||||
self.add_code_blocks()
|
||||
self.bot_message = None
|
||||
for i, message in enumerate(self.chats['chats'][self.chats["selected_chat"]]['messages']):
|
||||
if message:
|
||||
if message['role'] == 'user':
|
||||
self.show_message(message['content'], False, f"\n\n<small>{message['date']}</small>", message['images'][0] if 'images' in message and len(message['images']) > 0 else None, id=i)
|
||||
else:
|
||||
self.show_message(message['content'], True, f"\n\n<small>{message['model']}\t|\t{message['date']}</small>", id=i)
|
||||
self.add_code_blocks()
|
||||
self.bot_message = None
|
||||
|
||||
def load_history(self):
|
||||
if os.path.exists(os.path.join(self.config_dir, "chats.json")):
|
||||
@@ -653,6 +689,9 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
||||
self.chats = json.load(f)
|
||||
if "selected_chat" not in self.chats or self.chats["selected_chat"] not in self.chats["chats"]: self.chats["selected_chat"] = list(self.chats["chats"].keys())[0]
|
||||
if len(list(self.chats["chats"].keys())) == 0: self.chats["chats"][_("New Chat")] = {"messages": []}
|
||||
for chat_name, content in self.chats['chats'].items():
|
||||
for i, content in enumerate(content['messages']):
|
||||
if not content: del self.chats['chats'][chat_name]['messages'][i]
|
||||
except Exception as e:
|
||||
self.chats = {"chats": {_("New Chat"): {"messages": []}}, "selected_chat": _("New Chat")}
|
||||
self.load_history_into_chat()
|
||||
@@ -677,14 +716,12 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
||||
image_data = output.getvalue()
|
||||
self.attached_image["base64"] = base64.b64encode(image_data).decode("utf-8")
|
||||
|
||||
self.image_button.set_css_classes(["destructive-action"])
|
||||
self.image_button.get_child().set_icon_name("edit-delete-symbolic")
|
||||
self.image_button.set_css_classes(["destructive-action", "circular"])
|
||||
except Exception as e:
|
||||
self.show_toast("error", 5, self.main_overlay)
|
||||
|
||||
def remove_image(self):
|
||||
self.image_button.set_css_classes([])
|
||||
self.image_button.get_child().set_icon_name("image-x-generic-symbolic")
|
||||
self.image_button.set_css_classes(["circular"])
|
||||
self.attached_image = {"path": None, "base64": None}
|
||||
|
||||
def generate_numbered_chat_name(self, chat_name) -> str:
|
||||
@@ -705,13 +742,14 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
||||
self.save_history()
|
||||
self.update_chat_list()
|
||||
if len(self.chats['chats'])==0:
|
||||
self.chat_new()
|
||||
self.new_chat()
|
||||
|
||||
def rename_chat(self, old_chat_name, new_chat_name, label_element):
|
||||
new_chat_name = self.generate_numbered_chat_name(new_chat_name)
|
||||
self.chats["chats"][new_chat_name] = self.chats["chats"][old_chat_name]
|
||||
del self.chats["chats"][old_chat_name]
|
||||
label_element.set_label(new_chat_name)
|
||||
label_element.get_parent().set_name(new_chat_name)
|
||||
self.save_history()
|
||||
|
||||
def new_chat(self):
|
||||
@@ -746,8 +784,13 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
||||
chat_label = Gtk.Label(
|
||||
label=chat_name,
|
||||
hexpand=True,
|
||||
halign=1
|
||||
halign=0,
|
||||
wrap=True,
|
||||
ellipsize=3,
|
||||
wrap_mode=2,
|
||||
xalign=0
|
||||
)
|
||||
|
||||
button_delete = Gtk.Button(
|
||||
icon_name = "user-trash-symbolic",
|
||||
vexpand = False,
|
||||
@@ -761,7 +804,8 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
||||
valign = 3,
|
||||
css_classes = ["accent", "flat"]
|
||||
)
|
||||
button_rename.connect("clicked", lambda button, chat_name=chat_name, label_element=chat_label: dialogs.rename_chat(self, chat_name, label_element))
|
||||
chat_content.set_name(chat_name)
|
||||
button_rename.connect("clicked", lambda button, label_element=chat_label: dialogs.rename_chat(self, label_element))
|
||||
chat_content.append(chat_label)
|
||||
chat_content.append(button_delete)
|
||||
chat_content.append(button_rename)
|
||||
@@ -857,13 +901,13 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
||||
GtkSource.init()
|
||||
self.set_help_overlay(self.shortcut_window)
|
||||
self.get_application().set_accels_for_action("win.show-help-overlay", ['<primary>slash'])
|
||||
self.get_application().create_action('new_chat', lambda *_: self.new_chat(), ['<primary>n'])
|
||||
self.get_application().create_action('clear', lambda *_: dialogs.clear_chat(self), ['<primary>e'])
|
||||
self.get_application().create_action('send', lambda *_: self.send_message(self), ['Return'])
|
||||
self.get_application().create_action('export_current_chat', lambda *_: self.export_current_chat())
|
||||
self.get_application().create_action('import_chat', lambda *_: self.import_chat())
|
||||
self.add_chat_button.connect("clicked", lambda button : self.new_chat())
|
||||
|
||||
self.export_chat_button.connect("clicked", lambda button : self.export_current_chat())
|
||||
self.import_chat_button.connect("clicked", lambda button : self.import_chat())
|
||||
|
||||
self.remote_connection_entry.connect("entry-activated", lambda entry : entry.set_css_classes([]))
|
||||
self.remote_connection_switch.connect("notify", lambda pspec, user_data : self.connection_switched())
|
||||
self.background_switch.connect("notify", lambda pspec, user_data : self.switch_run_on_background())
|
||||
@@ -874,6 +918,12 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
||||
local_instance.port = data['local_port']
|
||||
self.remote_url = data['remote_url']
|
||||
self.run_on_background = data['run_on_background']
|
||||
#Model Tweaks
|
||||
if "model_tweaks" in data: self.model_tweaks = data['model_tweaks']
|
||||
self.temperature_spin.set_value(self.model_tweaks['temperature'])
|
||||
self.seed_spin.set_value(self.model_tweaks['seed'])
|
||||
self.keep_alive_spin.set_value(self.model_tweaks['keep_alive'])
|
||||
|
||||
self.background_switch.set_active(self.run_on_background)
|
||||
self.set_hide_on_close(self.run_on_background)
|
||||
self.remote_connection_entry.set_text(self.remote_url)
|
||||
@@ -888,7 +938,7 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
||||
local_instance.start()
|
||||
connection_handler.url = f"http://127.0.0.1:{local_instance.port}"
|
||||
self.welcome_dialog.present(self)
|
||||
if self.verify_connection() is False and self.run_remote == False: self.connection_error()
|
||||
if self.verify_connection() is False: self.connection_error()
|
||||
self.update_list_available_models()
|
||||
self.load_history()
|
||||
self.update_chat_list()
|
||||
|
||||
173
src/window.ui
173
src/window.ui
@@ -44,21 +44,11 @@
|
||||
</object>
|
||||
</child>
|
||||
<child type="end">
|
||||
<object class="GtkButton" id="import_chat_button">
|
||||
<property name="tooltip-text" translatable="yes">Import chat</property>
|
||||
<property name="icon-name">document-open-symbolic</property>
|
||||
<style>
|
||||
<class name="flat"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
<child type="end">
|
||||
<object class="GtkButton" id="export_chat_button">
|
||||
<property name="tooltip-text" translatable="yes">Export chat</property>
|
||||
<property name="icon-name">folder-download-symbolic</property>
|
||||
<style>
|
||||
<class name="flat"/>
|
||||
</style>
|
||||
<object class="GtkMenuButton" id="chats_menu_button">
|
||||
<property name="direction">1</property>
|
||||
<property name="halign">3</property>
|
||||
<property name="menu-model">chats_button_menu</property>
|
||||
<property name="icon-name">view-more-symbolic</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
@@ -113,7 +103,7 @@
|
||||
<property name="tooltip-text" translatable="yes">Manage models</property>
|
||||
<child>
|
||||
<object class="AdwButtonContent">
|
||||
<property name="icon-name">package-x-generic-symbolic</property>
|
||||
<property name="icon-name">library-symbolic</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
@@ -180,62 +170,79 @@
|
||||
<property name="margin-bottom">12</property>
|
||||
<property name="margin-start">12</property>
|
||||
<property name="margin-end">12</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="image_button">
|
||||
<signal name="clicked" handler="open_image"/>
|
||||
<property name="vexpand">false</property>
|
||||
<property name="valign">3</property>
|
||||
<property name="sensitive">false</property>
|
||||
<property name="tooltip-text" translatable="yes">Only available on selected models</property>
|
||||
<child>
|
||||
<object class="AdwButtonContent">
|
||||
<property name="icon-name">image-x-generic-symbolic</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<style>
|
||||
<class name="card"/>
|
||||
<class name="message-input"/>
|
||||
</style>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow">
|
||||
<property name="margin-start">12</property>
|
||||
<property name="margin-end">12</property>
|
||||
|
||||
<style>
|
||||
<class name="message-input"/>
|
||||
<class name="undershoot-bottom"/>
|
||||
<class name="undershoot-top"/>
|
||||
</style>
|
||||
<child>
|
||||
<object class="GtkTextView" id="message_text_view">
|
||||
<property name="wrap-mode">word</property>
|
||||
<property name="top-margin">6</property>
|
||||
<property name="bottom-margin">6</property>
|
||||
<property name="margin-end">12</property>
|
||||
<property name="hexpand">true</property>
|
||||
<style>
|
||||
<class name="message-text-view"/>
|
||||
<class name="message-input"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="orientation">1</property>
|
||||
<property name="spacing">12</property>
|
||||
<object class="GtkButton" id="send_button">
|
||||
<signal name="clicked" handler="send_message"/>
|
||||
<property name="vexpand">false</property>
|
||||
<property name="valign">3</property>
|
||||
<style>
|
||||
<class name="suggested-action"/>
|
||||
<class name="circular"/>
|
||||
</style>
|
||||
<child>
|
||||
<object class="GtkButton" id="send_button">
|
||||
<signal name="clicked" handler="send_message"/>
|
||||
<style>
|
||||
<class name="suggested-action"/>
|
||||
</style>
|
||||
<child>
|
||||
<object class="AdwButtonContent">
|
||||
<property name="label" translatable="yes">Send</property>
|
||||
<property name="icon-name">send-to-symbolic</property>
|
||||
</object>
|
||||
</child>
|
||||
<object class="AdwButtonContent">
|
||||
<property name="icon-name">paper-plane-symbolic</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="stop_button">
|
||||
<signal name="clicked" handler="stop_message"/>
|
||||
<property name="vexpand">false</property>
|
||||
<property name="valign">3</property>
|
||||
<property name="visible">false</property>
|
||||
<style>
|
||||
<class name="destructive-action"/>
|
||||
<class name="circular"/>
|
||||
</style>
|
||||
<child>
|
||||
<object class="GtkButton" id="image_button">
|
||||
<signal name="clicked" handler="open_image"/>
|
||||
<property name="sensitive">false</property>
|
||||
<property name="tooltip-text" translatable="yes">Only available on selected models</property>
|
||||
<child>
|
||||
<object class="AdwButtonContent">
|
||||
<property name="label" translatable="yes">Image</property>
|
||||
<property name="icon-name">image-x-generic-symbolic</property>
|
||||
</object>
|
||||
</child>
|
||||
<object class="AdwButtonContent">
|
||||
<property name="icon-name">media-playback-stop-symbolic</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
@@ -258,9 +265,9 @@
|
||||
<property name="height-request">600</property>
|
||||
<property name="title" translatable="yes">Preferences</property>
|
||||
<child>
|
||||
<object class="AdwPreferencesPage" id="connection_page">
|
||||
<object class="AdwPreferencesPage" id="general_page">
|
||||
<property name="title" translatable="yes">General</property>
|
||||
<property name="icon-name">insert-link-symbolic</property>
|
||||
<property name="icon-name">preferences-system-symbolic</property>
|
||||
<child>
|
||||
<object class="AdwPreferencesGroup">
|
||||
<property name="title" translatable="yes">Remote Connection</property>
|
||||
@@ -292,6 +299,64 @@
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="AdwPreferencesPage" id="model_page">
|
||||
<property name="title" translatable="yes">Advanced Model Settings</property>
|
||||
<property name="icon-name">preferences-other-symbolic</property>
|
||||
<child>
|
||||
<object class="AdwPreferencesGroup">
|
||||
<property name="title" translatable="yes">Model Tweaks</property>
|
||||
<property name="description" translatable="yes">Manage the behavior of the AI models</property>
|
||||
<child>
|
||||
<object class="AdwSpinRow" id="temperature_spin">
|
||||
<signal name="changed" handler="model_spin_changed"/>
|
||||
<property name="name">temperature</property>
|
||||
<property name="title" translatable="yes">Temperature</property>
|
||||
<property name="subtitle" translatable="yes">The temperature of the model. Increasing the temperature will make the model answer more creatively. (Default: 0.8)</property>
|
||||
<property name="digits">1</property>
|
||||
<property name="adjustment">
|
||||
<object class="GtkAdjustment">
|
||||
<property name="lower">0</property>
|
||||
<property name="upper">1</property>
|
||||
<property name="step-increment">0.1</property>
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="AdwSpinRow" id="seed_spin">
|
||||
<signal name="changed" handler="model_spin_changed"/>
|
||||
<property name="name">seed</property>
|
||||
<property name="title" translatable="yes">Seed</property>
|
||||
<property name="subtitle" translatable="yes">Sets the random number seed to use for generation. Setting this to a specific number will make the model generate the same text for the same prompt. (Default: 0 (random))</property>
|
||||
<property name="adjustment">
|
||||
<object class="GtkAdjustment">
|
||||
<property name="lower">0</property>
|
||||
<property name="upper">999999</property>
|
||||
<property name="step-increment">1</property>
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="AdwSpinRow" id="keep_alive_spin">
|
||||
<signal name="changed" handler="model_spin_changed"/>
|
||||
<property name="name">keep_alive</property>
|
||||
<property name="title" translatable="yes">Keep Alive Time</property>
|
||||
<property name="subtitle" translatable="yes">Controls how long the model will stay loaded into memory following the request in minutes (default: 5)</property>
|
||||
<property name="adjustment">
|
||||
<object class="GtkAdjustment">
|
||||
<property name="lower">-1</property>
|
||||
<property name="upper">999999</property>
|
||||
<property name="step-increment">1</property>
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
|
||||
<object class="AdwDialog" id="manage_models_dialog">
|
||||
@@ -557,10 +622,15 @@
|
||||
</item>
|
||||
</section>
|
||||
</menu>
|
||||
<menu id="chat_context_menu">
|
||||
<menu id="chats_button_menu">
|
||||
<section>
|
||||
<item>
|
||||
<attribute name="label" translatable="yes">Remove</attribute>
|
||||
<attribute name="label" translatable="yes">Export current chat</attribute>
|
||||
<attribute name="action">app.export_current_chat</attribute>
|
||||
</item>
|
||||
<item>
|
||||
<attribute name="label" translatable="yes">Import chat</attribute>
|
||||
<attribute name="action">app.import_chat</attribute>
|
||||
</item>
|
||||
</section>
|
||||
</menu>
|
||||
@@ -605,6 +675,12 @@
|
||||
<property name="title" translatable="yes">Preferences</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkShortcutsShortcut">
|
||||
<property name="accelerator"><ctrl>N</property>
|
||||
<property name="title" translatable="yes">New Chat</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkShortcutsShortcut">
|
||||
<property name="accelerator"><ctrl>slash</property>
|
||||
@@ -646,4 +722,3 @@
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user