82 Commits
0.5.1 ... 0.8.1

Author SHA1 Message Date
jeffser
6e330448e6 Preparing for 0.8.1 2024-05-24 18:56:36 -06:00
jeffser
31802da0e3 Added compatibility for PNG 2024-05-24 18:47:23 -06:00
jeffser
9fae5b2cf2 Preparing for 0.8.0 2024-05-24 18:27:00 -06:00
jeffser
cde62c3511 Changed screenshot description 2024-05-24 18:18:44 -06:00
jeffser
2b6256ff25 Changed tooltip text for image button 2024-05-24 15:49:49 -06:00
jeffser
0c9fd6685b Added 'Image recognition' text to available models, also updated list of models 2024-05-24 15:46:02 -06:00
jeffser
999f7a7151 Replaced some variable names and removed an unsused overlay 2024-05-24 12:43:25 -06:00
jeffser
a1397ef09e Merge branch 'main' of github.com-jeffser:Jeffser/Alpaca 2024-05-24 12:27:38 -06:00
jeffser
a43aac0c66 Fixed shortcuts on the UI 2024-05-24 12:27:29 -06:00
Jeffry Samuel
06747abcb9 Update README.md 2024-05-23 21:11:26 -06:00
jeffser
8bce45cf71 Added credit to Daimaar Stein for the translation to Brazilian Portuguese 2024-05-23 21:00:53 -06:00
jeffser
084654582a Added Brazilian Portuguese 2024-05-23 20:59:03 -06:00
jeffser
29d5023cf4 Merge branch 'main' of github.com-jeffser:Jeffser/Alpaca 2024-05-23 20:58:30 -06:00
jeffser
a0c50c4b50 Deleted unnecesary files 2024-05-23 20:58:24 -06:00
Jeffry Samuel
45a8d23347 Update update_translation_files.sh 2024-05-23 20:57:29 -06:00
Daimar Stein
6d87f4c52b Add Brazilian Portuguese translation (#38)
* Create pt_BR.po

* Update README.md
2024-05-23 20:56:12 -06:00
jeffser
8352d016cc Added metadata so Flathub and Gnome Software know that it's compatible with mobile 2024-05-23 19:47:50 -06:00
jeffser
2dd9623ea9 Merge branch 'main' of github.com-jeffser:Jeffser/Alpaca 2024-05-23 19:40:44 -06:00
jeffser
9e6fba0e7f New description 2024-05-23 19:40:35 -06:00
Jeffry Samuel
e89ef2aa37 Update README.md 2024-05-23 19:33:11 -06:00
jeffser
8ed8c6d04b removed unnecesary comment 2024-05-23 19:26:26 -06:00
jeffser
913a7a0b39 Just enter now sends the message 2024-05-23 19:25:25 -06:00
jeffser
8dabb27689 Merge branch 'main' of github.com-jeffser:Jeffser/Alpaca 2024-05-23 19:07:32 -06:00
jeffser
db0daa1f41 Delete message feature 2024-05-23 19:06:50 -06:00
Jeffry Samuel
748406b2c0 Update README.md 2024-05-23 18:03:56 -06:00
jeffser
46b43ca670 Added more custom CSS 2024-05-23 17:48:40 -06:00
Nokse22
471159417c Sidebar, used AdwToolbarView and added Headerbar (#35)
* added adwtoolbarview in the sidebar

* removed commented code
2024-05-23 17:43:04 -06:00
Nokse22
5b92186930 Improved chat view and message bar (#33)
* added style.css and style-dark.css

* keep message text view sensitive at all times

* improved chat view ui and message view

* added clamps for chat container and message
2024-05-23 17:41:52 -06:00
Jeffry Samuel
cde081acb5 Added more people to the thank you section 2024-05-23 15:44:41 -06:00
Jeffry Samuel
4af0f718bc Thank you section 2024-05-23 14:19:13 -06:00
jeffser
dac4c36caa Preparing for 0.7.1 2024-05-23 12:02:18 -06:00
jeffser
96bdf360df Better sidebar 2024-05-23 12:01:25 -06:00
jeffser
54fbe3b505 Preparing for 0.7.1 2024-05-23 11:53:06 -06:00
jeffser
3f76dfdbe9 Changed CSS so that chat controls only appearing while hovering 2024-05-23 09:43:16 -06:00
jeffser
763cb98b33 Quick fix to remote connection 2024-05-23 09:41:43 -06:00
jeffser
eb2379585a Removed reference to CSS 2024-05-23 09:40:29 -06:00
jeffser
541b5e032f Replaced CSS file for string 2024-05-23 09:38:03 -06:00
jeffser
43c24c9150 Minor spelling mistake :( 2024-05-22 23:54:50 -06:00
jeffser
ada2893069 Quick fix on 'connection_error' dialog 2024-05-22 23:43:57 -06:00
jeffser
9707bdc2bb Added Mobile as an available form factor 2024-05-22 23:29:38 -06:00
Jeffry Samuel
157c43e969 Better README 2024-05-22 21:51:31 -06:00
jeffser
1a04082564 Better handling of remote connection lost 2024-05-22 21:10:16 -06:00
jeffser
f2e6f1aac8 Merge branch 'main' of github.com-jeffser:Jeffser/Alpaca 2024-05-22 20:28:32 -06:00
jeffser
672a28c620 Last minute fix 2024-05-22 20:28:25 -06:00
Jeffry Samuel
a7c8170ba4 Thanks 2024-05-22 20:06:14 -06:00
jeffser
3ee402b297 Preparing for 0.7.0 2024-05-22 19:54:02 -06:00
jeffser
9080e84089 Autohide chat control buttons 2024-05-22 19:48:06 -06:00
jeffser
e8f4f8aa89 Preparing to add delete button to messages 2024-05-22 19:43:33 -06:00
jeffser
d8138a80de User can now delete last chat, this would create a 'New Chat' chat 2024-05-22 19:21:55 -06:00
jeffser
208e24b17e Added instance status messages (terminal) 2024-05-22 19:13:13 -06:00
jeffser
77904b3dd2 Fixed, remote connection switch 2024-05-22 19:08:17 -06:00
jeffser
831e47fe15 Merge branch 'main' of github.com-jeffser:Jeffser/Alpaca 2024-05-22 18:01:22 -06:00
jeffser
21f0c9dafd New design for chat sidebar thing 2024-05-22 18:01:16 -06:00
Alex K
83ea27f736 Add files via upload (#19) 2024-05-22 13:56:29 -06:00
jeffser
a62d193edf Scroll to bottom when message is sent (kinda) 2024-05-22 13:22:46 -06:00
jeffser
ef280c8836 Increased margin (padding) on message field 2024-05-22 12:05:48 -06:00
jeffser
7bbbe54d6c Merge branch 'main' of github.com-jeffser:Jeffser/Alpaca 2024-05-22 12:04:16 -06:00
jeffser
0c6d34bd30 Removed background from chat window 2024-05-22 11:57:24 -06:00
Jeffry Samuel
d7987fa4a5 Update README.md 2024-05-22 00:03:42 -06:00
jeffser
f7a777f26c Preparing for 0.6.0 pt2 2024-05-21 23:27:14 -06:00
jeffser
e507ef891b Preparing for 0.6.0 2024-05-21 23:26:22 -06:00
jeffser
e488b9bddc Update 2024-05-21 23:16:05 -06:00
jeffser
c9c990df58 Added import/export and added 'run on background' option on preferences 2024-05-21 23:15:32 -06:00
jeffser
d4a7576432 Small CSS change and 'wait until Ollama loads to show Alpaca' fixed 2024-05-21 21:18:30 -06:00
jeffser
fd86bc828d Fix error messages 2024-05-21 18:52:56 -06:00
jeffser
766eeff097 Added new info messages 2024-05-21 18:08:13 -06:00
jeffser
69567d1c6c Integrated Olllama instance inside Alpaca 2024-05-21 17:58:51 -06:00
jeffser
6d22182e03 Initial support for sandbox Ollama 2024-05-21 15:36:24 -06:00
jeffser
6fc30bf2a7 Merge branch 'main' of github.com-jeffser:Jeffser/Alpaca 2024-05-20 19:20:40 -06:00
jeffser
b16e2aa7f7 Preparing for 0.5.5 2024-05-20 19:20:29 -06:00
Jeffry Samuel
b64b96461c maybe 2024-05-20 19:02:51 -06:00
jeffser
c7f8c560a1 Better UI for 'Manage Models' dialog 2024-05-20 17:36:22 -06:00
jeffser
26bc4fe37f Replaced model description with a button to open Ollama's website for the model 2024-05-20 16:29:48 -06:00
jeffser
ce427feee4 Added myself to the credits as the spanish translator 2024-05-20 16:06:04 -06:00
jeffser
9c1f239f53 Better UI on the sidebar 2024-05-20 15:46:25 -06:00
jeffser
478c699aff Using XDG properly to get config folder '.var/app/com.jeffser.Alpaca/config' 2024-05-20 15:25:33 -06:00
jeffser
5eef0887eb Better summary 2024-05-20 15:19:07 -06:00
jeffser
3438c1716e Merge branch 'main' of github.com-jeffser:Jeffser/Alpaca 2024-05-20 14:46:29 -06:00
jeffser
113602dea7 Updated README 2024-05-20 14:46:23 -06:00
Alex K
ac93581045 Update Russian translation (#16)
* Add files via upload

* Add files via upload

* Update ru.po

* Add files via upload

* Update ru.po

* Add files via upload

---------

Co-authored-by: Jeffry Samuel <69224322+Jeffser@users.noreply.github.com>
2024-05-20 13:07:34 -06:00
Alex K
94f8e9550e Update Russian translation (#15)
* Add files via upload

* Add files via upload

---------

Co-authored-by: Jeffry Samuel <69224322+Jeffser@users.noreply.github.com>
2024-05-19 22:01:28 -06:00
jeffser
f4ea0b7389 Quick fix 2024-05-19 21:54:42 -06:00
22 changed files with 4704 additions and 1288 deletions

View File

@@ -1,20 +1,15 @@
<img src="https://jeffser.com/images/alpaca/logo.svg"> <p align="center"><img src="https://jeffser.com/images/alpaca/logo.svg"></p>
# Alpaca # Alpaca
An [Ollama](https://github.com/ollama/ollama) client made with GTK4 and Adwaita. <a href='https://flathub.org/apps/com.jeffser.Alpaca'><img width='240' alt='Download on Flathub' src='https://flathub.org/api/badge?locale=en'/></a>
Alpaca is an [Ollama](https://github.com/ollama/ollama) client where you can manage and chat with multiple models, Alpaca provides an easy and begginer friendly way of interacting with local AI, everything is open source and powered by Ollama.
--- ---
> [!WARNING] > [!WARNING]
> 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. > 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 AI models.
> [!important]
> This is my first GTK4 / Adwaita / Python app, so it might crash and some features are still under development, please report any errors if you can, thank you!
## Features! ## Features!
- Talk to multiple models in the same conversation - Talk to multiple models in the same conversation
@@ -23,11 +18,13 @@ An [Ollama](https://github.com/ollama/ollama) client made with GTK4 and Adwaita.
- Code highlighting - Code highlighting
- Multiple conversations - Multiple conversations
- Notifications - Notifications
- Import / Export chats
- Delete messages
## Future features! ## Future features!
- Document recognition - Document recognition
- Import / Export chats - Edit messages
- Snap Package (maybe)
## Screenies ## Screenies
Login to Ollama instance | Chatting with models | Managing models Login to Ollama instance | Chatting with models | Managing models
@@ -43,11 +40,14 @@ Login to Ollama instance | Chatting with models | Managing
2. Download the latest flatpak package 2. Download the latest flatpak package
3. Open it 3. Open it
## Usage ---
- You'll need an Ollama instance, I recommend using the [Docker image](https://ollama.com/blog/ollama-is-now-available-as-an-official-docker-image)
- Once you open Alpaca it will ask you for a url, if you are using the same computer as the Ollama instance and didn't change the ports you can use the default url. ## Thanks
- You might need a model, you can get one using the box icon at the top of the app, I recommend using phi3 because it is very lightweight but you can use whatever you want (I haven't actually tested all so your mileage may vary). - [not-a-dev-stein](https://github.com/not-a-dev-stein) for their help with requesting a new icon, bug reports and the translation to Brazilian Portuguese
- Then just start talking! you can mix different models, they all share the same conversation, it's really cool in my opinion. - [TylerLaBree](https://github.com/TylerLaBree) for their requests and ideas
- [Alexkdeveloper](https://github.com/alexkdeveloper) for their help translating the app to Russian
- [Imbev](https://github.com/imbev) for their reports and suggestions
- [Nokse](https://github.com/Nokse22) for their contributions to the UI
## About forks ## About forks
If you want to fork this... I mean, I think it would be better if you start from scratch, my code isn't well documented at all, but if you really want to, please give me some credit, that's all I ask for... And maybe a donation (joke) If you want to fork this... I mean, I think it would be better if you start from scratch, my code isn't well documented at all, but if you really want to, please give me some credit, that's all I ask for... And maybe a donation (joke)

View File

@@ -71,6 +71,31 @@
} }
] ]
}, },
{
"name": "ollama",
"buildsystem": "simple",
"build-commands": [
"install -Dm0755 ollama* ${FLATPAK_DEST}/bin/ollama"
],
"sources": [
{
"type": "file",
"url": "https://github.com/ollama/ollama/releases/download/v0.1.38/ollama-linux-amd64",
"sha256": "c3360812503a9756a507ebb9d78667e2b21800a760b45046bc48a8f3b81972f4",
"only-arches": [
"x86_64"
]
},
{
"type": "file",
"url": "https://github.com/ollama/ollama/releases/download/v0.1.38/ollama-linux-arm64",
"sha256": "f2d091afe665b2d5ba8b68e2473d36cdfaf80c61c7d2844a0a8f533c4e62f547",
"only-arches": [
"aarch64"
]
}
]
},
{ {
"name" : "alpaca", "name" : "alpaca",
"builddir" : true, "builddir" : true,

View File

@@ -6,3 +6,4 @@ Terminal=false
Type=Application Type=Application
Categories=Utility;Development;Chat; Categories=Utility;Development;Chat;
StartupNotify=true StartupNotify=true
X-Purism-FormFactor=Workstation;Mobile;

View File

@@ -5,14 +5,16 @@
<project_license>GPL-3.0-or-later</project_license> <project_license>GPL-3.0-or-later</project_license>
<launchable type="desktop-id">com.jeffser.Alpaca.desktop</launchable> <launchable type="desktop-id">com.jeffser.Alpaca.desktop</launchable>
<name>Alpaca</name> <name>Alpaca</name>
<summary>An Ollama client</summary> <summary>Chat with local AI models</summary>
<description> <description>
<p>Chat with multiple AI models</p>
<p>An Ollama client</p> <p>An Ollama client</p>
<p>Features</p> <p>Features</p>
<ul> <ul>
<li>Talk to multiple models in the same conversation</li> <li>Talk to multiple models in the same conversation</li>
<li>Pull and delete models from the app</li> <li>Pull and delete models from the app</li>
<li>Have multiple conversations</li>
<li>Image recognition (Only available with LLaVA Model)</li>
<li>Import and export chats</li>
</ul> </ul>
<p>Disclaimer</p> <p>Disclaimer</p>
<p>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.</p> <p>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.</p>
@@ -29,6 +31,12 @@
<category>Development</category> <category>Development</category>
<category>Chat</category> <category>Chat</category>
</categories> </categories>
<requires>
<display_length compare="ge">360</display_length>
</requires>
<recommends>
<control>keyboard</control>
</recommends>
<branding> <branding>
<color type="primary" scheme_preference="light">#8cdef5</color> <color type="primary" scheme_preference="light">#8cdef5</color>
<color type="primary" scheme_preference="dark">#0f2b78</color> <color type="primary" scheme_preference="dark">#0f2b78</color>
@@ -36,7 +44,7 @@
<screenshots> <screenshots>
<screenshot type="default"> <screenshot type="default">
<image>https://jeffser.com/images/alpaca/screenie1.png</image> <image>https://jeffser.com/images/alpaca/screenie1.png</image>
<caption>Welcome dialog</caption> <caption>A conversation showing code highlight</caption>
</screenshot> </screenshot>
<screenshot> <screenshot>
<image>https://jeffser.com/images/alpaca/screenie2.png</image> <image>https://jeffser.com/images/alpaca/screenie2.png</image>
@@ -52,22 +60,121 @@
<url type="homepage">https://github.com/Jeffser/Alpaca</url> <url type="homepage">https://github.com/Jeffser/Alpaca</url>
<url type="donation">https://github.com/sponsors/Jeffser</url> <url type="donation">https://github.com/sponsors/Jeffser</url>
<releases> <releases>
<release version="0.8.1" date="2024-05-24">
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.8.1</url>
<description>
<p>Quick fix</p>
<ul>
<li>Updated Spanish translation</li>
<li>Added compatibility for PNG</li>
</ul>
</description>
</release>
<release version="0.8.0" date="2024-05-24">
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.8.0</url>
<description>
<p>New Update</p>
<ul>
<li>Updated model list</li>
<li>Added image recognition to more models</li>
<li>Added Brazilian Portuguese translation (Thanks Daimaar Stein)</li>
<li>Refined the general UI (Thanks Nokse22)</li>
<li>Added 'delete message' feature</li>
<li>Added metadata so that software distributors know that the app is compatible with mobile</li>
<li>Changed 'send' shortcut to just the return/enter key (to add a new line use shift+return)</li>
</ul>
</description>
</release>
<release version="0.7.1" date="2024-05-23">
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.7.1</url>
<description>
<p>Bug Fixes</p>
<ul>
<li>Fixed: Minor spelling mistake</li>
<li>Added 'mobile' as a supported form factor</li>
<li>Fixed: 'Connection Error' dialog not working properly</li>
<li>Fixed: App might freeze randomly on startup</li>
<li>Changed 'chats' label on sidebar for 'Alpaca'</li>
</ul>
</description>
</release>
<release version="0.7.0" date="2024-05-22">
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.7.0</url>
<description>
<p>Cool Update</p>
<ul>
<li>Better design for chat window</li>
<li>Better design for chat sidebar</li>
<li>Fixed remote connections</li>
<li>Fixed Ollama restarting in loop</li>
<li>Other cool backend stuff</li>
</ul>
</description>
</release>
<release version="0.6.0" date="2024-05-21">
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.6.0</url>
<description>
<p>Huge Update</p>
<ul>
<li>Added Ollama as part of Alpaca, Ollama will run in a sandbox</li>
<li>Added option to connect to remote instances (how it worked before)</li>
<li>Added option to import and export chats</li>
<li>Added option to run Alpaca with Ollama in the background</li>
<li>Added preferences dialog</li>
<li>Changed the welcome dialog</li>
</ul>
<p>
Please report any errors to the issues page, thank you.
</p>
</description>
</release>
<release version="0.5.5" date="2024-05-20">
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.5.5</url>
<description>
<p>Yet Another Daily Update</p>
<ul>
<li>Added better UI for 'Manage Models' dialog</li>
<li>Added better UI for the chat sidebar</li>
<li>Replaced model description with a button to open Ollama's website for the model</li>
<li>Added myself to the credits as the spanish translator</li>
<li>Using XDG properly to get config folder</li>
<li>Update for translations</li>
</ul>
<p>
Please report any errors to the issues page, thank you.
</p>
</description>
</release>
<release version="0.5.2" date="2024-05-19">
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.5.2</url>
<description>
<p>Quick Fix</p>
<ul>
<li>The last update had some mistakes in the description of the update</li>
</ul>
<p>
Please report any errors to the issues page, thank you.
</p>
</description>
</release>
<release version="0.5.1" date="2024-05-19"> <release version="0.5.1" date="2024-05-19">
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.5.1</url> <url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.5.1</url>
<p>Another Daily Update</p> <description>
<ul> <p>Another Daily Update</p>
<li>Added full Spanish translation</li> <ul>
<li>Added support for background pulling of multiple models</li> <li>Added full Spanish translation</li>
<li>Added interrupt button</li> <li>Added support for background pulling of multiple models</li>
<li>Added basic shortcuts</li> <li>Added interrupt button</li>
<li>Better translation support</li> <li>Added basic shortcuts</li>
<li>User can now leave chat name empty when creating a new one, it will add a placeholder name</li> <li>Better translation support</li>
<li>Better scalling for different window sizes</li> <li>User can now leave chat name empty when creating a new one, it will add a placeholder name</li>
<li>Fixed: Can't close app if first time setup fails</li> <li>Better scalling for different window sizes</li>
</ul> <li>Fixed: Can't close app if first time setup fails</li>
<p> </ul>
Please report any errors to the issues page, thank you. <p>
</p> Please report any errors to the issues page, thank you.
</p>
</description>
</release> </release>
<release version="0.5.0" date="2024-05-19"> <release version="0.5.0" date="2024-05-19">
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.5.0</url> <url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.5.0</url>

View File

@@ -1,5 +1,5 @@
project('Alpaca', project('Alpaca',
version: '0.5.1', version: '0.8.1',
meson_version: '>= 0.62.0', meson_version: '>= 0.62.0',
default_options: [ 'warning_level=2', 'werror=false', ], default_options: [ 'warning_level=2', 'werror=false', ],
) )

View File

@@ -1,2 +1,3 @@
ru ru
es es
pt_BR

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-05-19 21:30-0600\n" "POT-Creation-Date: 2024-05-24 18:50-0600\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -23,516 +23,773 @@ msgid "Alpaca"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:8 #: data/com.jeffser.Alpaca.metainfo.xml.in:8
#: data/com.jeffser.Alpaca.metainfo.xml.in:11 msgid "Chat with local AI models"
msgid "An Ollama client"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:10 #: data/com.jeffser.Alpaca.metainfo.xml.in:10
msgid "Chat with multiple AI models" msgid "An Ollama client"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:12 #: data/com.jeffser.Alpaca.metainfo.xml.in:11
#: data/com.jeffser.Alpaca.metainfo.xml.in:176 #: data/com.jeffser.Alpaca.metainfo.xml.in:286
msgid "Features" msgid "Features"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:14 #: data/com.jeffser.Alpaca.metainfo.xml.in:13
#: data/com.jeffser.Alpaca.metainfo.xml.in:178 #: data/com.jeffser.Alpaca.metainfo.xml.in:288
msgid "Talk to multiple models in the same conversation" msgid "Talk to multiple models in the same conversation"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:15 #: data/com.jeffser.Alpaca.metainfo.xml.in:14
#: data/com.jeffser.Alpaca.metainfo.xml.in:179 #: data/com.jeffser.Alpaca.metainfo.xml.in:289
msgid "Pull and delete models from the app" msgid "Pull and delete models from the app"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:17 src/window.ui:405 #: data/com.jeffser.Alpaca.metainfo.xml.in:15
msgid "Have multiple conversations"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:16
msgid "Image recognition (Only available with LLaVA Model)"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:17
msgid "Import and export chats"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:19 src/window.ui:432
msgid "Disclaimer" msgid "Disclaimer"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:18 #: data/com.jeffser.Alpaca.metainfo.xml.in:20
msgid "" msgid ""
"This project is not affiliated at all with Ollama, I'm not responsible for " "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 " "any damages to your device or software caused by running code given by any "
"models." "models."
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:21 #: data/com.jeffser.Alpaca.metainfo.xml.in:23
msgid "Jeffry Samuel Eduarte Rojas" msgid "Jeffry Samuel Eduarte Rojas"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:39 #: data/com.jeffser.Alpaca.metainfo.xml.in:47
msgid "Welcome dialog" msgid "A conversation showing code highlight"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:43 #: data/com.jeffser.Alpaca.metainfo.xml.in:51
msgid "A conversation involving multiple models" msgid "A conversation involving multiple models"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:47 #: data/com.jeffser.Alpaca.metainfo.xml.in:55
msgid "Managing models" msgid "Managing models"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:72 #: data/com.jeffser.Alpaca.metainfo.xml.in:66
msgid "Really Big Update" msgid "Quick fix"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:74 #: data/com.jeffser.Alpaca.metainfo.xml.in:68
msgid "Added multiple chats support!" msgid "Updated Spanish translation"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:75 #: data/com.jeffser.Alpaca.metainfo.xml.in:69
msgid "Added Pango Markup support (bold, list, title, subtitle, monospace)" msgid "Added compatibility for PNG"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:76 #: data/com.jeffser.Alpaca.metainfo.xml.in:76
msgid "Added autoscroll if the user is at the bottom of the chat" msgid "New Update"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:77
msgid "Added support for multiple tags on a single model"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:78 #: data/com.jeffser.Alpaca.metainfo.xml.in:78
msgid "Added better model management dialog" msgid "Updated model list"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:79 #: data/com.jeffser.Alpaca.metainfo.xml.in:79
msgid "Added loading spinner when sending message" msgid "Added image recognition to more models"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:80 #: data/com.jeffser.Alpaca.metainfo.xml.in:80
msgid "Added notifications if app is not active and a model pull finishes" msgid "Added Brazilian Portuguese translation (Thanks Daimaar Stein)"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:81 #: data/com.jeffser.Alpaca.metainfo.xml.in:81
msgid "Added new symbolic icon" msgid "Refined the general UI (Thanks Nokse22)"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:82 #: data/com.jeffser.Alpaca.metainfo.xml.in:82
msgid "Added frame to message textview widget" msgid "Added 'delete message' feature"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:83 #: data/com.jeffser.Alpaca.metainfo.xml.in:83
msgid "Fixed \"code blocks shouldn't be editable\"" msgid ""
"Added metadata so that software distributors know that the app is compatible "
"with mobile"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:85 #: data/com.jeffser.Alpaca.metainfo.xml.in:84
#: data/com.jeffser.Alpaca.metainfo.xml.in:101 msgid ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:117 "Changed 'send' shortcut to just the return/enter key (to add a new line use "
#: data/com.jeffser.Alpaca.metainfo.xml.in:131 "shift+return)"
#: data/com.jeffser.Alpaca.metainfo.xml.in:141 msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:159
#: data/com.jeffser.Alpaca.metainfo.xml.in:181 #: data/com.jeffser.Alpaca.metainfo.xml.in:91
msgid "Please report any errors to the issues page, thank you." msgid "Bug Fixes"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:93 #: data/com.jeffser.Alpaca.metainfo.xml.in:93
#: data/com.jeffser.Alpaca.metainfo.xml.in:150 msgid "Fixed: Minor spelling mistake"
msgid "Big Update" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:94
msgid "Added 'mobile' as a supported form factor"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:95 #: data/com.jeffser.Alpaca.metainfo.xml.in:95
msgid "Added code highlighting" msgid "Fixed: 'Connection Error' dialog not working properly"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:96 #: data/com.jeffser.Alpaca.metainfo.xml.in:96
msgid "Added image recognition (llava model)" msgid "Fixed: App might freeze randomly on startup"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:97 #: data/com.jeffser.Alpaca.metainfo.xml.in:97
msgid "Added multiline prompt" msgid "Changed 'chats' label on sidebar for 'Alpaca'"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:98 #: data/com.jeffser.Alpaca.metainfo.xml.in:104
msgid "Fixed some small bugs" msgid "Cool Update"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:99 #: data/com.jeffser.Alpaca.metainfo.xml.in:106
msgid "General optimization" msgid "Better design for chat window"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:107
msgid "Better design for chat sidebar"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:108
msgid "Fixed remote connections"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:109 #: data/com.jeffser.Alpaca.metainfo.xml.in:109
msgid "Fixes and features" msgid "Fixed Ollama restarting in loop"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:111 #: data/com.jeffser.Alpaca.metainfo.xml.in:110
msgid "Russian translation (thanks github/alexkdeveloper)" msgid "Other cool backend stuff"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:112 #: data/com.jeffser.Alpaca.metainfo.xml.in:117
msgid "Fixed: Cannot close app on first setup" msgid "Huge Update"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:113 #: data/com.jeffser.Alpaca.metainfo.xml.in:119
msgid "Fixed: Brand colors for Flathub" msgid "Added Ollama as part of Alpaca, Ollama will run in a sandbox"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:114 #: data/com.jeffser.Alpaca.metainfo.xml.in:120
msgid "Fixed: App description" msgid "Added option to connect to remote instances (how it worked before)"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:115 #: data/com.jeffser.Alpaca.metainfo.xml.in:121
msgid "Fixed: Only show 'save changes dialog' when you actually change the url" msgid "Added option to import and export chats"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:125 #: data/com.jeffser.Alpaca.metainfo.xml.in:122
msgid "0.2.2 Bug fixes" msgid "Added option to run Alpaca with Ollama in the background"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:127 #: data/com.jeffser.Alpaca.metainfo.xml.in:123
msgid "Toast messages appearing behind dialogs" msgid "Added preferences dialog"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:128 #: data/com.jeffser.Alpaca.metainfo.xml.in:124
msgid "Local model list not updating when changing servers" msgid "Changed the welcome dialog"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:129 #: data/com.jeffser.Alpaca.metainfo.xml.in:126
msgid "Closing the setup dialog closes the whole app" #: data/com.jeffser.Alpaca.metainfo.xml.in:143
#: data/com.jeffser.Alpaca.metainfo.xml.in:155
#: data/com.jeffser.Alpaca.metainfo.xml.in:174
#: data/com.jeffser.Alpaca.metainfo.xml.in:195
#: data/com.jeffser.Alpaca.metainfo.xml.in:211
#: data/com.jeffser.Alpaca.metainfo.xml.in:227
#: data/com.jeffser.Alpaca.metainfo.xml.in:241
#: data/com.jeffser.Alpaca.metainfo.xml.in:251
#: data/com.jeffser.Alpaca.metainfo.xml.in:269
#: data/com.jeffser.Alpaca.metainfo.xml.in:291
msgid "Please report any errors to the issues page, thank you."
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:134
msgid "Yet Another Daily Update"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:136
msgid "Added better UI for 'Manage Models' dialog"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:137
msgid "Added better UI for the chat sidebar"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:138
msgid ""
"Replaced model description with a button to open Ollama's website for the "
"model"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:139 #: data/com.jeffser.Alpaca.metainfo.xml.in:139
msgid "0.2.1 Data saving fix" msgid "Added myself to the credits as the spanish translator"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:140 #: data/com.jeffser.Alpaca.metainfo.xml.in:140
msgid "Using XDG properly to get config folder"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:141
msgid "Update for translations"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:151
msgid "Quick Fix"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:153
msgid "The last update had some mistakes in the description of the update"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:163
msgid "Another Daily Update"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:165
msgid "Added full Spanish translation"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:166
msgid "Added support for background pulling of multiple models"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:167
msgid "Added interrupt button"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:168
msgid "Added basic shortcuts"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:169
msgid "Better translation support"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:170
msgid ""
"User can now leave chat name empty when creating a new one, it will add a "
"placeholder name"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:171
msgid "Better scalling for different window sizes"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:172
msgid "Fixed: Can't close app if first time setup fails"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:182
msgid "Really Big Update"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:184
msgid "Added multiple chats support!"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:185
msgid "Added Pango Markup support (bold, list, title, subtitle, monospace)"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:186
msgid "Added autoscroll if the user is at the bottom of the chat"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:187
msgid "Added support for multiple tags on a single model"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:188
msgid "Added better model management dialog"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:189
msgid "Added loading spinner when sending message"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:190
msgid "Added notifications if app is not active and a model pull finishes"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:191
msgid "Added new symbolic icon"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:192
msgid "Added frame to message textview widget"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:193
msgid "Fixed \"code blocks shouldn't be editable\""
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:203
#: data/com.jeffser.Alpaca.metainfo.xml.in:260
msgid "Big Update"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:205
msgid "Added code highlighting"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:206
msgid "Added image recognition (llava model)"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:207
msgid "Added multiline prompt"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:208
msgid "Fixed some small bugs"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:209
msgid "General optimization"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:219
msgid "Fixes and features"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:221
msgid "Russian translation (thanks github/alexkdeveloper)"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:222
msgid "Fixed: Cannot close app on first setup"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:223
msgid "Fixed: Brand colors for Flathub"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:224
msgid "Fixed: App description"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:225
msgid "Fixed: Only show 'save changes dialog' when you actually change the url"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:235
msgid "0.2.2 Bug fixes"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:237
msgid "Toast messages appearing behind dialogs"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:238
msgid "Local model list not updating when changing servers"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:239
msgid "Closing the setup dialog closes the whole app"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:249
msgid "0.2.1 Data saving fix"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:250
msgid "" msgid ""
"The app didn't save the config files and chat history to the right " "The app didn't save the config files and chat history to the right "
"directory, this is now fixed" "directory, this is now fixed"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:149 #: data/com.jeffser.Alpaca.metainfo.xml.in:259
msgid "0.2.0" msgid "0.2.0"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:151 #: data/com.jeffser.Alpaca.metainfo.xml.in:261
msgid "New Features" msgid "New Features"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:153 #: data/com.jeffser.Alpaca.metainfo.xml.in:263
msgid "Restore chat after closing the app" msgid "Restore chat after closing the app"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:154 #: data/com.jeffser.Alpaca.metainfo.xml.in:264
msgid "A button to clear the chat" msgid "A button to clear the chat"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:155 #: data/com.jeffser.Alpaca.metainfo.xml.in:265
msgid "Fixed multiple bugs involving how messages are shown" msgid "Fixed multiple bugs involving how messages are shown"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:156 #: data/com.jeffser.Alpaca.metainfo.xml.in:266
msgid "Added welcome dialog" msgid "Added welcome dialog"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:157 #: data/com.jeffser.Alpaca.metainfo.xml.in:267
msgid "More stability" msgid "More stability"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:167 #: data/com.jeffser.Alpaca.metainfo.xml.in:277
msgid "0.1.2 Quick fixes" msgid "0.1.2 Quick fixes"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:168 #: data/com.jeffser.Alpaca.metainfo.xml.in:278
msgid "" msgid ""
"This release fixes some metadata needed to have a proper Flatpak application" "This release fixes some metadata needed to have a proper Flatpak application"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:174 #: data/com.jeffser.Alpaca.metainfo.xml.in:284
msgid "0.1.1 Stable Release" msgid "0.1.1 Stable Release"
msgstr "" msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:175 #: data/com.jeffser.Alpaca.metainfo.xml.in:285
msgid "This is the first public version of Alpaca" msgid "This is the first public version of Alpaca"
msgstr "" msgstr ""
#: src/window.py:47 src/window.py:758 #: src/window.py:57 src/window.py:783
msgid "New Chat" msgid "New Chat"
msgstr "" msgstr ""
#: src/window.py:86 #: src/window.py:102
msgid "An error occurred" msgid "An error occurred"
msgstr "" msgstr ""
#: src/window.py:87 #: src/window.py:103
msgid "Failed to connect to server" msgid "Failed to connect to server"
msgstr "" msgstr ""
#: src/window.py:88 #: src/window.py:104
msgid "Could not list local models" msgid "Could not list local models"
msgstr "" msgstr ""
#: src/window.py:89 #: src/window.py:105
msgid "Could not delete model" msgid "Could not delete model"
msgstr "" msgstr ""
#: src/window.py:90 #: src/window.py:106
msgid "Could not pull model" msgid "Could not pull model"
msgstr "" msgstr ""
#: src/window.py:91 #: src/window.py:107
msgid "Cannot open image" msgid "Cannot open image"
msgstr "" msgstr ""
#: src/window.py:92 #: src/window.py:108
msgid "Cannot delete chat because it's the only one left" msgid "Cannot delete chat because it's the only one left"
msgstr "" msgstr ""
#: src/window.py:95 #: src/window.py:109
msgid "There was an error with the local Ollama instance, so it has been reset"
msgstr ""
#: src/window.py:112
msgid "Please select a model before chatting" msgid "Please select a model before chatting"
msgstr "" msgstr ""
#: src/window.py:96 #: src/window.py:113
msgid "Chat cannot be cleared while receiving a message" msgid "Chat cannot be cleared while receiving a message"
msgstr "" msgstr ""
#: src/window.py:99 #: src/window.py:114
msgid "That tag is already being pulled"
msgstr ""
#: src/window.py:115
msgid "That tag has been pulled already"
msgstr ""
#: src/window.py:118
msgid "Model deleted successfully" msgid "Model deleted successfully"
msgstr "" msgstr ""
#: src/window.py:100 #: src/window.py:119
msgid "Model pulled successfully" msgid "Model pulled successfully"
msgstr "" msgstr ""
#: src/window.py:418 #: src/window.py:120
msgid "Chat exported successfully"
msgstr ""
#: src/window.py:121
msgid "Chat imported successfully"
msgstr ""
#: src/window.py:476
msgid "Task Complete" msgid "Task Complete"
msgstr "" msgstr ""
#: src/window.py:418 #: src/window.py:476
msgid "Model '{}' pulled successfully." msgid "Model '{}' pulled successfully."
msgstr "" msgstr ""
#: src/window.py:424 #: src/window.py:481
msgid "Pull Model Error" msgid "Pull Model Error"
msgstr "" msgstr ""
#: src/window.py:424 #: src/window.py:481
msgid "Failed to pull model '{}' due to network error." msgid "Failed to pull model '{}' due to network error."
msgstr "" msgstr ""
#: src/window.py:436 #: src/window.py:496
msgid "Stop Model" msgid "Stop Model"
msgstr "" msgstr ""
#: src/window.py:437 #: src/window.py:497
msgid "Are you sure you want to stop pulling '{}'?" msgid "Are you sure you want to stop pulling '{}'?"
msgstr "" msgstr ""
#: src/window.py:440 src/window.py:478 src/window.py:501 src/window.py:575 #: src/window.py:500 src/window.py:543 src/window.py:566 src/window.py:638
#: src/window.py:636 src/window.py:685 src/window.py:712 src/window.py:745 #: src/window.py:711 src/window.py:737 src/window.py:769 src/window.py:810
#: src/window.py:785
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr ""
#: src/window.py:441 #: src/window.py:501
msgid "Stop" msgid "Stop"
msgstr "" msgstr ""
#: src/window.py:474 #: src/window.py:539
msgid "Delete Model" msgid "Delete Model"
msgstr "" msgstr ""
#: src/window.py:475 src/window.py:709 #: src/window.py:540 src/window.py:734
msgid "Are you sure you want to delete '{}'?" msgid "Are you sure you want to delete '{}'?"
msgstr "" msgstr ""
#: src/window.py:479 src/window.py:713 #: src/window.py:544 src/window.py:738
msgid "Delete" msgid "Delete"
msgstr "" msgstr ""
#: src/window.py:496 #: src/window.py:561
msgid "Pull Model" msgid "Pull Model"
msgstr "" msgstr ""
#: src/window.py:497 #: src/window.py:562
msgid "Please select a tag to pull '{}'" msgid "Please select a tag to pull '{}'"
msgstr "" msgstr ""
#: src/window.py:502 #: src/window.py:567
msgid "Pull" msgid "Pull"
msgstr "" msgstr ""
#: src/window.py:571 src/window.ui:439 #: src/window.py:634 src/window.ui:446
msgid "Clear Chat" msgid "Clear Chat"
msgstr "" msgstr ""
#: src/window.py:572 #: src/window.py:635
msgid "Are you sure you want to clear the chat?" msgid "Are you sure you want to clear the chat?"
msgstr "" msgstr ""
#: src/window.py:576 #: src/window.py:639
msgid "Clear" msgid "Clear"
msgstr "" msgstr ""
#: src/window.py:632 #: src/window.py:707
msgid "Save Changes"
msgstr ""
#: src/window.py:633
msgid "Do you want to save the URL change?"
msgstr ""
#: src/window.py:637
msgid "Discard"
msgstr ""
#: src/window.py:638
msgid "Save"
msgstr ""
#: src/window.py:681
msgid "Remove Image" msgid "Remove Image"
msgstr "" msgstr ""
#: src/window.py:682 #: src/window.py:708
msgid "Are you sure you want to remove image?" msgid "Are you sure you want to remove image?"
msgstr "" msgstr ""
#: src/window.py:686 #: src/window.py:712 src/window.ui:466
msgid "Remove" msgid "Remove"
msgstr "" msgstr ""
#: src/window.py:708 #: src/window.py:733
msgid "Delete Chat" msgid "Delete Chat"
msgstr "" msgstr ""
#: src/window.py:739 #: src/window.py:763
msgid "Rename Chat" msgid "Rename Chat"
msgstr "" msgstr ""
#: src/window.py:746 #: src/window.py:770
msgid "Rename" msgid "Rename"
msgstr "" msgstr ""
#: src/window.py:766 #: src/window.py:791
msgid "The name '{}' is already in use" msgid "The name '{}' is already in use"
msgstr "" msgstr ""
#: src/window.py:779 #: src/window.py:804
msgid "Create Chat" msgid "Create Chat"
msgstr "" msgstr ""
#: src/window.py:786 #: src/window.py:811
msgid "Create" msgid "Create"
msgstr "" msgstr ""
#: src/window.ui:55 #: src/window.py:914
msgid "Chats" msgid "Connection Error"
msgstr "" msgstr ""
#: src/window.ui:65 #: src/window.py:915
msgid "The remote instance has disconnected"
msgstr ""
#: src/window.py:919
msgid "Close Alpaca"
msgstr ""
#: src/window.py:920
msgid "Use local instance"
msgstr ""
#: src/window.py:921
msgid "Connect"
msgstr ""
#: src/window.ui:40
msgid "New chat" msgid "New chat"
msgstr "" msgstr ""
#: src/window.ui:101 #: src/window.ui:49
msgid "Import chat"
msgstr ""
#: src/window.ui:58
msgid "Export chat"
msgstr ""
#: src/window.ui:90
msgid "Toggle Sidebar" msgid "Toggle Sidebar"
msgstr "" msgstr ""
#: src/window.ui:122 src/window.ui:259 #: src/window.ui:111 src/window.ui:303
msgid "Manage models" msgid "Manage models"
msgstr "" msgstr ""
#: src/window.ui:136 #: src/window.ui:125
msgid "Menu" msgid "Menu"
msgstr "" msgstr ""
#: src/window.ui:215 #: src/window.ui:216
msgid "Send" msgid "Send"
msgstr "" msgstr ""
#: src/window.ui:224 #: src/window.ui:225
msgid "Requires model 'llava' to be selected" msgid "Only available on selected models"
msgstr "" msgstr ""
#: src/window.ui:227 #: src/window.ui:228
msgid "Image" msgid "Image"
msgstr "" msgstr ""
#: src/window.ui:344 #: src/window.ui:254 src/window.ui:450 src/window.ui:508
msgid "Preferences"
msgstr ""
#: src/window.ui:257 src/window.ui:492
msgid "General"
msgstr ""
#: src/window.ui:261
msgid "Remote Connection"
msgstr ""
#: src/window.ui:262
msgid "Manage a remote connection to Ollama"
msgstr ""
#: src/window.ui:265
msgid "Use remote connection"
msgstr ""
#: src/window.ui:270
msgid "URL of remote instance"
msgstr ""
#: src/window.ui:278
msgid "Behavior"
msgstr ""
#: src/window.ui:279
msgid "Manage Alpaca's Behavior"
msgstr ""
#: src/window.ui:282
msgid "Run in background"
msgstr ""
#: src/window.ui:371
msgid "Previous" msgid "Previous"
msgstr "" msgstr ""
#: src/window.ui:359 #: src/window.ui:386
msgid "Next" msgid "Next"
msgstr "" msgstr ""
#: src/window.ui:385 #: src/window.ui:412
msgid "Welcome to Alpaca" msgid "Welcome to Alpaca"
msgstr "" msgstr ""
#: src/window.ui:386 #: src/window.ui:413
msgid "" msgid "Powered by Ollama"
"To get started, please ensure you have an Ollama instance set up. You can "
"either run Ollama locally on your machine or connect to a remote instance."
msgstr "" msgstr ""
#: src/window.ui:389 #: src/window.ui:416
msgid "Ollama Website" msgid "Ollama Website"
msgstr "" msgstr ""
#: src/window.ui:406 #: src/window.ui:433
msgid "" msgid ""
"Alpaca and its developers are not liable for any damages to devices or " "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. " "software resulting from the execution of code generated by an AI model. "
"Please exercise caution and review the code carefully before running it." "Please exercise caution and review the code carefully before running it."
msgstr "" msgstr ""
#: src/window.ui:418 #: src/window.ui:454
msgid "Setup"
msgstr ""
#: src/window.ui:419
msgid ""
"If you are running an Ollama instance locally and haven't modified the "
"default ports, you can use the default URL. Otherwise, please enter the URL "
"of your Ollama instance."
msgstr ""
#: src/window.ui:443
msgid "Change Server"
msgstr ""
#: src/window.ui:447
msgid "Keyboard Shortcuts" msgid "Keyboard Shortcuts"
msgstr "" msgstr ""
#: src/window.ui:451 #: src/window.ui:458
msgid "About Alpaca" msgid "About Alpaca"
msgstr "" msgstr ""
#: src/window.ui:473 #: src/window.ui:496
msgid "General"
msgstr ""
#: src/window.ui:477
msgid "Close application" msgid "Close application"
msgstr "" msgstr ""
#: src/window.ui:483 #: src/window.ui:502
msgid "Clear chat" msgid "Clear chat"
msgstr "" msgstr ""
#: src/window.ui:489 #: src/window.ui:514
msgid "Change server"
msgstr ""
#: src/window.ui:495
msgid "Show shortcuts window" msgid "Show shortcuts window"
msgstr "" msgstr ""
#: src/window.ui:502 #: src/window.ui:521
msgid "Editor" msgid "Editor"
msgstr "" msgstr ""
#: src/window.ui:506 #: src/window.ui:525
msgid "Copy" msgid "Copy"
msgstr "" msgstr ""
#: src/window.ui:512 #: src/window.ui:531
msgid "Paste" msgid "Paste"
msgstr "" msgstr ""
#: src/window.ui:518 #: src/window.ui:537
msgid "Insert new line"
msgstr ""
#: src/window.ui:543
msgid "Send Message" msgid "Send Message"
msgstr "" msgstr ""

714
po/es.po

File diff suppressed because it is too large Load Diff

571
po/es.po~
View File

@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-05-19 21:11-0600\n" "POT-Creation-Date: 2024-05-22 19:52-0600\n"
"PO-Revision-Date: 2024-05-19 19:44-0600\n" "PO-Revision-Date: 2024-05-19 19:44-0600\n"
"Last-Translator: Jeffry Samuel Eduarte Rojas <jeffrysamuer@gmail.com>\n" "Last-Translator: Jeffry Samuel Eduarte Rojas <jeffrysamuer@gmail.com>\n"
"Language-Team: Spanish <es@tp.org.es>\n" "Language-Team: Spanish <es@tp.org.es>\n"
@@ -23,34 +23,33 @@ msgid "Alpaca"
msgstr "Alpaca" msgstr "Alpaca"
#: data/com.jeffser.Alpaca.metainfo.xml.in:8 #: data/com.jeffser.Alpaca.metainfo.xml.in:8
#: data/com.jeffser.Alpaca.metainfo.xml.in:11
msgid "An Ollama client"
msgstr "Un cliente de Ollama"
#: data/com.jeffser.Alpaca.metainfo.xml.in:10
msgid "Chat with multiple AI models" msgid "Chat with multiple AI models"
msgstr "Chatea con multiples modelos de IA" msgstr "Chatea con multiples modelos de IA"
#: data/com.jeffser.Alpaca.metainfo.xml.in:12 #: data/com.jeffser.Alpaca.metainfo.xml.in:10
#: data/com.jeffser.Alpaca.metainfo.xml.in:162 msgid "An Ollama client"
msgstr "Un cliente de Ollama"
#: data/com.jeffser.Alpaca.metainfo.xml.in:11
#: data/com.jeffser.Alpaca.metainfo.xml.in:239
msgid "Features" msgid "Features"
msgstr "Funcionalidades" msgstr "Funcionalidades"
#: data/com.jeffser.Alpaca.metainfo.xml.in:14 #: data/com.jeffser.Alpaca.metainfo.xml.in:13
#: data/com.jeffser.Alpaca.metainfo.xml.in:164 #: data/com.jeffser.Alpaca.metainfo.xml.in:241
msgid "Talk to multiple models in the same conversation" msgid "Talk to multiple models in the same conversation"
msgstr "Habla con multiples modelos en la misma conversación" msgstr "Habla con multiples modelos en la misma conversación"
#: data/com.jeffser.Alpaca.metainfo.xml.in:15 #: data/com.jeffser.Alpaca.metainfo.xml.in:14
#: data/com.jeffser.Alpaca.metainfo.xml.in:165 #: data/com.jeffser.Alpaca.metainfo.xml.in:242
msgid "Pull and delete models from the app" msgid "Pull and delete models from the app"
msgstr "Descarga y elimina modelos desde la app" msgstr "Descarga y elimina modelos desde la app"
#: data/com.jeffser.Alpaca.metainfo.xml.in:17 src/window.ui:405 #: data/com.jeffser.Alpaca.metainfo.xml.in:16 src/window.ui:442
msgid "Disclaimer" msgid "Disclaimer"
msgstr "Aviso Legal" msgstr "Aviso Legal"
#: data/com.jeffser.Alpaca.metainfo.xml.in:18 #: data/com.jeffser.Alpaca.metainfo.xml.in:17
msgid "" msgid ""
"This project is not affiliated at all with Ollama, I'm not responsible for " "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 " "any damages to your device or software caused by running code given by any "
@@ -60,153 +59,306 @@ msgstr ""
"cualquier daño a tu dispositivo o software causado por correr codigo " "cualquier daño a tu dispositivo o software causado por correr codigo "
"proveido por cualquier modelo." "proveido por cualquier modelo."
#: data/com.jeffser.Alpaca.metainfo.xml.in:21 #: data/com.jeffser.Alpaca.metainfo.xml.in:20
msgid "Jeffry Samuel Eduarte Rojas" msgid "Jeffry Samuel Eduarte Rojas"
msgstr "Jeffry Samuel Eduarte Rojas" msgstr "Jeffry Samuel Eduarte Rojas"
#: data/com.jeffser.Alpaca.metainfo.xml.in:39 #: data/com.jeffser.Alpaca.metainfo.xml.in:38
msgid "Welcome dialog" msgid "Welcome dialog"
msgstr "Dialogo de Bienvenida" msgstr "Dialogo de Bienvenida"
#: data/com.jeffser.Alpaca.metainfo.xml.in:43 #: data/com.jeffser.Alpaca.metainfo.xml.in:42
msgid "A conversation involving multiple models" msgid "A conversation involving multiple models"
msgstr "Una conversación incluyendo multiples modelos" msgstr "Una conversación incluyendo multiples modelos"
#: data/com.jeffser.Alpaca.metainfo.xml.in:47 #: data/com.jeffser.Alpaca.metainfo.xml.in:46
msgid "Managing models" msgid "Managing models"
msgstr "Gestionando modelos" msgstr "Gestionando modelos"
#: data/com.jeffser.Alpaca.metainfo.xml.in:58 #: data/com.jeffser.Alpaca.metainfo.xml.in:57
#, fuzzy
msgid "Cool Update"
msgstr "Actualización Potente"
#: data/com.jeffser.Alpaca.metainfo.xml.in:59
#, fuzzy
msgid "Better design for chat window"
msgstr "Mejor diseño para la ventana de chat"
#: data/com.jeffser.Alpaca.metainfo.xml.in:60
#, fuzzy
msgid "Better design for chat sidebar"
msgstr "Mejor interfaz para la barra de lado de chat"
#: data/com.jeffser.Alpaca.metainfo.xml.in:61
#, fuzzy
msgid "Fixed remote connections"
msgstr "Conexión remota arreglada"
#: data/com.jeffser.Alpaca.metainfo.xml.in:62
msgid "Fixed Ollama restarting in loop"
msgstr "Arreglado, Ollama reiniciandose en bucle"
#: data/com.jeffser.Alpaca.metainfo.xml.in:63
msgid "Other cool backend stuff"
msgstr "Otras cosas geniales en el backend"
#: data/com.jeffser.Alpaca.metainfo.xml.in:70
#, fuzzy
msgid "Huge Update"
msgstr "Gran Actualización"
#: data/com.jeffser.Alpaca.metainfo.xml.in:72
msgid "Added Ollama as part of Alpaca, Ollama will run in a sandbox"
msgstr "Añadido Ollama como parte de Alpaca, Ollama se ejecutara en un sandbox"
#: data/com.jeffser.Alpaca.metainfo.xml.in:73
msgid "Added option to connect to remote instances (how it worked before)"
msgstr ""
"Añadida la opcion de conectarse a instancias remotas (como funcionaba) antes"
#: data/com.jeffser.Alpaca.metainfo.xml.in:74
msgid "Added option to import and export chats"
msgstr "Añadida la opcion de importar y exportar chats"
#: data/com.jeffser.Alpaca.metainfo.xml.in:75
msgid "Added option to run Alpaca with Ollama in the background"
msgstr "Añadida la opcion de ejecutar Alpaca y Ollama en el fondo"
#: data/com.jeffser.Alpaca.metainfo.xml.in:76
#, fuzzy
msgid "Added preferences dialog"
msgstr "Añadido dialogo de preferencias"
#: data/com.jeffser.Alpaca.metainfo.xml.in:77
#, fuzzy
msgid "Changed the welcome dialog"
msgstr "Nuevo dialogo de bienvenida"
#: data/com.jeffser.Alpaca.metainfo.xml.in:79
#: data/com.jeffser.Alpaca.metainfo.xml.in:96
#: data/com.jeffser.Alpaca.metainfo.xml.in:108
#: data/com.jeffser.Alpaca.metainfo.xml.in:127
#: data/com.jeffser.Alpaca.metainfo.xml.in:148
#: data/com.jeffser.Alpaca.metainfo.xml.in:164
#: data/com.jeffser.Alpaca.metainfo.xml.in:180
#: data/com.jeffser.Alpaca.metainfo.xml.in:194
#: data/com.jeffser.Alpaca.metainfo.xml.in:204
#: data/com.jeffser.Alpaca.metainfo.xml.in:222
#: data/com.jeffser.Alpaca.metainfo.xml.in:244
msgid "Please report any errors to the issues page, thank you."
msgstr "Por favor reporta cualquier error a la página de problemas, gracias."
#: data/com.jeffser.Alpaca.metainfo.xml.in:87
#, fuzzy
msgid "Yet Another Daily Update"
msgstr "Otra Actulización Diaria"
#: data/com.jeffser.Alpaca.metainfo.xml.in:89
#, fuzzy
msgid "Added better UI for 'Manage Models' dialog"
msgstr "Añadida mejor interfaz para el dialogo 'gestión de modelos'"
#: data/com.jeffser.Alpaca.metainfo.xml.in:90
msgid "Added better UI for the chat sidebar"
msgstr "Añadida mejor interfaz para la barra de lado de chat"
#: data/com.jeffser.Alpaca.metainfo.xml.in:91
msgid ""
"Replaced model description with a button to open Ollama's website for the "
"model"
msgstr ""
"Remplazada la descripción de modelo por un botón para abrir la página web de "
"Ollama para el modelo"
#: data/com.jeffser.Alpaca.metainfo.xml.in:92
msgid "Added myself to the credits as the spanish translator"
msgstr "Agregue mi nombre en los creditos como el traductor a Español"
#: data/com.jeffser.Alpaca.metainfo.xml.in:93
msgid "Using XDG properly to get config folder"
msgstr "Usando XDG apropiadamente para obtener el folder de configuración"
#: data/com.jeffser.Alpaca.metainfo.xml.in:94
#, fuzzy
msgid "Update for translations"
msgstr "Mejor soporte para traducciones"
#: data/com.jeffser.Alpaca.metainfo.xml.in:104
#, fuzzy
msgid "Quick Fix"
msgstr "0.1.2 Arreglos rápidos"
#: data/com.jeffser.Alpaca.metainfo.xml.in:106
msgid "The last update had some mistakes in the description of the update"
msgstr ""
"La última actualización tenía unos errores en la descripción de la "
"actualización"
#: data/com.jeffser.Alpaca.metainfo.xml.in:116
msgid "Another Daily Update"
msgstr "Otra Actulización Diaria"
#: data/com.jeffser.Alpaca.metainfo.xml.in:118
msgid "Added full Spanish translation"
msgstr "Añadida traducción completa a Español"
#: data/com.jeffser.Alpaca.metainfo.xml.in:119
#, fuzzy
msgid "Added support for background pulling of multiple models"
msgstr "Añadido soporte para multiples etiquetas con un solo modelo"
#: data/com.jeffser.Alpaca.metainfo.xml.in:120
msgid "Added interrupt button"
msgstr "Añadido botón de interrupción"
#: data/com.jeffser.Alpaca.metainfo.xml.in:121
#, fuzzy
msgid "Added basic shortcuts"
msgstr "Atajos de Teclado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:122
msgid "Better translation support"
msgstr "Mejor soporte para traducciones"
#: data/com.jeffser.Alpaca.metainfo.xml.in:123
msgid ""
"User can now leave chat name empty when creating a new one, it will add a "
"placeholder name"
msgstr ""
"El usuario ahora puede dejar el nombre del chat vacio durante la creación, "
"la aplicación añadira un placeholder"
#: data/com.jeffser.Alpaca.metainfo.xml.in:124
msgid "Better scalling for different window sizes"
msgstr "Mejor escalado para distintos tamaños de ventana"
#: data/com.jeffser.Alpaca.metainfo.xml.in:125
#, fuzzy
msgid "Fixed: Can't close app if first time setup fails"
msgstr "Arreglado: No se puede cerrar la aplicación en el primer setup"
#: data/com.jeffser.Alpaca.metainfo.xml.in:135
msgid "Really Big Update" msgid "Really Big Update"
msgstr "Actualización Bastante Grande" msgstr "Actualización Bastante Grande"
#: data/com.jeffser.Alpaca.metainfo.xml.in:60 #: data/com.jeffser.Alpaca.metainfo.xml.in:137
msgid "Added multiple chats support!" msgid "Added multiple chats support!"
msgstr "Añadido soporte para multiples chats!" msgstr "Añadido soporte para multiples chats!"
#: data/com.jeffser.Alpaca.metainfo.xml.in:61 #: data/com.jeffser.Alpaca.metainfo.xml.in:138
msgid "Added Pango Markup support (bold, list, title, subtitle, monospace)" msgid "Added Pango Markup support (bold, list, title, subtitle, monospace)"
msgstr "" msgstr ""
"Añadido soporte para Pango Markup (negrita, lista, titulo, subtitulo, " "Añadido soporte para Pango Markup (negrita, lista, titulo, subtitulo, "
"monoespaciado)" "monoespaciado)"
#: data/com.jeffser.Alpaca.metainfo.xml.in:62 #: data/com.jeffser.Alpaca.metainfo.xml.in:139
msgid "Added autoscroll if the user is at the bottom of the chat" msgid "Added autoscroll if the user is at the bottom of the chat"
msgstr "" msgstr ""
"Añadido autoscroll si el usuario se encuentra en la parte inferior del chat" "Añadido autoscroll si el usuario se encuentra en la parte inferior del chat"
#: data/com.jeffser.Alpaca.metainfo.xml.in:63 #: data/com.jeffser.Alpaca.metainfo.xml.in:140
msgid "Added support for multiple tags on a single model" msgid "Added support for multiple tags on a single model"
msgstr "Añadido soporte para multiples etiquetas con un solo modelo" msgstr "Añadido soporte para multiples etiquetas con un solo modelo"
#: data/com.jeffser.Alpaca.metainfo.xml.in:64 #: data/com.jeffser.Alpaca.metainfo.xml.in:141
msgid "Added better model management dialog" msgid "Added better model management dialog"
msgstr "Añadido mejor gestión de modelos" msgstr "Añadido mejor gestión de modelos"
#: data/com.jeffser.Alpaca.metainfo.xml.in:65 #: data/com.jeffser.Alpaca.metainfo.xml.in:142
msgid "Added loading spinner when sending message" msgid "Added loading spinner when sending message"
msgstr "Añadido spinner de carga cuando se envia un mensaje" msgstr "Añadido spinner de carga cuando se envia un mensaje"
#: data/com.jeffser.Alpaca.metainfo.xml.in:66 #: data/com.jeffser.Alpaca.metainfo.xml.in:143
msgid "Added notifications if app is not active and a model pull finishes" msgid "Added notifications if app is not active and a model pull finishes"
msgstr "" msgstr ""
"Añadidas notificaciones si la aplicación no está activa y la descarga de un " "Añadidas notificaciones si la aplicación no está activa y la descarga de un "
"modelo finaliza" "modelo finaliza"
#: data/com.jeffser.Alpaca.metainfo.xml.in:67 #: data/com.jeffser.Alpaca.metainfo.xml.in:144
msgid "Added new symbolic icon" msgid "Added new symbolic icon"
msgstr "Añadido nuevo icono simbolico" msgstr "Añadido nuevo icono simbolico"
#: data/com.jeffser.Alpaca.metainfo.xml.in:68 #: data/com.jeffser.Alpaca.metainfo.xml.in:145
msgid "Added frame to message textview widget" msgid "Added frame to message textview widget"
msgstr "Añadido borde al objeto textview del mensaje" msgstr "Añadido borde al objeto textview del mensaje"
#: data/com.jeffser.Alpaca.metainfo.xml.in:69 #: data/com.jeffser.Alpaca.metainfo.xml.in:146
msgid "Fixed \"code blocks shouldn't be editable\"" msgid "Fixed \"code blocks shouldn't be editable\""
msgstr "Arreglado \"bloques de codigo no deberían de ser editables\"" msgstr "Arreglado \"bloques de codigo no deberían de ser editables\""
#: data/com.jeffser.Alpaca.metainfo.xml.in:71 #: data/com.jeffser.Alpaca.metainfo.xml.in:156
#: data/com.jeffser.Alpaca.metainfo.xml.in:87 #: data/com.jeffser.Alpaca.metainfo.xml.in:213
#: data/com.jeffser.Alpaca.metainfo.xml.in:103
#: data/com.jeffser.Alpaca.metainfo.xml.in:117
#: data/com.jeffser.Alpaca.metainfo.xml.in:127
#: data/com.jeffser.Alpaca.metainfo.xml.in:145
#: data/com.jeffser.Alpaca.metainfo.xml.in:167
msgid "Please report any errors to the issues page, thank you."
msgstr "Por favor reporta cualquier error a la página de problemas, gracias."
#: data/com.jeffser.Alpaca.metainfo.xml.in:79
#: data/com.jeffser.Alpaca.metainfo.xml.in:136
msgid "Big Update" msgid "Big Update"
msgstr "Gran Actualización" msgstr "Gran Actualización"
#: data/com.jeffser.Alpaca.metainfo.xml.in:81 #: data/com.jeffser.Alpaca.metainfo.xml.in:158
msgid "Added code highlighting" msgid "Added code highlighting"
msgstr "Añadido resaltado de código" msgstr "Añadido resaltado de código"
#: data/com.jeffser.Alpaca.metainfo.xml.in:82 #: data/com.jeffser.Alpaca.metainfo.xml.in:159
msgid "Added image recognition (llava model)" msgid "Added image recognition (llava model)"
msgstr "Añadido reconocimiento de imagenes (modelo llava)" msgstr "Añadido reconocimiento de imagenes (modelo llava)"
#: data/com.jeffser.Alpaca.metainfo.xml.in:83 #: data/com.jeffser.Alpaca.metainfo.xml.in:160
msgid "Added multiline prompt" msgid "Added multiline prompt"
msgstr "Añadido caja de texto de multiples lineas" msgstr "Añadido caja de texto de multiples lineas"
#: data/com.jeffser.Alpaca.metainfo.xml.in:84 #: data/com.jeffser.Alpaca.metainfo.xml.in:161
msgid "Fixed some small bugs" msgid "Fixed some small bugs"
msgstr "Arreglados unos pequeños errores" msgstr "Arreglados unos pequeños errores"
#: data/com.jeffser.Alpaca.metainfo.xml.in:85 #: data/com.jeffser.Alpaca.metainfo.xml.in:162
msgid "General optimization" msgid "General optimization"
msgstr "Optimización general" msgstr "Optimización general"
#: data/com.jeffser.Alpaca.metainfo.xml.in:95 #: data/com.jeffser.Alpaca.metainfo.xml.in:172
msgid "Fixes and features" msgid "Fixes and features"
msgstr "Arreglos y funcionalidades" msgstr "Arreglos y funcionalidades"
#: data/com.jeffser.Alpaca.metainfo.xml.in:97 #: data/com.jeffser.Alpaca.metainfo.xml.in:174
msgid "Russian translation (thanks github/alexkdeveloper)" msgid "Russian translation (thanks github/alexkdeveloper)"
msgstr "Traducción a Ruso (gracias github/alexkdeveloper)" msgstr "Traducción a Ruso (gracias github/alexkdeveloper)"
#: data/com.jeffser.Alpaca.metainfo.xml.in:98 #: data/com.jeffser.Alpaca.metainfo.xml.in:175
msgid "Fixed: Cannot close app on first setup" msgid "Fixed: Cannot close app on first setup"
msgstr "Arreglado: No se puede cerrar la aplicación en el primer setup" msgstr "Arreglado: No se puede cerrar la aplicación en el primer setup"
#: data/com.jeffser.Alpaca.metainfo.xml.in:99 #: data/com.jeffser.Alpaca.metainfo.xml.in:176
msgid "Fixed: Brand colors for Flathub" msgid "Fixed: Brand colors for Flathub"
msgstr "Arreglado: Colores de marca para Flathub" msgstr "Arreglado: Colores de marca para Flathub"
#: data/com.jeffser.Alpaca.metainfo.xml.in:100 #: data/com.jeffser.Alpaca.metainfo.xml.in:177
msgid "Fixed: App description" msgid "Fixed: App description"
msgstr "Arreglado: Descripción de aplicación" msgstr "Arreglado: Descripción de aplicación"
#: data/com.jeffser.Alpaca.metainfo.xml.in:101 #: data/com.jeffser.Alpaca.metainfo.xml.in:178
msgid "Fixed: Only show 'save changes dialog' when you actually change the url" msgid "Fixed: Only show 'save changes dialog' when you actually change the url"
msgstr "" msgstr ""
"Arreglado: Solo mostrar el dialogo 'guardar cambios' cuando se cambia el url" "Arreglado: Solo mostrar el dialogo 'guardar cambios' cuando se cambia el url"
#: data/com.jeffser.Alpaca.metainfo.xml.in:111 #: data/com.jeffser.Alpaca.metainfo.xml.in:188
msgid "0.2.2 Bug fixes" msgid "0.2.2 Bug fixes"
msgstr "0.2.2 Arreglo de errores" msgstr "0.2.2 Arreglo de errores"
#: data/com.jeffser.Alpaca.metainfo.xml.in:113 #: data/com.jeffser.Alpaca.metainfo.xml.in:190
msgid "Toast messages appearing behind dialogs" msgid "Toast messages appearing behind dialogs"
msgstr "Mensajes toast apareciendo detrás de dialogos" msgstr "Mensajes toast apareciendo detrás de dialogos"
#: data/com.jeffser.Alpaca.metainfo.xml.in:114 #: data/com.jeffser.Alpaca.metainfo.xml.in:191
msgid "Local model list not updating when changing servers" msgid "Local model list not updating when changing servers"
msgstr "" msgstr ""
"Lista de modelos locales no es actualizada cuando se cambia el servidor" "Lista de modelos locales no es actualizada cuando se cambia el servidor"
#: data/com.jeffser.Alpaca.metainfo.xml.in:115 #: data/com.jeffser.Alpaca.metainfo.xml.in:192
msgid "Closing the setup dialog closes the whole app" msgid "Closing the setup dialog closes the whole app"
msgstr "Cerrar el dialogo de setup cierra toda la aplicación" msgstr "Cerrar el dialogo de setup cierra toda la aplicación"
#: data/com.jeffser.Alpaca.metainfo.xml.in:125 #: data/com.jeffser.Alpaca.metainfo.xml.in:202
msgid "0.2.1 Data saving fix" msgid "0.2.1 Data saving fix"
msgstr "0.2.1 Arreglo en el guardado de datos" msgstr "0.2.1 Arreglo en el guardado de datos"
#: data/com.jeffser.Alpaca.metainfo.xml.in:126 #: data/com.jeffser.Alpaca.metainfo.xml.in:203
msgid "" msgid ""
"The app didn't save the config files and chat history to the right " "The app didn't save the config files and chat history to the right "
"directory, this is now fixed" "directory, this is now fixed"
@@ -214,281 +366,326 @@ msgstr ""
"La aplicación no guardaba los archivos de configuración o los chats en el " "La aplicación no guardaba los archivos de configuración o los chats en el "
"directorio correcto, esto ahora ha sido arreglado" "directorio correcto, esto ahora ha sido arreglado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:135 #: data/com.jeffser.Alpaca.metainfo.xml.in:212
msgid "0.2.0" msgid "0.2.0"
msgstr "0.2.0" msgstr "0.2.0"
#: data/com.jeffser.Alpaca.metainfo.xml.in:137 #: data/com.jeffser.Alpaca.metainfo.xml.in:214
msgid "New Features" msgid "New Features"
msgstr "Nuevas funcionalidades" msgstr "Nuevas funcionalidades"
#: data/com.jeffser.Alpaca.metainfo.xml.in:139 #: data/com.jeffser.Alpaca.metainfo.xml.in:216
msgid "Restore chat after closing the app" msgid "Restore chat after closing the app"
msgstr "Restaurar chat despues de cerrar la aplicación" msgstr "Restaurar chat despues de cerrar la aplicación"
#: data/com.jeffser.Alpaca.metainfo.xml.in:140 #: data/com.jeffser.Alpaca.metainfo.xml.in:217
msgid "A button to clear the chat" msgid "A button to clear the chat"
msgstr "Un botón para limpiar el chat" msgstr "Un botón para limpiar el chat"
#: data/com.jeffser.Alpaca.metainfo.xml.in:141 #: data/com.jeffser.Alpaca.metainfo.xml.in:218
msgid "Fixed multiple bugs involving how messages are shown" msgid "Fixed multiple bugs involving how messages are shown"
msgstr "Arreglados multiples errores acerca de como los mensajes son mostrados" msgstr "Arreglados multiples errores acerca de como los mensajes son mostrados"
#: data/com.jeffser.Alpaca.metainfo.xml.in:142 #: data/com.jeffser.Alpaca.metainfo.xml.in:219
msgid "Added welcome dialog" msgid "Added welcome dialog"
msgstr "Añadido dialogo de bienvenida" msgstr "Añadido dialogo de bienvenida"
#: data/com.jeffser.Alpaca.metainfo.xml.in:143 #: data/com.jeffser.Alpaca.metainfo.xml.in:220
msgid "More stability" msgid "More stability"
msgstr "Más estabilidad" msgstr "Más estabilidad"
#: data/com.jeffser.Alpaca.metainfo.xml.in:153 #: data/com.jeffser.Alpaca.metainfo.xml.in:230
msgid "0.1.2 Quick fixes" msgid "0.1.2 Quick fixes"
msgstr "0.1.2 Arreglos rápidos" msgstr "0.1.2 Arreglos rápidos"
#: data/com.jeffser.Alpaca.metainfo.xml.in:154 #: data/com.jeffser.Alpaca.metainfo.xml.in:231
msgid "" msgid ""
"This release fixes some metadata needed to have a proper Flatpak application" "This release fixes some metadata needed to have a proper Flatpak application"
msgstr "" msgstr ""
"Esta versión arregla metadatos necesarios para tener un aplicación de " "Esta versión arregla metadatos necesarios para tener un aplicación de "
"Flatpak justa" "Flatpak justa"
#: data/com.jeffser.Alpaca.metainfo.xml.in:160 #: data/com.jeffser.Alpaca.metainfo.xml.in:237
msgid "0.1.1 Stable Release" msgid "0.1.1 Stable Release"
msgstr "0.1.1" msgstr "0.1.1"
#: data/com.jeffser.Alpaca.metainfo.xml.in:161 #: data/com.jeffser.Alpaca.metainfo.xml.in:238
msgid "This is the first public version of Alpaca" msgid "This is the first public version of Alpaca"
msgstr "Esta es la primera versión publica de Alpaca" msgstr "Esta es la primera versión publica de Alpaca"
#: src/window.py:47 src/window.py:758 #: src/window.py:56 src/window.py:780
msgid "New Chat" msgid "New Chat"
msgstr "Nuevo Chat" msgstr "Nuevo Chat"
#: src/window.py:86 #: src/window.py:102
msgid "An error occurred" msgid "An error occurred"
msgstr "Ocurrio un error" msgstr "Ocurrio un error"
#: src/window.py:87 #: src/window.py:103
msgid "Failed to connect to server" msgid "Failed to connect to server"
msgstr "No se pudo conectar al servidor" msgstr "No se pudo conectar al servidor"
#: src/window.py:88 #: src/window.py:104
msgid "Could not list local models" msgid "Could not list local models"
msgstr "No se pudieron listar los modelos locales" msgstr "No se pudieron listar los modelos locales"
#: src/window.py:89 #: src/window.py:105
msgid "Could not delete model" msgid "Could not delete model"
msgstr "No se pudo eliminar el modelo" msgstr "No se pudo eliminar el modelo"
#: src/window.py:90 #: src/window.py:106
msgid "Could not pull model" msgid "Could not pull model"
msgstr "No se pudo descargar el modelo" msgstr "No se pudo descargar el modelo"
#: src/window.py:91 #: src/window.py:107
msgid "Cannot open image" msgid "Cannot open image"
msgstr "No se pudo abrir la imagen" msgstr "No se pudo abrir la imagen"
#: src/window.py:92 #: src/window.py:108
msgid "Cannot delete chat because it's the only one left" msgid "Cannot delete chat because it's the only one left"
msgstr "No se pudo eliminar el chat por que es el único que queda" msgstr "No se pudo eliminar el chat por que es el único que queda"
#: src/window.py:95 #: src/window.py:109
msgid "There was an error with the local Ollama instance, so it has been reset"
msgstr ""
#: src/window.py:112
msgid "Please select a model before chatting" msgid "Please select a model before chatting"
msgstr "Por favor selecciona un modelo antes de enviar un mensaje" msgstr "Por favor selecciona un modelo antes de enviar un mensaje"
#: src/window.py:96 #: src/window.py:113
msgid "Chat cannot be cleared while receiving a message" msgid "Chat cannot be cleared while receiving a message"
msgstr "El chat no puede ser limpiado mientras se recibe un mensaje" msgstr "El chat no puede ser limpiado mientras se recibe un mensaje"
#: src/window.py:99 #: src/window.py:114
#, fuzzy
msgid "That tag is already being pulled"
msgstr "El nombre '{}' ya está en uso"
#: src/window.py:115
msgid "That tag has been pulled alreay"
msgstr ""
#: src/window.py:118
msgid "Model deleted successfully" msgid "Model deleted successfully"
msgstr "Modelo eliminado exitosamente" msgstr "Modelo eliminado exitosamente"
#: src/window.py:100 #: src/window.py:119
msgid "Model pulled successfully" msgid "Model pulled successfully"
msgstr "Modelo descargado exitosamente" msgstr "Modelo descargado exitosamente"
#: src/window.py:418 #: src/window.py:120
#, fuzzy
msgid "Chat exported successfully"
msgstr "Modelo eliminado exitosamente"
#: src/window.py:121
#, fuzzy
msgid "Chat imported successfully"
msgstr "Modelo descargado exitosamente"
#: src/window.py:471
msgid "Task Complete" msgid "Task Complete"
msgstr "Tarea completada" msgstr "Tarea completada"
#: src/window.py:418 #: src/window.py:471
msgid "Model '{}' pulled successfully." msgid "Model '{}' pulled successfully."
msgstr "El modelo '{}' fue descargado exitosamente" msgstr "El modelo '{}' fue descargado exitosamente"
#: src/window.py:424 #: src/window.py:476
msgid "Pull Model Error" msgid "Pull Model Error"
msgstr "Error Descargando Modelo" msgstr "Error Descargando Modelo"
#: src/window.py:424 #: src/window.py:476
msgid "Failed to pull model '{}' due to network error." msgid "Failed to pull model '{}' due to network error."
msgstr "No se pudo descargar el modelo '{}' debido a un error de red" msgstr "No se pudo descargar el modelo '{}' debido a un error de red"
#: src/window.py:436 #: src/window.py:492
msgid "Stop Model" msgid "Stop Model"
msgstr "Parar Modelo" msgstr "Parar Modelo"
#: src/window.py:437 #: src/window.py:493
msgid "Are you sure you want to stop pulling '{}'?" msgid "Are you sure you want to stop pulling '{}'?"
msgstr "¿Estás seguro de que quieres parar la descarga de '{}'?" msgstr "¿Estás seguro de que quieres parar la descarga de '{}'?"
#: src/window.py:440 src/window.py:478 src/window.py:501 src/window.py:575 #: src/window.py:496 src/window.py:539 src/window.py:562 src/window.py:635
#: src/window.py:636 src/window.py:685 src/window.py:712 src/window.py:745 #: src/window.py:708 src/window.py:734 src/window.py:766 src/window.py:807
#: src/window.py:785
msgid "Cancel" msgid "Cancel"
msgstr "Cancelar" msgstr "Cancelar"
#: src/window.py:441 #: src/window.py:497
msgid "Stop" msgid "Stop"
msgstr "Parar" msgstr "Parar"
#: src/window.py:474 #: src/window.py:535
msgid "Delete Model" msgid "Delete Model"
msgstr "Eliminar Modelo" msgstr "Eliminar Modelo"
#: src/window.py:475 src/window.py:709 #: src/window.py:536 src/window.py:731
msgid "Are you sure you want to delete '{}'?" msgid "Are you sure you want to delete '{}'?"
msgstr "¿Estás seguro de que quieres eliminar '{}'?" msgstr "¿Estás seguro de que quieres eliminar '{}'?"
#: src/window.py:479 src/window.py:713 #: src/window.py:540 src/window.py:735
msgid "Delete" msgid "Delete"
msgstr "Eliminar" msgstr "Eliminar"
#: src/window.py:496 #: src/window.py:557
msgid "Pull Model" msgid "Pull Model"
msgstr "Descargar Modelo" msgstr "Descargar Modelo"
#: src/window.py:497 #: src/window.py:558
msgid "Please select a tag to pull '{}'" msgid "Please select a tag to pull '{}'"
msgstr "Por favor selecciona una etiqueta para descargar '{}'" msgstr "Por favor selecciona una etiqueta para descargar '{}'"
#: src/window.py:502 #: src/window.py:563
msgid "Pull" msgid "Pull"
msgstr "Descargar" msgstr "Descargar"
#: src/window.py:571 src/window.ui:439 #: src/window.py:631 src/window.ui:458
msgid "Clear Chat" msgid "Clear Chat"
msgstr "Limpiar Chat" msgstr "Limpiar Chat"
#: src/window.py:572 #: src/window.py:632
msgid "Are you sure you want to clear the chat?" msgid "Are you sure you want to clear the chat?"
msgstr "¿Estás seguro de que quieres limpiar el chat?" msgstr "¿Estás seguro de que quieres limpiar el chat?"
#: src/window.py:576 #: src/window.py:636
msgid "Clear" msgid "Clear"
msgstr "Limpiar" msgstr "Limpiar"
#: src/window.py:632 #: src/window.py:704
msgid "Save Changes"
msgstr "Guardar Cambios"
#: src/window.py:633
msgid "Do you want to save the URL change?"
msgstr "¿Deseas guardar el cambio de URL?"
#: src/window.py:637
msgid "Discard"
msgstr "Descartar"
#: src/window.py:638
msgid "Save"
msgstr "Guardar"
#: src/window.py:681
msgid "Remove Image" msgid "Remove Image"
msgstr "Remover Imagen" msgstr "Remover Imagen"
#: src/window.py:682 #: src/window.py:705
msgid "Are you sure you want to remove image?" msgid "Are you sure you want to remove image?"
msgstr "¿Estás seguro de que quieres eliminar la imagen?" msgstr "¿Estás seguro de que quieres eliminar la imagen?"
#: src/window.py:686 #: src/window.py:709 src/window.ui:478
msgid "Remove" msgid "Remove"
msgstr "Remover" msgstr "Remover"
#: src/window.py:708 #: src/window.py:730
msgid "Delete Chat" msgid "Delete Chat"
msgstr "Eliminar Chat" msgstr "Eliminar Chat"
#: src/window.py:739 #: src/window.py:760
msgid "Rename Chat" msgid "Rename Chat"
msgstr "Renombrar Chat" msgstr "Renombrar Chat"
#: src/window.py:746 #: src/window.py:767
msgid "Rename" msgid "Rename"
msgstr "Renombrar" msgstr "Renombrar"
#: src/window.py:766 #: src/window.py:788
msgid "The name '{}' is already in use" msgid "The name '{}' is already in use"
msgstr "El nombre '{}' ya está en uso" msgstr "El nombre '{}' ya está en uso"
#: src/window.py:779 #: src/window.py:801
msgid "Create Chat" msgid "Create Chat"
msgstr "Crear Chat" msgstr "Crear Chat"
#: src/window.py:786 #: src/window.py:808
msgid "Create" msgid "Create"
msgstr "Crear" msgstr "Crear"
#: src/window.ui:55 #: src/window.ui:45
msgid "Chats" msgid "Chats"
msgstr "Chats" msgstr "Chats"
#: src/window.ui:65 #: src/window.ui:55
msgid "Import chat"
msgstr "Importar chat"
#: src/window.ui:68
msgid "Export chat"
msgstr "Exportar chat"
#: src/window.ui:81
msgid "New chat" msgid "New chat"
msgstr "Nuevo chat" msgstr "Nuevo chat"
#: src/window.ui:101 #: src/window.ui:117
msgid "Toggle Sidebar" msgid "Toggle Sidebar"
msgstr "Alternar barra de lado" msgstr "Alternar barra de lado"
#: src/window.ui:122 src/window.ui:259 #: src/window.ui:138 src/window.ui:311
msgid "Manage models" msgid "Manage models"
msgstr "Gestionar modelos" msgstr "Gestionar modelos"
#: src/window.ui:136 #: src/window.ui:152
msgid "Menu" msgid "Menu"
msgstr "Menu" msgstr "Menu"
#: src/window.ui:215 #: src/window.ui:227
msgid "Send" msgid "Send"
msgstr "Enviar" msgstr "Enviar"
#: src/window.ui:224 #: src/window.ui:236
msgid "Requires model 'llava' to be selected" msgid "Requires model 'llava' to be selected"
msgstr "Requiere que el modelo 'llava' sea seleccionado" msgstr "Requiere que el modelo 'llava' sea seleccionado"
#: src/window.ui:227 #: src/window.ui:239
msgid "Image" msgid "Image"
msgstr "Imagen" msgstr "Imagen"
#: src/window.ui:344 #: src/window.ui:262 src/window.ui:462 src/window.ui:520
msgid "Preferences"
msgstr "Preferencias"
#: src/window.ui:265 src/window.ui:504
msgid "General"
msgstr "General"
#: src/window.ui:269
msgid "Remote Connection"
msgstr "Conexión Remota"
#: src/window.ui:270
msgid "Manage a remote connection to Ollama"
msgstr "Gestiona una conección remota a Ollama"
#: src/window.ui:273
msgid "Use remote connection"
msgstr "Usar conexión remota"
#: src/window.ui:278
msgid "URL of remote instance"
msgstr "URL de la instancia remota"
#: src/window.ui:286
msgid "Behavior"
msgstr "Comportamiento"
#: src/window.ui:287
msgid "Manage Alpaca's Behavior"
msgstr "Gestiona el comportamiento de Alpaca"
#: src/window.ui:290
msgid "Run in background"
msgstr "Ejecutar en el fondo"
#: src/window.ui:381
msgid "Previous" msgid "Previous"
msgstr "Anterior" msgstr "Anterior"
#: src/window.ui:359 #: src/window.ui:396
msgid "Next" msgid "Next"
msgstr "Siguiente" msgstr "Siguiente"
#: src/window.ui:385 #: src/window.ui:422
msgid "Welcome to Alpaca" msgid "Welcome to Alpaca"
msgstr "Bienvenido a Alpaca" msgstr "Bienvenido a Alpaca"
#: src/window.ui:386 #: src/window.ui:423
msgid "" msgid "Powered by Ollama"
"To get started, please ensure you have an Ollama instance set up. You can " msgstr "Impulsado por Ollama"
"either run Ollama locally on your machine or connect to a remote instance."
msgstr ""
"Para iniciar, por favor asegurate de tener una instancia de Ollama "
"funcional. Puedes correr Ollama localmente o conectarte a una instancia "
"remota."
#: src/window.ui:389 #: src/window.ui:426
msgid "Ollama Website" msgid "Ollama Website"
msgstr "Sitio Web de Ollama" msgstr "Sitio Web de Ollama"
#: src/window.ui:406 #: src/window.ui:443
msgid "" msgid ""
"Alpaca and its developers are not liable for any damages to devices or " "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. " "software resulting from the execution of code generated by an AI model. "
@@ -499,64 +696,76 @@ msgstr ""
"un modelo de IA. Por favor sea precavido y revise el codigo cuidadosamente " "un modelo de IA. Por favor sea precavido y revise el codigo cuidadosamente "
"antes de correrlo" "antes de correrlo"
#: src/window.ui:418 #: src/window.ui:466
msgid "Setup"
msgstr "Setup"
#: src/window.ui:419
msgid ""
"If you are running an Ollama instance locally and haven't modified the "
"default ports, you can use the default URL. Otherwise, please enter the URL "
"of your Ollama instance."
msgstr ""
"Si estás corriendo una instancia local de Ollama y no modificaste los "
"puertos por defecto, puedes usar la URL por defecto. De otra forma, por "
"favor ingresa la URL de tu instancia de Ollama"
#: src/window.ui:443
msgid "Change Server"
msgstr "Cambiar Servidor"
#: src/window.ui:447
msgid "Keyboard Shortcuts" msgid "Keyboard Shortcuts"
msgstr "Atajos de Teclado" msgstr "Atajos de Teclado"
#: src/window.ui:451 #: src/window.ui:470
msgid "About Alpaca" msgid "About Alpaca"
msgstr "Sobre Alpaca" msgstr "Sobre Alpaca"
#: src/window.ui:473 #: src/window.ui:508
msgid "General"
msgstr "General"
#: src/window.ui:477
msgid "Close application" msgid "Close application"
msgstr "Cerrar aplicación" msgstr "Cerrar aplicación"
#: src/window.ui:483 #: src/window.ui:514
msgid "Clear chat" msgid "Clear chat"
msgstr "Limpiar chat" msgstr "Limpiar chat"
#: src/window.ui:489 #: src/window.ui:526
msgid "Change server"
msgstr "Cambiar servidor"
#: src/window.ui:495
msgid "Show shortcuts window" msgid "Show shortcuts window"
msgstr "Mostrar ventana de atajos" msgstr "Mostrar ventana de atajos"
#: src/window.ui:502 #: src/window.ui:533
msgid "Editor" msgid "Editor"
msgstr "Editor" msgstr "Editor"
#: src/window.ui:506 #: src/window.ui:537
msgid "Copy" msgid "Copy"
msgstr "Copiar" msgstr "Copiar"
#: src/window.ui:512 #: src/window.ui:543
msgid "Paste" msgid "Paste"
msgstr "Pegar" msgstr "Pegar"
#: src/window.ui:518 #: src/window.ui:549
msgid "Send Message" msgid "Send Message"
msgstr "Enviar Mensaje" msgstr "Enviar Mensaje"
#~ msgid "Save Changes"
#~ msgstr "Guardar Cambios"
#~ msgid "Do you want to save the URL change?"
#~ msgstr "¿Deseas guardar el cambio de URL?"
#~ msgid "Discard"
#~ msgstr "Descartar"
#~ msgid "Save"
#~ msgstr "Guardar"
#~ msgid ""
#~ "To get started, please ensure you have an Ollama instance set up. You can "
#~ "either run Ollama locally on your machine or connect to a remote instance."
#~ msgstr ""
#~ "Para iniciar, por favor asegurate de tener una instancia de Ollama "
#~ "funcional. Puedes correr Ollama localmente o conectarte a una instancia "
#~ "remota."
#~ msgid "Setup"
#~ msgstr "Setup"
#~ msgid ""
#~ "If you are running an Ollama instance locally and haven't modified the "
#~ "default ports, you can use the default URL. Otherwise, please enter the "
#~ "URL of your Ollama instance."
#~ msgstr ""
#~ "Si estás corriendo una instancia local de Ollama y no modificaste los "
#~ "puertos por defecto, puedes usar la URL por defecto. De otra forma, por "
#~ "favor ingresa la URL de tu instancia de Ollama"
#~ msgid "Change Server"
#~ msgstr "Cambiar Servidor"
#~ msgid "Change server"
#~ msgstr "Cambiar servidor"

899
po/pt_BR.po Normal file
View File

@@ -0,0 +1,899 @@
# Brazilian Portuguese translations for Alpaca.
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-05-24 18:50-0600\n"
"PO-Revision-Date: 2024-05-23 23:29-0600\n"
"Last-Translator: Daimar Stein <daimarstein@pm.me>\n"
"Language-Team: \n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\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 "Converse com vários modelos de IA"
#: data/com.jeffser.Alpaca.metainfo.xml.in:10
msgid "An Ollama client"
msgstr "Um cliente de Ollama"
#: data/com.jeffser.Alpaca.metainfo.xml.in:11
#: data/com.jeffser.Alpaca.metainfo.xml.in:286
msgid "Features"
msgstr "Funcionalidades"
#: data/com.jeffser.Alpaca.metainfo.xml.in:13
#: data/com.jeffser.Alpaca.metainfo.xml.in:288
msgid "Talk to multiple models in the same conversation"
msgstr "Fale com múltiplos modelos na mesma conversa"
#: data/com.jeffser.Alpaca.metainfo.xml.in:14
#: data/com.jeffser.Alpaca.metainfo.xml.in:289
msgid "Pull and delete models from the app"
msgstr "Baixe e delete modelos através do app"
#: data/com.jeffser.Alpaca.metainfo.xml.in:15
#, fuzzy
msgid "Have multiple conversations"
msgstr "Fale com múltiplos modelos na mesma conversa"
#: data/com.jeffser.Alpaca.metainfo.xml.in:16
#, fuzzy
msgid "Image recognition (Only available with LLaVA Model)"
msgstr "Reconhecimento de imagem foi adicionado (modelo llava)"
#: data/com.jeffser.Alpaca.metainfo.xml.in:17
#, fuzzy
msgid "Import and export chats"
msgstr "A opção de importar e exportar conversas foi adicionada"
#: data/com.jeffser.Alpaca.metainfo.xml.in:19 src/window.ui:432
msgid "Disclaimer"
msgstr "Aviso Legal"
#: data/com.jeffser.Alpaca.metainfo.xml.in:20
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 ""
"Esse projeto não é afiliado de nenhuma forma com Ollama. Não sou responsável "
"por quaisquer danos ao seu dispositivo ou software causados por código "
"gerado por qualquer um dos modelos disponíveis."
#: data/com.jeffser.Alpaca.metainfo.xml.in:23
msgid "Jeffry Samuel Eduarte Rojas"
msgstr "Jeffry Samuel Eduarte Rojas"
#: data/com.jeffser.Alpaca.metainfo.xml.in:47
#, fuzzy
msgid "A conversation showing code highlight"
msgstr "Uma conversa envolvendo múltiplos modelos"
#: data/com.jeffser.Alpaca.metainfo.xml.in:51
msgid "A conversation involving multiple models"
msgstr "Uma conversa envolvendo múltiplos modelos"
#: data/com.jeffser.Alpaca.metainfo.xml.in:55
msgid "Managing models"
msgstr "Gerenciando modelos"
#: data/com.jeffser.Alpaca.metainfo.xml.in:66
#, fuzzy
msgid "Quick fix"
msgstr "Consertos Rápidos"
#: data/com.jeffser.Alpaca.metainfo.xml.in:68
#, fuzzy
msgid "Updated Spanish translation"
msgstr "Tradução completa para o Espanhol foi adicionada"
#: data/com.jeffser.Alpaca.metainfo.xml.in:69
msgid "Added compatibility for PNG"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:76
#, fuzzy
msgid "New Update"
msgstr "Atualização Enorme"
#: data/com.jeffser.Alpaca.metainfo.xml.in:78
msgid "Updated model list"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:79
#, fuzzy
msgid "Added image recognition to more models"
msgstr "Reconhecimento de imagem foi adicionado (modelo llava)"
#: data/com.jeffser.Alpaca.metainfo.xml.in:80
msgid "Added Brazilian Portuguese translation (Thanks Daimaar Stein)"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:81
msgid "Refined the general UI (Thanks Nokse22)"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:82
msgid "Added 'delete message' feature"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:83
msgid ""
"Added metadata so that software distributors know that the app is compatible "
"with mobile"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:84
msgid ""
"Changed 'send' shortcut to just the return/enter key (to add a new line use "
"shift+return)"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:91
#, fuzzy
msgid "Bug Fixes"
msgstr "0.2.2 Conserto de Bugs"
#: data/com.jeffser.Alpaca.metainfo.xml.in:93
msgid "Fixed: Minor spelling mistake"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:94
#, fuzzy
msgid "Added 'mobile' as a supported form factor"
msgstr "Suporte para múltiplas conversas foi adicionado!"
#: data/com.jeffser.Alpaca.metainfo.xml.in:95
msgid "Fixed: 'Connection Error' dialog not working properly"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:96
msgid "Fixed: App might freeze randomly on startup"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:97
msgid "Changed 'chats' label on sidebar for 'Alpaca'"
msgstr ""
#: data/com.jeffser.Alpaca.metainfo.xml.in:104
#, fuzzy
msgid "Cool Update"
msgstr "Atualização Legal"
#: data/com.jeffser.Alpaca.metainfo.xml.in:106
#, fuzzy
msgid "Better design for chat window"
msgstr "Design da janela da conversa foi melhorado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:107
#, fuzzy
msgid "Better design for chat sidebar"
msgstr "A interface da barra lateral das conversas foi melhorada"
#: data/com.jeffser.Alpaca.metainfo.xml.in:108
#, fuzzy
msgid "Fixed remote connections"
msgstr "Conexões remotas foram consertadas"
#: data/com.jeffser.Alpaca.metainfo.xml.in:109
msgid "Fixed Ollama restarting in loop"
msgstr "Erro que fazia o Ollama reiniciar em loop foi consertado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:110
msgid "Other cool backend stuff"
msgstr "Outras coisas legais de backend"
#: data/com.jeffser.Alpaca.metainfo.xml.in:117
#, fuzzy
msgid "Huge Update"
msgstr "Atualização Enorme"
#: data/com.jeffser.Alpaca.metainfo.xml.in:119
msgid "Added Ollama as part of Alpaca, Ollama will run in a sandbox"
msgstr "Ollama foi adicionado como parte do Alpaca, executado em sandbox"
#: data/com.jeffser.Alpaca.metainfo.xml.in:120
msgid "Added option to connect to remote instances (how it worked before)"
msgstr ""
"A opção de conectar com uma instância remota (como funcionava antes) foi "
"adicionada"
#: data/com.jeffser.Alpaca.metainfo.xml.in:121
msgid "Added option to import and export chats"
msgstr "A opção de importar e exportar conversas foi adicionada"
#: data/com.jeffser.Alpaca.metainfo.xml.in:122
msgid "Added option to run Alpaca with Ollama in the background"
msgstr "A opção de continuar sendo executado em segundo plano foi adicionada"
#: data/com.jeffser.Alpaca.metainfo.xml.in:123
#, fuzzy
msgid "Added preferences dialog"
msgstr "Diálogo de preferências foi adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:124
#, fuzzy
msgid "Changed the welcome dialog"
msgstr "O diálogo de boas-vindas foi modificado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:126
#: data/com.jeffser.Alpaca.metainfo.xml.in:143
#: data/com.jeffser.Alpaca.metainfo.xml.in:155
#: data/com.jeffser.Alpaca.metainfo.xml.in:174
#: data/com.jeffser.Alpaca.metainfo.xml.in:195
#: data/com.jeffser.Alpaca.metainfo.xml.in:211
#: data/com.jeffser.Alpaca.metainfo.xml.in:227
#: data/com.jeffser.Alpaca.metainfo.xml.in:241
#: data/com.jeffser.Alpaca.metainfo.xml.in:251
#: data/com.jeffser.Alpaca.metainfo.xml.in:269
#: data/com.jeffser.Alpaca.metainfo.xml.in:291
msgid "Please report any errors to the issues page, thank you."
msgstr "Por favor, reportar quaisquer erros na página de issues, obrigado."
#: data/com.jeffser.Alpaca.metainfo.xml.in:134
#, fuzzy
msgid "Yet Another Daily Update"
msgstr "Mais Uma Atualização Diária"
#: data/com.jeffser.Alpaca.metainfo.xml.in:136
#, fuzzy
msgid "Added better UI for 'Manage Models' dialog"
msgstr "Uma melhor interface para 'Gerenciar Modelos' foi adicionada"
#: data/com.jeffser.Alpaca.metainfo.xml.in:137
msgid "Added better UI for the chat sidebar"
msgstr "Uma interface melhor para a barra lateral das conversas foi adicionada"
#: data/com.jeffser.Alpaca.metainfo.xml.in:138
msgid ""
"Replaced model description with a button to open Ollama's website for the "
"model"
msgstr ""
"A descrição dos modelos foi substituída com um botão para abrir o site do "
"Ollama para cada modelo"
#: data/com.jeffser.Alpaca.metainfo.xml.in:139
msgid "Added myself to the credits as the spanish translator"
msgstr "Me adicionei aos créditos como o tradutor para espanhol"
#: data/com.jeffser.Alpaca.metainfo.xml.in:140
msgid "Using XDG properly to get config folder"
msgstr "Agora a spec XDG é usada propriamente para ter uma pasta de config"
#: data/com.jeffser.Alpaca.metainfo.xml.in:141
#, fuzzy
msgid "Update for translations"
msgstr "Melhor suporte a traduções"
#: data/com.jeffser.Alpaca.metainfo.xml.in:151
#, fuzzy
msgid "Quick Fix"
msgstr "Consertos Rápidos"
#: data/com.jeffser.Alpaca.metainfo.xml.in:153
msgid "The last update had some mistakes in the description of the update"
msgstr "A última atualização teve alguns erros na descrição da mesma"
#: data/com.jeffser.Alpaca.metainfo.xml.in:163
msgid "Another Daily Update"
msgstr "Outra Atualização Diária"
#: data/com.jeffser.Alpaca.metainfo.xml.in:165
msgid "Added full Spanish translation"
msgstr "Tradução completa para o Espanhol foi adicionada"
#: data/com.jeffser.Alpaca.metainfo.xml.in:166
#, fuzzy
msgid "Added support for background pulling of multiple models"
msgstr ""
"Suporte para o download de múltiplos modelos em segundo planofoi adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:167
msgid "Added interrupt button"
msgstr "Um botão de interromper foi adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:168
#, fuzzy
msgid "Added basic shortcuts"
msgstr "Atalhos de teclado básicos foram adicionados"
#: data/com.jeffser.Alpaca.metainfo.xml.in:169
msgid "Better translation support"
msgstr "Melhor suporte a traduções"
#: data/com.jeffser.Alpaca.metainfo.xml.in:170
msgid ""
"User can now leave chat name empty when creating a new one, it will add a "
"placeholder name"
msgstr ""
"O usuário agora pode deixar o nome da conversa vazio ao criar uma nova, um "
"nome substituto será gerado em seu lugar"
#: data/com.jeffser.Alpaca.metainfo.xml.in:171
msgid "Better scalling for different window sizes"
msgstr "Melhor escala para diferentes tamanhos de janela"
#: data/com.jeffser.Alpaca.metainfo.xml.in:172
#, fuzzy
msgid "Fixed: Can't close app if first time setup fails"
msgstr ""
"Consertado: Não era possível fechar o app caso a configuração inicial "
"falhasse"
#: data/com.jeffser.Alpaca.metainfo.xml.in:182
msgid "Really Big Update"
msgstr "Uma Atualização Realmente Grande"
#: data/com.jeffser.Alpaca.metainfo.xml.in:184
msgid "Added multiple chats support!"
msgstr "Suporte para múltiplas conversas foi adicionado!"
#: data/com.jeffser.Alpaca.metainfo.xml.in:185
msgid "Added Pango Markup support (bold, list, title, subtitle, monospace)"
msgstr ""
"Suporte para Pango Markup (negrito, lista, título, subtítulo, monospace) foi "
"adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:186
msgid "Added autoscroll if the user is at the bottom of the chat"
msgstr ""
"Rolagem automática caso o usuário esteja na mensagem mais recente da "
"conversa foi adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:187
msgid "Added support for multiple tags on a single model"
msgstr "Suporte para múltiplas tags em um único modelo foi adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:188
msgid "Added better model management dialog"
msgstr "Um melhor diálogo de gerenciamento de modelos foi adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:189
msgid "Added loading spinner when sending message"
msgstr "Um spinner de carregamento ao mandar mensagens foi adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:190
msgid "Added notifications if app is not active and a model pull finishes"
msgstr ""
"Notificações caso o app não esteja ativo e o download de um modelo for "
"finalizado foram adicionadas"
#: data/com.jeffser.Alpaca.metainfo.xml.in:191
msgid "Added new symbolic icon"
msgstr "Um novo ícone simbólico foi adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:192
msgid "Added frame to message textview widget"
msgstr "Quadro ao redor do textview do widget de mensagem foi adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:193
msgid "Fixed \"code blocks shouldn't be editable\""
msgstr "Consertado \"blocos de código não deveriam ser editáveis\""
#: data/com.jeffser.Alpaca.metainfo.xml.in:203
#: data/com.jeffser.Alpaca.metainfo.xml.in:260
msgid "Big Update"
msgstr "Grande Atualização"
#: data/com.jeffser.Alpaca.metainfo.xml.in:205
msgid "Added code highlighting"
msgstr "Highlighting de código foi adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:206
msgid "Added image recognition (llava model)"
msgstr "Reconhecimento de imagem foi adicionado (modelo llava)"
#: data/com.jeffser.Alpaca.metainfo.xml.in:207
msgid "Added multiline prompt"
msgstr "Prompt de múltiplas linhas foi adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:208
msgid "Fixed some small bugs"
msgstr "Pequenos erros foram consertados"
#: data/com.jeffser.Alpaca.metainfo.xml.in:209
msgid "General optimization"
msgstr "Otimização geral"
#: data/com.jeffser.Alpaca.metainfo.xml.in:219
msgid "Fixes and features"
msgstr "Consertos e funcionalidades"
#: data/com.jeffser.Alpaca.metainfo.xml.in:221
msgid "Russian translation (thanks github/alexkdeveloper)"
msgstr "Tradução para Russo (obrigado, github/alexkdeveloper)"
#: data/com.jeffser.Alpaca.metainfo.xml.in:222
msgid "Fixed: Cannot close app on first setup"
msgstr "Consertado: Não era possível fechar o app no setup inicial"
#: data/com.jeffser.Alpaca.metainfo.xml.in:223
msgid "Fixed: Brand colors for Flathub"
msgstr "Consertado: Cores de branding para o Flathub"
#: data/com.jeffser.Alpaca.metainfo.xml.in:224
msgid "Fixed: App description"
msgstr "Consertada: Descrição do app"
#: data/com.jeffser.Alpaca.metainfo.xml.in:225
msgid "Fixed: Only show 'save changes dialog' when you actually change the url"
msgstr ""
"Consertado: Somente exibir 'diálogo de salvamento de mudanças' quando "
"vocêrealmente mudar o URL"
#: data/com.jeffser.Alpaca.metainfo.xml.in:235
msgid "0.2.2 Bug fixes"
msgstr "0.2.2 Conserto de Bugs"
#: data/com.jeffser.Alpaca.metainfo.xml.in:237
msgid "Toast messages appearing behind dialogs"
msgstr "Mensagens toast aparecendo atrás de diálogos"
#: data/com.jeffser.Alpaca.metainfo.xml.in:238
msgid "Local model list not updating when changing servers"
msgstr "Lista de modelos locais não é atualizada ao mudar de servidor"
#: data/com.jeffser.Alpaca.metainfo.xml.in:239
msgid "Closing the setup dialog closes the whole app"
msgstr "Fechar o diálogo de primeira configuração fecha o app"
#: data/com.jeffser.Alpaca.metainfo.xml.in:249
msgid "0.2.1 Data saving fix"
msgstr "0.2.1 Conserto de Salvamento de Dados"
#: data/com.jeffser.Alpaca.metainfo.xml.in:250
msgid ""
"The app didn't save the config files and chat history to the right "
"directory, this is now fixed"
msgstr ""
"O app não salvava os arquivos de config. e o histórico de conversa para a "
"pasta correta, isso foi corrigido."
#: data/com.jeffser.Alpaca.metainfo.xml.in:259
msgid "0.2.0"
msgstr "0.2.0"
#: data/com.jeffser.Alpaca.metainfo.xml.in:261
msgid "New Features"
msgstr "Novas Funcionalidades"
#: data/com.jeffser.Alpaca.metainfo.xml.in:263
msgid "Restore chat after closing the app"
msgstr "Restaura a conversa após fechar o app"
#: data/com.jeffser.Alpaca.metainfo.xml.in:264
msgid "A button to clear the chat"
msgstr "Um botão para limpar a conversa"
#: data/com.jeffser.Alpaca.metainfo.xml.in:265
msgid "Fixed multiple bugs involving how messages are shown"
msgstr ""
"Múltiplos bugs envolvendo como mensagens são exibidas foram consertados"
#: data/com.jeffser.Alpaca.metainfo.xml.in:266
msgid "Added welcome dialog"
msgstr "Um diálogo de boas-vindas foi adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:267
msgid "More stability"
msgstr "Maior estabilidade"
#: data/com.jeffser.Alpaca.metainfo.xml.in:277
msgid "0.1.2 Quick fixes"
msgstr "0.1.2 Consertos Rápidos"
#: data/com.jeffser.Alpaca.metainfo.xml.in:278
msgid ""
"This release fixes some metadata needed to have a proper Flatpak application"
msgstr ""
"Este lançamento conserta parte dos metadados necessários para ter um app em "
"Flatpak corretamente"
#: data/com.jeffser.Alpaca.metainfo.xml.in:284
msgid "0.1.1 Stable Release"
msgstr "0.1.1 Lançamento Estável"
#: data/com.jeffser.Alpaca.metainfo.xml.in:285
msgid "This is the first public version of Alpaca"
msgstr "Essa é a primeira versão pública de Alpaca"
#: src/window.py:57 src/window.py:783
msgid "New Chat"
msgstr "Nova Conversa"
#: src/window.py:102
msgid "An error occurred"
msgstr "Ocorreu um erro"
#: src/window.py:103
msgid "Failed to connect to server"
msgstr "Falha ao conectar com o servidor"
#: src/window.py:104
msgid "Could not list local models"
msgstr "Não foi possível listar modelos locais"
#: src/window.py:105
msgid "Could not delete model"
msgstr "Não foi possível excluir o modelo"
#: src/window.py:106
msgid "Could not pull model"
msgstr "Não foi possível baixar o modelo"
#: src/window.py:107
msgid "Cannot open image"
msgstr "Não foi possível abrir a imagem"
#: src/window.py:108
msgid "Cannot delete chat because it's the only one left"
msgstr "Não foi possível excluir a conversa por ser a única restante"
#: src/window.py:109
msgid "There was an error with the local Ollama instance, so it has been reset"
msgstr "Houve um erro com a instância local Ollama, a mesma foi desconfigurada"
#: src/window.py:112
msgid "Please select a model before chatting"
msgstr "Por favor, selecione um modelo antes de conversar"
#: src/window.py:113
msgid "Chat cannot be cleared while receiving a message"
msgstr "A conversa não pode ser limpa enquanto gera uma mensagem"
#: src/window.py:114
#, fuzzy
msgid "That tag is already being pulled"
msgstr "Esta tag já está sendo baixada"
#: src/window.py:115
#, fuzzy
msgid "That tag has been pulled already"
msgstr "Esta tag já foi baixada"
#: src/window.py:118
msgid "Model deleted successfully"
msgstr "Modelo excluído com sucesso"
#: src/window.py:119
msgid "Model pulled successfully"
msgstr "Modelo baixado com sucesso"
#: src/window.py:120
#, fuzzy
msgid "Chat exported successfully"
msgstr "Conversa exportada com sucesso"
#: src/window.py:121
#, fuzzy
msgid "Chat imported successfully"
msgstr "Conversa importada com sucesso"
#: src/window.py:476
msgid "Task Complete"
msgstr "Tarefa Concluída"
#: src/window.py:476
msgid "Model '{}' pulled successfully."
msgstr "O modelo '{}' foi baixado com sucesso"
#: src/window.py:481
msgid "Pull Model Error"
msgstr "Erro ao Baixar Modelo"
#: src/window.py:481
msgid "Failed to pull model '{}' due to network error."
msgstr "Não foi possível baixar o modelo '{}' devido a um erro de rede."
#: src/window.py:496
msgid "Stop Model"
msgstr "Parar Modelo"
#: src/window.py:497
msgid "Are you sure you want to stop pulling '{}'?"
msgstr "Tem certeza que deseja parar o download de '{}'?"
#: src/window.py:500 src/window.py:543 src/window.py:566 src/window.py:638
#: src/window.py:711 src/window.py:737 src/window.py:769 src/window.py:810
msgid "Cancel"
msgstr "Cancelar"
#: src/window.py:501
msgid "Stop"
msgstr "Parar"
#: src/window.py:539
msgid "Delete Model"
msgstr "Excluir Modelo"
#: src/window.py:540 src/window.py:734
msgid "Are you sure you want to delete '{}'?"
msgstr "Tem certeza que deseja excluir '{}'?"
#: src/window.py:544 src/window.py:738
msgid "Delete"
msgstr "Excluir"
#: src/window.py:561
msgid "Pull Model"
msgstr "Baixar Modelo"
#: src/window.py:562
msgid "Please select a tag to pull '{}'"
msgstr "Por favor, selecione uma tag para baixar '{}'"
#: src/window.py:567
msgid "Pull"
msgstr "Baixar"
#: src/window.py:634 src/window.ui:446
msgid "Clear Chat"
msgstr "Limpar Conversa"
#: src/window.py:635
msgid "Are you sure you want to clear the chat?"
msgstr "Tem certeza de que deseja limpar a conversa?"
#: src/window.py:639
msgid "Clear"
msgstr "Limpar"
#: src/window.py:707
msgid "Remove Image"
msgstr "Remover Imagem"
#: src/window.py:708
msgid "Are you sure you want to remove image?"
msgstr "Tem certeza que quer remover a imagem?"
#: src/window.py:712 src/window.ui:466
msgid "Remove"
msgstr "Remover"
#: src/window.py:733
msgid "Delete Chat"
msgstr "Excluir Conversa"
#: src/window.py:763
msgid "Rename Chat"
msgstr "Renomear Conversa"
#: src/window.py:770
msgid "Rename"
msgstr "Renomear"
#: src/window.py:791
msgid "The name '{}' is already in use"
msgstr "O nome '{}' já está em uso"
#: src/window.py:804
msgid "Create Chat"
msgstr "Criar Conversa"
#: src/window.py:811
msgid "Create"
msgstr "Criar"
#: src/window.py:914
#, fuzzy
msgid "Connection Error"
msgstr "Conexão Remota"
#: src/window.py:915
msgid "The remote instance has disconnected"
msgstr ""
#: src/window.py:919
#, fuzzy
msgid "Close Alpaca"
msgstr "Bem-vindo(a) a Alpaca"
#: src/window.py:920
#, fuzzy
msgid "Use local instance"
msgstr "URL da instância remota"
#: src/window.py:921
msgid "Connect"
msgstr ""
#: src/window.ui:40
msgid "New chat"
msgstr "Nova conversa"
#: src/window.ui:49
msgid "Import chat"
msgstr "Importar conversa"
#: src/window.ui:58
msgid "Export chat"
msgstr "Exportar conversa"
#: src/window.ui:90
msgid "Toggle Sidebar"
msgstr "Alternar barra lateral"
#: src/window.ui:111 src/window.ui:303
msgid "Manage models"
msgstr "Gerenciar modelos"
#: src/window.ui:125
msgid "Menu"
msgstr "Menu"
#: src/window.ui:216
msgid "Send"
msgstr "Enviar"
#: src/window.ui:225
msgid "Only available on selected models"
msgstr ""
#: src/window.ui:228
msgid "Image"
msgstr "Imagem"
#: src/window.ui:254 src/window.ui:450 src/window.ui:508
msgid "Preferences"
msgstr "Preferências"
#: src/window.ui:257 src/window.ui:492
msgid "General"
msgstr "Geral"
#: src/window.ui:261
msgid "Remote Connection"
msgstr "Conexão Remota"
#: src/window.ui:262
msgid "Manage a remote connection to Ollama"
msgstr "Gerencia uma conexão remota com Ollama"
#: src/window.ui:265
msgid "Use remote connection"
msgstr "Usar conexão remota"
#: src/window.ui:270
msgid "URL of remote instance"
msgstr "URL da instância remota"
#: src/window.ui:278
msgid "Behavior"
msgstr "Comportamento"
#: src/window.ui:279
msgid "Manage Alpaca's Behavior"
msgstr "Gerencia o Comportamento de Alpaca"
#: src/window.ui:282
msgid "Run in background"
msgstr "Executar em segundo plano"
#: src/window.ui:371
msgid "Previous"
msgstr "Anterior"
#: src/window.ui:386
msgid "Next"
msgstr "Próximo"
#: src/window.ui:412
msgid "Welcome to Alpaca"
msgstr "Bem-vindo(a) a Alpaca"
#: src/window.ui:413
msgid "Powered by Ollama"
msgstr "Com tecnologia Ollama"
#: src/window.ui:416
msgid "Ollama Website"
msgstr "Site do Ollama"
#: src/window.ui:433
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 e seus desenvolvedores não são responsáveis por quaisquer danos "
"causados a dispositivos ou software resultante da execução de código gerado "
"por um modelo de IA. Por favor, tenha cuidado e revise o código com cuidado "
"antes de executá-lo."
#: src/window.ui:454
msgid "Keyboard Shortcuts"
msgstr "Atalhos de Teclado"
#: src/window.ui:458
msgid "About Alpaca"
msgstr "Sobre Alpaca"
#: src/window.ui:496
msgid "Close application"
msgstr "Fechar aplicativo"
#: src/window.ui:502
msgid "Clear chat"
msgstr "Limpar chat"
#: src/window.ui:514
msgid "Show shortcuts window"
msgstr "Mostrar janela de atalhos"
#: src/window.ui:521
msgid "Editor"
msgstr "Editor"
#: src/window.ui:525
msgid "Copy"
msgstr "Copiar"
#: src/window.ui:531
msgid "Paste"
msgstr "Colar"
#: src/window.ui:537
msgid "Insert new line"
msgstr ""
#: src/window.ui:543
msgid "Send Message"
msgstr "Enviar Mensagem"
#~ msgid "Welcome dialog"
#~ msgstr "Diálogo de Boas-vindas"
#~ msgid "Chats"
#~ msgstr "Conversas"
#~ msgid "Requires model 'llava' to be selected"
#~ msgstr "Requer que um modelo 'llava' esteja selecionado"
#~ msgid "Save Changes"
#~ msgstr "Salvar Mudanças"
#~ msgid "Do you want to save the URL change?"
#~ msgstr "Deseja salvar as mudanças na URL?"
#~ msgid "Discard"
#~ msgstr "Descartar"
#~ msgid "Save"
#~ msgstr "Salvar"
#~ msgid ""
#~ "To get started, please ensure you have an Ollama instance set up. You can "
#~ "either run Ollama locally on your machine or connect to a remote instance."
#~ msgstr ""
#~ "Para iniciar, por favor assegure-se que você tem uma insância Ollama "
#~ "configurada e funcional. Você pode rodar Ollama localmente em sua máquina "
#~ "ou através de uma instância remota."
#~ msgid "Setup"
#~ msgstr "Setup"
#~ msgid ""
#~ "If you are running an Ollama instance locally and haven't modified the "
#~ "default ports, you can use the default URL. Otherwise, please enter the "
#~ "URL of your Ollama instance."
#~ msgstr ""
#~ "Caso esteja rodando uma instância Ollama localmente e não modificou as "
#~ "portas padrão, você pode usar a URL padrão. Caso contrário, por favor, "
#~ "insira a URL da sua instância Ollama."
#~ msgid "Change Server"
#~ msgstr "Mudar Servidor"
#~ msgid "Change server"
#~ msgstr "Mudar servidor"

770
po/pt_BR.po~ Normal file
View File

@@ -0,0 +1,770 @@
# Brazilian Portuguese translations for Alpaca.
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-05-23 22:38-0600\n"
"PO-Revision-Date: 2024-05-23 23:29-0600\n"
"Last-Translator: Daimar Stein <daimarstein@pm.me>\n"
"Language-Team: \n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\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
msgid "Chat with multiple AI models"
msgstr "Converse com vários modelos de IA"
#: data/com.jeffser.Alpaca.metainfo.xml.in:10
msgid "An Ollama client"
msgstr "Um cliente de Ollama"
#: data/com.jeffser.Alpaca.metainfo.xml.in:11
#: data/com.jeffser.Alpaca.metainfo.xml.in:239
msgid "Features"
msgstr "Funcionalidades"
#: data/com.jeffser.Alpaca.metainfo.xml.in:13
#: data/com.jeffser.Alpaca.metainfo.xml.in:241
msgid "Talk to multiple models in the same conversation"
msgstr "Fale com múltiplos modelos na mesma conversa"
#: data/com.jeffser.Alpaca.metainfo.xml.in:14
#: data/com.jeffser.Alpaca.metainfo.xml.in:242
msgid "Pull and delete models from the app"
msgstr "Baixe e delete modelos através do app"
#: data/com.jeffser.Alpaca.metainfo.xml.in:16 src/window.ui:442
msgid "Disclaimer"
msgstr "Aviso Legal"
#: data/com.jeffser.Alpaca.metainfo.xml.in:17
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 ""
"Esse projeto não é afiliado de nenhuma forma com Ollama. Não sou "
"responsável por quaisquer danos ao seu dispositivo ou software causados "
"por código gerado por qualquer um dos modelos disponíveis."
#: data/com.jeffser.Alpaca.metainfo.xml.in:20
msgid "Jeffry Samuel Eduarte Rojas"
msgstr "Jeffry Samuel Eduarte Rojas"
#: data/com.jeffser.Alpaca.metainfo.xml.in:38
msgid "Welcome dialog"
msgstr "Diálogo de Boas-vindas"
#: data/com.jeffser.Alpaca.metainfo.xml.in:42
msgid "A conversation involving multiple models"
msgstr "Uma conversa envolvendo múltiplos modelos"
#: data/com.jeffser.Alpaca.metainfo.xml.in:46
msgid "Managing models"
msgstr "Gerenciando modelos"
#: data/com.jeffser.Alpaca.metainfo.xml.in:57
#, fuzzy
msgid "Cool Update"
msgstr "Atualização Legal"
#: data/com.jeffser.Alpaca.metainfo.xml.in:59
#, fuzzy
msgid "Better design for chat window"
msgstr "Design da janela da conversa foi melhorado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:60
#, fuzzy
msgid "Better design for chat sidebar"
msgstr "A interface da barra lateral das conversas foi melhorada"
#: data/com.jeffser.Alpaca.metainfo.xml.in:61
#, fuzzy
msgid "Fixed remote connections"
msgstr "Conexões remotas foram consertadas"
#: data/com.jeffser.Alpaca.metainfo.xml.in:62
msgid "Fixed Ollama restarting in loop"
msgstr "Erro que fazia o Ollama reiniciar em loop foi consertado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:63
msgid "Other cool backend stuff"
msgstr "Outras coisas legais de backend"
#: data/com.jeffser.Alpaca.metainfo.xml.in:70
#, fuzzy
msgid "Huge Update"
msgstr "Atualização Enorme"
#: data/com.jeffser.Alpaca.metainfo.xml.in:72
msgid "Added Ollama as part of Alpaca, Ollama will run in a sandbox"
msgstr "Ollama foi adicionado como parte do Alpaca, executado em sandbox"
#: data/com.jeffser.Alpaca.metainfo.xml.in:73
msgid "Added option to connect to remote instances (how it worked before)"
msgstr "A opção de conectar com uma instância remota (como funcionava antes) foi adicionada"
#: data/com.jeffser.Alpaca.metainfo.xml.in:74
msgid "Added option to import and export chats"
msgstr "A opção de importar e exportar conversas foi adicionada"
#: data/com.jeffser.Alpaca.metainfo.xml.in:75
msgid "Added option to run Alpaca with Ollama in the background"
msgstr "A opção de continuar sendo executado em segundo plano foi adicionada"
#: data/com.jeffser.Alpaca.metainfo.xml.in:76
#, fuzzy
msgid "Added preferences dialog"
msgstr "Diálogo de preferências foi adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:77
#, fuzzy
msgid "Changed the welcome dialog"
msgstr "O diálogo de boas-vindas foi modificado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:79
#: data/com.jeffser.Alpaca.metainfo.xml.in:96
#: data/com.jeffser.Alpaca.metainfo.xml.in:108
#: data/com.jeffser.Alpaca.metainfo.xml.in:127
#: data/com.jeffser.Alpaca.metainfo.xml.in:148
#: data/com.jeffser.Alpaca.metainfo.xml.in:164
#: data/com.jeffser.Alpaca.metainfo.xml.in:180
#: data/com.jeffser.Alpaca.metainfo.xml.in:194
#: data/com.jeffser.Alpaca.metainfo.xml.in:204
#: data/com.jeffser.Alpaca.metainfo.xml.in:222
#: data/com.jeffser.Alpaca.metainfo.xml.in:244
msgid "Please report any errors to the issues page, thank you."
msgstr "Por favor, reportar quaisquer erros na página de issues, obrigado."
#: data/com.jeffser.Alpaca.metainfo.xml.in:87
#, fuzzy
msgid "Yet Another Daily Update"
msgstr "Mais Uma Atualização Diária"
#: data/com.jeffser.Alpaca.metainfo.xml.in:89
#, fuzzy
msgid "Added better UI for 'Manage Models' dialog"
msgstr "Uma melhor interface para 'Gerenciar Modelos' foi adicionada"
#: data/com.jeffser.Alpaca.metainfo.xml.in:90
msgid "Added better UI for the chat sidebar"
msgstr "Uma interface melhor para a barra lateral das conversas foi adicionada"
#: data/com.jeffser.Alpaca.metainfo.xml.in:91
msgid ""
"Replaced model description with a button to open Ollama's website for the "
"model"
msgstr ""
"A descrição dos modelos foi substituída com um botão para abrir o site do "
"Ollama para cada modelo"
#: data/com.jeffser.Alpaca.metainfo.xml.in:92
msgid "Added myself to the credits as the spanish translator"
msgstr "Me adicionei aos créditos como o tradutor para espanhol"
#: data/com.jeffser.Alpaca.metainfo.xml.in:93
msgid "Using XDG properly to get config folder"
msgstr "Agora a spec XDG é usada propriamente para ter uma pasta de config"
#: data/com.jeffser.Alpaca.metainfo.xml.in:94
#, fuzzy
msgid "Update for translations"
msgstr "Melhor suporte a traduções"
#: data/com.jeffser.Alpaca.metainfo.xml.in:104
#, fuzzy
msgid "Quick Fix"
msgstr "Consertos Rápidos"
#: data/com.jeffser.Alpaca.metainfo.xml.in:106
msgid "The last update had some mistakes in the description of the update"
msgstr ""
"A última atualização teve alguns erros na descrição da mesma"
#: data/com.jeffser.Alpaca.metainfo.xml.in:116
msgid "Another Daily Update"
msgstr "Outra Atualização Diária"
#: data/com.jeffser.Alpaca.metainfo.xml.in:118
msgid "Added full Spanish translation"
msgstr "Tradução completa para o Espanhol foi adicionada"
#: data/com.jeffser.Alpaca.metainfo.xml.in:119
#, fuzzy
msgid "Added support for background pulling of multiple models"
msgstr "Suporte para o download de múltiplos modelos em segundo plano"
"foi adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:120
msgid "Added interrupt button"
msgstr "Um botão de interromper foi adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:121
#, fuzzy
msgid "Added basic shortcuts"
msgstr "Atalhos de teclado básicos foram adicionados"
#: data/com.jeffser.Alpaca.metainfo.xml.in:122
msgid "Better translation support"
msgstr "Melhor suporte a traduções"
#: data/com.jeffser.Alpaca.metainfo.xml.in:123
msgid ""
"User can now leave chat name empty when creating a new one, it will add a "
"placeholder name"
msgstr ""
"O usuário agora pode deixar o nome da conversa vazio ao criar uma nova, um "
"nome substituto será gerado em seu lugar"
#: data/com.jeffser.Alpaca.metainfo.xml.in:124
msgid "Better scalling for different window sizes"
msgstr "Melhor escala para diferentes tamanhos de janela"
#: data/com.jeffser.Alpaca.metainfo.xml.in:125
#, fuzzy
msgid "Fixed: Can't close app if first time setup fails"
msgstr "Consertado: Não era possível fechar o app caso a configuração "
"inicial falhasse"
#: data/com.jeffser.Alpaca.metainfo.xml.in:135
msgid "Really Big Update"
msgstr "Uma Atualização Realmente Grande"
#: data/com.jeffser.Alpaca.metainfo.xml.in:137
msgid "Added multiple chats support!"
msgstr "Suporte para múltiplas conversas foi adicionado!"
#: data/com.jeffser.Alpaca.metainfo.xml.in:138
msgid "Added Pango Markup support (bold, list, title, subtitle, monospace)"
msgstr ""
"Suporte para Pango Markup (negrito, lista, título, subtítulo, monospace) "
"foi adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:139
msgid "Added autoscroll if the user is at the bottom of the chat"
msgstr ""
"Rolagem automática caso o usuário esteja na mensagem mais recente da "
"conversa foi adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:140
msgid "Added support for multiple tags on a single model"
msgstr "Suporte para múltiplas tags em um único modelo foi adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:141
msgid "Added better model management dialog"
msgstr "Um melhor diálogo de gerenciamento de modelos foi adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:142
msgid "Added loading spinner when sending message"
msgstr "Um spinner de carregamento ao mandar mensagens foi adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:143
msgid "Added notifications if app is not active and a model pull finishes"
msgstr ""
"Notificações caso o app não esteja ativo e o download de um modelo for "
"finalizado foram adicionadas"
#: data/com.jeffser.Alpaca.metainfo.xml.in:144
msgid "Added new symbolic icon"
msgstr "Um novo ícone simbólico foi adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:145
msgid "Added frame to message textview widget"
msgstr "Quadro ao redor do textview do widget de mensagem foi adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:146
msgid "Fixed \"code blocks shouldn't be editable\""
msgstr "Consertado \"blocos de código não deveriam ser editáveis\""
#: data/com.jeffser.Alpaca.metainfo.xml.in:156
#: data/com.jeffser.Alpaca.metainfo.xml.in:213
msgid "Big Update"
msgstr "Grande Atualização"
#: data/com.jeffser.Alpaca.metainfo.xml.in:158
msgid "Added code highlighting"
msgstr "Highlighting de código foi adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:159
msgid "Added image recognition (llava model)"
msgstr "Reconhecimento de imagem foi adicionado (modelo llava)"
#: data/com.jeffser.Alpaca.metainfo.xml.in:160
msgid "Added multiline prompt"
msgstr "Prompt de múltiplas linhas foi adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:161
msgid "Fixed some small bugs"
msgstr "Pequenos erros foram consertados"
#: data/com.jeffser.Alpaca.metainfo.xml.in:162
msgid "General optimization"
msgstr "Otimização geral"
#: data/com.jeffser.Alpaca.metainfo.xml.in:172
msgid "Fixes and features"
msgstr "Consertos e funcionalidades"
#: data/com.jeffser.Alpaca.metainfo.xml.in:174
msgid "Russian translation (thanks github/alexkdeveloper)"
msgstr "Tradução para Russo (obrigado, github/alexkdeveloper)"
#: data/com.jeffser.Alpaca.metainfo.xml.in:175
msgid "Fixed: Cannot close app on first setup"
msgstr "Consertado: Não era possível fechar o app no setup inicial"
#: data/com.jeffser.Alpaca.metainfo.xml.in:176
msgid "Fixed: Brand colors for Flathub"
msgstr "Consertado: Cores de branding para o Flathub"
#: data/com.jeffser.Alpaca.metainfo.xml.in:177
msgid "Fixed: App description"
msgstr "Consertada: Descrição do app"
#: data/com.jeffser.Alpaca.metainfo.xml.in:178
msgid "Fixed: Only show 'save changes dialog' when you actually change the url"
msgstr ""
"Consertado: Somente exibir 'diálogo de salvamento de mudanças' quando você"
"realmente mudar o URL"
#: data/com.jeffser.Alpaca.metainfo.xml.in:188
msgid "0.2.2 Bug fixes"
msgstr "0.2.2 Conserto de Bugs"
#: data/com.jeffser.Alpaca.metainfo.xml.in:190
msgid "Toast messages appearing behind dialogs"
msgstr "Mensagens toast aparecendo atrás de diálogos"
#: data/com.jeffser.Alpaca.metainfo.xml.in:191
msgid "Local model list not updating when changing servers"
msgstr ""
"Lista de modelos locais não é atualizada ao mudar de servidor"
#: data/com.jeffser.Alpaca.metainfo.xml.in:192
msgid "Closing the setup dialog closes the whole app"
msgstr "Fechar o diálogo de primeira configuração fecha o app"
#: data/com.jeffser.Alpaca.metainfo.xml.in:202
msgid "0.2.1 Data saving fix"
msgstr "0.2.1 Conserto de Salvamento de Dados"
#: data/com.jeffser.Alpaca.metainfo.xml.in:203
msgid ""
"The app didn't save the config files and chat history to the right "
"directory, this is now fixed"
msgstr ""
"O app não salvava os arquivos de config. e o histórico de conversa para "
"a pasta correta, isso foi corrigido."
#: data/com.jeffser.Alpaca.metainfo.xml.in:212
msgid "0.2.0"
msgstr "0.2.0"
#: data/com.jeffser.Alpaca.metainfo.xml.in:214
msgid "New Features"
msgstr "Novas Funcionalidades"
#: data/com.jeffser.Alpaca.metainfo.xml.in:216
msgid "Restore chat after closing the app"
msgstr "Restaura a conversa após fechar o app"
#: data/com.jeffser.Alpaca.metainfo.xml.in:217
msgid "A button to clear the chat"
msgstr "Um botão para limpar a conversa"
#: data/com.jeffser.Alpaca.metainfo.xml.in:218
msgid "Fixed multiple bugs involving how messages are shown"
msgstr "Múltiplos bugs envolvendo como mensagens são exibidas foram consertados"
#: data/com.jeffser.Alpaca.metainfo.xml.in:219
msgid "Added welcome dialog"
msgstr "Um diálogo de boas-vindas foi adicionado"
#: data/com.jeffser.Alpaca.metainfo.xml.in:220
msgid "More stability"
msgstr "Maior estabilidade"
#: data/com.jeffser.Alpaca.metainfo.xml.in:230
msgid "0.1.2 Quick fixes"
msgstr "0.1.2 Consertos Rápidos"
#: data/com.jeffser.Alpaca.metainfo.xml.in:231
msgid ""
"This release fixes some metadata needed to have a proper Flatpak application"
msgstr ""
"Este lançamento conserta parte dos metadados necessários para ter um app em "
"Flatpak corretamente"
#: data/com.jeffser.Alpaca.metainfo.xml.in:237
msgid "0.1.1 Stable Release"
msgstr "0.1.1 Lançamento Estável"
#: data/com.jeffser.Alpaca.metainfo.xml.in:238
msgid "This is the first public version of Alpaca"
msgstr "Essa é a primeira versão pública de Alpaca"
#: src/window.py:56 src/window.py:780
msgid "New Chat"
msgstr "Nova Conversa"
#: src/window.py:102
msgid "An error occurred"
msgstr "Ocorreu um erro"
#: src/window.py:103
msgid "Failed to connect to server"
msgstr "Falha ao conectar com o servidor"
#: src/window.py:104
msgid "Could not list local models"
msgstr "Não foi possível listar modelos locais"
#: src/window.py:105
msgid "Could not delete model"
msgstr "Não foi possível excluir o modelo"
#: src/window.py:106
msgid "Could not pull model"
msgstr "Não foi possível baixar o modelo"
#: src/window.py:107
msgid "Cannot open image"
msgstr "Não foi possível abrir a imagem"
#: src/window.py:108
msgid "Cannot delete chat because it's the only one left"
msgstr "Não foi possível excluir a conversa por ser a única restante"
#: src/window.py:109
msgid "There was an error with the local Ollama instance, so it has been reset"
msgstr "Houve um erro com a instância local Ollama, a mesma foi desconfigurada"
#: src/window.py:112
msgid "Please select a model before chatting"
msgstr "Por favor, selecione um modelo antes de conversar"
#: src/window.py:113
msgid "Chat cannot be cleared while receiving a message"
msgstr "A conversa não pode ser limpa enquanto gera uma mensagem"
#: src/window.py:114
#, fuzzy
msgid "That tag is already being pulled"
msgstr "Esta tag já está sendo baixada"
#: src/window.py:115
msgid "That tag has been pulled alreay"
msgstr "Esta tag já foi baixada"
#: src/window.py:118
msgid "Model deleted successfully"
msgstr "Modelo excluído com sucesso"
#: src/window.py:119
msgid "Model pulled successfully"
msgstr "Modelo baixado com sucesso"
#: src/window.py:120
#, fuzzy
msgid "Chat exported successfully"
msgstr "Conversa exportada com sucesso"
#: src/window.py:121
#, fuzzy
msgid "Chat imported successfully"
msgstr "Conversa importada com sucesso"
#: src/window.py:471
msgid "Task Complete"
msgstr "Tarefa Concluída"
#: src/window.py:471
msgid "Model '{}' pulled successfully."
msgstr "O modelo '{}' foi baixado com sucesso"
#: src/window.py:476
msgid "Pull Model Error"
msgstr "Erro ao Baixar Modelo"
#: src/window.py:476
msgid "Failed to pull model '{}' due to network error."
msgstr "Não foi possível baixar o modelo '{}' devido a um erro de rede."
#: src/window.py:492
msgid "Stop Model"
msgstr "Parar Modelo"
#: src/window.py:493
msgid "Are you sure you want to stop pulling '{}'?"
msgstr "Tem certeza que deseja parar o download de '{}'?"
#: src/window.py:496 src/window.py:539 src/window.py:562 src/window.py:635
#: src/window.py:708 src/window.py:734 src/window.py:766 src/window.py:807
msgid "Cancel"
msgstr "Cancelar"
#: src/window.py:497
msgid "Stop"
msgstr "Parar"
#: src/window.py:535
msgid "Delete Model"
msgstr "Excluir Modelo"
#: src/window.py:536 src/window.py:731
msgid "Are you sure you want to delete '{}'?"
msgstr "Tem certeza que deseja excluir '{}'?"
#: src/window.py:540 src/window.py:735
msgid "Delete"
msgstr "Excluir"
#: src/window.py:557
msgid "Pull Model"
msgstr "Baixar Modelo"
#: src/window.py:558
msgid "Please select a tag to pull '{}'"
msgstr "Por favor, selecione uma tag para baixar '{}'"
#: src/window.py:563
msgid "Pull"
msgstr "Baixar"
#: src/window.py:631 src/window.ui:458
msgid "Clear Chat"
msgstr "Limpar Conversa"
#: src/window.py:632
msgid "Are you sure you want to clear the chat?"
msgstr "Tem certeza de que deseja limpar a conversa?"
#: src/window.py:636
msgid "Clear"
msgstr "Limpar"
#: src/window.py:704
msgid "Remove Image"
msgstr "Remover Imagem"
#: src/window.py:705
msgid "Are you sure you want to remove image?"
msgstr "Tem certeza que quer remover a imagem?"
#: src/window.py:709 src/window.ui:478
msgid "Remove"
msgstr "Remover"
#: src/window.py:730
msgid "Delete Chat"
msgstr "Excluir Conversa"
#: src/window.py:760
msgid "Rename Chat"
msgstr "Renomear Conversa"
#: src/window.py:767
msgid "Rename"
msgstr "Renomear"
#: src/window.py:788
msgid "The name '{}' is already in use"
msgstr "O nome '{}' já está em uso"
#: src/window.py:801
msgid "Create Chat"
msgstr "Criar Conversa"
#: src/window.py:808
msgid "Create"
msgstr "Criar"
#: src/window.ui:45
msgid "Chats"
msgstr "Conversas"
#: src/window.ui:55
msgid "Import chat"
msgstr "Importar conversa"
#: src/window.ui:68
msgid "Export chat"
msgstr "Exportar conversa"
#: src/window.ui:81
msgid "New chat"
msgstr "Nova conversa"
#: src/window.ui:117
msgid "Toggle Sidebar"
msgstr "Alternar barra lateral"
#: src/window.ui:138 src/window.ui:311
msgid "Manage models"
msgstr "Gerenciar modelos"
#: src/window.ui:152
msgid "Menu"
msgstr "Menu"
#: src/window.ui:227
msgid "Send"
msgstr "Enviar"
#: src/window.ui:236
msgid "Requires model 'llava' to be selected"
msgstr "Requer que um modelo 'llava' esteja selecionado"
#: src/window.ui:239
msgid "Image"
msgstr "Imagem"
#: src/window.ui:262 src/window.ui:462 src/window.ui:520
msgid "Preferences"
msgstr "Preferências"
#: src/window.ui:265 src/window.ui:504
msgid "General"
msgstr "Geral"
#: src/window.ui:269
msgid "Remote Connection"
msgstr "Conexão Remota"
#: src/window.ui:270
msgid "Manage a remote connection to Ollama"
msgstr "Gerencia uma conexão remota com Ollama"
#: src/window.ui:273
msgid "Use remote connection"
msgstr "Usar conexão remota"
#: src/window.ui:278
msgid "URL of remote instance"
msgstr "URL da instância remota"
#: src/window.ui:286
msgid "Behavior"
msgstr "Comportamento"
#: src/window.ui:287
msgid "Manage Alpaca's Behavior"
msgstr "Gerencia o Comportamento de Alpaca"
#: src/window.ui:290
msgid "Run in background"
msgstr "Executar em segundo plano"
#: src/window.ui:381
msgid "Previous"
msgstr "Anterior"
#: src/window.ui:396
msgid "Next"
msgstr "Próximo"
#: src/window.ui:422
msgid "Welcome to Alpaca"
msgstr "Bem-vindo(a) a Alpaca"
#: src/window.ui:423
msgid "Powered by Ollama"
msgstr "Com tecnologia Ollama"
#: src/window.ui:426
msgid "Ollama Website"
msgstr "Site do Ollama"
#: src/window.ui:443
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 e seus desenvolvedores não são responsáveis por quaisquer danos "
"causados a dispositivos ou software resultante da execução de código "
"gerado por um modelo de IA. Por favor, tenha cuidado e revise o código "
"com cuidado antes de executá-lo."
#: src/window.ui:466
msgid "Keyboard Shortcuts"
msgstr "Atalhos de Teclado"
#: src/window.ui:470
msgid "About Alpaca"
msgstr "Sobre Alpaca"
#: src/window.ui:508
msgid "Close application"
msgstr "Fechar aplicativo"
#: src/window.ui:514
msgid "Clear chat"
msgstr "Limpar chat"
#: src/window.ui:526
msgid "Show shortcuts window"
msgstr "Mostrar janela de atalhos"
#: src/window.ui:533
msgid "Editor"
msgstr "Editor"
#: src/window.ui:537
msgid "Copy"
msgstr "Copiar"
#: src/window.ui:543
msgid "Paste"
msgstr "Colar"
#: src/window.ui:549
msgid "Send Message"
msgstr "Enviar Mensagem"
#~ msgid "Save Changes"
#~ msgstr "Salvar Mudanças"
#~ msgid "Do you want to save the URL change?"
#~ msgstr "Deseja salvar as mudanças na URL?"
#~ msgid "Discard"
#~ msgstr "Descartar"
#~ msgid "Save"
#~ msgstr "Salvar"
#~ msgid ""
#~ "To get started, please ensure you have an Ollama instance set up. You can "
#~ "either run Ollama locally on your machine or connect to a remote instance."
#~ msgstr ""
#~ "Para iniciar, por favor assegure-se que você tem uma insância Ollama "
#~ "configurada e funcional. Você pode rodar Ollama localmente em sua máquina "
#~ "ou através de uma instância remota."
#~ msgid "Setup"
#~ msgstr "Setup"
#~ msgid ""
#~ "If you are running an Ollama instance locally and haven't modified the "
#~ "default ports, you can use the default URL. Otherwise, please enter the "
#~ "URL of your Ollama instance."
#~ msgstr ""
#~ "Caso esteja rodando uma instância Ollama localmente e não modificou as "
#~ "portas padrão, você pode usar a URL padrão. Caso contrário, por favor, "
#~ "insira a URL da sua instância Ollama."
#~ msgid "Change Server"
#~ msgstr "Mudar Servidor"
#~ msgid "Change server"
#~ msgstr "Mudar servidor"

882
po/ru.po

File diff suppressed because it is too large Load Diff

362
po/ru.po~
View File

@@ -1,15 +1,16 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"POT-Creation-Date: 2024-05-19 14:52+0800\n" "Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-05-19 14:59+0800\n" "POT-Creation-Date: 2024-05-22 19:17+0800\n"
"PO-Revision-Date: 2024-05-22 19:33+0800\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
"Language: ru_RU\n" "Language: ru_RU\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.4.2\n" "X-Generator: Poedit 3.4.4\n"
"X-Poedit-Basepath: ../src\n" "X-Poedit-Basepath: ../src\n"
"X-Poedit-SearchPath-0: .\n" "X-Poedit-SearchPath-0: .\n"
@@ -21,79 +22,288 @@ msgstr "Общие"
#: gtk/help-overlay.ui:14 #: gtk/help-overlay.ui:14
msgctxt "shortcut window" msgctxt "shortcut window"
msgid "Show Shortcuts" msgid "Show Shortcuts"
msgstr "Показывать ярлыки" msgstr "Показывать комбинации клавиш"
#: gtk/help-overlay.ui:20 #: gtk/help-overlay.ui:20
msgctxt "shortcut window" msgctxt "shortcut window"
msgid "Quit" msgid "Quit"
msgstr "Выйти" msgstr "Выйти"
#: window.ui:39 #: window.py:54 window.py:761
msgid "New Chat"
msgstr "Новый Чат"
#: window.py:100
msgid "An error occurred"
msgstr "Произошла ошибка"
#: window.py:101
msgid "Failed to connect to server"
msgstr "Не удалось подключиться к серверу"
#: window.py:102
msgid "Could not list local models"
msgstr "Не удалось перечислить локальные модели"
#: window.py:103
msgid "Could not delete model"
msgstr "Не удалось удалить модель"
#: window.py:104
msgid "Could not pull model"
msgstr "Не удалось извлечь модель"
#: window.py:105
msgid "Cannot open image"
msgstr "Не удается открыть изображение"
#: window.py:106
msgid "Cannot delete chat because it's the only one left"
msgstr "Не удается удалить чат, потому что он единственный оставшийся"
#: window.py:107
msgid "There was an error with the local Ollama instance, so it has been reset"
msgstr ""
"Произошла ошибка с локальным экземпляром Ollama, поэтому он был сброшен"
#: window.py:110
msgid "Please select a model before chatting"
msgstr "Пожалуйста, выберите модель перед началом общения"
#: window.py:111
msgid "Chat cannot be cleared while receiving a message"
msgstr "Чат не может быть удален при получении сообщения"
#: window.py:112
msgid "That tag is already being pulled"
msgstr "Этот тег уже удален"
#: window.py:113
msgid "That tag has been pulled alreay"
msgstr "Этот тег уже был удален"
#: window.py:116
msgid "Model deleted successfully"
msgstr "Модель успешно удалена"
#: window.py:117
msgid "Model pulled successfully"
msgstr "Модель успешно извлечена"
#: window.py:118
msgid "Chat exported successfully"
msgstr "Чат успешно экспортирован"
#: window.py:119
msgid "Chat imported successfully"
msgstr "Чат успешно импортирован"
#: window.py:451
msgid "Task Complete"
msgstr "Задача выполнена"
#: window.py:451
msgid "Model '{}' pulled successfully."
msgstr "Модель '{}' успешно извлечена."
#: window.py:456
msgid "Pull Model Error"
msgstr "Ошибка Извлечения Модели"
#: window.py:456
msgid "Failed to pull model '{}' due to network error."
msgstr "Не удалось извлечь модель '{}' из-за сетевой ошибки."
#: window.py:472
msgid "Stop Model"
msgstr "Остановить Модель"
#: window.py:473
msgid "Are you sure you want to stop pulling '{}'?"
msgstr "Вы уверены, что хотите прекратить извлечение '{}'?"
#: window.py:476 window.py:519 window.py:542 window.py:615 window.py:688
#: window.py:715 window.py:748 window.py:788
msgid "Cancel"
msgstr "Отмена"
#: window.py:477
msgid "Stop"
msgstr "Стоп"
#: window.py:515
msgid "Delete Model"
msgstr "Удалить Модель"
#: window.py:516 window.py:712
msgid "Are you sure you want to delete '{}'?"
msgstr "Вы уверены, что хотите удалить '{}'?"
#: window.py:520 window.py:716
msgid "Delete"
msgstr "Удалить"
#: window.py:537
msgid "Pull Model"
msgstr "Извлечение модели"
#: window.py:538
msgid "Please select a tag to pull '{}'"
msgstr "Пожалуйста, выберите тег для извлечения '{}'"
#: window.py:543
msgid "Pull"
msgstr "Извлечение"
#: window.py:611 window.ui:462
msgid "Clear Chat"
msgstr "Очистить Чат"
#: window.py:612
msgid "Are you sure you want to clear the chat?"
msgstr "Вы уверены, что хотите очистить чат?"
#: window.py:616
msgid "Clear"
msgstr "Очистить"
#: window.py:684
msgid "Remove Image"
msgstr "Удалить Изображение"
#: window.py:685
msgid "Are you sure you want to remove image?"
msgstr "Вы уверены, что хотите удалить изображение?"
#: window.py:689
msgid "Remove"
msgstr "Удалить"
#: window.py:711
msgid "Delete Chat"
msgstr "Удалить Чат"
#: window.py:742
msgid "Rename Chat"
msgstr "Переименовать Чат"
#: window.py:749
msgid "Rename"
msgstr "Переименовать"
#: window.py:769
msgid "The name '{}' is already in use"
msgstr "Имя '{}' уже используется"
#: window.py:782
msgid "Create Chat"
msgstr "Создать Чат"
#: window.py:789
msgid "Create"
msgstr "Создать"
#: window.ui:46
msgid "Chats" msgid "Chats"
msgstr "Чаты" msgstr "Чаты"
#: window.ui:49 #: window.ui:56
msgid "Import chat"
msgstr "Импорт чата"
#: window.ui:69
msgid "Export chat"
msgstr "Экспорт чата"
#: window.ui:82
msgid "New chat" msgid "New chat"
msgstr "Новый чат" msgstr "Новый чат"
#: window.ui:86 #: window.ui:118
msgid "Toggle Sidebar" msgid "Toggle Sidebar"
msgstr "Переключение боковой панели" msgstr "Переключение боковой панели"
#: window.ui:107 #: window.ui:139 window.ui:315
msgid "Manage models" msgid "Manage models"
msgstr "Управление моделями" msgstr "Управление моделями"
#: window.ui:121 #: window.ui:153
msgid "Menu" msgid "Menu"
msgstr "Меню" msgstr "Меню"
#: window.ui:202 #: window.ui:231
msgid "Send" msgid "Send"
msgstr "Отправить" msgstr "Отправить"
#: window.ui:211 #: window.ui:240
msgid "Requires model 'llava' to be selected" msgid "Requires model 'llava' to be selected"
msgstr "Требуется выбрать модель \"llava\"" msgstr "Требуется выбрать модель \"llava\""
#: window.ui:214 #: window.ui:243
msgid "Image" msgid "Image"
msgstr "Изображение" msgstr "Изображение"
#: window.ui:249 #: window.ui:266 window.ui:466 window.ui:517
msgid "Pulling Model" msgid "Preferences"
msgstr "Вытягивающая модель" msgstr "Настройки"
#: window.ui:345 #: window.ui:269 window.ui:501
msgid "General"
msgstr "Общие"
#: window.ui:273
msgid "Remote Connection"
msgstr "Удаленное подключение"
#: window.ui:274
msgid "Manage a remote connection to Ollama"
msgstr "Управление удаленным подключением к Ollama"
#: window.ui:277
msgid "Use remote connection"
msgstr "Использовать удаленное подключение"
#: window.ui:282
msgid "URL of remote instance"
msgstr "URL-адрес удаленного экземпляра"
#: window.ui:290
msgid "Behavior"
msgstr "Поведение"
#: window.ui:291
msgid "Manage Alpaca's Behavior"
msgstr "Управление поведением Alpaca"
#: window.ui:294
msgid "Run in background"
msgstr "Запуск в фоновом режиме"
#: window.ui:385
msgid "Previous" msgid "Previous"
msgstr "Предыдущий" msgstr "Предыдущий"
#: window.ui:360 #: window.ui:400
msgid "Next" msgid "Next"
msgstr "Следующий" msgstr "Следующий"
#: window.ui:386 #: window.ui:426
msgid "Welcome to Alpaca" msgid "Welcome to Alpaca"
msgstr "Добро пожаловать в Alpaca" msgstr "Добро пожаловать в Alpaca"
#: window.ui:387 #: window.ui:427
msgid "" msgid "Powered by Ollama"
"To get started, please ensure you have an Ollama instance set up. You can " msgstr "При поддержке Ollama"
"either run Ollama locally on your machine or connect to a remote instance."
msgstr ""
"Для начала, пожалуйста, убедитесь, что у вас настроен экземпляр Ollama. Вы "
"можете либо запустить Ollama локально на своем компьютере, либо подключиться "
"к удаленному экземпляру."
#: window.ui:390 #: window.ui:430
msgid "Ollama Website" msgid "Ollama Website"
msgstr "Веб-сайт Ollama" msgstr "Веб-сайт Ollama"
#: window.ui:406 #: window.ui:446
msgid "Disclaimer" msgid "Disclaimer"
msgstr "Отказ от ответственности" msgstr "Отказ от ответственности"
#: window.ui:407 #: window.ui:447
msgid "" msgid ""
"Alpaca and its developers are not liable for any damages to devices or " "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. " "software resulting from the execution of code generated by an AI model. "
@@ -105,28 +315,80 @@ msgstr ""
"Пожалуйста, будьте осторожны и внимательно ознакомьтесь с кодом перед его " "Пожалуйста, будьте осторожны и внимательно ознакомьтесь с кодом перед его "
"запуском." "запуском."
#: window.ui:419 #: window.ui:470
msgid "Setup" msgid "Keyboard Shortcuts"
msgstr "Установка" msgstr "Комбинации Клавиш"
#: window.ui:420 #: window.ui:474
msgid "" msgid "About Alpaca"
"If you are running an Ollama instance locally and haven't modified the " msgstr "О Программе"
"default ports, you can use the default URL. Otherwise, please enter the URL "
"of your Ollama instance."
msgstr ""
"Если вы запускаете локальный экземпляр Ollama и не изменили порты по "
"умолчанию, вы можете использовать URL-адрес по умолчанию. В противном "
"случае, пожалуйста, введите URL-адрес вашего экземпляра Ollama."
#: window.ui:440 #: window.ui:505
msgid "_Clear Chat" msgid "Close application"
msgstr "_Очистить чат" msgstr "Закрыть приложение"
#: window.ui:444 #: window.ui:511
msgid "_Change Server" msgid "Clear chat"
msgstr "_Изменить Сервер" msgstr "Очистить чат"
#: window.ui:448 #: window.ui:523
msgid "_About Alpaca" msgid "Show shortcuts window"
msgstr "_О Программе" msgstr "Показать окно комбинаций клавиш"
#: window.ui:530
msgid "Editor"
msgstr "Редактор"
#: window.ui:534
msgid "Copy"
msgstr "Копировать"
#: window.ui:540
msgid "Paste"
msgstr "Вставить"
#: window.ui:546
msgid "Send Message"
msgstr "Отправить Сообщение"
#, fuzzy
#~ msgid "Added basic shortcuts"
#~ msgstr "Показывать ярлыки"
#~ msgid "Save Changes"
#~ msgstr "Сохранить Изменения"
#~ msgid "Do you want to save the URL change?"
#~ msgstr "Хотите сохранить изменение URL?"
#~ msgid "Discard"
#~ msgstr "Отказаться"
#~ msgid "Save"
#~ msgstr "Сохранить"
#~ msgid ""
#~ "To get started, please ensure you have an Ollama instance set up. You can "
#~ "either run Ollama locally on your machine or connect to a remote instance."
#~ msgstr ""
#~ "Для начала, пожалуйста, убедитесь, что у вас настроен экземпляр Ollama. "
#~ "Вы можете либо запустить Ollama локально на своем компьютере, либо "
#~ "подключиться к удаленному экземпляру."
#~ msgid "Setup"
#~ msgstr "Установка"
#~ msgid ""
#~ "If you are running an Ollama instance locally and haven't modified the "
#~ "default ports, you can use the default URL. Otherwise, please enter the "
#~ "URL of your Ollama instance."
#~ msgstr ""
#~ "Если вы запускаете локальный экземпляр Ollama и не изменили порты по "
#~ "умолчанию, вы можете использовать URL-адрес по умолчанию. В противном "
#~ "случае, пожалуйста, введите URL-адрес вашего экземпляра Ollama."
#~ msgid "Change Server"
#~ msgstr "Изменить Сервер"
#~ msgid "Change server"
#~ msgstr "Изменить Сервер"

View File

@@ -1,6 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<gresources> <gresources>
<gresource prefix="/com/jeffser/Alpaca"> <gresource prefix="/com/jeffser/Alpaca">
<file>style.css</file>
<file>style-dark.css</file>
<file preprocess="xml-stripblanks">window.ui</file> <file preprocess="xml-stripblanks">window.ui</file>
<file preprocess="xml-stripblanks">gtk/help-overlay.ui</file> <file preprocess="xml-stripblanks">gtk/help-overlay.ui</file>
</gresource> </gresource>

File diff suppressed because one or more lines are too long

View File

@@ -34,7 +34,7 @@ class AlpacaApplication(Adw.Application):
flags=Gio.ApplicationFlags.DEFAULT_FLAGS) flags=Gio.ApplicationFlags.DEFAULT_FLAGS)
self.create_action('quit', lambda *_: self.quit(), ['<primary>q']) self.create_action('quit', lambda *_: self.quit(), ['<primary>q'])
self.create_action('clear', lambda *_: AlpacaWindow.clear_chat_dialog(self.props.active_window), ['<primary>e']) self.create_action('clear', lambda *_: AlpacaWindow.clear_chat_dialog(self.props.active_window), ['<primary>e'])
self.create_action('reconnect', lambda *_: AlpacaWindow.show_connection_dialog(self.props.active_window), ['<primary>r']) self.create_action('preferences', lambda *_: AlpacaWindow.show_preferences_dialog(self.props.active_window), ['<primary>p'])
self.create_action('about', self.on_about_action) self.create_action('about', self.on_about_action)
def do_activate(self): def do_activate(self):
@@ -48,11 +48,11 @@ class AlpacaApplication(Adw.Application):
application_name='Alpaca', application_name='Alpaca',
application_icon='com.jeffser.Alpaca', application_icon='com.jeffser.Alpaca',
developer_name='Jeffry Samuel Eduarte Rojas', developer_name='Jeffry Samuel Eduarte Rojas',
version='0.5.1', version='0.8.1',
developers=['Jeffser https://jeffser.com'], developers=['Jeffser https://jeffser.com'],
designers=['Jeffser https://jeffser.com'], designers=['Jeffser https://jeffser.com'],
translator_credits='Alex K (Russian) https://github.com/alexkdeveloper', 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',
copyright='© 2024 Jeffser', copyright='© 2024 Jeffser\n© 2024 Ollama',
issue_url='https://github.com/Jeffser/Alpaca/issues') issue_url='https://github.com/Jeffser/Alpaca/issues')
about.present(parent=self.props.active_window) about.present(parent=self.props.active_window)

View File

@@ -31,7 +31,7 @@ alpaca_sources = [
'main.py', 'main.py',
'window.py', 'window.py',
'connection_handler.py', 'connection_handler.py',
'available_models.py', 'available_models.py'
] ]
install_data(alpaca_sources, install_dir: moduledir) install_data(alpaca_sources, install_dir: moduledir)

7
src/style-dark.css Normal file
View File

@@ -0,0 +1,7 @@
.message-input {
background-color: #343434;
}
.message-text-view {
background-color: #343434;
}

28
src/style.css Normal file
View File

@@ -0,0 +1,28 @@
.message-input {
background-color: #EBEBEB;
border-radius: 10px;
}
.message-text-view {
background-color: #EBEBEB;
}
.chat_row box.header {
font-size: 14px;
}
.chat_row box {
margin: 0;
}
.chat_row button {
opacity: 0;
transition: opacity .05s;
}
.chat_row:hover button {
opacity: 1;
}
.message .delete-message-button {
opacity: 0;
transition: opacity .05s;
}
.message:hover .delete-message-button {
opacity: 1;
}

View File

@@ -21,7 +21,8 @@ import gi
gi.require_version('GtkSource', '5') gi.require_version('GtkSource', '5')
gi.require_version('GdkPixbuf', '2.0') gi.require_version('GdkPixbuf', '2.0')
from gi.repository import Adw, Gtk, Gdk, GLib, GtkSource, Gio, GdkPixbuf from gi.repository import Adw, Gtk, Gdk, GLib, GtkSource, Gio, GdkPixbuf
import json, requests, threading, os, re, base64, sys, gettext, locale import json, requests, threading, os, re, base64, sys, gettext, locale, webbrowser, subprocess
from time import sleep
from io import BytesIO from io import BytesIO
from PIL import Image from PIL import Image
from datetime import datetime from datetime import datetime
@@ -30,7 +31,10 @@ from .available_models import available_models
@Gtk.Template(resource_path='/com/jeffser/Alpaca/window.ui') @Gtk.Template(resource_path='/com/jeffser/Alpaca/window.ui')
class AlpacaWindow(Adw.ApplicationWindow): class AlpacaWindow(Adw.ApplicationWindow):
config_dir = os.path.join(os.getenv("XDG_CONFIG_HOME"), "/", os.path.expanduser("~/.var/app/com.jeffser.Alpaca/config")) config_dir = os.getenv("XDG_CONFIG_HOME")
data_dir = os.getenv("XDG_DATA_HOME")
app_dir = os.getenv("FLATPAK_DEST")
__gtype_name__ = 'AlpacaWindow' __gtype_name__ = 'AlpacaWindow'
localedir = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'locale') localedir = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'locale')
@@ -41,32 +45,38 @@ class AlpacaWindow(Adw.ApplicationWindow):
_ = gettext.gettext _ = gettext.gettext
#Variables #Variables
ollama_url = None run_on_background = False
ollama_url = ""
remote_url = ""
run_remote = False
local_ollama_port = 11435
local_ollama_instance = None
local_models = [] local_models = []
pulling_models = {} pulling_models = {}
current_chat_elements = [] #Used for deleting
chats = {"chats": {_("New Chat"): {"messages": []}}, "selected_chat": "New Chat"} chats = {"chats": {_("New Chat"): {"messages": []}}, "selected_chat": "New Chat"}
attached_image = {"path": None, "base64": None} attached_image = {"path": None, "base64": None}
first_time_setup = False first_time_setup = False
#Elements #Elements
preferences_dialog = Gtk.Template.Child()
shortcut_window : Gtk.ShortcutsWindow = Gtk.Template.Child() shortcut_window : Gtk.ShortcutsWindow = Gtk.Template.Child()
bot_message : Gtk.TextBuffer = None bot_message : Gtk.TextBuffer = None
bot_message_box : Gtk.Box = None bot_message_box : Gtk.Box = None
bot_message_view : Gtk.TextView = None bot_message_view : Gtk.TextView = None
connection_dialog = Gtk.Template.Child() welcome_dialog = Gtk.Template.Child()
connection_carousel = Gtk.Template.Child() welcome_carousel = Gtk.Template.Child()
connection_previous_button = Gtk.Template.Child() welcome_previous_button = Gtk.Template.Child()
connection_next_button = Gtk.Template.Child() welcome_next_button = Gtk.Template.Child()
connection_url_entry = Gtk.Template.Child()
main_overlay = Gtk.Template.Child() main_overlay = Gtk.Template.Child()
manage_models_overlay = Gtk.Template.Child() manage_models_overlay = Gtk.Template.Child()
connection_overlay = Gtk.Template.Child()
chat_container = Gtk.Template.Child() chat_container = Gtk.Template.Child()
chat_window = Gtk.Template.Child() chat_window = Gtk.Template.Child()
message_text_view = Gtk.Template.Child() message_text_view = Gtk.Template.Child()
send_button = Gtk.Template.Child() send_button = Gtk.Template.Child()
image_button = Gtk.Template.Child() image_button = Gtk.Template.Child()
file_filter_image = Gtk.Template.Child() file_filter_image = Gtk.Template.Child()
file_filter_json = Gtk.Template.Child()
model_drop_down = Gtk.Template.Child() model_drop_down = Gtk.Template.Child()
model_string_list = Gtk.Template.Child() model_string_list = Gtk.Template.Child()
@@ -78,9 +88,15 @@ class AlpacaWindow(Adw.ApplicationWindow):
chat_list_box = Gtk.Template.Child() chat_list_box = Gtk.Template.Child()
add_chat_button = Gtk.Template.Child() add_chat_button = Gtk.Template.Child()
export_chat_button = Gtk.Template.Child()
import_chat_button = Gtk.Template.Child()
loading_spinner = None loading_spinner = None
background_switch = Gtk.Template.Child()
remote_connection_switch = Gtk.Template.Child()
remote_connection_entry = Gtk.Template.Child()
toast_messages = { toast_messages = {
"error": [ "error": [
_("An error occurred"), _("An error occurred"),
@@ -89,15 +105,20 @@ class AlpacaWindow(Adw.ApplicationWindow):
_("Could not delete model"), _("Could not delete model"),
_("Could not pull model"), _("Could not pull model"),
_("Cannot open image"), _("Cannot open image"),
_("Cannot delete chat because it's the only one left") _("Cannot delete chat because it's the only one left"),
_("There was an error with the local Ollama instance, so it has been reset")
], ],
"info": [ "info": [
_("Please select a model before chatting"), _("Please select a model before chatting"),
_("Chat cannot be cleared while receiving a message") _("Chat cannot be cleared while receiving a message"),
_("That tag is already being pulled"),
_("That tag has been pulled already")
], ],
"good": [ "good": [
_("Model deleted successfully"), _("Model deleted successfully"),
_("Model pulled successfully") _("Model pulled successfully"),
_("Chat exported successfully"),
_("Chat imported successfully")
] ]
} }
@@ -118,6 +139,13 @@ class AlpacaWindow(Adw.ApplicationWindow):
if icon: notification.set_icon(icon) if icon: notification.set_icon(icon)
self.get_application().send_notification(None, notification) 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()
def show_message(self, msg:str, bot:bool, footer:str=None, image_base64:str=None): def show_message(self, msg:str, bot:bool, footer:str=None, image_base64:str=None):
message_text = Gtk.TextView( message_text = Gtk.TextView(
editable=False, editable=False,
@@ -128,18 +156,27 @@ class AlpacaWindow(Adw.ApplicationWindow):
margin_start=12, margin_start=12,
margin_end=12, margin_end=12,
hexpand=True, hexpand=True,
css_classes=["flat"] css_classes=["flat"],
) )
message_buffer = message_text.get_buffer() message_buffer = message_text.get_buffer()
message_buffer.insert(message_buffer.get_end_iter(), msg) message_buffer.insert(message_buffer.get_end_iter(), msg)
if footer is not None: message_buffer.insert_markup(message_buffer.get_end_iter(), footer, len(footer)) if footer is not None: message_buffer.insert_markup(message_buffer.get_end_iter(), footer, len(footer))
delete_button = Gtk.Button(
icon_name = "user-trash-symbolic",
css_classes = ["flat", "circular", "delete-message-button"],
valign="end",
halign="end",
margin_bottom=6,
margin_end=6
)
message_box = Gtk.Box( message_box = Gtk.Box(
orientation=1, orientation=1,
halign='fill',
css_classes=[None if bot else "card"] css_classes=[None if bot else "card"]
) )
message_text.set_valign(Gtk.Align.CENTER) message_text.set_valign(Gtk.Align.CENTER)
self.chat_container.append(message_box)
if image_base64 is not None: if image_base64 is not None:
image_data = base64.b64decode(image_base64) image_data = base64.b64decode(image_base64)
@@ -160,6 +197,12 @@ class AlpacaWindow(Adw.ApplicationWindow):
message_box.append(image) message_box.append(image)
message_box.append(message_text) message_box.append(message_text)
self.current_chat_elements.append(Gtk.Overlay(css_classes=["message"]))
self.current_chat_elements[-1].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])
if bot: if bot:
self.bot_message = message_buffer self.bot_message = message_buffer
@@ -169,7 +212,7 @@ class AlpacaWindow(Adw.ApplicationWindow):
def verify_if_image_can_be_used(self, pspec=None, user_data=None): def verify_if_image_can_be_used(self, pspec=None, user_data=None):
if self.model_drop_down.get_selected_item() == None: return True if self.model_drop_down.get_selected_item() == None: return True
selected = self.model_drop_down.get_selected_item().get_string().split(":")[0] selected = self.model_drop_down.get_selected_item().get_string().split(":")[0]
if selected in ['llava']: if selected in ['llava', 'bakllava', 'moondream', 'llava-llama3']:
self.image_button.set_sensitive(True) self.image_button.set_sensitive(True)
return True return True
else: else:
@@ -186,6 +229,10 @@ class AlpacaWindow(Adw.ApplicationWindow):
self.model_string_list.remove(i) self.model_string_list.remove(i)
if response['status'] == 'ok': if response['status'] == 'ok':
self.local_model_list_box.remove_all() self.local_model_list_box.remove_all()
if len(json.loads(response['text'])['models']) == 0:
self.local_model_list_box.set_visible(False)
else:
self.local_model_list_box.set_visible(True)
for model in json.loads(response['text'])['models']: for model in json.loads(response['text'])['models']:
model_row = Adw.ActionRow( model_row = Adw.ActionRow(
title = model["name"].split(":")[0], title = model["name"].split(":")[0],
@@ -207,14 +254,14 @@ class AlpacaWindow(Adw.ApplicationWindow):
self.verify_if_image_can_be_used() self.verify_if_image_can_be_used()
return return
else: else:
self.show_connection_dialog(True) self.connection_error()
self.show_toast("error", 2, self.connection_overlay)
def verify_connection(self): def verify_connection(self):
response = simple_get(self.ollama_url) response = simple_get(self.ollama_url)
if response['status'] == 'ok': if response['status'] == 'ok':
if "Ollama is running" in response['text']: if "Ollama is running" in response['text']:
with open(os.path.join(self.config_dir, "server.conf"), "w+") as f: f.write(self.ollama_url) 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': self.local_ollama_port, 'run_on_background': self.run_on_background}, f)
#self.message_text_view.grab_focus_without_selecting() #self.message_text_view.grab_focus_without_selecting()
self.update_list_local_models() self.update_list_local_models()
return True return True
@@ -306,7 +353,7 @@ class AlpacaWindow(Adw.ApplicationWindow):
self.save_history() self.save_history()
sys.exit() sys.exit()
vadjustment = self.chat_window.get_vadjustment() vadjustment = self.chat_window.get_vadjustment()
if vadjustment.get_value() + 50 >= vadjustment.get_upper() - vadjustment.get_page_size(): if self.chats["chats"][self.chats["selected_chat"]]["messages"][-1]['role'] == "user" or vadjustment.get_value() + 50 >= vadjustment.get_upper() - vadjustment.get_page_size():
GLib.idle_add(vadjustment.set_value, vadjustment.get_upper()) GLib.idle_add(vadjustment.set_value, vadjustment.get_upper())
if data['done']: if data['done']:
formated_datetime = datetime.now().strftime("%Y/%m/%d %H:%M") formated_datetime = datetime.now().strftime("%Y/%m/%d %H:%M")
@@ -333,15 +380,16 @@ class AlpacaWindow(Adw.ApplicationWindow):
GLib.idle_add(self.send_button.get_child().set_label, "Send") 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.send_button.get_child().set_icon_name, "send-to-symbolic")
GLib.idle_add(self.chat_list_box.set_sensitive, True) GLib.idle_add(self.chat_list_box.set_sensitive, True)
GLib.idle_add(self.export_chat_button.set_sensitive, True)
GLib.idle_add(self.import_chat_button.set_sensitive, True)
GLib.idle_add(self.add_chat_button.set_sensitive, True) GLib.idle_add(self.add_chat_button.set_sensitive, True)
if self.verify_if_image_can_be_used(): GLib.idle_add(self.image_button.set_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.set_css_classes, [])
GLib.idle_add(self.image_button.get_child().set_icon_name, "image-x-generic-symbolic") GLib.idle_add(self.image_button.get_child().set_icon_name, "image-x-generic-symbolic")
self.attached_image = {"path": None, "base64": None} self.attached_image = {"path": None, "base64": None}
GLib.idle_add(self.message_text_view.set_sensitive, True) # GLib.idle_add(self.message_text_view.set_sensitive, True)
if response['status'] == 'error': if response['status'] == 'error':
GLib.idle_add(self.show_toast, 'error', 1, self.connection_overlay) GLib.idle_add(self.connection_error)
GLib.idle_add(self.show_connection_dialog, True)
def send_message(self, button=None): def send_message(self, button=None):
if button and self.bot_message: #STOP BUTTON if button and self.bot_message: #STOP BUTTON
@@ -352,7 +400,9 @@ class AlpacaWindow(Adw.ApplicationWindow):
self.attached_image = {"path": None, "base64": None} self.attached_image = {"path": None, "base64": None}
self.chat_list_box.set_sensitive(True) self.chat_list_box.set_sensitive(True)
self.add_chat_button.set_sensitive(True) self.add_chat_button.set_sensitive(True)
self.message_text_view.set_sensitive(True) self.export_chat_button.set_sensitive(True)
self.import_chat_button.set_sensitive(True)
# self.message_text_view.set_sensitive(True)
self.send_button.set_css_classes(["suggested-action"]) self.send_button.set_css_classes(["suggested-action"])
self.send_button.get_child().set_label("Send") self.send_button.get_child().set_label("Send")
self.send_button.get_child().set_icon_name("send-to-symbolic") self.send_button.get_child().set_icon_name("send-to-symbolic")
@@ -378,18 +428,24 @@ class AlpacaWindow(Adw.ApplicationWindow):
} }
if self.verify_if_image_can_be_used() and self.attached_image["base64"] is not None: if self.verify_if_image_can_be_used() and self.attached_image["base64"] is not None:
data["messages"][-1]["images"] = [self.attached_image["base64"]] data["messages"][-1]["images"] = [self.attached_image["base64"]]
self.message_text_view.set_sensitive(False) # self.message_text_view.set_sensitive(False)
self.send_button.set_css_classes(["destructive-action"]) self.send_button.set_css_classes(["destructive-action"])
self.send_button.get_child().set_label("Stop") self.send_button.get_child().set_label("Stop")
self.send_button.get_child().set_icon_name("edit-delete-symbolic") self.send_button.get_child().set_icon_name("edit-delete-symbolic")
self.chat_list_box.set_sensitive(False) self.chat_list_box.set_sensitive(False)
self.add_chat_button.set_sensitive(False) self.add_chat_button.set_sensitive(False)
self.export_chat_button.set_sensitive(False)
self.import_chat_button.set_sensitive(False)
self.image_button.set_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.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.message_text_view.get_buffer().set_text("", 0)
self.show_message("", True)
self.loading_spinner = Gtk.Spinner(spinning=True, margin_top=12, margin_bottom=12, hexpand=True) self.loading_spinner = Gtk.Spinner(spinning=True, margin_top=12, margin_bottom=12, hexpand=True)
self.chat_container.append(self.loading_spinner) self.chat_container.append(self.loading_spinner)
self.show_message("", True)
vadjustment = self.chat_window.get_vadjustment()
vadjustment.set_value(vadjustment.get_upper())
thread = threading.Thread(target=self.run_message, args=(data['messages'], data['model'])) thread = threading.Thread(target=self.run_message, args=(data['messages'], data['model']))
thread.start() thread.start()
@@ -400,31 +456,35 @@ class AlpacaWindow(Adw.ApplicationWindow):
if response['status'] == 'ok': if response['status'] == 'ok':
self.show_toast("good", 0, self.manage_models_overlay) self.show_toast("good", 0, self.manage_models_overlay)
else: else:
self.show_toast("error", 3, self.connection_overlay)
self.manage_models_dialog.close() self.manage_models_dialog.close()
self.show_connection_dialog(True) self.connection_error()
def pull_model_update(self, data, model_name): def pull_model_update(self, data, model_name):
if model_name in list(self.pulling_models.keys()): if model_name in list(self.pulling_models.keys()):
GLib.idle_add(self.pulling_models[model_name].set_subtitle, data['status'] + (f" | {round(data['completed'] / data['total'] * 100, 2)}%" if 'completed' in data and 'total' in data else "")) GLib.idle_add(self.pulling_models[model_name].set_subtitle, data['status'] + (f" | {round(data['completed'] / data['total'] * 100, 2)}%" if 'completed' in data and 'total' in data else ""))
else: else:
if len(list(self.pulling_models.keys())) == 0:
GLib.idle_add(self.pulling_model_list_box.set_visible, False)
sys.exit() sys.exit()
def pull_model(self, model_name, tag): def pull_model(self, model_name, tag):
data = {"name":f"{model_name}:{tag}"} data = {"name":f"{model_name}:{tag}"}
response = stream_post(f"{self.ollama_url}/api/pull", data=json.dumps(data), callback=lambda data, model_name=f"{model_name}:{tag}": self.pull_model_update(data, model_name)) response = stream_post(f"{self.ollama_url}/api/pull", data=json.dumps(data), callback=lambda data, model_name=f"{model_name}:{tag}": self.pull_model_update(data, model_name))
GLib.idle_add(self.update_list_local_models) GLib.idle_add(self.update_list_local_models)
if response['status'] == 'ok': if response['status'] == 'ok':
GLib.idle_add(self.show_notification, _("Task Complete"), _("Model '{}' pulled successfully.").format(f"{model_name}:{tag}"), True, Gio.ThemedIcon.new("emblem-ok-symbolic")) GLib.idle_add(self.show_notification, _("Task Complete"), _("Model '{}' pulled successfully.").format(f"{model_name}:{tag}"), True, Gio.ThemedIcon.new("emblem-ok-symbolic"))
GLib.idle_add(self.show_toast, "good", 1, self.manage_models_overlay) GLib.idle_add(self.show_toast, "good", 1, self.manage_models_overlay)
GLib.idle_add(self.pulling_models[f"{model_name}:{tag}"].get_parent().remove, self.pulling_models[f"{model_name}:{tag}"]) GLib.idle_add(self.pulling_models[f"{model_name}:{tag}"].get_parent().remove, self.pulling_models[f"{model_name}:{tag}"])
del self.pulling_models[f"{model_name}:{tag}"] del self.pulling_models[f"{model_name}:{tag}"]
else: else:
GLib.idle_add(self.show_notification, _("Pull Model Error"), _("Failed to pull model '{}' due to network error.").format(f"{model_name}:{tag}"), True, Gio.ThemedIcon.new("dialog-error-symbolic")) GLib.idle_add(self.show_notification, _("Pull Model Error"), _("Failed to pull model '{}' due to network error.").format(f"{model_name}:{tag}"), True, Gio.ThemedIcon.new("dialog-error-symbolic"))
GLib.idle_add(self.show_toast, "error", 4, self.connection_overlay) GLib.idle_add(self.pulling_models[f"{model_name}:{tag}"].get_parent().remove, self.pulling_models[f"{model_name}:{tag}"])
del self.pulling_models[f"{model_name}:{tag}"]
GLib.idle_add(self.manage_models_dialog.close) GLib.idle_add(self.manage_models_dialog.close)
GLib.idle_add(self.show_connection_dialog, True) GLib.idle_add(self.connection_error)
if len(list(self.pulling_models.keys())) == 0:
GLib.idle_add(self.pulling_model_list_box.set_visible, False)
def stop_pull_model(self, dialog, task, model_name): def stop_pull_model(self, dialog, task, model_name):
if dialog.choose_finish(task) == "stop": if dialog.choose_finish(task) == "stop":
@@ -449,9 +509,14 @@ class AlpacaWindow(Adw.ApplicationWindow):
def pull_model_start(self, dialog, task, model_name, tag_drop_down): def pull_model_start(self, dialog, task, model_name, tag_drop_down):
if dialog.choose_finish(task) == "pull": if dialog.choose_finish(task) == "pull":
tag = tag_drop_down.get_selected_item().get_string() tag = tag_drop_down.get_selected_item().get_string()
if f"{model_name}:{tag}" in list(self.pulling_models.keys()): return ##TODO add message: 'already being pulled' if f"{model_name}:{tag}" in list(self.pulling_models.keys()):
if f"{model_name}:{tag}" in self.local_models: return ##TODO add message 'already pulled' self.show_toast("info", 3, self.manage_models_overlay)
return
if f"{model_name}:{tag}" in self.local_models:
self.show_toast("info", 4, self.manage_models_overlay)
return
#self.pull_model_status_page.set_description(f"{model_name}:{tag}") #self.pull_model_status_page.set_description(f"{model_name}:{tag}")
self.pulling_model_list_box.set_visible(True)
model_row = Adw.ActionRow( model_row = Adw.ActionRow(
title = f"{model_name}:{tag}", title = f"{model_name}:{tag}",
subtitle = "" subtitle = ""
@@ -512,47 +577,45 @@ class AlpacaWindow(Adw.ApplicationWindow):
for name, model_info in available_models.items(): for name, model_info in available_models.items():
model = Adw.ActionRow( model = Adw.ActionRow(
title = name, title = name,
subtitle = model_info['description'], subtitle = "Image recognition" if model_info["image"] else None
) )
button = Gtk.Button( link_button = Gtk.Button(
icon_name = "web-browser-symbolic",
vexpand = False,
valign = 3,
css_classes = ["success"]
)
pull_button = Gtk.Button(
icon_name = "folder-download-symbolic", icon_name = "folder-download-symbolic",
vexpand = False, vexpand = False,
valign = 3, valign = 3,
css_classes = ["accent"] css_classes = ["accent"]
) )
button.connect("clicked", lambda button=button, model_name=name: self.model_pull_button_activate(model_name)) link_button.connect("clicked", lambda button=link_button, link=model_info["url"]: webbrowser.open(link))
model.add_suffix(button) pull_button.connect("clicked", lambda button=pull_button, model_name=name: self.model_pull_button_activate(model_name))
model.add_suffix(link_button)
model.add_suffix(pull_button)
self.available_model_list_box.append(model) self.available_model_list_box.append(model)
def manage_models_button_activate(self, button=None): def manage_models_button_activate(self, button=None):
self.update_list_local_models() self.update_list_local_models()
self.manage_models_dialog.present(self) self.manage_models_dialog.present(self)
def connection_carousel_page_changed(self, carousel, index): def welcome_carousel_page_changed(self, carousel, index):
if index == 0: self.connection_previous_button.set_sensitive(False) if index == 0: self.welcome_previous_button.set_sensitive(False)
else: self.connection_previous_button.set_sensitive(True) else: self.welcome_previous_button.set_sensitive(True)
if index == carousel.get_n_pages()-1: self.connection_next_button.set_label("Connect") if index == carousel.get_n_pages()-1: self.welcome_next_button.set_label("Connect")
else: self.connection_next_button.set_label("Next") else: self.welcome_next_button.set_label("Next")
def connection_previous_button_activate(self, button): def welcome_previous_button_activate(self, button):
self.connection_carousel.scroll_to(self.connection_carousel.get_nth_page(self.connection_carousel.get_position()-1), True) self.welcome_carousel.scroll_to(self.welcome_carousel.get_nth_page(self.welcome_carousel.get_position()-1), True)
def connection_next_button_activate(self, button): def welcome_next_button_activate(self, button):
if button.get_label() == "Next": self.connection_carousel.scroll_to(self.connection_carousel.get_nth_page(self.connection_carousel.get_position()+1), True) if button.get_label() == "Next": self.welcome_carousel.scroll_to(self.welcome_carousel.get_nth_page(self.welcome_carousel.get_position()+1), True)
else: else:
self.ollama_url = self.connection_url_entry.get_text() self.welcome_dialog.force_close()
if self.verify_connection(): if not self.verify_connection():
self.connection_dialog.force_close() self.connection_error()
else:
self.show_connection_dialog(True)
self.show_toast("error", 1, self.connection_overlay)
def show_connection_dialog(self, error:bool=False):
self.connection_carousel.scroll_to(self.connection_carousel.get_nth_page(self.connection_carousel.get_n_pages()-1),False)
if self.ollama_url is not None: self.connection_url_entry.set_text(self.ollama_url)
if error: self.connection_url_entry.set_css_classes(["error"])
else: self.connection_url_entry.set_css_classes([])
self.connection_dialog.present(self)
def clear_chat(self): def clear_chat(self):
for widget in list(self.chat_container): self.chat_container.remove(widget) for widget in list(self.chat_container): self.chat_container.remove(widget)
@@ -602,48 +665,11 @@ class AlpacaWindow(Adw.ApplicationWindow):
with open(os.path.join(self.config_dir, "chats.json"), "r") as f: with open(os.path.join(self.config_dir, "chats.json"), "r") as f:
self.chats = json.load(f) 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 "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": []} if len(list(self.chats["chats"].keys())) == 0: self.chats["chats"]["New Chat"] = {"messages": []}
except Exception as e: except Exception as e:
self.chats = {"chats": {"New chat": {"messages": []}}, "selected_chat": "New chat"} self.chats = {"chats": {"New Chat": {"messages": []}}, "selected_chat": "New Chat"}
self.load_history_into_chat() self.load_history_into_chat()
def closing_connection_dialog_response(self, dialog, task):
result = dialog.choose_finish(task)
if result == "cancel": return
if result == "save":
self.ollama_url = self.connection_url_entry.get_text()
elif result == "discard" and self.ollama_url is None: self.destroy()
self.connection_dialog.force_close()
if self.ollama_url is None or self.verify_connection() == False:
self.show_connection_dialog(True)
self.show_toast("error", 1, self.connection_overlay)
def closing_connection_dialog(self, dialog):
if self.ollama_url is None or self.first_time_setup: self.destroy()
if self.ollama_url == self.connection_url_entry.get_text():
self.connection_dialog.force_close()
if self.ollama_url is None or self.verify_connection() == False:
self.show_connection_dialog(True)
self.show_toast("error", 1, self.connection_overlay)
else: self.first_time_setup = False
return
dialog = Adw.AlertDialog(
heading=_("Save Changes"),
body=_("Do you want to save the URL change?"),
close_response="cancel"
)
dialog.add_response("cancel", _("Cancel"))
dialog.add_response("discard", _("Discard"))
dialog.add_response("save", _("Save"))
dialog.set_response_appearance("discard", Adw.ResponseAppearance.DESTRUCTIVE)
dialog.set_response_appearance("save", Adw.ResponseAppearance.SUGGESTED)
dialog.choose(
parent = self,
cancellable = None,
callback = self.closing_connection_dialog_response
)
def load_image(self, file_dialog, result): def load_image(self, file_dialog, result):
try: file = file_dialog.open_finish(result) try: file = file_dialog.open_finish(result)
except: return except: return
@@ -660,7 +686,7 @@ class AlpacaWindow(Adw.ApplicationWindow):
new_width = int((max_size / height) * width) new_width = int((max_size / height) * width)
resized_img = img.resize((new_width, new_height), Image.LANCZOS) resized_img = img.resize((new_width, new_height), Image.LANCZOS)
with BytesIO() as output: with BytesIO() as output:
resized_img.save(output, format="JPEG") resized_img.save(output, format="PNG")
image_data = output.getvalue() image_data = output.getvalue()
self.attached_image["base64"] = base64.b64encode(image_data).decode("utf-8") self.attached_image["base64"] = base64.b64encode(image_data).decode("utf-8")
@@ -699,11 +725,10 @@ class AlpacaWindow(Adw.ApplicationWindow):
del self.chats['chats'][chat_name] del self.chats['chats'][chat_name]
self.save_history() self.save_history()
self.update_chat_list() self.update_chat_list()
if len(self.chats['chats'])==0:
self.chat_new()
def chat_delete_dialog(self, chat_name): def chat_delete_dialog(self, chat_name):
if len(self.chats['chats'])==1:
self.show_toast("error", 6, self.main_overlay)
return
dialog = Adw.AlertDialog( dialog = Adw.AlertDialog(
heading=_("Delete Chat"), heading=_("Delete Chat"),
body=_("Are you sure you want to delete '{}'?").format(chat_name), body=_("Are you sure you want to delete '{}'?").format(chat_name),
@@ -730,7 +755,6 @@ class AlpacaWindow(Adw.ApplicationWindow):
self.save_history() self.save_history()
self.update_chat_list() self.update_chat_list()
def chat_rename_dialog(self, chat_name:str, body:str, error:bool=False): def chat_rename_dialog(self, chat_name:str, body:str, error:bool=False):
entry = Gtk.Entry( entry = Gtk.Entry(
css_classes = ["error"] if error else None css_classes = ["error"] if error else None
@@ -752,8 +776,9 @@ class AlpacaWindow(Adw.ApplicationWindow):
) )
def chat_new(self, dialog=None, task=None, entry=None): def chat_new(self, dialog=None, task=None, entry=None):
if not entry: return #if not entry: return
chat_name = entry.get_text() chat_name = None
if entry is not None: chat_name = entry.get_text()
if not chat_name: if not chat_name:
chat_name=_("New Chat") chat_name=_("New Chat")
if chat_name in self.chats["chats"]: if chat_name in self.chats["chats"]:
@@ -762,7 +787,7 @@ class AlpacaWindow(Adw.ApplicationWindow):
chat_name += f" {i+1}" chat_name += f" {i+1}"
break break
if not task or dialog.choose_finish(task) == "create": if not task or dialog.choose_finish(task) == "create":
dialog.force_close() if dialog is not None: dialog.force_close()
if chat_name in self.chats["chats"]: self.chat_new_dialog(_("The name '{}' is already in use").format(chat_name), True) if chat_name in self.chats["chats"]: self.chat_new_dialog(_("The name '{}' is already in use").format(chat_name), True)
else: else:
self.chats["chats"][chat_name] = {"messages": []} self.chats["chats"][chat_name] = {"messages": []}
@@ -794,12 +819,19 @@ class AlpacaWindow(Adw.ApplicationWindow):
def update_chat_list(self): def update_chat_list(self):
self.chat_list_box.remove_all() self.chat_list_box.remove_all()
for name, content in self.chats['chats'].items(): for name, content in self.chats['chats'].items():
chat = Adw.ActionRow( chat_content = Gtk.Box(
title = name, spacing = 6,
margin_top = 6, )
margin_start = 6, chat_row = Gtk.ListBoxRow(
margin_end = 6, css_classes = ["chat_row"],
css_classes = ["card"] height_request = 45,
child=chat_content,
name = name
)
chat_label = Gtk.Label(
label=name,
hexpand=True,
halign=1
) )
button_delete = Gtk.Button( button_delete = Gtk.Button(
icon_name = "user-trash-symbolic", icon_name = "user-trash-symbolic",
@@ -816,14 +848,15 @@ class AlpacaWindow(Adw.ApplicationWindow):
) )
button_rename.connect("clicked", lambda button, chat_name=name: self.chat_rename_dialog(chat_name=chat_name, body=f"Renaming '{chat_name}'", error=False)) button_rename.connect("clicked", lambda button, chat_name=name: self.chat_rename_dialog(chat_name=chat_name, body=f"Renaming '{chat_name}'", error=False))
chat.add_suffix(button_delete) chat_content.append(chat_label)
chat.add_suffix(button_rename) chat_content.append(button_delete)
self.chat_list_box.append(chat) chat_content.append(button_rename)
if name==self.chats["selected_chat"]: self.chat_list_box.select_row(chat) self.chat_list_box.append(chat_row)
if name==self.chats["selected_chat"]: self.chat_list_box.select_row(chat_row)
def chat_changed(self, listbox, row): def chat_changed(self, listbox, row):
if row and row.get_title() != self.chats["selected_chat"]: if row and row.get_name() != self.chats["selected_chat"]:
self.chats["selected_chat"] = row.get_title() self.chats["selected_chat"] = row.get_name()
self.load_history_into_chat() self.load_history_into_chat()
if len(self.chats["chats"][self.chats["selected_chat"]]["messages"]) > 0: if len(self.chats["chats"][self.chats["selected_chat"]]["messages"]) > 0:
for i in range(self.model_string_list.get_n_items()): for i in range(self.model_string_list.get_n_items()):
@@ -831,14 +864,142 @@ class AlpacaWindow(Adw.ApplicationWindow):
self.model_drop_down.set_selected(i) self.model_drop_down.set_selected(i)
break break
def show_preferences_dialog(self):
self.preferences_dialog.present(self)
def start_instance(self):
self.ollama_instance = subprocess.Popen(["/app/bin/ollama", "serve"], env={**os.environ, 'OLLAMA_HOST': f"127.0.0.1:{self.local_ollama_port}", "HOME": self.data_dir}, stderr=subprocess.PIPE, text=True)
print("Starting Alpaca's Ollama instance...")
sleep(1)
while True:
err = self.ollama_instance.stderr.readline()
if err == '' and self.ollama_instance.poll() is not None:
break
if 'msg="inference compute"' in err: #Ollama outputs a line with this when it finishes loading, yeah
break
print("Started Alpaca's Ollama instance")
def stop_instance(self):
self.ollama_instance.kill()
print("Stopped Alpaca's Ollama instance")
def restart_instance(self):
if self.ollama_instance is not None: self.stop_instance()
start_instance(self)
def reconnect_remote(self, dialog, task=None, entry=None):
response = dialog.choose_finish(task)
dialog.force_close()
if not task or response == "remote":
self.ollama_url = entry.get_text()
self.remote_url = self.ollama_url
self.remote_connection_entry.set_text(self.remote_url)
if self.verify_connection() == False: self.connection_error()
elif response == "local":
self.run_remote = False
self.ollama_url = f"http://127.0.0.1:{self.local_ollama_port}"
self.start_instance()
if self.verify_connection() == False: self.connection_error()
else: self.remote_connection_switch.set_active(False)
elif response == "close":
self.destroy()
def connection_error(self):
if self.run_remote:
entry = Gtk.Entry(
css_classes = ["error"],
text = self.ollama_url
)
dialog = Adw.AlertDialog(
heading=_("Connection Error"),
body=_("The remote instance has disconnected"),
extra_child=entry
)
entry.connect("activate", lambda entry, dialog=dialog: self.reconnect_remote(dialog=dialog, entry=entry))
dialog.add_response("close", _("Close Alpaca"))
dialog.add_response("local", _("Use local instance"))
dialog.add_response("remote", _("Connect"))
dialog.set_response_appearance("remote", Adw.ResponseAppearance.SUGGESTED)
dialog.choose(
parent = self,
cancellable = None,
callback = lambda dialog, task, entry=entry: self.reconnect_remote(dialog=dialog, task=task, entry=entry)
)
else:
self.restart_instance()
self.show_toast("error", 7, self.main_overlay)
def connection_switched(self):
new_value = self.remote_connection_switch.get_active()
if new_value != self.run_remote:
self.run_remote = new_value
if self.run_remote:
self.ollama_url = self.remote_url
if self.verify_connection() == False: self.connection_error()
else: self.stop_instance()
else:
self.ollama_url = f"http://127.0.0.1:{self.local_ollama_port}"
self.start_instance()
if self.verify_connection() == False: self.connection_error()
self.update_list_available_models()
self.update_list_local_models()
def change_remote_url(self, entry):
self.remote_url = entry.get_text()
if self.run_remote:
self.ollama_url = self.remote_url
if self.verify_connection() == False:
entry.set_css_classes(["error"])
self.show_toast("error", 1, self.preferences_dialog)
def on_replace_contents(self, file, result):
file.replace_contents_finish(result)
self.show_toast("good", 2, self.main_overlay)
def on_export_current_chat(self, file_dialog, result):
file = file_dialog.save_finish(result)
data_to_export = {self.chats["selected_chat"]: self.chats["chats"][self.chats["selected_chat"]]}
file.replace_contents_async(
json.dumps(data_to_export, indent=4).encode("UTF-8"),
etag=None,
make_backup=False,
flags=Gio.FileCreateFlags.NONE,
cancellable=None,
callback=self.on_replace_contents
)
def export_current_chat(self):
file_dialog = Gtk.FileDialog(initial_name=f"{self.chats['selected_chat']}.json")
file_dialog.save(parent=self, cancellable=None, callback=self.on_export_current_chat)
def on_chat_imported(self, file_dialog, result):
file = file_dialog.open_finish(result)
stream = file.read(None)
data_stream = Gio.DataInputStream.new(stream)
data, _ = data_stream.read_until('\0', None)
data = json.loads(data)
chat_name = list(data.keys())[0]
chat_content = data[chat_name]
self.chats['chats'][chat_name] = chat_content
self.update_chat_list()
self.save_history()
self.show_toast("good", 3, self.main_overlay)
def import_chat(self):
file_dialog = Gtk.FileDialog(default_filter=self.file_filter_json)
file_dialog.open(self, None, self.on_chat_imported)
def switch_run_on_background(self):
self.run_on_background = self.background_switch.get_active()
self.set_hide_on_close(self.run_on_background)
self.verify_connection()
def __init__(self, **kwargs): def __init__(self, **kwargs):
super().__init__(**kwargs) super().__init__(**kwargs)
GtkSource.init() GtkSource.init()
self.set_help_overlay(self.shortcut_window) self.set_help_overlay(self.shortcut_window)
self.get_application().set_accels_for_action("win.show-help-overlay", ['<primary>slash']) self.get_application().set_accels_for_action("win.show-help-overlay", ['<primary>slash'])
self.get_application().create_action('send', lambda *_: self.send_message(self), ['<primary>Return']) self.get_application().create_action('send', lambda *_: self.send_message(self), ['Return'])
self.manage_models_button.connect("clicked", self.manage_models_button_activate) self.manage_models_button.connect("clicked", self.manage_models_button_activate)
self.send_button.connect("clicked", self.send_message) self.send_button.connect("clicked", self.send_message)
self.image_button.connect("clicked", self.open_image) self.image_button.connect("clicked", self.open_image)
@@ -846,19 +1007,40 @@ class AlpacaWindow(Adw.ApplicationWindow):
self.set_default_widget(self.send_button) self.set_default_widget(self.send_button)
self.model_drop_down.connect("notify", self.verify_if_image_can_be_used) self.model_drop_down.connect("notify", self.verify_if_image_can_be_used)
self.chat_list_box.connect("row-selected", self.chat_changed) self.chat_list_box.connect("row-selected", self.chat_changed)
#self.message_text_view.set_activates_default(self.send_button) self.welcome_carousel.connect("page-changed", self.welcome_carousel_page_changed)
self.connection_carousel.connect("page-changed", self.connection_carousel_page_changed) self.welcome_previous_button.connect("clicked", self.welcome_previous_button_activate)
self.connection_previous_button.connect("clicked", self.connection_previous_button_activate) self.welcome_next_button.connect("clicked", self.welcome_next_button_activate)
self.connection_next_button.connect("clicked", self.connection_next_button_activate)
self.connection_url_entry.connect("changed", lambda entry: entry.set_css_classes([])) self.export_chat_button.connect("clicked", lambda button : self.export_current_chat())
self.connection_dialog.connect("close-attempt", self.closing_connection_dialog) self.import_chat_button.connect("clicked", lambda button : self.import_chat())
self.load_history() #Preferences
if os.path.exists(os.path.join(self.config_dir, "server.conf")): self.remote_connection_entry.connect("entry-activated", lambda entry : entry.set_css_classes([]))
with open(os.path.join(self.config_dir, "server.conf"), "r") as f: self.remote_connection_entry.connect("apply", self.change_remote_url)
self.ollama_url = f.read() self.remote_connection_switch.connect("notify", lambda pspec, user_data : self.connection_switched())
if self.verify_connection() is False: self.show_connection_dialog(True) self.background_switch.connect("notify", lambda pspec, user_data : self.switch_run_on_background())
if os.path.exists(os.path.join(self.config_dir, "server.json")):
with open(os.path.join(self.config_dir, "server.json"), "r") as f:
data = json.load(f)
self.run_remote = data['run_remote']
self.local_ollama_port = data['local_port']
self.remote_url = data['remote_url']
self.run_on_background = data['run_on_background']
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)
if self.run_remote:
self.ollama_url = data['remote_url']
self.remote_connection_switch.set_active(True)
else:
self.remote_connection_switch.set_active(False)
self.ollama_url = f"http://127.0.0.1:{self.local_ollama_port}"
self.start_instance()
else: else:
self.start_instance()
self.ollama_url = f"http://127.0.0.1:{self.local_ollama_port}"
self.first_time_setup = True self.first_time_setup = True
self.connection_dialog.present(self) self.welcome_dialog.present(self)
if self.verify_connection() is False and self.run_remote == False: self.connection_error()
self.update_list_available_models() self.update_list_available_models()
self.load_history()
self.update_chat_list() self.update_chat_list()

View File

@@ -4,10 +4,11 @@
<requires lib="Adw" version="1.0"/> <requires lib="Adw" version="1.0"/>
<template class="AlpacaWindow" parent="AdwApplicationWindow"> <template class="AlpacaWindow" parent="AdwApplicationWindow">
<property name="resizable">True</property> <property name="resizable">True</property>
<property name="width-request">350</property> <property name="width-request">360</property>
<property name="height-request">500</property> <property name="height-request">700</property>
<property name="default-width">1300</property> <property name="default-width">1300</property>
<property name="default-height">800</property> <property name="default-height">800</property>
<property name="title">Alpaca</property>
<child> <child>
<object class="AdwBreakpoint"> <object class="AdwBreakpoint">
<condition>max-width: 800sp</condition> <condition>max-width: 800sp</condition>
@@ -20,18 +21,9 @@
<object class="AdwBreakpoint"> <object class="AdwBreakpoint">
<condition>max-width: 500sp</condition> <condition>max-width: 500sp</condition>
<setter object="split_view_overlay" property="collapsed">true</setter> <setter object="split_view_overlay" property="collapsed">true</setter>
<setter object="connection_dialog" property="width-request">400</setter> <setter object="welcome_dialog" property="width-request">360</setter>
<setter object="connection_dialog" property="height-request">400</setter> <setter object="manage_models_dialog" property="width-request">360</setter>
<setter object="manage_models_dialog" property="width-request">400</setter> <setter object="preferences_dialog" property="width-request">360</setter>
</object>
</child>
<child>
<object class="AdwBreakpoint">
<condition>max-width: 400sp</condition>
<setter object="split_view_overlay" property="collapsed">true</setter>
<setter object="connection_dialog" property="width-request">300</setter>
<setter object="connection_dialog" property="height-request">300</setter>
<setter object="manage_models_dialog" property="width-request">300</setter>
</object> </object>
</child> </child>
<property name="content"> <property name="content">
@@ -40,42 +32,39 @@
<object class="AdwOverlaySplitView" id="split_view_overlay"> <object class="AdwOverlaySplitView" id="split_view_overlay">
<property name="show-sidebar" bind-source="show_sidebar_button" bind-property="active" bind-flags="sync-create"/> <property name="show-sidebar" bind-source="show_sidebar_button" bind-property="active" bind-flags="sync-create"/>
<property name="sidebar"> <property name="sidebar">
<object class="GtkBox"> <object class="AdwToolbarView">
<property name="spacing">12</property> <child type="top">
<property name="margin-top">12</property> <object class="AdwHeaderBar">
<property name="margin-bottom">12</property> <child type="start">
<property name="margin-start">12</property>
<property name="margin-end">12</property>
<property name="orientation">1</property>
<child>
<object class="GtkBox">
<property name="spacing">12</property>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Chats</property>
<property name="hexpand">true</property>
<property name="halign">1</property>
<style>
<class name="title-1"/>
</style>
</object>
</child>
<child>
<object class="GtkButton" id="add_chat_button"> <object class="GtkButton" id="add_chat_button">
<property name="tooltip-text" translatable="yes">New chat</property> <property name="tooltip-text" translatable="yes">New chat</property>
<property name="icon-name">tab-new-symbolic</property>
<style>
<class name="flat"/>
</style>
</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> <style>
<class name="flat"/> <class name="flat"/>
</style> </style>
<child>
<object class="AdwButtonContent">
<property name="icon-name">tab-new-symbolic</property>
</object>
</child>
</object> </object>
</child> </child>
</object> </object>
</child> </child>
<child> <property name="content">
<object class="GtkScrolledWindow"> <object class="GtkScrolledWindow">
<property name="vexpand">true</property> <property name="vexpand">true</property>
<property name="hexpand">true</property> <property name="hexpand">true</property>
@@ -83,12 +72,12 @@
<object class="GtkListBox" id="chat_list_box"> <object class="GtkListBox" id="chat_list_box">
<property name="selection-mode">single</property> <property name="selection-mode">single</property>
<style> <style>
<class name="boxed-list"/> <class name="navigation-sidebar"></class>
</style> </style>
</object> </object>
</child> </child>
</object> </object>
</child> </property>
</object> </object>
</property> </property>
<child> <child>
@@ -142,90 +131,104 @@
<property name="content"> <property name="content">
<object class="GtkBox"><!--ACTUAL CONTENT--> <object class="GtkBox"><!--ACTUAL CONTENT-->
<property name="orientation">1</property> <property name="orientation">1</property>
<property name="margin-start">24</property>
<property name="margin-end">24</property>
<property name="margin-bottom">24</property>
<property name="vexpand">true</property> <property name="vexpand">true</property>
<property name="hexpand">true</property> <property name="hexpand">true</property>
<child> <child>
<object class="GtkScrolledWindow" id="chat_window"> <object class="GtkScrolledWindow" id="chat_window">
<property name="margin-bottom">12</property>
<property name="has-frame">true</property>
<property name="propagate-natural-height">true</property> <property name="propagate-natural-height">true</property>
<property name="kinetic-scrolling">1</property> <property name="kinetic-scrolling">true</property>
<property name="vexpand">true</property> <property name="vexpand">true</property>
<style> <style>
<class name="card"/> <class name="undershoot-bottom"/>
</style> </style>
<child> <child>
<object class="GtkBox" id="chat_container"> <object class="AdwClamp">
<property name="orientation">1</property> <property name="maximum-size">1000</property>
<property name="homogeneous">false</property> <property name="tightening-threshold">800</property>
<property name="hexpand">false</property> <child>
<property name="vexpand">true</property> <object class="GtkBox" id="chat_container">
<property name="spacing">12</property> <property name="orientation">1</property>
<property name="margin-top">12</property> <property name="homogeneous">false</property>
<property name="margin-bottom">12</property> <property name="hexpand">true</property>
<property name="margin-start">12</property> <property name="vexpand">true</property>
<property name="margin-end">12</property> <property name="spacing">12</property>
<property name="margin-top">12</property>
<property name="margin-bottom">12</property>
<property name="margin-start">12</property>
<property name="margin-end">12</property>
</object>
</child>
</object> </object>
</child> </child>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkBox"> <object class="AdwClamp">
<property name="orientation">0</property> <property name="maximum-size">1000</property>
<property name="spacing">12</property> <property name="tightening-threshold">800</property>
<child> <child>
<object class="GtkScrolledWindow"> <object class="GtkBox">
<property name="has-frame">true</property> <property name="orientation">0</property>
<style> <property name="spacing">12</property>
<class name="card"/> <property name="margin-top">12</property>
<class name="view"/> <property name="margin-bottom">12</property>
</style> <property name="margin-start">12</property>
<child> <property name="margin-end">12</property>
<object class="GtkTextView" id="message_text_view"> <child>
<property name="wrap-mode">word</property> <object class="GtkBox">
<property name="margin-top">6</property> <style>
<property name="margin-bottom">6</property> <class name="message-input"/>
<property name="margin-start">6</property> </style>
<property name="margin-end">6</property> <child>
<property name="hexpand">true</property> <object class="GtkScrolledWindow">
<style> <property name="margin-start">12</property>
<class name="view"/> <property name="margin-end">12</property>
</style>
</object>
</child>
</object>
</child> <child>
<child> <object class="GtkTextView" id="message_text_view">
<object class="GtkBox"> <property name="wrap-mode">word</property>
<property name="orientation">1</property> <property name="top-margin">6</property>
<property name="spacing">12</property> <property name="bottom-margin">6</property>
<property name="margin-end">12</property>
<property name="hexpand">true</property>
<style>
<class name="message-text-view"/>
</style>
</object>
</child>
</object>
</child>
</object>
</child>
<child> <child>
<object class="GtkButton" id="send_button"> <object class="GtkBox">
<style> <property name="orientation">1</property>
<class name="suggested-action"/> <property name="spacing">12</property>
</style>
<child> <child>
<object class="AdwButtonContent"> <object class="GtkButton" id="send_button">
<property name="label" translatable="yes">Send</property> <style>
<property name="icon-name">send-to-symbolic</property> <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> </object>
</child> </child>
</object>
</child>
<child>
<object class="GtkButton" id="image_button">
<property name="sensitive">false</property>
<property name="tooltip-text" translatable="yes">Requires model 'llava' to be selected</property>
<child> <child>
<object class="AdwButtonContent"> <object class="GtkButton" id="image_button">
<property name="label" translatable="yes">Image</property> <property name="sensitive">false</property>
<property name="icon-name">image-x-generic-symbolic</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> </object>
</child> </child>
</object> </object>
@@ -235,6 +238,7 @@
</object> </object>
</child> </child>
</object><!--END OF CONTENT--> </object><!--END OF CONTENT-->
</property> </property>
</object> </object>
@@ -243,6 +247,46 @@
</child> </child>
</object> </object>
</property> </property>
<object class="AdwPreferencesDialog" id="preferences_dialog">
<property name="can-close">true</property>
<property name="width-request">400</property>
<property name="height-request">600</property>
<property name="title" translatable="yes">Preferences</property>
<child>
<object class="AdwPreferencesPage" id="connection_page">
<property name="title" translatable="yes">General</property>
<property name="icon-name">insert-link-symbolic</property>
<child>
<object class="AdwPreferencesGroup">
<property name="title" translatable="yes">Remote Connection</property>
<property name="description" translatable="yes">Manage a remote connection to Ollama</property>
<child>
<object class="AdwSwitchRow" id="remote_connection_switch">
<property name="title" translatable="yes">Use remote connection</property>
</object>
</child>
<child>
<object class="AdwEntryRow" id="remote_connection_entry">
<property name="title" translatable="yes">URL of remote instance</property>
<property name="show-apply-button">true</property>
</object>
</child>
</object>
</child>
<child>
<object class="AdwPreferencesGroup">
<property name="title" translatable="yes">Behavior</property>
<property name="description" translatable="yes">Manage Alpaca's Behavior</property>
<child>
<object class="AdwSwitchRow" id="background_switch">
<property name="title" translatable="yes">Run in background</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
<object class="AdwDialog" id="manage_models_dialog"> <object class="AdwDialog" id="manage_models_dialog">
<property name="can-close">true</property> <property name="can-close">true</property>
@@ -265,26 +309,21 @@
<object class="GtkScrolledWindow"> <object class="GtkScrolledWindow">
<property name="hexpand">true</property> <property name="hexpand">true</property>
<property name="vexpand">true</property> <property name="vexpand">true</property>
<property name="margin-top">0</property>
<property name="margin-bottom">24</property>
<property name="margin-start">24</property>
<property name="margin-end">24</property>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="margin-start">12</property>
<property name="margin-end">12</property>
<property name="margin-top">12</property>
<property name="margin-bottom">12</property>
<property name="orientation">1</property> <property name="orientation">1</property>
<property name="spacing">12</property> <property name="spacing">12</property>
<child> <child>
<object class="GtkListBox" id="pulling_model_list_box"> <object class="GtkListBox" id="pulling_model_list_box">
<property name="visible">false</property>
<property name="selection-mode">none</property> <property name="selection-mode">none</property>
<style> <style>
<class name="boxed-list"/> <class name="boxed-list"/>
</style> <class name="card"/>
</object>
</child>
<child>
<object class="GtkSeparator">
<style>
<class name="spacer"/>
</style> </style>
</object> </object>
</child> </child>
@@ -293,13 +332,7 @@
<property name="selection-mode">none</property> <property name="selection-mode">none</property>
<style> <style>
<class name="boxed-list"/> <class name="boxed-list"/>
</style> <class name="card"/>
</object>
</child>
<child>
<object class="GtkSeparator">
<style>
<class name="spacer"/>
</style> </style>
</object> </object>
</child> </child>
@@ -321,111 +354,85 @@
</child> </child>
</object> </object>
<object class="AdwDialog" id="connection_dialog"> <object class="AdwDialog" id="welcome_dialog">
<property name="can-close">false</property> <property name="can-close">false</property>
<property name="width-request">450</property> <property name="width-request">450</property>
<property name="height-request">450</property> <property name="height-request">450</property>
<child> <child>
<object class="AdwToastOverlay" id="connection_overlay"> <object class="AdwToolbarView">
<child> <child type="bottom">
<object class="AdwToolbarView"> <object class="GtkActionBar">
<child type="top"> <property name="hexpand">true</property>
<object class="AdwHeaderBar"> <property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-bottom">5</property>
<child type="start">
<object class="GtkButton" id="welcome_previous_button">
<property name="tooltip-text" translatable="yes">Previous</property>
<property name="label">Previous</property>
<property name="sensitive">false</property>
<style>
<class name="raised"/>
</style>
</object> </object>
</child> </child>
<child type="bottom"> <child type="center">
<object class="GtkActionBar"> <object class="AdwCarouselIndicatorDots">
<property name="hexpand">true</property> <property name="carousel">welcome_carousel</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-bottom">5</property>
<child type="start">
<object class="GtkButton" id="connection_previous_button">
<property name="tooltip-text" translatable="yes">Previous</property>
<property name="label">Previous</property>
<property name="sensitive">false</property>
<style>
<class name="raised"/>
</style>
</object>
</child>
<child type="center">
<object class="AdwCarouselIndicatorDots">
<property name="carousel">connection_carousel</property>
</object>
</child>
<child type="end">
<object class="GtkButton" id="connection_next_button">
<property name="tooltip-text" translatable="yes">Next</property>
<property name="label">Next</property>
<style>
<class name="suggested-action"/>
</style>
</object>
</child>
</object> </object>
</child> </child>
<child type="end">
<object class="GtkButton" id="welcome_next_button">
<property name="tooltip-text" translatable="yes">Next</property>
<property name="label">Next</property>
<style>
<class name="suggested-action"/>
</style>
</object>
</child>
</object>
</child>
<child>
<object class="AdwCarousel" id="welcome_carousel">
<property name="hexpand">true</property>
<property name="vexpand">true</property>
<property name="allow-long-swipes">true</property>
<property name="allow-scroll-wheel">true</property>
<property name="spacing">12</property>
<child> <child>
<object class="AdwCarousel" id="connection_carousel"> <object class="AdwStatusPage">
<property name="hexpand">true</property> <property name="hexpand">true</property>
<property name="vexpand">true</property> <property name="vexpand">true</property>
<property name="allow-long-swipes">true</property> <property name="margin-top">12</property>
<property name="allow-scroll-wheel">true</property> <property name="margin-bottom">12</property>
<property name="spacing">12</property> <property name="margin-start">12</property>
<property name="margin-end">12</property>
<property name="icon-name">com.jeffser.Alpaca</property>
<property name="title" translatable="yes">Welcome to Alpaca</property>
<property name="description" translatable="yes">Powered by Ollama</property>
<child> <child>
<object class="AdwStatusPage"> <object class="GtkLinkButton">
<property name="hexpand">true</property> <property name="label" translatable="yes">Ollama Website</property>
<property name="vexpand">true</property> <property name="uri">https://ollama.com/</property>
<property name="margin-top">12</property> <property name="margin-top">12</property>
<property name="margin-bottom">12</property>
<property name="margin-start">12</property>
<property name="margin-end">12</property>
<property name="icon-name">com.jeffser.Alpaca</property>
<property name="title" translatable="yes">Welcome to Alpaca</property>
<property name="description" translatable="yes">To get started, please ensure you have an Ollama instance set up. You can either run Ollama locally on your machine or connect to a remote instance.</property>
<child>
<object class="GtkLinkButton">
<property name="label" translatable="yes">Ollama Website</property>
<property name="uri">https://ollama.com/</property>
<property name="margin-top">12</property>
</object>
</child>
</object>
</child>
<child>
<object class="AdwStatusPage">
<property name="hexpand">true</property>
<property name="vexpand">true</property>
<property name="margin-top">12</property>
<property name="margin-bottom">12</property>
<property name="margin-start">12</property>
<property name="margin-end">12</property>
<property name="icon-name">dialog-warning-symbolic</property>
<property name="title" translatable="yes">Disclaimer</property>
<property name="description" translatable="yes">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.</property>
</object>
</child>
<child>
<object class="AdwStatusPage">
<property name="hexpand">true</property>
<property name="vexpand">true</property>
<property name="margin-top">12</property>
<property name="margin-bottom">12</property>
<property name="margin-start">12</property>
<property name="margin-end">12</property>
<property name="icon-name">preferences-other-symbolic</property>
<property name="title" translatable="yes">Setup</property>
<property name="description" translatable="yes">If you are running an Ollama instance locally and haven't modified the default ports, you can use the default URL. Otherwise, please enter the URL of your Ollama instance.</property>
<child>
<object class="GtkEntry" id="connection_url_entry">
<property name="text">http://localhost:11434</property>
</object>
</child>
</object> </object>
</child> </child>
</object> </object>
</child> </child>
<child>
<object class="AdwStatusPage">
<property name="hexpand">true</property>
<property name="vexpand">true</property>
<property name="margin-top">12</property>
<property name="margin-bottom">12</property>
<property name="margin-start">12</property>
<property name="margin-end">12</property>
<property name="icon-name">dialog-warning-symbolic</property>
<property name="title" translatable="yes">Disclaimer</property>
<property name="description" translatable="yes">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.</property>
</object>
</child>
</object> </object>
</child> </child>
</object> </object>
@@ -440,8 +447,8 @@
<attribute name="action">app.clear</attribute> <attribute name="action">app.clear</attribute>
</item> </item>
<item> <item>
<attribute name="label" translatable="yes">Change Server</attribute> <attribute name="label" translatable="yes">Preferences</attribute>
<attribute name="action">app.reconnect</attribute> <attribute name="action">app.preferences</attribute>
</item> </item>
<item> <item>
<attribute name="label" translatable="yes">Keyboard Shortcuts</attribute> <attribute name="label" translatable="yes">Keyboard Shortcuts</attribute>
@@ -453,6 +460,13 @@
</item> </item>
</section> </section>
</menu> </menu>
<menu id="chat_context_menu">
<section>
<item>
<attribute name="label" translatable="yes">Remove</attribute>
</item>
</section>
</menu>
<object class="GtkFileFilter" id="file_filter_image"> <object class="GtkFileFilter" id="file_filter_image">
<mime-types> <mime-types>
<mime-type>image/svg+xml</mime-type> <mime-type>image/svg+xml</mime-type>
@@ -462,6 +476,11 @@
<mime-type>image/gif</mime-type> <mime-type>image/gif</mime-type>
</mime-types> </mime-types>
</object> </object>
<object class="GtkFileFilter" id="file_filter_json">
<mime-types>
<mime-type>application/json</mime-type>
</mime-types>
</object>
<object class="GtkShortcutsWindow" id="shortcut_window"> <object class="GtkShortcutsWindow" id="shortcut_window">
<property name="modal">1</property> <property name="modal">1</property>
<child> <child>
@@ -485,8 +504,8 @@
</child> </child>
<child> <child>
<object class="GtkShortcutsShortcut"> <object class="GtkShortcutsShortcut">
<property name="accelerator">&lt;ctrl&gt;R</property> <property name="accelerator">&lt;ctrl&gt;P</property>
<property name="title" translatable="yes">Change server</property> <property name="title" translatable="yes">Preferences</property>
</object> </object>
</child> </child>
<child> <child>
@@ -514,7 +533,13 @@
</child> </child>
<child> <child>
<object class="GtkShortcutsShortcut"> <object class="GtkShortcutsShortcut">
<property name="accelerator">&lt;ctrl&gt;Return</property> <property name="accelerator">&lt;shift&gt;Return</property>
<property name="title" translatable="yes">Insert new line</property>
</object>
</child>
<child>
<object class="GtkShortcutsShortcut">
<property name="accelerator">Return</property>
<property name="title" translatable="yes">Send Message</property> <property name="title" translatable="yes">Send Message</property>
</object> </object>
</child> </child>
@@ -524,3 +549,4 @@
</child> </child>
</object> </object>
</interface> </interface>

View File

@@ -6,3 +6,5 @@ echo "Updating Spanish..."
msgmerge -U po/es.po po/alpaca.pot msgmerge -U po/es.po po/alpaca.pot
echo "Updating Russian..." echo "Updating Russian..."
msgmerge -U po/ru.po po/alpaca.pot msgmerge -U po/ru.po po/alpaca.pot
echo "Updating Brazilian Portuguese"
msgmerge -U po/pt_BR.po po/alpaca.pot