35 Commits
0.8.8 ... 0.9.2

Author SHA1 Message Date
jeffser
4b17601baf Preparing for 0.9.2 2024-05-30 10:49:53 -06:00
jeffser
c994307954 Fixed model tweaks loading 2024-05-30 09:53:17 -06:00
jeffser
a13ffd22f1 Merge branch 'main' of github.com-jeffser:Jeffser/Alpaca 2024-05-30 09:33:13 -06:00
jeffser
7b8f40e117 Initial support for Gnome Search (doesn't work yet) 2024-05-30 09:33:06 -06:00
Louis Chauvet-Villaret
add4dad8c0 French translation update (#72)
Hop, I translate all, and I harmonize the changelogs with 3 categories : added, changed, fixed (but in French you know)
2024-05-30 09:31:21 -06:00
Surjyadip Sen
7faa805176 Lowered the lower limit of keep_alive to -1 (#69) 2024-05-30 09:31:06 -06:00
jeffser
91651b918e I dind't mean to delete that 2024-05-30 09:29:37 -06:00
jeffser
725e0930fe Fixed app crashing because of model tweaks 2024-05-30 09:27:56 -06:00
jeffser
93ba903fc8 Added copy button 2024-05-29 21:59:47 -06:00
jeffser
56064831d3 Updated Spanish translation 2024-05-29 16:19:37 -06:00
jeffser
4bdb813b64 Preparing for 0.9.1 2024-05-29 16:09:57 -06:00
jeffser
ad69887e4a Another icon for manage models 2024-05-29 16:00:59 -06:00
jeffser
c8f148d1f8 Changed manage models button icon 2024-05-29 15:59:27 -06:00
jeffser
365e39a20a New Icons and fixed delete message button 2024-05-29 15:58:09 -06:00
jeffser
48c2fd2e81 New icon for send button 2024-05-29 15:22:42 -06:00
jeffser
3a5dc568c5 Changed export/import buttons for a secundary menu button 2024-05-29 15:00:19 -06:00
jeffser
a180f7a46c Fixed image button 2024-05-29 14:34:59 -06:00
jeffser
07a12ba41f Fixed send/stop buttons 2024-05-29 14:32:57 -06:00
jeffser
dd5351a3de Added Model Tweaks 2024-05-29 14:24:30 -06:00
jeffser
ae48a17301 Check if remote instance is connected at start when the toggle is on 2024-05-29 12:04:05 -06:00
jeffser
9e19698788 Preparing for 0.9.0 (again) 2024-05-29 00:18:42 -06:00
jeffser
323725df33 Fixed: Can't rename the same chat multiple times 2024-05-29 00:17:41 -06:00
jeffser
7c40420048 Preparing for 0.9.0 2024-05-29 00:10:04 -06:00
jeffser
fac51aefb9 Spanish update 2024-05-29 00:06:08 -06:00
Louis Chauvet-Villaret
8f1fbc511a French translation update (#54)
I see my work in the app and... wasn't so good, so here are some modifications 😄 

After all, I switch back on the original name Alpaca because Alpaga won't be nicely integrated (desktop icon name, title name, and it's just not a good idea)

There is just a small problem, the 'send' button can't be translated. Can you add it ?
2024-05-29 00:02:53 -06:00
jeffser
f0bf112faf Starting model tweaks page 2024-05-29 00:00:56 -06:00
jeffser
b2a15b92cd Fixed error message when pulling a model that's already pulled 2024-05-28 22:59:32 -06:00
jeffser
9b71bbea2e Fixed background color of message entry 2024-05-28 22:57:42 -06:00
jeffser
2645ab3732 Added new shortcut for creating a chat 2024-05-28 22:45:26 -06:00
jeffser
8672c4ac40 fix 2024-05-28 22:42:03 -06:00
jeffser
b8bfd54515 Added chat name wrap 2024-05-28 22:37:06 -06:00
jeffser
a29d245381 Merge branch 'main' of github.com-jeffser:Jeffser/Alpaca 2024-05-28 22:26:48 -06:00
jeffser
f57427e2c4 Fixed: When deleting the last chat it didn't make a new one 2024-05-28 22:26:36 -06:00
Jeffry Samuel
3631f06075 Update FUNDING.yml 2024-05-28 14:14:47 -06:00
Jeffry Samuel
67a66f85da Update issue templates 2024-05-28 11:50:23 -06:00
28 changed files with 5065 additions and 1121 deletions

1
.github/FUNDING.yml vendored
View File

@@ -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
View 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.

View 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.

View File

@@ -0,0 +1,6 @@
[Shell Search Provider]
DesktopId=@appid@.desktop
BusName=@appid@.SearchProvider
ObjectPath=/com/jeffser/Alpaca/SearchProvider
Version=2

View File

@@ -0,0 +1,3 @@
[D-BUS Service]
Name=@appid@.SearchProvider
Exec=@libexecdir@/alpaca_search_provider

View File

@@ -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>

View File

@@ -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')

View File

@@ -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')

File diff suppressed because it is too large Load Diff

530
po/es.po

File diff suppressed because it is too large Load Diff

1093
po/es.po~ Normal file

File diff suppressed because it is too large Load Diff

850
po/fr.po

File diff suppressed because it is too large Load Diff

951
po/fr.po~ Normal file
View 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"

File diff suppressed because it is too large Load Diff

1074
po/pt_BR.po~ Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -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>

View 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")

View File

@@ -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"),

View 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

View 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

View 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

View 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

View File

@@ -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',

View File

@@ -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',

View File

@@ -2,6 +2,3 @@
background-color: #343434;
}
.message-text-view {
background-color: #343434;
}

View File

@@ -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;
}

View File

@@ -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()

View File

@@ -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">&lt;ctrl&gt;N</property>
<property name="title" translatable="yes">New Chat</property>
</object>
</child>
<child>
<object class="GtkShortcutsShortcut">
<property name="accelerator">&lt;ctrl&gt;slash</property>
@@ -646,4 +722,3 @@
</child>
</object>
</interface>