Compare commits
19 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
849867728c | ||
|
|
9fba69566d | ||
|
|
86d2ee0be0 | ||
|
|
f333f50016 | ||
|
|
47faa4581e | ||
|
|
c8cc4f3960 | ||
|
|
8834a4bb88 | ||
|
|
51c01a5afa | ||
|
|
e550f49a18 | ||
|
|
65c46570c5 | ||
|
|
126f588fcb | ||
|
|
6fbf6e139b | ||
|
|
15fdd0ae1a | ||
|
|
0096346b0c | ||
|
|
e19aece78a | ||
|
|
d540114ae5 | ||
|
|
454aeac5e2 | ||
|
|
f6cc6ac894 | ||
|
|
adef5b5671 |
@@ -52,6 +52,23 @@
|
|||||||
<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.5.1" date="2024-05-19">
|
||||||
|
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.5.1</url>
|
||||||
|
<p>Another Daily Update</p>
|
||||||
|
<ul>
|
||||||
|
<li>Added full Spanish translation</li>
|
||||||
|
<li>Added support for background pulling of multiple models</li>
|
||||||
|
<li>Added interrupt button</li>
|
||||||
|
<li>Added basic shortcuts</li>
|
||||||
|
<li>Better translation support</li>
|
||||||
|
<li>User can now leave chat name empty when creating a new one, it will add a placeholder name</li>
|
||||||
|
<li>Better scalling for different window sizes</li>
|
||||||
|
<li>Fixed: Can't close app if first time setup fails</li>
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
Please report any errors to the issues page, thank you.
|
||||||
|
</p>
|
||||||
|
</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>
|
||||||
<description>
|
<description>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
project('Alpaca',
|
project('Alpaca',
|
||||||
version: '0.5.0',
|
version: '0.5.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', ],
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1 +1,2 @@
|
|||||||
ru
|
ru
|
||||||
|
es
|
||||||
538
po/alpaca.pot
Normal file
538
po/alpaca.pot
Normal file
@@ -0,0 +1,538 @@
|
|||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2024-05-19 21:30-0600\n"
|
||||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
"Language: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=CHARSET\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.desktop.in:3
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:7
|
||||||
|
msgid "Alpaca"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:8
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:11
|
||||||
|
msgid "An Ollama client"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:10
|
||||||
|
msgid "Chat with multiple AI models"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:12
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:176
|
||||||
|
msgid "Features"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:14
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:178
|
||||||
|
msgid "Talk to multiple models in the same conversation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:15
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:179
|
||||||
|
msgid "Pull and delete models from the app"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:17 src/window.ui:405
|
||||||
|
msgid "Disclaimer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:18
|
||||||
|
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 ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:21
|
||||||
|
msgid "Jeffry Samuel Eduarte Rojas"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:39
|
||||||
|
msgid "Welcome dialog"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:43
|
||||||
|
msgid "A conversation involving multiple models"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:47
|
||||||
|
msgid "Managing models"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:72
|
||||||
|
msgid "Really Big Update"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:74
|
||||||
|
msgid "Added multiple chats support!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:75
|
||||||
|
msgid "Added Pango Markup support (bold, list, title, subtitle, monospace)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:76
|
||||||
|
msgid "Added autoscroll if the user is at the bottom of the chat"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:77
|
||||||
|
msgid "Added support for multiple tags on a single model"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:78
|
||||||
|
msgid "Added better model management dialog"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:79
|
||||||
|
msgid "Added loading spinner when sending message"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:80
|
||||||
|
msgid "Added notifications if app is not active and a model pull finishes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:81
|
||||||
|
msgid "Added new symbolic icon"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:82
|
||||||
|
msgid "Added frame to message textview widget"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:83
|
||||||
|
msgid "Fixed \"code blocks shouldn't be editable\""
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:85
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:101
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:117
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:131
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:141
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:159
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:181
|
||||||
|
msgid "Please report any errors to the issues page, thank you."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:93
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:150
|
||||||
|
msgid "Big Update"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:95
|
||||||
|
msgid "Added code highlighting"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:96
|
||||||
|
msgid "Added image recognition (llava model)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:97
|
||||||
|
msgid "Added multiline prompt"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:98
|
||||||
|
msgid "Fixed some small bugs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:99
|
||||||
|
msgid "General optimization"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:109
|
||||||
|
msgid "Fixes and features"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:111
|
||||||
|
msgid "Russian translation (thanks github/alexkdeveloper)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:112
|
||||||
|
msgid "Fixed: Cannot close app on first setup"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:113
|
||||||
|
msgid "Fixed: Brand colors for Flathub"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:114
|
||||||
|
msgid "Fixed: App description"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:115
|
||||||
|
msgid "Fixed: Only show 'save changes dialog' when you actually change the url"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:125
|
||||||
|
msgid "0.2.2 Bug fixes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:127
|
||||||
|
msgid "Toast messages appearing behind dialogs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:128
|
||||||
|
msgid "Local model list not updating when changing servers"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:129
|
||||||
|
msgid "Closing the setup dialog closes the whole app"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:139
|
||||||
|
msgid "0.2.1 Data saving fix"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:140
|
||||||
|
msgid ""
|
||||||
|
"The app didn't save the config files and chat history to the right "
|
||||||
|
"directory, this is now fixed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:149
|
||||||
|
msgid "0.2.0"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:151
|
||||||
|
msgid "New Features"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:153
|
||||||
|
msgid "Restore chat after closing the app"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:154
|
||||||
|
msgid "A button to clear the chat"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:155
|
||||||
|
msgid "Fixed multiple bugs involving how messages are shown"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:156
|
||||||
|
msgid "Added welcome dialog"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:157
|
||||||
|
msgid "More stability"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:167
|
||||||
|
msgid "0.1.2 Quick fixes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:168
|
||||||
|
msgid ""
|
||||||
|
"This release fixes some metadata needed to have a proper Flatpak application"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:174
|
||||||
|
msgid "0.1.1 Stable Release"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:175
|
||||||
|
msgid "This is the first public version of Alpaca"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:47 src/window.py:758
|
||||||
|
msgid "New Chat"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:86
|
||||||
|
msgid "An error occurred"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:87
|
||||||
|
msgid "Failed to connect to server"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:88
|
||||||
|
msgid "Could not list local models"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:89
|
||||||
|
msgid "Could not delete model"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:90
|
||||||
|
msgid "Could not pull model"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:91
|
||||||
|
msgid "Cannot open image"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:92
|
||||||
|
msgid "Cannot delete chat because it's the only one left"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:95
|
||||||
|
msgid "Please select a model before chatting"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:96
|
||||||
|
msgid "Chat cannot be cleared while receiving a message"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:99
|
||||||
|
msgid "Model deleted successfully"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:100
|
||||||
|
msgid "Model pulled successfully"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:418
|
||||||
|
msgid "Task Complete"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:418
|
||||||
|
msgid "Model '{}' pulled successfully."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:424
|
||||||
|
msgid "Pull Model Error"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:424
|
||||||
|
msgid "Failed to pull model '{}' due to network error."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:436
|
||||||
|
msgid "Stop Model"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:437
|
||||||
|
msgid "Are you sure you want to stop pulling '{}'?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:440 src/window.py:478 src/window.py:501 src/window.py:575
|
||||||
|
#: src/window.py:636 src/window.py:685 src/window.py:712 src/window.py:745
|
||||||
|
#: src/window.py:785
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:441
|
||||||
|
msgid "Stop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:474
|
||||||
|
msgid "Delete Model"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:475 src/window.py:709
|
||||||
|
msgid "Are you sure you want to delete '{}'?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:479 src/window.py:713
|
||||||
|
msgid "Delete"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:496
|
||||||
|
msgid "Pull Model"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:497
|
||||||
|
msgid "Please select a tag to pull '{}'"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:502
|
||||||
|
msgid "Pull"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:571 src/window.ui:439
|
||||||
|
msgid "Clear Chat"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:572
|
||||||
|
msgid "Are you sure you want to clear the chat?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:576
|
||||||
|
msgid "Clear"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:632
|
||||||
|
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"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:682
|
||||||
|
msgid "Are you sure you want to remove image?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:686
|
||||||
|
msgid "Remove"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:708
|
||||||
|
msgid "Delete Chat"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:739
|
||||||
|
msgid "Rename Chat"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:746
|
||||||
|
msgid "Rename"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:766
|
||||||
|
msgid "The name '{}' is already in use"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:779
|
||||||
|
msgid "Create Chat"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:786
|
||||||
|
msgid "Create"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:55
|
||||||
|
msgid "Chats"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:65
|
||||||
|
msgid "New chat"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:101
|
||||||
|
msgid "Toggle Sidebar"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:122 src/window.ui:259
|
||||||
|
msgid "Manage models"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:136
|
||||||
|
msgid "Menu"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:215
|
||||||
|
msgid "Send"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:224
|
||||||
|
msgid "Requires model 'llava' to be selected"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:227
|
||||||
|
msgid "Image"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:344
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:359
|
||||||
|
msgid "Next"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:385
|
||||||
|
msgid "Welcome to Alpaca"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:386
|
||||||
|
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 ""
|
||||||
|
|
||||||
|
#: src/window.ui:389
|
||||||
|
msgid "Ollama Website"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:406
|
||||||
|
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 ""
|
||||||
|
|
||||||
|
#: src/window.ui:418
|
||||||
|
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"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:451
|
||||||
|
msgid "About Alpaca"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:473
|
||||||
|
msgid "General"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:477
|
||||||
|
msgid "Close application"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:483
|
||||||
|
msgid "Clear chat"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:489
|
||||||
|
msgid "Change server"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:495
|
||||||
|
msgid "Show shortcuts window"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:502
|
||||||
|
msgid "Editor"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:506
|
||||||
|
msgid "Copy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:512
|
||||||
|
msgid "Paste"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:518
|
||||||
|
msgid "Send Message"
|
||||||
|
msgstr ""
|
||||||
562
po/es.po
Normal file
562
po/es.po
Normal file
@@ -0,0 +1,562 @@
|
|||||||
|
# Spanish translations for PACKAGE package.
|
||||||
|
# Copyright (C) 2024 THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# Jeffry Samuel Eduarte Rojas <jeffrysamuer@gmail.com>, 2024.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2024-05-19 21:24-0600\n"
|
||||||
|
"PO-Revision-Date: 2024-05-19 19:44-0600\n"
|
||||||
|
"Last-Translator: Jeffry Samuel Eduarte Rojas <jeffrysamuer@gmail.com>\n"
|
||||||
|
"Language-Team: Spanish <es@tp.org.es>\n"
|
||||||
|
"Language: es\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
|
||||||
|
#: 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"
|
||||||
|
msgstr "Chatea con multiples modelos de IA"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:12
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:176
|
||||||
|
msgid "Features"
|
||||||
|
msgstr "Funcionalidades"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:14
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:178
|
||||||
|
msgid "Talk to multiple models in the same conversation"
|
||||||
|
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:179
|
||||||
|
msgid "Pull and delete models from the app"
|
||||||
|
msgstr "Descarga y elimina modelos desde la app"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:17 src/window.ui:405
|
||||||
|
msgid "Disclaimer"
|
||||||
|
msgstr "Aviso Legal"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:18
|
||||||
|
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 ""
|
||||||
|
"Este proyecto no está afiliado del todo con Ollama, no soy responsable por "
|
||||||
|
"cualquier daño a tu dispositivo o software causado por correr codigo "
|
||||||
|
"proveido por cualquier modelo."
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:21
|
||||||
|
msgid "Jeffry Samuel Eduarte Rojas"
|
||||||
|
msgstr "Jeffry Samuel Eduarte Rojas"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:39
|
||||||
|
msgid "Welcome dialog"
|
||||||
|
msgstr "Dialogo de Bienvenida"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:43
|
||||||
|
msgid "A conversation involving multiple models"
|
||||||
|
msgstr "Una conversación incluyendo multiples modelos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:47
|
||||||
|
msgid "Managing models"
|
||||||
|
msgstr "Gestionando modelos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:72
|
||||||
|
msgid "Really Big Update"
|
||||||
|
msgstr "Actualización Bastante Grande"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:74
|
||||||
|
msgid "Added multiple chats support!"
|
||||||
|
msgstr "Añadido soporte para multiples chats!"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:75
|
||||||
|
msgid "Added Pango Markup support (bold, list, title, subtitle, monospace)"
|
||||||
|
msgstr ""
|
||||||
|
"Añadido soporte para Pango Markup (negrita, lista, titulo, subtitulo, "
|
||||||
|
"monoespaciado)"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:76
|
||||||
|
msgid "Added autoscroll if the user is at the bottom of the chat"
|
||||||
|
msgstr ""
|
||||||
|
"Añadido autoscroll si el usuario se encuentra en la parte inferior del chat"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:77
|
||||||
|
msgid "Added support for multiple tags on a single model"
|
||||||
|
msgstr "Añadido soporte para multiples etiquetas con un solo modelo"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:78
|
||||||
|
msgid "Added better model management dialog"
|
||||||
|
msgstr "Añadido mejor gestión de modelos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:79
|
||||||
|
msgid "Added loading spinner when sending message"
|
||||||
|
msgstr "Añadido spinner de carga cuando se envia un mensaje"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:80
|
||||||
|
msgid "Added notifications if app is not active and a model pull finishes"
|
||||||
|
msgstr ""
|
||||||
|
"Añadidas notificaciones si la aplicación no está activa y la descarga de un "
|
||||||
|
"modelo finaliza"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:81
|
||||||
|
msgid "Added new symbolic icon"
|
||||||
|
msgstr "Añadido nuevo icono simbolico"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:82
|
||||||
|
msgid "Added frame to message textview widget"
|
||||||
|
msgstr "Añadido borde al objeto textview del mensaje"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:83
|
||||||
|
msgid "Fixed \"code blocks shouldn't be editable\""
|
||||||
|
msgstr "Arreglado \"bloques de codigo no deberían de ser editables\""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:85
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:101
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:117
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:131
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:141
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:159
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:181
|
||||||
|
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:93
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:150
|
||||||
|
msgid "Big Update"
|
||||||
|
msgstr "Gran Actualización"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:95
|
||||||
|
msgid "Added code highlighting"
|
||||||
|
msgstr "Añadido resaltado de código"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:96
|
||||||
|
msgid "Added image recognition (llava model)"
|
||||||
|
msgstr "Añadido reconocimiento de imagenes (modelo llava)"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:97
|
||||||
|
msgid "Added multiline prompt"
|
||||||
|
msgstr "Añadido caja de texto de multiples lineas"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:98
|
||||||
|
msgid "Fixed some small bugs"
|
||||||
|
msgstr "Arreglados unos pequeños errores"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:99
|
||||||
|
msgid "General optimization"
|
||||||
|
msgstr "Optimización general"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:109
|
||||||
|
msgid "Fixes and features"
|
||||||
|
msgstr "Arreglos y funcionalidades"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:111
|
||||||
|
msgid "Russian translation (thanks github/alexkdeveloper)"
|
||||||
|
msgstr "Traducción a Ruso (gracias github/alexkdeveloper)"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:112
|
||||||
|
msgid "Fixed: Cannot close app on first setup"
|
||||||
|
msgstr "Arreglado: No se puede cerrar la aplicación en el primer setup"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:113
|
||||||
|
msgid "Fixed: Brand colors for Flathub"
|
||||||
|
msgstr "Arreglado: Colores de marca para Flathub"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:114
|
||||||
|
msgid "Fixed: App description"
|
||||||
|
msgstr "Arreglado: Descripción de aplicación"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:115
|
||||||
|
msgid "Fixed: Only show 'save changes dialog' when you actually change the url"
|
||||||
|
msgstr ""
|
||||||
|
"Arreglado: Solo mostrar el dialogo 'guardar cambios' cuando se cambia el url"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:125
|
||||||
|
msgid "0.2.2 Bug fixes"
|
||||||
|
msgstr "0.2.2 Arreglo de errores"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:127
|
||||||
|
msgid "Toast messages appearing behind dialogs"
|
||||||
|
msgstr "Mensajes toast apareciendo detrás de dialogos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:128
|
||||||
|
msgid "Local model list not updating when changing servers"
|
||||||
|
msgstr ""
|
||||||
|
"Lista de modelos locales no es actualizada cuando se cambia el servidor"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:129
|
||||||
|
msgid "Closing the setup dialog closes the whole app"
|
||||||
|
msgstr "Cerrar el dialogo de setup cierra toda la aplicación"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:139
|
||||||
|
msgid "0.2.1 Data saving fix"
|
||||||
|
msgstr "0.2.1 Arreglo en el guardado de datos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:140
|
||||||
|
msgid ""
|
||||||
|
"The app didn't save the config files and chat history to the right "
|
||||||
|
"directory, this is now fixed"
|
||||||
|
msgstr ""
|
||||||
|
"La aplicación no guardaba los archivos de configuración o los chats en el "
|
||||||
|
"directorio correcto, esto ahora ha sido arreglado"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:149
|
||||||
|
msgid "0.2.0"
|
||||||
|
msgstr "0.2.0"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:151
|
||||||
|
msgid "New Features"
|
||||||
|
msgstr "Nuevas funcionalidades"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:153
|
||||||
|
msgid "Restore chat after closing the app"
|
||||||
|
msgstr "Restaurar chat despues de cerrar la aplicación"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:154
|
||||||
|
msgid "A button to clear the chat"
|
||||||
|
msgstr "Un botón para limpiar el chat"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:155
|
||||||
|
msgid "Fixed multiple bugs involving how messages are shown"
|
||||||
|
msgstr "Arreglados multiples errores acerca de como los mensajes son mostrados"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:156
|
||||||
|
msgid "Added welcome dialog"
|
||||||
|
msgstr "Añadido dialogo de bienvenida"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:157
|
||||||
|
msgid "More stability"
|
||||||
|
msgstr "Más estabilidad"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:167
|
||||||
|
msgid "0.1.2 Quick fixes"
|
||||||
|
msgstr "0.1.2 Arreglos rápidos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:168
|
||||||
|
msgid ""
|
||||||
|
"This release fixes some metadata needed to have a proper Flatpak application"
|
||||||
|
msgstr ""
|
||||||
|
"Esta versión arregla metadatos necesarios para tener un aplicación de "
|
||||||
|
"Flatpak justa"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:174
|
||||||
|
msgid "0.1.1 Stable Release"
|
||||||
|
msgstr "0.1.1"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:175
|
||||||
|
msgid "This is the first public version of Alpaca"
|
||||||
|
msgstr "Esta es la primera versión publica de Alpaca"
|
||||||
|
|
||||||
|
#: src/window.py:47 src/window.py:758
|
||||||
|
msgid "New Chat"
|
||||||
|
msgstr "Nuevo Chat"
|
||||||
|
|
||||||
|
#: src/window.py:86
|
||||||
|
msgid "An error occurred"
|
||||||
|
msgstr "Ocurrio un error"
|
||||||
|
|
||||||
|
#: src/window.py:87
|
||||||
|
msgid "Failed to connect to server"
|
||||||
|
msgstr "No se pudo conectar al servidor"
|
||||||
|
|
||||||
|
#: src/window.py:88
|
||||||
|
msgid "Could not list local models"
|
||||||
|
msgstr "No se pudieron listar los modelos locales"
|
||||||
|
|
||||||
|
#: src/window.py:89
|
||||||
|
msgid "Could not delete model"
|
||||||
|
msgstr "No se pudo eliminar el modelo"
|
||||||
|
|
||||||
|
#: src/window.py:90
|
||||||
|
msgid "Could not pull model"
|
||||||
|
msgstr "No se pudo descargar el modelo"
|
||||||
|
|
||||||
|
#: src/window.py:91
|
||||||
|
msgid "Cannot open image"
|
||||||
|
msgstr "No se pudo abrir la imagen"
|
||||||
|
|
||||||
|
#: src/window.py:92
|
||||||
|
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"
|
||||||
|
|
||||||
|
#: src/window.py:95
|
||||||
|
msgid "Please select a model before chatting"
|
||||||
|
msgstr "Por favor selecciona un modelo antes de enviar un mensaje"
|
||||||
|
|
||||||
|
#: src/window.py:96
|
||||||
|
msgid "Chat cannot be cleared while receiving a message"
|
||||||
|
msgstr "El chat no puede ser limpiado mientras se recibe un mensaje"
|
||||||
|
|
||||||
|
#: src/window.py:99
|
||||||
|
msgid "Model deleted successfully"
|
||||||
|
msgstr "Modelo eliminado exitosamente"
|
||||||
|
|
||||||
|
#: src/window.py:100
|
||||||
|
msgid "Model pulled successfully"
|
||||||
|
msgstr "Modelo descargado exitosamente"
|
||||||
|
|
||||||
|
#: src/window.py:418
|
||||||
|
msgid "Task Complete"
|
||||||
|
msgstr "Tarea completada"
|
||||||
|
|
||||||
|
#: src/window.py:418
|
||||||
|
msgid "Model '{}' pulled successfully."
|
||||||
|
msgstr "El modelo '{}' fue descargado exitosamente"
|
||||||
|
|
||||||
|
#: src/window.py:424
|
||||||
|
msgid "Pull Model Error"
|
||||||
|
msgstr "Error Descargando Modelo"
|
||||||
|
|
||||||
|
#: src/window.py:424
|
||||||
|
msgid "Failed to pull model '{}' due to network error."
|
||||||
|
msgstr "No se pudo descargar el modelo '{}' debido a un error de red"
|
||||||
|
|
||||||
|
#: src/window.py:436
|
||||||
|
msgid "Stop Model"
|
||||||
|
msgstr "Parar Modelo"
|
||||||
|
|
||||||
|
#: src/window.py:437
|
||||||
|
msgid "Are you sure you want to stop pulling '{}'?"
|
||||||
|
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:636 src/window.py:685 src/window.py:712 src/window.py:745
|
||||||
|
#: src/window.py:785
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Cancelar"
|
||||||
|
|
||||||
|
#: src/window.py:441
|
||||||
|
msgid "Stop"
|
||||||
|
msgstr "Parar"
|
||||||
|
|
||||||
|
#: src/window.py:474
|
||||||
|
msgid "Delete Model"
|
||||||
|
msgstr "Eliminar Modelo"
|
||||||
|
|
||||||
|
#: src/window.py:475 src/window.py:709
|
||||||
|
msgid "Are you sure you want to delete '{}'?"
|
||||||
|
msgstr "¿Estás seguro de que quieres eliminar '{}'?"
|
||||||
|
|
||||||
|
#: src/window.py:479 src/window.py:713
|
||||||
|
msgid "Delete"
|
||||||
|
msgstr "Eliminar"
|
||||||
|
|
||||||
|
#: src/window.py:496
|
||||||
|
msgid "Pull Model"
|
||||||
|
msgstr "Descargar Modelo"
|
||||||
|
|
||||||
|
#: src/window.py:497
|
||||||
|
msgid "Please select a tag to pull '{}'"
|
||||||
|
msgstr "Por favor selecciona una etiqueta para descargar '{}'"
|
||||||
|
|
||||||
|
#: src/window.py:502
|
||||||
|
msgid "Pull"
|
||||||
|
msgstr "Descargar"
|
||||||
|
|
||||||
|
#: src/window.py:571 src/window.ui:439
|
||||||
|
msgid "Clear Chat"
|
||||||
|
msgstr "Limpiar Chat"
|
||||||
|
|
||||||
|
#: src/window.py:572
|
||||||
|
msgid "Are you sure you want to clear the chat?"
|
||||||
|
msgstr "¿Estás seguro de que quieres limpiar el chat?"
|
||||||
|
|
||||||
|
#: src/window.py:576
|
||||||
|
msgid "Clear"
|
||||||
|
msgstr "Limpiar"
|
||||||
|
|
||||||
|
#: src/window.py:632
|
||||||
|
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"
|
||||||
|
msgstr "Remover Imagen"
|
||||||
|
|
||||||
|
#: src/window.py:682
|
||||||
|
msgid "Are you sure you want to remove image?"
|
||||||
|
msgstr "¿Estás seguro de que quieres eliminar la imagen?"
|
||||||
|
|
||||||
|
#: src/window.py:686
|
||||||
|
msgid "Remove"
|
||||||
|
msgstr "Remover"
|
||||||
|
|
||||||
|
#: src/window.py:708
|
||||||
|
msgid "Delete Chat"
|
||||||
|
msgstr "Eliminar Chat"
|
||||||
|
|
||||||
|
#: src/window.py:739
|
||||||
|
msgid "Rename Chat"
|
||||||
|
msgstr "Renombrar Chat"
|
||||||
|
|
||||||
|
#: src/window.py:746
|
||||||
|
msgid "Rename"
|
||||||
|
msgstr "Renombrar"
|
||||||
|
|
||||||
|
#: src/window.py:766
|
||||||
|
msgid "The name '{}' is already in use"
|
||||||
|
msgstr "El nombre '{}' ya está en uso"
|
||||||
|
|
||||||
|
#: src/window.py:779
|
||||||
|
msgid "Create Chat"
|
||||||
|
msgstr "Crear Chat"
|
||||||
|
|
||||||
|
#: src/window.py:786
|
||||||
|
msgid "Create"
|
||||||
|
msgstr "Crear"
|
||||||
|
|
||||||
|
#: src/window.ui:55
|
||||||
|
msgid "Chats"
|
||||||
|
msgstr "Chats"
|
||||||
|
|
||||||
|
#: src/window.ui:65
|
||||||
|
msgid "New chat"
|
||||||
|
msgstr "Nuevo chat"
|
||||||
|
|
||||||
|
#: src/window.ui:101
|
||||||
|
msgid "Toggle Sidebar"
|
||||||
|
msgstr "Alternar barra de lado"
|
||||||
|
|
||||||
|
#: src/window.ui:122 src/window.ui:259
|
||||||
|
msgid "Manage models"
|
||||||
|
msgstr "Gestionar modelos"
|
||||||
|
|
||||||
|
#: src/window.ui:136
|
||||||
|
msgid "Menu"
|
||||||
|
msgstr "Menu"
|
||||||
|
|
||||||
|
#: src/window.ui:215
|
||||||
|
msgid "Send"
|
||||||
|
msgstr "Enviar"
|
||||||
|
|
||||||
|
#: src/window.ui:224
|
||||||
|
msgid "Requires model 'llava' to be selected"
|
||||||
|
msgstr "Requiere que el modelo 'llava' sea seleccionado"
|
||||||
|
|
||||||
|
#: src/window.ui:227
|
||||||
|
msgid "Image"
|
||||||
|
msgstr "Imagen"
|
||||||
|
|
||||||
|
#: src/window.ui:344
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Anterior"
|
||||||
|
|
||||||
|
#: src/window.ui:359
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Siguiente"
|
||||||
|
|
||||||
|
#: src/window.ui:385
|
||||||
|
msgid "Welcome to Alpaca"
|
||||||
|
msgstr "Bienvenido a Alpaca"
|
||||||
|
|
||||||
|
#: src/window.ui:386
|
||||||
|
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."
|
||||||
|
|
||||||
|
#: src/window.ui:389
|
||||||
|
msgid "Ollama Website"
|
||||||
|
msgstr "Sitio Web de Ollama"
|
||||||
|
|
||||||
|
#: src/window.ui:406
|
||||||
|
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 y sus desarrolladores no son responsables por cualquier daño a "
|
||||||
|
"dispositivos o software resultados por la ejecución de codigo generado por "
|
||||||
|
"un modelo de IA. Por favor sea precavido y revise el codigo cuidadosamente "
|
||||||
|
"antes de correrlo"
|
||||||
|
|
||||||
|
#: src/window.ui:418
|
||||||
|
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"
|
||||||
|
msgstr "Atajos de Teclado"
|
||||||
|
|
||||||
|
#: src/window.ui:451
|
||||||
|
msgid "About Alpaca"
|
||||||
|
msgstr "Sobre Alpaca"
|
||||||
|
|
||||||
|
#: src/window.ui:473
|
||||||
|
msgid "General"
|
||||||
|
msgstr "General"
|
||||||
|
|
||||||
|
#: src/window.ui:477
|
||||||
|
msgid "Close application"
|
||||||
|
msgstr "Cerrar aplicación"
|
||||||
|
|
||||||
|
#: src/window.ui:483
|
||||||
|
msgid "Clear chat"
|
||||||
|
msgstr "Limpiar chat"
|
||||||
|
|
||||||
|
#: src/window.ui:489
|
||||||
|
msgid "Change server"
|
||||||
|
msgstr "Cambiar servidor"
|
||||||
|
|
||||||
|
#: src/window.ui:495
|
||||||
|
msgid "Show shortcuts window"
|
||||||
|
msgstr "Mostrar ventana de atajos"
|
||||||
|
|
||||||
|
#: src/window.ui:502
|
||||||
|
msgid "Editor"
|
||||||
|
msgstr "Editor"
|
||||||
|
|
||||||
|
#: src/window.ui:506
|
||||||
|
msgid "Copy"
|
||||||
|
msgstr "Copiar"
|
||||||
|
|
||||||
|
#: src/window.ui:512
|
||||||
|
msgid "Paste"
|
||||||
|
msgstr "Pegar"
|
||||||
|
|
||||||
|
#: src/window.ui:518
|
||||||
|
msgid "Send Message"
|
||||||
|
msgstr "Enviar Mensaje"
|
||||||
562
po/es.po~
Normal file
562
po/es.po~
Normal file
@@ -0,0 +1,562 @@
|
|||||||
|
# Spanish translations for PACKAGE package.
|
||||||
|
# Copyright (C) 2024 THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# Jeffry Samuel Eduarte Rojas <jeffrysamuer@gmail.com>, 2024.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2024-05-19 21:11-0600\n"
|
||||||
|
"PO-Revision-Date: 2024-05-19 19:44-0600\n"
|
||||||
|
"Last-Translator: Jeffry Samuel Eduarte Rojas <jeffrysamuer@gmail.com>\n"
|
||||||
|
"Language-Team: Spanish <es@tp.org.es>\n"
|
||||||
|
"Language: es\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
|
||||||
|
#: 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"
|
||||||
|
msgstr "Chatea con multiples modelos de IA"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:12
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:162
|
||||||
|
msgid "Features"
|
||||||
|
msgstr "Funcionalidades"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:14
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:164
|
||||||
|
msgid "Talk to multiple models in the same conversation"
|
||||||
|
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:165
|
||||||
|
msgid "Pull and delete models from the app"
|
||||||
|
msgstr "Descarga y elimina modelos desde la app"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:17 src/window.ui:405
|
||||||
|
msgid "Disclaimer"
|
||||||
|
msgstr "Aviso Legal"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:18
|
||||||
|
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 ""
|
||||||
|
"Este proyecto no está afiliado del todo con Ollama, no soy responsable por "
|
||||||
|
"cualquier daño a tu dispositivo o software causado por correr codigo "
|
||||||
|
"proveido por cualquier modelo."
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:21
|
||||||
|
msgid "Jeffry Samuel Eduarte Rojas"
|
||||||
|
msgstr "Jeffry Samuel Eduarte Rojas"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:39
|
||||||
|
msgid "Welcome dialog"
|
||||||
|
msgstr "Dialogo de Bienvenida"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:43
|
||||||
|
msgid "A conversation involving multiple models"
|
||||||
|
msgstr "Una conversación incluyendo multiples modelos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:47
|
||||||
|
msgid "Managing models"
|
||||||
|
msgstr "Gestionando modelos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:58
|
||||||
|
msgid "Really Big Update"
|
||||||
|
msgstr "Actualización Bastante Grande"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:60
|
||||||
|
msgid "Added multiple chats support!"
|
||||||
|
msgstr "Añadido soporte para multiples chats!"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:61
|
||||||
|
msgid "Added Pango Markup support (bold, list, title, subtitle, monospace)"
|
||||||
|
msgstr ""
|
||||||
|
"Añadido soporte para Pango Markup (negrita, lista, titulo, subtitulo, "
|
||||||
|
"monoespaciado)"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:62
|
||||||
|
msgid "Added autoscroll if the user is at the bottom of the chat"
|
||||||
|
msgstr ""
|
||||||
|
"Añadido autoscroll si el usuario se encuentra en la parte inferior del chat"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:63
|
||||||
|
msgid "Added support for multiple tags on a single model"
|
||||||
|
msgstr "Añadido soporte para multiples etiquetas con un solo modelo"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:64
|
||||||
|
msgid "Added better model management dialog"
|
||||||
|
msgstr "Añadido mejor gestión de modelos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:65
|
||||||
|
msgid "Added loading spinner when sending message"
|
||||||
|
msgstr "Añadido spinner de carga cuando se envia un mensaje"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:66
|
||||||
|
msgid "Added notifications if app is not active and a model pull finishes"
|
||||||
|
msgstr ""
|
||||||
|
"Añadidas notificaciones si la aplicación no está activa y la descarga de un "
|
||||||
|
"modelo finaliza"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:67
|
||||||
|
msgid "Added new symbolic icon"
|
||||||
|
msgstr "Añadido nuevo icono simbolico"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:68
|
||||||
|
msgid "Added frame to message textview widget"
|
||||||
|
msgstr "Añadido borde al objeto textview del mensaje"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:69
|
||||||
|
msgid "Fixed \"code blocks shouldn't be editable\""
|
||||||
|
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:87
|
||||||
|
#: 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"
|
||||||
|
msgstr "Gran Actualización"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:81
|
||||||
|
msgid "Added code highlighting"
|
||||||
|
msgstr "Añadido resaltado de código"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:82
|
||||||
|
msgid "Added image recognition (llava model)"
|
||||||
|
msgstr "Añadido reconocimiento de imagenes (modelo llava)"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:83
|
||||||
|
msgid "Added multiline prompt"
|
||||||
|
msgstr "Añadido caja de texto de multiples lineas"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:84
|
||||||
|
msgid "Fixed some small bugs"
|
||||||
|
msgstr "Arreglados unos pequeños errores"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:85
|
||||||
|
msgid "General optimization"
|
||||||
|
msgstr "Optimización general"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:95
|
||||||
|
msgid "Fixes and features"
|
||||||
|
msgstr "Arreglos y funcionalidades"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:97
|
||||||
|
msgid "Russian translation (thanks github/alexkdeveloper)"
|
||||||
|
msgstr "Traducción a Ruso (gracias github/alexkdeveloper)"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:98
|
||||||
|
msgid "Fixed: Cannot close app on first setup"
|
||||||
|
msgstr "Arreglado: No se puede cerrar la aplicación en el primer setup"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:99
|
||||||
|
msgid "Fixed: Brand colors for Flathub"
|
||||||
|
msgstr "Arreglado: Colores de marca para Flathub"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:100
|
||||||
|
msgid "Fixed: App description"
|
||||||
|
msgstr "Arreglado: Descripción de aplicación"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:101
|
||||||
|
msgid "Fixed: Only show 'save changes dialog' when you actually change the url"
|
||||||
|
msgstr ""
|
||||||
|
"Arreglado: Solo mostrar el dialogo 'guardar cambios' cuando se cambia el url"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:111
|
||||||
|
msgid "0.2.2 Bug fixes"
|
||||||
|
msgstr "0.2.2 Arreglo de errores"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:113
|
||||||
|
msgid "Toast messages appearing behind dialogs"
|
||||||
|
msgstr "Mensajes toast apareciendo detrás de dialogos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:114
|
||||||
|
msgid "Local model list not updating when changing servers"
|
||||||
|
msgstr ""
|
||||||
|
"Lista de modelos locales no es actualizada cuando se cambia el servidor"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:115
|
||||||
|
msgid "Closing the setup dialog closes the whole app"
|
||||||
|
msgstr "Cerrar el dialogo de setup cierra toda la aplicación"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:125
|
||||||
|
msgid "0.2.1 Data saving fix"
|
||||||
|
msgstr "0.2.1 Arreglo en el guardado de datos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:126
|
||||||
|
msgid ""
|
||||||
|
"The app didn't save the config files and chat history to the right "
|
||||||
|
"directory, this is now fixed"
|
||||||
|
msgstr ""
|
||||||
|
"La aplicación no guardaba los archivos de configuración o los chats en el "
|
||||||
|
"directorio correcto, esto ahora ha sido arreglado"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:135
|
||||||
|
msgid "0.2.0"
|
||||||
|
msgstr "0.2.0"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:137
|
||||||
|
msgid "New Features"
|
||||||
|
msgstr "Nuevas funcionalidades"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:139
|
||||||
|
msgid "Restore chat after closing the app"
|
||||||
|
msgstr "Restaurar chat despues de cerrar la aplicación"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:140
|
||||||
|
msgid "A button to clear the chat"
|
||||||
|
msgstr "Un botón para limpiar el chat"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:141
|
||||||
|
msgid "Fixed multiple bugs involving how messages are shown"
|
||||||
|
msgstr "Arreglados multiples errores acerca de como los mensajes son mostrados"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:142
|
||||||
|
msgid "Added welcome dialog"
|
||||||
|
msgstr "Añadido dialogo de bienvenida"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:143
|
||||||
|
msgid "More stability"
|
||||||
|
msgstr "Más estabilidad"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:153
|
||||||
|
msgid "0.1.2 Quick fixes"
|
||||||
|
msgstr "0.1.2 Arreglos rápidos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:154
|
||||||
|
msgid ""
|
||||||
|
"This release fixes some metadata needed to have a proper Flatpak application"
|
||||||
|
msgstr ""
|
||||||
|
"Esta versión arregla metadatos necesarios para tener un aplicación de "
|
||||||
|
"Flatpak justa"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:160
|
||||||
|
msgid "0.1.1 Stable Release"
|
||||||
|
msgstr "0.1.1"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:161
|
||||||
|
msgid "This is the first public version of Alpaca"
|
||||||
|
msgstr "Esta es la primera versión publica de Alpaca"
|
||||||
|
|
||||||
|
#: src/window.py:47 src/window.py:758
|
||||||
|
msgid "New Chat"
|
||||||
|
msgstr "Nuevo Chat"
|
||||||
|
|
||||||
|
#: src/window.py:86
|
||||||
|
msgid "An error occurred"
|
||||||
|
msgstr "Ocurrio un error"
|
||||||
|
|
||||||
|
#: src/window.py:87
|
||||||
|
msgid "Failed to connect to server"
|
||||||
|
msgstr "No se pudo conectar al servidor"
|
||||||
|
|
||||||
|
#: src/window.py:88
|
||||||
|
msgid "Could not list local models"
|
||||||
|
msgstr "No se pudieron listar los modelos locales"
|
||||||
|
|
||||||
|
#: src/window.py:89
|
||||||
|
msgid "Could not delete model"
|
||||||
|
msgstr "No se pudo eliminar el modelo"
|
||||||
|
|
||||||
|
#: src/window.py:90
|
||||||
|
msgid "Could not pull model"
|
||||||
|
msgstr "No se pudo descargar el modelo"
|
||||||
|
|
||||||
|
#: src/window.py:91
|
||||||
|
msgid "Cannot open image"
|
||||||
|
msgstr "No se pudo abrir la imagen"
|
||||||
|
|
||||||
|
#: src/window.py:92
|
||||||
|
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"
|
||||||
|
|
||||||
|
#: src/window.py:95
|
||||||
|
msgid "Please select a model before chatting"
|
||||||
|
msgstr "Por favor selecciona un modelo antes de enviar un mensaje"
|
||||||
|
|
||||||
|
#: src/window.py:96
|
||||||
|
msgid "Chat cannot be cleared while receiving a message"
|
||||||
|
msgstr "El chat no puede ser limpiado mientras se recibe un mensaje"
|
||||||
|
|
||||||
|
#: src/window.py:99
|
||||||
|
msgid "Model deleted successfully"
|
||||||
|
msgstr "Modelo eliminado exitosamente"
|
||||||
|
|
||||||
|
#: src/window.py:100
|
||||||
|
msgid "Model pulled successfully"
|
||||||
|
msgstr "Modelo descargado exitosamente"
|
||||||
|
|
||||||
|
#: src/window.py:418
|
||||||
|
msgid "Task Complete"
|
||||||
|
msgstr "Tarea completada"
|
||||||
|
|
||||||
|
#: src/window.py:418
|
||||||
|
msgid "Model '{}' pulled successfully."
|
||||||
|
msgstr "El modelo '{}' fue descargado exitosamente"
|
||||||
|
|
||||||
|
#: src/window.py:424
|
||||||
|
msgid "Pull Model Error"
|
||||||
|
msgstr "Error Descargando Modelo"
|
||||||
|
|
||||||
|
#: src/window.py:424
|
||||||
|
msgid "Failed to pull model '{}' due to network error."
|
||||||
|
msgstr "No se pudo descargar el modelo '{}' debido a un error de red"
|
||||||
|
|
||||||
|
#: src/window.py:436
|
||||||
|
msgid "Stop Model"
|
||||||
|
msgstr "Parar Modelo"
|
||||||
|
|
||||||
|
#: src/window.py:437
|
||||||
|
msgid "Are you sure you want to stop pulling '{}'?"
|
||||||
|
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:636 src/window.py:685 src/window.py:712 src/window.py:745
|
||||||
|
#: src/window.py:785
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Cancelar"
|
||||||
|
|
||||||
|
#: src/window.py:441
|
||||||
|
msgid "Stop"
|
||||||
|
msgstr "Parar"
|
||||||
|
|
||||||
|
#: src/window.py:474
|
||||||
|
msgid "Delete Model"
|
||||||
|
msgstr "Eliminar Modelo"
|
||||||
|
|
||||||
|
#: src/window.py:475 src/window.py:709
|
||||||
|
msgid "Are you sure you want to delete '{}'?"
|
||||||
|
msgstr "¿Estás seguro de que quieres eliminar '{}'?"
|
||||||
|
|
||||||
|
#: src/window.py:479 src/window.py:713
|
||||||
|
msgid "Delete"
|
||||||
|
msgstr "Eliminar"
|
||||||
|
|
||||||
|
#: src/window.py:496
|
||||||
|
msgid "Pull Model"
|
||||||
|
msgstr "Descargar Modelo"
|
||||||
|
|
||||||
|
#: src/window.py:497
|
||||||
|
msgid "Please select a tag to pull '{}'"
|
||||||
|
msgstr "Por favor selecciona una etiqueta para descargar '{}'"
|
||||||
|
|
||||||
|
#: src/window.py:502
|
||||||
|
msgid "Pull"
|
||||||
|
msgstr "Descargar"
|
||||||
|
|
||||||
|
#: src/window.py:571 src/window.ui:439
|
||||||
|
msgid "Clear Chat"
|
||||||
|
msgstr "Limpiar Chat"
|
||||||
|
|
||||||
|
#: src/window.py:572
|
||||||
|
msgid "Are you sure you want to clear the chat?"
|
||||||
|
msgstr "¿Estás seguro de que quieres limpiar el chat?"
|
||||||
|
|
||||||
|
#: src/window.py:576
|
||||||
|
msgid "Clear"
|
||||||
|
msgstr "Limpiar"
|
||||||
|
|
||||||
|
#: src/window.py:632
|
||||||
|
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"
|
||||||
|
msgstr "Remover Imagen"
|
||||||
|
|
||||||
|
#: src/window.py:682
|
||||||
|
msgid "Are you sure you want to remove image?"
|
||||||
|
msgstr "¿Estás seguro de que quieres eliminar la imagen?"
|
||||||
|
|
||||||
|
#: src/window.py:686
|
||||||
|
msgid "Remove"
|
||||||
|
msgstr "Remover"
|
||||||
|
|
||||||
|
#: src/window.py:708
|
||||||
|
msgid "Delete Chat"
|
||||||
|
msgstr "Eliminar Chat"
|
||||||
|
|
||||||
|
#: src/window.py:739
|
||||||
|
msgid "Rename Chat"
|
||||||
|
msgstr "Renombrar Chat"
|
||||||
|
|
||||||
|
#: src/window.py:746
|
||||||
|
msgid "Rename"
|
||||||
|
msgstr "Renombrar"
|
||||||
|
|
||||||
|
#: src/window.py:766
|
||||||
|
msgid "The name '{}' is already in use"
|
||||||
|
msgstr "El nombre '{}' ya está en uso"
|
||||||
|
|
||||||
|
#: src/window.py:779
|
||||||
|
msgid "Create Chat"
|
||||||
|
msgstr "Crear Chat"
|
||||||
|
|
||||||
|
#: src/window.py:786
|
||||||
|
msgid "Create"
|
||||||
|
msgstr "Crear"
|
||||||
|
|
||||||
|
#: src/window.ui:55
|
||||||
|
msgid "Chats"
|
||||||
|
msgstr "Chats"
|
||||||
|
|
||||||
|
#: src/window.ui:65
|
||||||
|
msgid "New chat"
|
||||||
|
msgstr "Nuevo chat"
|
||||||
|
|
||||||
|
#: src/window.ui:101
|
||||||
|
msgid "Toggle Sidebar"
|
||||||
|
msgstr "Alternar barra de lado"
|
||||||
|
|
||||||
|
#: src/window.ui:122 src/window.ui:259
|
||||||
|
msgid "Manage models"
|
||||||
|
msgstr "Gestionar modelos"
|
||||||
|
|
||||||
|
#: src/window.ui:136
|
||||||
|
msgid "Menu"
|
||||||
|
msgstr "Menu"
|
||||||
|
|
||||||
|
#: src/window.ui:215
|
||||||
|
msgid "Send"
|
||||||
|
msgstr "Enviar"
|
||||||
|
|
||||||
|
#: src/window.ui:224
|
||||||
|
msgid "Requires model 'llava' to be selected"
|
||||||
|
msgstr "Requiere que el modelo 'llava' sea seleccionado"
|
||||||
|
|
||||||
|
#: src/window.ui:227
|
||||||
|
msgid "Image"
|
||||||
|
msgstr "Imagen"
|
||||||
|
|
||||||
|
#: src/window.ui:344
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Anterior"
|
||||||
|
|
||||||
|
#: src/window.ui:359
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Siguiente"
|
||||||
|
|
||||||
|
#: src/window.ui:385
|
||||||
|
msgid "Welcome to Alpaca"
|
||||||
|
msgstr "Bienvenido a Alpaca"
|
||||||
|
|
||||||
|
#: src/window.ui:386
|
||||||
|
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."
|
||||||
|
|
||||||
|
#: src/window.ui:389
|
||||||
|
msgid "Ollama Website"
|
||||||
|
msgstr "Sitio Web de Ollama"
|
||||||
|
|
||||||
|
#: src/window.ui:406
|
||||||
|
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 y sus desarrolladores no son responsables por cualquier daño a "
|
||||||
|
"dispositivos o software resultados por la ejecución de codigo generado por "
|
||||||
|
"un modelo de IA. Por favor sea precavido y revise el codigo cuidadosamente "
|
||||||
|
"antes de correrlo"
|
||||||
|
|
||||||
|
#: src/window.ui:418
|
||||||
|
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"
|
||||||
|
msgstr "Atajos de Teclado"
|
||||||
|
|
||||||
|
#: src/window.ui:451
|
||||||
|
msgid "About Alpaca"
|
||||||
|
msgstr "Sobre Alpaca"
|
||||||
|
|
||||||
|
#: src/window.ui:473
|
||||||
|
msgid "General"
|
||||||
|
msgstr "General"
|
||||||
|
|
||||||
|
#: src/window.ui:477
|
||||||
|
msgid "Close application"
|
||||||
|
msgstr "Cerrar aplicación"
|
||||||
|
|
||||||
|
#: src/window.ui:483
|
||||||
|
msgid "Clear chat"
|
||||||
|
msgstr "Limpiar chat"
|
||||||
|
|
||||||
|
#: src/window.ui:489
|
||||||
|
msgid "Change server"
|
||||||
|
msgstr "Cambiar servidor"
|
||||||
|
|
||||||
|
#: src/window.ui:495
|
||||||
|
msgid "Show shortcuts window"
|
||||||
|
msgstr "Mostrar ventana de atajos"
|
||||||
|
|
||||||
|
#: src/window.ui:502
|
||||||
|
msgid "Editor"
|
||||||
|
msgstr "Editor"
|
||||||
|
|
||||||
|
#: src/window.ui:506
|
||||||
|
msgid "Copy"
|
||||||
|
msgstr "Copiar"
|
||||||
|
|
||||||
|
#: src/window.ui:512
|
||||||
|
msgid "Paste"
|
||||||
|
msgstr "Pegar"
|
||||||
|
|
||||||
|
#: src/window.ui:518
|
||||||
|
msgid "Send Message"
|
||||||
|
msgstr "Enviar Mensaje"
|
||||||
550
po/ru.po
550
po/ru.po
@@ -1,8 +1,9 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"POT-Creation-Date: 2024-05-16 19:29+0800\n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"PO-Revision-Date: 2024-05-16 19:59+0800\n"
|
"POT-Creation-Date: 2024-05-19 21:24-0600\n"
|
||||||
|
"PO-Revision-Date: 2024-05-19 14:59+0800\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
"Language: ru_RU\n"
|
"Language: ru_RU\n"
|
||||||
@@ -13,83 +14,493 @@ msgstr ""
|
|||||||
"X-Poedit-Basepath: ../src\n"
|
"X-Poedit-Basepath: ../src\n"
|
||||||
"X-Poedit-SearchPath-0: .\n"
|
"X-Poedit-SearchPath-0: .\n"
|
||||||
|
|
||||||
#: gtk/help-overlay.ui:11
|
#: data/com.jeffser.Alpaca.desktop.in:3
|
||||||
msgctxt "shortcut window"
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:7
|
||||||
msgid "General"
|
#, fuzzy
|
||||||
msgstr "Общие"
|
msgid "Alpaca"
|
||||||
|
msgstr "_О Программе"
|
||||||
|
|
||||||
#: gtk/help-overlay.ui:14
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:8
|
||||||
msgctxt "shortcut window"
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:11
|
||||||
msgid "Show Shortcuts"
|
#, fuzzy
|
||||||
msgstr "Показывать ярлыки"
|
msgid "An Ollama client"
|
||||||
|
msgstr "Веб-сайт Ollama"
|
||||||
|
|
||||||
#: gtk/help-overlay.ui:20
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:10
|
||||||
msgctxt "shortcut window"
|
msgid "Chat with multiple AI models"
|
||||||
msgid "Quit"
|
msgstr ""
|
||||||
msgstr "Выйти"
|
|
||||||
|
|
||||||
#: window.ui:30
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:12
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:176
|
||||||
|
msgid "Features"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:14
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:178
|
||||||
|
msgid "Talk to multiple models in the same conversation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:15
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:179
|
||||||
|
msgid "Pull and delete models from the app"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:17 src/window.ui:405
|
||||||
|
msgid "Disclaimer"
|
||||||
|
msgstr "Отказ от ответственности"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:18
|
||||||
|
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 ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:21
|
||||||
|
msgid "Jeffry Samuel Eduarte Rojas"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:39
|
||||||
|
msgid "Welcome dialog"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:43
|
||||||
|
msgid "A conversation involving multiple models"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:47
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Managing models"
|
||||||
|
msgstr "Управление моделями"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:72
|
||||||
|
msgid "Really Big Update"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:74
|
||||||
|
msgid "Added multiple chats support!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:75
|
||||||
|
msgid "Added Pango Markup support (bold, list, title, subtitle, monospace)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:76
|
||||||
|
msgid "Added autoscroll if the user is at the bottom of the chat"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:77
|
||||||
|
msgid "Added support for multiple tags on a single model"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:78
|
||||||
|
msgid "Added better model management dialog"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:79
|
||||||
|
msgid "Added loading spinner when sending message"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:80
|
||||||
|
msgid "Added notifications if app is not active and a model pull finishes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:81
|
||||||
|
msgid "Added new symbolic icon"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:82
|
||||||
|
msgid "Added frame to message textview widget"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:83
|
||||||
|
msgid "Fixed \"code blocks shouldn't be editable\""
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:85
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:101
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:117
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:131
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:141
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:159
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:181
|
||||||
|
msgid "Please report any errors to the issues page, thank you."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:93
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:150
|
||||||
|
msgid "Big Update"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:95
|
||||||
|
msgid "Added code highlighting"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:96
|
||||||
|
msgid "Added image recognition (llava model)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:97
|
||||||
|
msgid "Added multiline prompt"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:98
|
||||||
|
msgid "Fixed some small bugs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:99
|
||||||
|
msgid "General optimization"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:109
|
||||||
|
msgid "Fixes and features"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:111
|
||||||
|
msgid "Russian translation (thanks github/alexkdeveloper)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:112
|
||||||
|
msgid "Fixed: Cannot close app on first setup"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:113
|
||||||
|
msgid "Fixed: Brand colors for Flathub"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:114
|
||||||
|
msgid "Fixed: App description"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:115
|
||||||
|
msgid "Fixed: Only show 'save changes dialog' when you actually change the url"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:125
|
||||||
|
msgid "0.2.2 Bug fixes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:127
|
||||||
|
msgid "Toast messages appearing behind dialogs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:128
|
||||||
|
msgid "Local model list not updating when changing servers"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:129
|
||||||
|
msgid "Closing the setup dialog closes the whole app"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:139
|
||||||
|
msgid "0.2.1 Data saving fix"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:140
|
||||||
|
msgid ""
|
||||||
|
"The app didn't save the config files and chat history to the right "
|
||||||
|
"directory, this is now fixed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:149
|
||||||
|
msgid "0.2.0"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:151
|
||||||
|
#, fuzzy
|
||||||
|
msgid "New Features"
|
||||||
|
msgstr "Новый чат"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:153
|
||||||
|
msgid "Restore chat after closing the app"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:154
|
||||||
|
msgid "A button to clear the chat"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:155
|
||||||
|
msgid "Fixed multiple bugs involving how messages are shown"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:156
|
||||||
|
msgid "Added welcome dialog"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:157
|
||||||
|
msgid "More stability"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:167
|
||||||
|
msgid "0.1.2 Quick fixes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:168
|
||||||
|
msgid ""
|
||||||
|
"This release fixes some metadata needed to have a proper Flatpak application"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:174
|
||||||
|
msgid "0.1.1 Stable Release"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:175
|
||||||
|
msgid "This is the first public version of Alpaca"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:47 src/window.py:758
|
||||||
|
#, fuzzy
|
||||||
|
msgid "New Chat"
|
||||||
|
msgstr "Новый чат"
|
||||||
|
|
||||||
|
#: src/window.py:86
|
||||||
|
msgid "An error occurred"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:87
|
||||||
|
msgid "Failed to connect to server"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:88
|
||||||
|
msgid "Could not list local models"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:89
|
||||||
|
msgid "Could not delete model"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:90
|
||||||
|
msgid "Could not pull model"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:91
|
||||||
|
msgid "Cannot open image"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:92
|
||||||
|
msgid "Cannot delete chat because it's the only one left"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:95
|
||||||
|
msgid "Please select a model before chatting"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:96
|
||||||
|
msgid "Chat cannot be cleared while receiving a message"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:99
|
||||||
|
msgid "Model deleted successfully"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:100
|
||||||
|
msgid "Model pulled successfully"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:418
|
||||||
|
msgid "Task Complete"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:418
|
||||||
|
msgid "Model '{}' pulled successfully."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:424
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Pull Model Error"
|
||||||
|
msgstr "Вытягивающая модель"
|
||||||
|
|
||||||
|
#: src/window.py:424
|
||||||
|
msgid "Failed to pull model '{}' due to network error."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:436
|
||||||
|
msgid "Stop Model"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:437
|
||||||
|
msgid "Are you sure you want to stop pulling '{}'?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:440 src/window.py:478 src/window.py:501 src/window.py:575
|
||||||
|
#: src/window.py:636 src/window.py:685 src/window.py:712 src/window.py:745
|
||||||
|
#: src/window.py:785
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:441
|
||||||
|
msgid "Stop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:474
|
||||||
|
msgid "Delete Model"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:475 src/window.py:709
|
||||||
|
msgid "Are you sure you want to delete '{}'?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:479 src/window.py:713
|
||||||
|
msgid "Delete"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:496
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Pull Model"
|
||||||
|
msgstr "Вытягивающая модель"
|
||||||
|
|
||||||
|
#: src/window.py:497
|
||||||
|
msgid "Please select a tag to pull '{}'"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:502
|
||||||
|
msgid "Pull"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:571 src/window.ui:439
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Clear Chat"
|
||||||
|
msgstr "_Очистить чат"
|
||||||
|
|
||||||
|
#: src/window.py:572
|
||||||
|
msgid "Are you sure you want to clear the chat?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:576
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Clear"
|
||||||
|
msgstr "_Очистить чат"
|
||||||
|
|
||||||
|
#: src/window.py:632
|
||||||
|
msgid "Save Changes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:633
|
||||||
|
msgid "Do you want to save the URL change?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:637
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Discard"
|
||||||
|
msgstr "Отказ от ответственности"
|
||||||
|
|
||||||
|
#: src/window.py:638
|
||||||
|
msgid "Save"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:681
|
||||||
|
msgid "Remove Image"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:682
|
||||||
|
msgid "Are you sure you want to remove image?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:686
|
||||||
|
msgid "Remove"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:708
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Delete Chat"
|
||||||
|
msgstr "_Очистить чат"
|
||||||
|
|
||||||
|
#: src/window.py:739
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Rename Chat"
|
||||||
|
msgstr "_Очистить чат"
|
||||||
|
|
||||||
|
#: src/window.py:746
|
||||||
|
msgid "Rename"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:766
|
||||||
|
msgid "The name '{}' is already in use"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:779
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Create Chat"
|
||||||
|
msgstr "_Очистить чат"
|
||||||
|
|
||||||
|
#: src/window.py:786
|
||||||
|
msgid "Create"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:55
|
||||||
|
msgid "Chats"
|
||||||
|
msgstr "Чаты"
|
||||||
|
|
||||||
|
#: src/window.ui:65
|
||||||
|
msgid "New chat"
|
||||||
|
msgstr "Новый чат"
|
||||||
|
|
||||||
|
#: src/window.ui:101
|
||||||
|
msgid "Toggle Sidebar"
|
||||||
|
msgstr "Переключение боковой панели"
|
||||||
|
|
||||||
|
#: src/window.ui:122 src/window.ui:259
|
||||||
msgid "Manage models"
|
msgid "Manage models"
|
||||||
msgstr "Управление моделями"
|
msgstr "Управление моделями"
|
||||||
|
|
||||||
#: window.ui:44
|
#: src/window.ui:136
|
||||||
msgid "Menu"
|
msgid "Menu"
|
||||||
msgstr "Меню"
|
msgstr "Меню"
|
||||||
|
|
||||||
#: window.ui:106
|
#: src/window.ui:215
|
||||||
msgid "Send"
|
msgid "Send"
|
||||||
msgstr "Отправить"
|
msgstr "Отправить"
|
||||||
|
|
||||||
#: window.ui:137
|
#: src/window.ui:224
|
||||||
msgid "Pulling Model"
|
msgid "Requires model 'llava' to be selected"
|
||||||
msgstr "Тянущая модель"
|
msgstr "Требуется выбрать модель \"llava\""
|
||||||
|
|
||||||
#: window.ui:218
|
#: src/window.ui:227
|
||||||
|
msgid "Image"
|
||||||
|
msgstr "Изображение"
|
||||||
|
|
||||||
|
#: src/window.ui:344
|
||||||
msgid "Previous"
|
msgid "Previous"
|
||||||
msgstr "Предыдущий"
|
msgstr "Предыдущий"
|
||||||
|
|
||||||
#: window.ui:233
|
#: src/window.ui:359
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Следующий"
|
msgstr "Следующий"
|
||||||
|
|
||||||
#: window.ui:259
|
#: src/window.ui:385
|
||||||
msgid "Welcome to Alpaca"
|
msgid "Welcome to Alpaca"
|
||||||
msgstr "Добро пожаловать в Alpaca"
|
msgstr "Добро пожаловать в Alpaca"
|
||||||
|
|
||||||
#: window.ui:260
|
#: src/window.ui:386
|
||||||
msgid ""
|
msgid ""
|
||||||
"To get started, please ensure you have an Ollama instance set up. You can "
|
"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."
|
"either run Ollama locally on your machine or connect to a remote instance."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Для начала, пожалуйста, убедитесь, что у вас настроен экземпляр Ollama. Вы "
|
"Для начала, пожалуйста, убедитесь, что у вас настроен экземпляр Ollama. Вы "
|
||||||
"можете либо запустить Ollama локально на своем компьютере, либо "
|
"можете либо запустить Ollama локально на своем компьютере, либо подключиться "
|
||||||
"подключиться к удаленному экземпляру."
|
"к удаленному экземпляру."
|
||||||
|
|
||||||
#: window.ui:263
|
#: src/window.ui:389
|
||||||
msgid "Ollama Website"
|
msgid "Ollama Website"
|
||||||
msgstr "Веб-сайт Ollama"
|
msgstr "Веб-сайт Ollama"
|
||||||
|
|
||||||
#: window.ui:279
|
#: src/window.ui:406
|
||||||
msgid "Disclaimer"
|
|
||||||
msgstr "Отказ от ответственности"
|
|
||||||
|
|
||||||
#: window.ui:280
|
|
||||||
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 ""
|
||||||
"Alpaca и ее разработчики не несут ответственности за любой ущерб, "
|
"Alpaca и ее разработчики не несут ответственности за любой ущерб, "
|
||||||
"причиненный устройствам или программному обеспечению в результате "
|
"причиненный устройствам или программному обеспечению в результате выполнения "
|
||||||
"выполнения кода, сгенерированного с помощью модели искусственного "
|
"кода, сгенерированного с помощью модели искусственного интеллекта. "
|
||||||
"интеллекта. Пожалуйста, будьте осторожны и внимательно ознакомьтесь с кодом "
|
"Пожалуйста, будьте осторожны и внимательно ознакомьтесь с кодом перед его "
|
||||||
"перед его запуском."
|
"запуском."
|
||||||
|
|
||||||
#: window.ui:292
|
#: src/window.ui:418
|
||||||
msgid "Setup"
|
msgid "Setup"
|
||||||
msgstr "Установка"
|
msgstr "Установка"
|
||||||
|
|
||||||
#: window.ui:293
|
#: src/window.ui:419
|
||||||
msgid ""
|
msgid ""
|
||||||
"If you are running an Ollama instance locally and haven't modified the "
|
"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 "
|
"default ports, you can use the default URL. Otherwise, please enter the URL "
|
||||||
@@ -99,14 +510,61 @@ msgstr ""
|
|||||||
"умолчанию, вы можете использовать URL-адрес по умолчанию. В противном "
|
"умолчанию, вы можете использовать URL-адрес по умолчанию. В противном "
|
||||||
"случае, пожалуйста, введите URL-адрес вашего экземпляра Ollama."
|
"случае, пожалуйста, введите URL-адрес вашего экземпляра Ollama."
|
||||||
|
|
||||||
#: window.ui:313
|
#: src/window.ui:443
|
||||||
msgid "_Clear Conversation"
|
#, fuzzy
|
||||||
msgstr "_Очистить разговор"
|
msgid "Change Server"
|
||||||
|
|
||||||
#: window.ui:317
|
|
||||||
msgid "_Change Server"
|
|
||||||
msgstr "_Изменить Сервер"
|
msgstr "_Изменить Сервер"
|
||||||
|
|
||||||
#: window.ui:321
|
#: src/window.ui:447
|
||||||
msgid "_About Alpaca"
|
#, fuzzy
|
||||||
|
msgid "Keyboard Shortcuts"
|
||||||
|
msgstr "Показывать ярлыки"
|
||||||
|
|
||||||
|
#: src/window.ui:451
|
||||||
|
#, fuzzy
|
||||||
|
msgid "About Alpaca"
|
||||||
msgstr "_О Программе"
|
msgstr "_О Программе"
|
||||||
|
|
||||||
|
#: src/window.ui:473
|
||||||
|
#, fuzzy
|
||||||
|
msgid "General"
|
||||||
|
msgstr "Общие"
|
||||||
|
|
||||||
|
#: src/window.ui:477
|
||||||
|
msgid "Close application"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:483
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Clear chat"
|
||||||
|
msgstr "_Очистить чат"
|
||||||
|
|
||||||
|
#: src/window.ui:489
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Change server"
|
||||||
|
msgstr "_Изменить Сервер"
|
||||||
|
|
||||||
|
#: src/window.ui:495
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Show shortcuts window"
|
||||||
|
msgstr "Показывать ярлыки"
|
||||||
|
|
||||||
|
#: src/window.ui:502
|
||||||
|
msgid "Editor"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:506
|
||||||
|
msgid "Copy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:512
|
||||||
|
msgid "Paste"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:518
|
||||||
|
msgid "Send Message"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#~ msgctxt "shortcut window"
|
||||||
|
#~ msgid "Quit"
|
||||||
|
#~ msgstr "Выйти"
|
||||||
|
|||||||
132
po/ru.po~
Normal file
132
po/ru.po~
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"POT-Creation-Date: 2024-05-19 14:52+0800\n"
|
||||||
|
"PO-Revision-Date: 2024-05-19 14:59+0800\n"
|
||||||
|
"Last-Translator: \n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"Language: ru_RU\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Generator: Poedit 3.4.2\n"
|
||||||
|
"X-Poedit-Basepath: ../src\n"
|
||||||
|
"X-Poedit-SearchPath-0: .\n"
|
||||||
|
|
||||||
|
#: gtk/help-overlay.ui:11
|
||||||
|
msgctxt "shortcut window"
|
||||||
|
msgid "General"
|
||||||
|
msgstr "Общие"
|
||||||
|
|
||||||
|
#: gtk/help-overlay.ui:14
|
||||||
|
msgctxt "shortcut window"
|
||||||
|
msgid "Show Shortcuts"
|
||||||
|
msgstr "Показывать ярлыки"
|
||||||
|
|
||||||
|
#: gtk/help-overlay.ui:20
|
||||||
|
msgctxt "shortcut window"
|
||||||
|
msgid "Quit"
|
||||||
|
msgstr "Выйти"
|
||||||
|
|
||||||
|
#: window.ui:39
|
||||||
|
msgid "Chats"
|
||||||
|
msgstr "Чаты"
|
||||||
|
|
||||||
|
#: window.ui:49
|
||||||
|
msgid "New chat"
|
||||||
|
msgstr "Новый чат"
|
||||||
|
|
||||||
|
#: window.ui:86
|
||||||
|
msgid "Toggle Sidebar"
|
||||||
|
msgstr "Переключение боковой панели"
|
||||||
|
|
||||||
|
#: window.ui:107
|
||||||
|
msgid "Manage models"
|
||||||
|
msgstr "Управление моделями"
|
||||||
|
|
||||||
|
#: window.ui:121
|
||||||
|
msgid "Menu"
|
||||||
|
msgstr "Меню"
|
||||||
|
|
||||||
|
#: window.ui:202
|
||||||
|
msgid "Send"
|
||||||
|
msgstr "Отправить"
|
||||||
|
|
||||||
|
#: window.ui:211
|
||||||
|
msgid "Requires model 'llava' to be selected"
|
||||||
|
msgstr "Требуется выбрать модель \"llava\""
|
||||||
|
|
||||||
|
#: window.ui:214
|
||||||
|
msgid "Image"
|
||||||
|
msgstr "Изображение"
|
||||||
|
|
||||||
|
#: window.ui:249
|
||||||
|
msgid "Pulling Model"
|
||||||
|
msgstr "Вытягивающая модель"
|
||||||
|
|
||||||
|
#: window.ui:345
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Предыдущий"
|
||||||
|
|
||||||
|
#: window.ui:360
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Следующий"
|
||||||
|
|
||||||
|
#: window.ui:386
|
||||||
|
msgid "Welcome to Alpaca"
|
||||||
|
msgstr "Добро пожаловать в Alpaca"
|
||||||
|
|
||||||
|
#: window.ui:387
|
||||||
|
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 локально на своем компьютере, либо подключиться "
|
||||||
|
"к удаленному экземпляру."
|
||||||
|
|
||||||
|
#: window.ui:390
|
||||||
|
msgid "Ollama Website"
|
||||||
|
msgstr "Веб-сайт Ollama"
|
||||||
|
|
||||||
|
#: window.ui:406
|
||||||
|
msgid "Disclaimer"
|
||||||
|
msgstr "Отказ от ответственности"
|
||||||
|
|
||||||
|
#: window.ui:407
|
||||||
|
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 и ее разработчики не несут ответственности за любой ущерб, "
|
||||||
|
"причиненный устройствам или программному обеспечению в результате выполнения "
|
||||||
|
"кода, сгенерированного с помощью модели искусственного интеллекта. "
|
||||||
|
"Пожалуйста, будьте осторожны и внимательно ознакомьтесь с кодом перед его "
|
||||||
|
"запуском."
|
||||||
|
|
||||||
|
#: window.ui:419
|
||||||
|
msgid "Setup"
|
||||||
|
msgstr "Установка"
|
||||||
|
|
||||||
|
#: window.ui:420
|
||||||
|
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."
|
||||||
|
|
||||||
|
#: window.ui:440
|
||||||
|
msgid "_Clear Chat"
|
||||||
|
msgstr "_Очистить чат"
|
||||||
|
|
||||||
|
#: window.ui:444
|
||||||
|
msgid "_Change Server"
|
||||||
|
msgstr "_Изменить Сервер"
|
||||||
|
|
||||||
|
#: window.ui:448
|
||||||
|
msgid "_About Alpaca"
|
||||||
|
msgstr "_О Программе"
|
||||||
@@ -33,7 +33,7 @@ class AlpacaApplication(Adw.Application):
|
|||||||
super().__init__(application_id='com.jeffser.Alpaca',
|
super().__init__(application_id='com.jeffser.Alpaca',
|
||||||
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_conversation_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('reconnect', lambda *_: AlpacaWindow.show_connection_dialog(self.props.active_window), ['<primary>r'])
|
||||||
self.create_action('about', self.on_about_action)
|
self.create_action('about', self.on_about_action)
|
||||||
|
|
||||||
@@ -44,17 +44,17 @@ class AlpacaApplication(Adw.Application):
|
|||||||
win.present()
|
win.present()
|
||||||
|
|
||||||
def on_about_action(self, widget, _):
|
def on_about_action(self, widget, _):
|
||||||
about = Adw.AboutWindow(transient_for=self.props.active_window,
|
about = Adw.AboutDialog(#transient_for=self.props.active_window,
|
||||||
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.0',
|
version='0.5.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',
|
||||||
copyright='© 2024 Jeffser',
|
copyright='© 2024 Jeffser',
|
||||||
issue_url='https://github.com/Jeffser/Alpaca/issues')
|
issue_url='https://github.com/Jeffser/Alpaca/issues')
|
||||||
about.present()
|
about.present(parent=self.props.active_window)
|
||||||
|
|
||||||
def create_action(self, name, callback, shortcuts=None):
|
def create_action(self, name, callback, shortcuts=None):
|
||||||
action = Gio.SimpleAction.new(name, None)
|
action = Gio.SimpleAction.new(name, None)
|
||||||
|
|||||||
384
src/window.py
384
src/window.py
@@ -21,7 +21,7 @@ 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
|
import json, requests, threading, os, re, base64, sys, gettext, locale
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
@@ -32,14 +32,24 @@ from .available_models import available_models
|
|||||||
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.path.join(os.getenv("XDG_CONFIG_HOME"), "/", os.path.expanduser("~/.var/app/com.jeffser.Alpaca/config"))
|
||||||
__gtype_name__ = 'AlpacaWindow'
|
__gtype_name__ = 'AlpacaWindow'
|
||||||
|
|
||||||
|
localedir = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'locale')
|
||||||
|
|
||||||
|
locale.setlocale(locale.LC_ALL, '')
|
||||||
|
gettext.bindtextdomain('com.jeffser.Alpaca', localedir)
|
||||||
|
gettext.textdomain('com.jeffser.Alpaca')
|
||||||
|
_ = gettext.gettext
|
||||||
|
|
||||||
#Variables
|
#Variables
|
||||||
ollama_url = None
|
ollama_url = None
|
||||||
local_models = []
|
local_models = []
|
||||||
#In the future I will at multiple chats, for now I'll save it like this so that past chats don't break in the future
|
pulling_models = {}
|
||||||
chats = {"chats": {"0": {"messages": []}}, "selected_chat": "0"}
|
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
|
||||||
|
|
||||||
#Elements
|
#Elements
|
||||||
|
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
|
||||||
@@ -49,7 +59,6 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
connection_next_button = Gtk.Template.Child()
|
connection_next_button = Gtk.Template.Child()
|
||||||
connection_url_entry = Gtk.Template.Child()
|
connection_url_entry = Gtk.Template.Child()
|
||||||
main_overlay = Gtk.Template.Child()
|
main_overlay = Gtk.Template.Child()
|
||||||
pull_overlay = Gtk.Template.Child()
|
|
||||||
manage_models_overlay = Gtk.Template.Child()
|
manage_models_overlay = Gtk.Template.Child()
|
||||||
connection_overlay = Gtk.Template.Child()
|
connection_overlay = Gtk.Template.Child()
|
||||||
chat_container = Gtk.Template.Child()
|
chat_container = Gtk.Template.Child()
|
||||||
@@ -63,12 +72,9 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
|
|
||||||
manage_models_button = Gtk.Template.Child()
|
manage_models_button = Gtk.Template.Child()
|
||||||
manage_models_dialog = Gtk.Template.Child()
|
manage_models_dialog = Gtk.Template.Child()
|
||||||
available_model_list_box = Gtk.Template.Child()
|
pulling_model_list_box = Gtk.Template.Child()
|
||||||
local_model_list_box = Gtk.Template.Child()
|
local_model_list_box = Gtk.Template.Child()
|
||||||
|
available_model_list_box = Gtk.Template.Child()
|
||||||
pull_model_dialog = Gtk.Template.Child()
|
|
||||||
pull_model_status_page = Gtk.Template.Child()
|
|
||||||
pull_model_progress_bar = Gtk.Template.Child()
|
|
||||||
|
|
||||||
chat_list_box = Gtk.Template.Child()
|
chat_list_box = Gtk.Template.Child()
|
||||||
add_chat_button = Gtk.Template.Child()
|
add_chat_button = Gtk.Template.Child()
|
||||||
@@ -77,21 +83,21 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
|
|
||||||
toast_messages = {
|
toast_messages = {
|
||||||
"error": [
|
"error": [
|
||||||
"An error occurred",
|
_("An error occurred"),
|
||||||
"Failed to connect to server",
|
_("Failed to connect to server"),
|
||||||
"Could not list local models",
|
_("Could not list local models"),
|
||||||
"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")
|
||||||
],
|
],
|
||||||
"info": [
|
"info": [
|
||||||
"Please select a model before chatting",
|
_("Please select a model before chatting"),
|
||||||
"Conversation cannot be cleared while receiving a message"
|
_("Chat cannot be cleared while receiving a message")
|
||||||
],
|
],
|
||||||
"good": [
|
"good": [
|
||||||
"Model deleted successfully",
|
_("Model deleted successfully"),
|
||||||
"Model pulled successfully"
|
_("Model pulled successfully")
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,7 +121,7 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
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,
|
||||||
focusable=False,
|
focusable=True,
|
||||||
wrap_mode= Gtk.WrapMode.WORD,
|
wrap_mode= Gtk.WrapMode.WORD,
|
||||||
margin_top=12,
|
margin_top=12,
|
||||||
margin_bottom=12,
|
margin_bottom=12,
|
||||||
@@ -145,7 +151,7 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
texture = Gdk.Texture.new_for_pixbuf(pixbuf)
|
texture = Gdk.Texture.new_for_pixbuf(pixbuf)
|
||||||
|
|
||||||
image = Gtk.Image.new_from_paintable(texture)
|
image = Gtk.Image.new_from_paintable(texture)
|
||||||
image.set_size_request(360, 360)
|
image.set_size_request(240, 240)
|
||||||
image.set_margin_top(10)
|
image.set_margin_top(10)
|
||||||
image.set_margin_start(10)
|
image.set_margin_start(10)
|
||||||
image.set_margin_end(10)
|
image.set_margin_end(10)
|
||||||
@@ -179,7 +185,22 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
for i in range(self.model_string_list.get_n_items() -1, -1, -1):
|
for i in range(self.model_string_list.get_n_items() -1, -1, -1):
|
||||||
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()
|
||||||
for model in json.loads(response['text'])['models']:
|
for model in json.loads(response['text'])['models']:
|
||||||
|
model_row = Adw.ActionRow(
|
||||||
|
title = model["name"].split(":")[0],
|
||||||
|
subtitle = model["name"].split(":")[1]
|
||||||
|
)
|
||||||
|
button = Gtk.Button(
|
||||||
|
icon_name = "user-trash-symbolic",
|
||||||
|
vexpand = False,
|
||||||
|
valign = 3,
|
||||||
|
css_classes = ["error"]
|
||||||
|
)
|
||||||
|
button.connect("clicked", lambda button=button, model_name=model["name"]: self.model_delete_button_activate(model_name))
|
||||||
|
model_row.add_suffix(button)
|
||||||
|
self.local_model_list_box.append(model_row)
|
||||||
|
|
||||||
self.model_string_list.append(model["name"])
|
self.model_string_list.append(model["name"])
|
||||||
self.local_models.append(model["name"])
|
self.local_models.append(model["name"])
|
||||||
self.model_drop_down.set_selected(0)
|
self.model_drop_down.set_selected(0)
|
||||||
@@ -229,7 +250,7 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
if part['type'] == 'normal':
|
if part['type'] == 'normal':
|
||||||
message_text = Gtk.TextView(
|
message_text = Gtk.TextView(
|
||||||
editable=False,
|
editable=False,
|
||||||
focusable=False,
|
focusable=True,
|
||||||
wrap_mode= Gtk.WrapMode.WORD,
|
wrap_mode= Gtk.WrapMode.WORD,
|
||||||
margin_top=12,
|
margin_top=12,
|
||||||
margin_bottom=12,
|
margin_bottom=12,
|
||||||
@@ -281,6 +302,9 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
self.bot_message_box = None
|
self.bot_message_box = None
|
||||||
|
|
||||||
def update_bot_message(self, data):
|
def update_bot_message(self, data):
|
||||||
|
if self.bot_message is None:
|
||||||
|
self.save_history()
|
||||||
|
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 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())
|
||||||
@@ -305,51 +329,74 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
def run_message(self, messages, model):
|
def run_message(self, messages, model):
|
||||||
response = stream_post(f"{self.ollama_url}/api/chat", data=json.dumps({"model": model, "messages": messages}), callback=self.update_bot_message)
|
response = stream_post(f"{self.ollama_url}/api/chat", data=json.dumps({"model": model, "messages": messages}), callback=self.update_bot_message)
|
||||||
GLib.idle_add(self.add_code_blocks)
|
GLib.idle_add(self.add_code_blocks)
|
||||||
GLib.idle_add(self.send_button.set_sensitive, True)
|
GLib.idle_add(self.send_button.set_css_classes, ["suggested-action"])
|
||||||
GLib.idle_add(self.image_button.set_sensitive, True)
|
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.chat_list_box.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)
|
||||||
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.show_toast, 'error', 1, self.connection_overlay)
|
||||||
GLib.idle_add(self.show_connection_dialog, True)
|
GLib.idle_add(self.show_connection_dialog, True)
|
||||||
|
|
||||||
def send_message(self, button):
|
def send_message(self, button=None):
|
||||||
if not self.message_text_view.get_buffer().get_text(self.message_text_view.get_buffer().get_start_iter(), self.message_text_view.get_buffer().get_end_iter(), False): return
|
if button and self.bot_message: #STOP BUTTON
|
||||||
current_model = self.model_drop_down.get_selected_item()
|
if self.loading_spinner: self.chat_container.remove(self.loading_spinner)
|
||||||
if current_model is None:
|
if self.verify_if_image_can_be_used(): self.image_button.set_sensitive(True)
|
||||||
self.show_toast("info", 0, self.main_overlay)
|
self.image_button.set_css_classes([])
|
||||||
return
|
self.image_button.get_child().set_icon_name("image-x-generic-symbolic")
|
||||||
formated_datetime = datetime.now().strftime("%Y/%m/%d %H:%M")
|
self.attached_image = {"path": None, "base64": None}
|
||||||
self.chats["chats"][self.chats["selected_chat"]]["messages"].append({
|
self.chat_list_box.set_sensitive(True)
|
||||||
"role": "user",
|
self.add_chat_button.set_sensitive(True)
|
||||||
"model": "User",
|
self.message_text_view.set_sensitive(True)
|
||||||
"date": formated_datetime,
|
self.send_button.set_css_classes(["suggested-action"])
|
||||||
"content": self.message_text_view.get_buffer().get_text(self.message_text_view.get_buffer().get_start_iter(), self.message_text_view.get_buffer().get_end_iter(), False)
|
self.send_button.get_child().set_label("Send")
|
||||||
})
|
self.send_button.get_child().set_icon_name("send-to-symbolic")
|
||||||
data = {
|
self.bot_message = None
|
||||||
"model": current_model.get_string(),
|
self.bot_message_box = None
|
||||||
"messages": self.chats["chats"][self.chats["selected_chat"]]["messages"]
|
self.bot_message_view = None
|
||||||
}
|
else:
|
||||||
if self.verify_if_image_can_be_used() and self.attached_image["base64"] is not None:
|
if not self.message_text_view.get_buffer().get_text(self.message_text_view.get_buffer().get_start_iter(), self.message_text_view.get_buffer().get_end_iter(), False): return
|
||||||
data["messages"][-1]["images"] = [self.attached_image["base64"]]
|
current_model = self.model_drop_down.get_selected_item()
|
||||||
self.message_text_view.set_sensitive(False)
|
if current_model is None:
|
||||||
self.send_button.set_sensitive(False)
|
self.show_toast("info", 0, self.main_overlay)
|
||||||
self.image_button.set_sensitive(False)
|
return
|
||||||
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"])
|
formated_datetime = datetime.now().strftime("%Y/%m/%d %H:%M")
|
||||||
self.message_text_view.get_buffer().set_text("", 0)
|
self.chats["chats"][self.chats["selected_chat"]]["messages"].append({
|
||||||
self.show_message("", True)
|
"role": "user",
|
||||||
self.loading_spinner = Gtk.Spinner(spinning=True, margin_top=12, margin_bottom=12, hexpand=True)
|
"model": "User",
|
||||||
self.chat_container.append(self.loading_spinner)
|
"date": formated_datetime,
|
||||||
thread = threading.Thread(target=self.run_message, args=(data['messages'], data['model']))
|
"content": self.message_text_view.get_buffer().get_text(self.message_text_view.get_buffer().get_start_iter(), self.message_text_view.get_buffer().get_end_iter(), False)
|
||||||
thread.start()
|
})
|
||||||
|
data = {
|
||||||
|
"model": current_model.get_string(),
|
||||||
|
"messages": self.chats["chats"][self.chats["selected_chat"]]["messages"]
|
||||||
|
}
|
||||||
|
if self.verify_if_image_can_be_used() and self.attached_image["base64"] is not None:
|
||||||
|
data["messages"][-1]["images"] = [self.attached_image["base64"]]
|
||||||
|
self.message_text_view.set_sensitive(False)
|
||||||
|
self.send_button.set_css_classes(["destructive-action"])
|
||||||
|
self.send_button.get_child().set_label("Stop")
|
||||||
|
self.send_button.get_child().set_icon_name("edit-delete-symbolic")
|
||||||
|
self.chat_list_box.set_sensitive(False)
|
||||||
|
self.add_chat_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.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.chat_container.append(self.loading_spinner)
|
||||||
|
thread = threading.Thread(target=self.run_message, args=(data['messages'], data['model']))
|
||||||
|
thread.start()
|
||||||
|
|
||||||
def delete_model(self, dialog, task, model_name):
|
def delete_model(self, dialog, task, model_name):
|
||||||
if dialog.choose_finish(task) == "delete":
|
if dialog.choose_finish(task) == "delete":
|
||||||
response = simple_delete(self.ollama_url + "/api/delete", data={"name": model_name})
|
response = simple_delete(self.ollama_url + "/api/delete", data={"name": model_name})
|
||||||
self.update_list_local_models()
|
self.update_list_local_models()
|
||||||
self.update_list_available_models()
|
|
||||||
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:
|
||||||
@@ -357,67 +404,79 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
self.manage_models_dialog.close()
|
self.manage_models_dialog.close()
|
||||||
self.show_connection_dialog(True)
|
self.show_connection_dialog(True)
|
||||||
|
|
||||||
def pull_model_update(self, data):
|
def pull_model_update(self, data, model_name):
|
||||||
try:
|
if model_name in list(self.pulling_models.keys()):
|
||||||
GLib.idle_add(self.pull_model_progress_bar.set_text, data['status'])
|
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 ""))
|
||||||
if 'completed' in data:
|
else:
|
||||||
if 'total' in data: GLib.idle_add(self.pull_model_progress_bar.set_fraction, data['completed'] / data['total'])
|
sys.exit()
|
||||||
else: GLib.idle_add(self.pull_model_progress_bar.set_fraction, 1.0)
|
|
||||||
else:
|
|
||||||
GLib.idle_add(self.pull_model_progress_bar.set_fraction, 0.0)
|
|
||||||
except Exception as e: print(e)
|
|
||||||
|
|
||||||
def pull_model(self, dialog, task, model_name, tag):
|
def pull_model(self, model_name, tag):
|
||||||
if dialog.choose_finish(task) == "pull":
|
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))
|
||||||
|
GLib.idle_add(self.update_list_local_models)
|
||||||
|
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_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}"])
|
||||||
|
del self.pulling_models[f"{model_name}:{tag}"]
|
||||||
|
|
||||||
GLib.idle_add(self.pull_model_dialog.present, self.manage_models_dialog)
|
else:
|
||||||
response = stream_post(f"{self.ollama_url}/api/pull", data=json.dumps(data), callback=self.pull_model_update)
|
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.manage_models_dialog.close)
|
||||||
|
GLib.idle_add(self.show_connection_dialog, True)
|
||||||
|
|
||||||
GLib.idle_add(self.update_list_local_models)
|
def stop_pull_model(self, dialog, task, model_name):
|
||||||
GLib.idle_add(self.update_list_available_models)
|
if dialog.choose_finish(task) == "stop":
|
||||||
GLib.idle_add(self.pull_model_dialog.force_close)
|
GLib.idle_add(self.pulling_models[model_name].get_parent().remove, self.pulling_models[model_name])
|
||||||
if response['status'] == 'ok':
|
del self.pulling_models[model_name]
|
||||||
GLib.idle_add(self.show_notification, "Task Complete", f"Model '{model_name}:{tag}' pulled successfully.", True, Gio.ThemedIcon.new("emblem-ok-symbolic"))
|
|
||||||
GLib.idle_add(self.show_toast, "good", 1, self.manage_models_overlay)
|
|
||||||
else:
|
|
||||||
GLib.idle_add(self.show_notification, "Pull Model Error", f"Failed to pull model '{model_name}:{tag}' due to network error.", True, Gio.ThemedIcon.new("dialog-error-symbolic"))
|
|
||||||
GLib.idle_add(self.show_toast, "error", 4, self.connection_overlay)
|
|
||||||
GLib.idle_add(self.manage_models_dialog.close)
|
|
||||||
GLib.idle_add(self.show_connection_dialog, True)
|
|
||||||
|
|
||||||
|
def stop_pull_model_dialog(self, model_name):
|
||||||
def pull_model_start(self, dialog, task, model_name, tag_drop_down):
|
|
||||||
tag = tag_drop_down.get_selected_item().get_string()
|
|
||||||
self.pull_model_status_page.set_description(f"{model_name}:{tag}")
|
|
||||||
thread = threading.Thread(target=self.pull_model, args=(dialog, task, model_name, tag))
|
|
||||||
thread.start()
|
|
||||||
|
|
||||||
def model_action_button_activate(self, button, model_name):
|
|
||||||
action = list(set(button.get_css_classes()) & set(["delete", "pull"]))[0]
|
|
||||||
dialog = Adw.AlertDialog(
|
dialog = Adw.AlertDialog(
|
||||||
heading=f"{action.capitalize()} Model",
|
heading=_("Stop Model"),
|
||||||
body=f"Are you sure you want to {action} '{model_name}'?",
|
body=_("Are you sure you want to stop pulling '{}'?").format(model_name),
|
||||||
close_response="cancel"
|
close_response="cancel"
|
||||||
)
|
)
|
||||||
dialog.add_response("cancel", "Cancel")
|
dialog.add_response("cancel", _("Cancel"))
|
||||||
dialog.add_response(action, action.capitalize())
|
dialog.add_response("stop", _("Stop"))
|
||||||
dialog.set_response_appearance(action, Adw.ResponseAppearance.DESTRUCTIVE if action == "delete" else Adw.ResponseAppearance.SUGGESTED)
|
dialog.set_response_appearance("stop", Adw.ResponseAppearance.DESTRUCTIVE)
|
||||||
dialog.choose(
|
dialog.choose(
|
||||||
parent = self.manage_models_dialog,
|
parent = self.manage_models_dialog,
|
||||||
cancellable = None,
|
cancellable = None,
|
||||||
callback = lambda dialog, task, model_name = model_name, button = button:
|
callback = lambda dialog, task, model_name = model_name: self.stop_pull_model(dialog, task, model_name)
|
||||||
self.delete_model(dialog, task, model_name, button) if action == "delete" else self.pull_model_start(dialog, task, model_name,button)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def pull_model_start(self, dialog, task, model_name, tag_drop_down):
|
||||||
|
if dialog.choose_finish(task) == "pull":
|
||||||
|
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 self.local_models: return ##TODO add message 'already pulled'
|
||||||
|
#self.pull_model_status_page.set_description(f"{model_name}:{tag}")
|
||||||
|
model_row = Adw.ActionRow(
|
||||||
|
title = f"{model_name}:{tag}",
|
||||||
|
subtitle = ""
|
||||||
|
)
|
||||||
|
thread = threading.Thread(target=self.pull_model, args=(model_name, tag))
|
||||||
|
self.pulling_models[f"{model_name}:{tag}"] = model_row
|
||||||
|
button = Gtk.Button(
|
||||||
|
icon_name = "media-playback-stop-symbolic",
|
||||||
|
vexpand = False,
|
||||||
|
valign = 3,
|
||||||
|
css_classes = ["error"]
|
||||||
|
)
|
||||||
|
button.connect("clicked", lambda button, model_name=f"{model_name}:{tag}" : self.stop_pull_model_dialog(model_name))
|
||||||
|
model_row.add_suffix(button)
|
||||||
|
self.pulling_model_list_box.append(model_row)
|
||||||
|
thread.start()
|
||||||
|
|
||||||
def model_delete_button_activate(self, model_name):
|
def model_delete_button_activate(self, model_name):
|
||||||
dialog = Adw.AlertDialog(
|
dialog = Adw.AlertDialog(
|
||||||
heading="Delete Model",
|
heading=_("Delete Model"),
|
||||||
body=f"Are you sure you want to delete '{model_name}'?",
|
body=_("Are you sure you want to delete '{}'?").format(model_name),
|
||||||
close_response="cancel"
|
close_response="cancel"
|
||||||
)
|
)
|
||||||
dialog.add_response("cancel", "Cancel")
|
dialog.add_response("cancel", _("Cancel"))
|
||||||
dialog.add_response("delete", "Delete")
|
dialog.add_response("delete", _("Delete"))
|
||||||
dialog.set_response_appearance("delete", Adw.ResponseAppearance.DESTRUCTIVE)
|
dialog.set_response_appearance("delete", Adw.ResponseAppearance.DESTRUCTIVE)
|
||||||
dialog.choose(
|
dialog.choose(
|
||||||
parent = self.manage_models_dialog,
|
parent = self.manage_models_dialog,
|
||||||
@@ -434,13 +493,13 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
model=tag_list
|
model=tag_list
|
||||||
)
|
)
|
||||||
dialog = Adw.AlertDialog(
|
dialog = Adw.AlertDialog(
|
||||||
heading="Pull Model",
|
heading=_("Pull Model"),
|
||||||
body=f"Please select a tag to pull '{model_name}'",
|
body=_("Please select a tag to pull '{}'").format(model_name),
|
||||||
extra_child=tag_drop_down,
|
extra_child=tag_drop_down,
|
||||||
close_response="cancel"
|
close_response="cancel"
|
||||||
)
|
)
|
||||||
dialog.add_response("cancel", "Cancel")
|
dialog.add_response("cancel", _("Cancel"))
|
||||||
dialog.add_response("pull", "Pull")
|
dialog.add_response("pull", _("Pull"))
|
||||||
dialog.set_response_appearance("pull", Adw.ResponseAppearance.SUGGESTED)
|
dialog.set_response_appearance("pull", Adw.ResponseAppearance.SUGGESTED)
|
||||||
dialog.choose(
|
dialog.choose(
|
||||||
parent = self.manage_models_dialog,
|
parent = self.manage_models_dialog,
|
||||||
@@ -449,23 +508,7 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def update_list_available_models(self):
|
def update_list_available_models(self):
|
||||||
self.local_model_list_box.remove_all()
|
|
||||||
self.available_model_list_box.remove_all()
|
self.available_model_list_box.remove_all()
|
||||||
for model_name in self.local_models:
|
|
||||||
model = Adw.ActionRow(
|
|
||||||
title = model_name.split(":")[0],
|
|
||||||
subtitle = model_name.split(":")[1]
|
|
||||||
)
|
|
||||||
button = Gtk.Button(
|
|
||||||
icon_name = "user-trash-symbolic",
|
|
||||||
vexpand = False,
|
|
||||||
valign = 3,
|
|
||||||
css_classes = ["error", "delete"]
|
|
||||||
)
|
|
||||||
button.connect("clicked", lambda button=button, model_name=model_name: self.model_delete_button_activate(model_name))
|
|
||||||
model.add_suffix(button)
|
|
||||||
self.local_model_list_box.append(model)
|
|
||||||
|
|
||||||
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,
|
||||||
@@ -475,7 +518,7 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
icon_name = "folder-download-symbolic",
|
icon_name = "folder-download-symbolic",
|
||||||
vexpand = False,
|
vexpand = False,
|
||||||
valign = 3,
|
valign = 3,
|
||||||
css_classes = ["accent", "pull"]
|
css_classes = ["accent"]
|
||||||
)
|
)
|
||||||
button.connect("clicked", lambda button=button, model_name=name: self.model_pull_button_activate(model_name))
|
button.connect("clicked", lambda button=button, model_name=name: self.model_pull_button_activate(model_name))
|
||||||
model.add_suffix(button)
|
model.add_suffix(button)
|
||||||
@@ -483,7 +526,6 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
|
|
||||||
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.update_list_available_models()
|
|
||||||
self.manage_models_dialog.present(self)
|
self.manage_models_dialog.present(self)
|
||||||
|
|
||||||
def connection_carousel_page_changed(self, carousel, index):
|
def connection_carousel_page_changed(self, carousel, index):
|
||||||
@@ -512,31 +554,31 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
else: self.connection_url_entry.set_css_classes([])
|
else: self.connection_url_entry.set_css_classes([])
|
||||||
self.connection_dialog.present(self)
|
self.connection_dialog.present(self)
|
||||||
|
|
||||||
def clear_conversation(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)
|
||||||
self.chats["chats"][self.chats["selected_chat"]]["messages"] = []
|
self.chats["chats"][self.chats["selected_chat"]]["messages"] = []
|
||||||
|
|
||||||
def clear_conversation_dialog_response(self, dialog, task):
|
def clear_chat_dialog_response(self, dialog, task):
|
||||||
if dialog.choose_finish(task) == "empty":
|
if dialog.choose_finish(task) == "clear":
|
||||||
self.clear_conversation()
|
self.clear_chat()
|
||||||
self.save_history()
|
self.save_history()
|
||||||
|
|
||||||
def clear_conversation_dialog(self):
|
def clear_chat_dialog(self):
|
||||||
if self.bot_message is not None:
|
if self.bot_message is not None:
|
||||||
self.show_toast("info", 1, self.main_overlay)
|
self.show_toast("info", 1, self.main_overlay)
|
||||||
return
|
return
|
||||||
dialog = Adw.AlertDialog(
|
dialog = Adw.AlertDialog(
|
||||||
heading=f"Clear Conversation",
|
heading=_("Clear Chat"),
|
||||||
body=f"Are you sure you want to clear the conversation?",
|
body=_("Are you sure you want to clear the chat?"),
|
||||||
close_response="cancel"
|
close_response="cancel"
|
||||||
)
|
)
|
||||||
dialog.add_response("cancel", "Cancel")
|
dialog.add_response("cancel", _("Cancel"))
|
||||||
dialog.add_response("empty", "Empty")
|
dialog.add_response("clear", _("Clear"))
|
||||||
dialog.set_response_appearance("empty", Adw.ResponseAppearance.DESTRUCTIVE)
|
dialog.set_response_appearance("clear", Adw.ResponseAppearance.DESTRUCTIVE)
|
||||||
dialog.choose(
|
dialog.choose(
|
||||||
parent = self,
|
parent = self,
|
||||||
cancellable = None,
|
cancellable = None,
|
||||||
callback = self.clear_conversation_dialog_response
|
callback = self.clear_chat_dialog_response
|
||||||
)
|
)
|
||||||
|
|
||||||
def save_history(self):
|
def save_history(self):
|
||||||
@@ -555,7 +597,7 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
|
|
||||||
def load_history(self):
|
def load_history(self):
|
||||||
if os.path.exists(os.path.join(self.config_dir, "chats.json")):
|
if os.path.exists(os.path.join(self.config_dir, "chats.json")):
|
||||||
self.clear_conversation()
|
self.clear_chat()
|
||||||
try:
|
try:
|
||||||
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)
|
||||||
@@ -578,21 +620,22 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
|
|
||||||
|
|
||||||
def closing_connection_dialog(self, dialog):
|
def closing_connection_dialog(self, dialog):
|
||||||
if self.ollama_url is None: self.destroy()
|
if self.ollama_url is None or self.first_time_setup: self.destroy()
|
||||||
if self.ollama_url == self.connection_url_entry.get_text():
|
if self.ollama_url == self.connection_url_entry.get_text():
|
||||||
self.connection_dialog.force_close()
|
self.connection_dialog.force_close()
|
||||||
if self.ollama_url is None or self.verify_connection() == False:
|
if self.ollama_url is None or self.verify_connection() == False:
|
||||||
self.show_connection_dialog(True)
|
self.show_connection_dialog(True)
|
||||||
self.show_toast("error", 1, self.connection_overlay)
|
self.show_toast("error", 1, self.connection_overlay)
|
||||||
|
else: self.first_time_setup = False
|
||||||
return
|
return
|
||||||
dialog = Adw.AlertDialog(
|
dialog = Adw.AlertDialog(
|
||||||
heading=f"Save Changes?",
|
heading=_("Save Changes"),
|
||||||
body=f"Do you want to save the URL change?",
|
body=_("Do you want to save the URL change?"),
|
||||||
close_response="cancel"
|
close_response="cancel"
|
||||||
)
|
)
|
||||||
dialog.add_response("cancel", "Cancel")
|
dialog.add_response("cancel", _("Cancel"))
|
||||||
dialog.add_response("discard", "Discard")
|
dialog.add_response("discard", _("Discard"))
|
||||||
dialog.add_response("save", "Save")
|
dialog.add_response("save", _("Save"))
|
||||||
dialog.set_response_appearance("discard", Adw.ResponseAppearance.DESTRUCTIVE)
|
dialog.set_response_appearance("discard", Adw.ResponseAppearance.DESTRUCTIVE)
|
||||||
dialog.set_response_appearance("save", Adw.ResponseAppearance.SUGGESTED)
|
dialog.set_response_appearance("save", Adw.ResponseAppearance.SUGGESTED)
|
||||||
dialog.choose(
|
dialog.choose(
|
||||||
@@ -606,8 +649,6 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
except: return
|
except: return
|
||||||
try:
|
try:
|
||||||
self.attached_image["path"] = file.get_path()
|
self.attached_image["path"] = file.get_path()
|
||||||
'''with open(self.attached_image["path"], "rb") as image_file:
|
|
||||||
self.attached_image["base64"] = base64.b64encode(image_file.read()).decode("utf-8")'''
|
|
||||||
with Image.open(self.attached_image["path"]) as img:
|
with Image.open(self.attached_image["path"]) as img:
|
||||||
width, height = img.size
|
width, height = img.size
|
||||||
max_size = 240
|
max_size = 240
|
||||||
@@ -637,12 +678,12 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
def open_image(self, button):
|
def open_image(self, button):
|
||||||
if "destructive-action" in button.get_css_classes():
|
if "destructive-action" in button.get_css_classes():
|
||||||
dialog = Adw.AlertDialog(
|
dialog = Adw.AlertDialog(
|
||||||
heading=f"Remove Image?",
|
heading=_("Remove Image"),
|
||||||
body=f"Are you sure you want to remove image?",
|
body=_("Are you sure you want to remove image?"),
|
||||||
close_response="cancel"
|
close_response="cancel"
|
||||||
)
|
)
|
||||||
dialog.add_response("cancel", "Cancel")
|
dialog.add_response("cancel", _("Cancel"))
|
||||||
dialog.add_response("remove", "Remove")
|
dialog.add_response("remove", _("Remove"))
|
||||||
dialog.set_response_appearance("remove", Adw.ResponseAppearance.DESTRUCTIVE)
|
dialog.set_response_appearance("remove", Adw.ResponseAppearance.DESTRUCTIVE)
|
||||||
dialog.choose(
|
dialog.choose(
|
||||||
parent = self,
|
parent = self,
|
||||||
@@ -664,12 +705,12 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
self.show_toast("error", 6, self.main_overlay)
|
self.show_toast("error", 6, self.main_overlay)
|
||||||
return
|
return
|
||||||
dialog = Adw.AlertDialog(
|
dialog = Adw.AlertDialog(
|
||||||
heading=f"Delete Chat",
|
heading=_("Delete Chat"),
|
||||||
body=f"Are you sure you want to delete '{chat_name}'?",
|
body=_("Are you sure you want to delete '{}'?").format(chat_name),
|
||||||
close_response="cancel"
|
close_response="cancel"
|
||||||
)
|
)
|
||||||
dialog.add_response("cancel", "Cancel")
|
dialog.add_response("cancel", _("Cancel"))
|
||||||
dialog.add_response("delete", "Delete")
|
dialog.add_response("delete", _("Delete"))
|
||||||
dialog.set_response_appearance("delete", Adw.ResponseAppearance.DESTRUCTIVE)
|
dialog.set_response_appearance("delete", Adw.ResponseAppearance.DESTRUCTIVE)
|
||||||
dialog.choose(
|
dialog.choose(
|
||||||
parent = self,
|
parent = self,
|
||||||
@@ -695,14 +736,14 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
css_classes = ["error"] if error else None
|
css_classes = ["error"] if error else None
|
||||||
)
|
)
|
||||||
dialog = Adw.AlertDialog(
|
dialog = Adw.AlertDialog(
|
||||||
heading=f"Rename Chat",
|
heading=_("Rename Chat"),
|
||||||
body=body,
|
body=body,
|
||||||
extra_child=entry,
|
extra_child=entry,
|
||||||
close_response="cancel"
|
close_response="cancel"
|
||||||
)
|
)
|
||||||
entry.connect("activate", lambda entry, dialog=dialog, old_chat_name=chat_name: self.chat_rename(dialog=dialog, old_chat_name=old_chat_name, entry=entry))
|
entry.connect("activate", lambda entry, dialog=dialog, old_chat_name=chat_name: self.chat_rename(dialog=dialog, old_chat_name=old_chat_name, entry=entry))
|
||||||
dialog.add_response("cancel", "Cancel")
|
dialog.add_response("cancel", _("Cancel"))
|
||||||
dialog.add_response("rename", "Rename")
|
dialog.add_response("rename", _("Rename"))
|
||||||
dialog.set_response_appearance("rename", Adw.ResponseAppearance.SUGGESTED)
|
dialog.set_response_appearance("rename", Adw.ResponseAppearance.SUGGESTED)
|
||||||
dialog.choose(
|
dialog.choose(
|
||||||
parent = self,
|
parent = self,
|
||||||
@@ -713,9 +754,16 @@ 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 = entry.get_text()
|
||||||
if chat_name and (not task or dialog.choose_finish(task) == "create"):
|
if not chat_name:
|
||||||
|
chat_name=_("New Chat")
|
||||||
|
if chat_name in self.chats["chats"]:
|
||||||
|
for i in range(len(list(self.chats["chats"].keys()))):
|
||||||
|
if chat_name + f" {i+1}" not in self.chats["chats"]:
|
||||||
|
chat_name += f" {i+1}"
|
||||||
|
break
|
||||||
|
if not task or dialog.choose_finish(task) == "create":
|
||||||
dialog.force_close()
|
dialog.force_close()
|
||||||
if chat_name in self.chats["chats"]: self.chat_new_dialog(f"The name '{chat_name}' is already in use", 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": []}
|
||||||
self.chats["selected_chat"] = chat_name
|
self.chats["selected_chat"] = chat_name
|
||||||
@@ -728,14 +776,14 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
css_classes = ["error"] if error else None
|
css_classes = ["error"] if error else None
|
||||||
)
|
)
|
||||||
dialog = Adw.AlertDialog(
|
dialog = Adw.AlertDialog(
|
||||||
heading=f"Create Chat",
|
heading=_("Create Chat"),
|
||||||
body=body,
|
body=body,
|
||||||
extra_child=entry,
|
extra_child=entry,
|
||||||
close_response="cancel"
|
close_response="cancel"
|
||||||
)
|
)
|
||||||
entry.connect("activate", lambda entry, dialog=dialog: self.chat_new(dialog=dialog, entry=entry))
|
entry.connect("activate", lambda entry, dialog=dialog: self.chat_new(dialog=dialog, entry=entry))
|
||||||
dialog.add_response("cancel", "Cancel")
|
dialog.add_response("cancel", _("Cancel"))
|
||||||
dialog.add_response("create", "Create")
|
dialog.add_response("create", _("Create"))
|
||||||
dialog.set_response_appearance("rename", Adw.ResponseAppearance.SUGGESTED)
|
dialog.set_response_appearance("rename", Adw.ResponseAppearance.SUGGESTED)
|
||||||
dialog.choose(
|
dialog.choose(
|
||||||
parent = self,
|
parent = self,
|
||||||
@@ -754,7 +802,7 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
css_classes = ["card"]
|
css_classes = ["card"]
|
||||||
)
|
)
|
||||||
button_delete = Gtk.Button(
|
button_delete = Gtk.Button(
|
||||||
icon_name = "edit-delete-symbolic",
|
icon_name = "user-trash-symbolic",
|
||||||
vexpand = False,
|
vexpand = False,
|
||||||
valign = 3,
|
valign = 3,
|
||||||
css_classes = ["error", "flat"]
|
css_classes = ["error", "flat"]
|
||||||
@@ -783,19 +831,20 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
self.model_drop_down.set_selected(i)
|
self.model_drop_down.set_selected(i)
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|
||||||
def selected_model_changed(self, pspec=None, user_data=None):
|
|
||||||
self.verify_if_image_can_be_used()
|
|
||||||
|
|
||||||
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.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.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)
|
||||||
self.add_chat_button.connect("clicked", lambda button : self.chat_new_dialog("Enter name for new chat", False))
|
self.add_chat_button.connect("clicked", lambda button : self.chat_new_dialog("Enter name for new chat", False))
|
||||||
self.set_default_widget(self.send_button)
|
self.set_default_widget(self.send_button)
|
||||||
self.model_drop_down.connect("notify", self.selected_model_changed)
|
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.message_text_view.set_activates_default(self.send_button)
|
||||||
self.connection_carousel.connect("page-changed", self.connection_carousel_page_changed)
|
self.connection_carousel.connect("page-changed", self.connection_carousel_page_changed)
|
||||||
@@ -808,5 +857,8 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
with open(os.path.join(self.config_dir, "server.conf"), "r") as f:
|
with open(os.path.join(self.config_dir, "server.conf"), "r") as f:
|
||||||
self.ollama_url = f.read()
|
self.ollama_url = f.read()
|
||||||
if self.verify_connection() is False: self.show_connection_dialog(True)
|
if self.verify_connection() is False: self.show_connection_dialog(True)
|
||||||
else: self.connection_dialog.present(self)
|
else:
|
||||||
|
self.first_time_setup = True
|
||||||
|
self.connection_dialog.present(self)
|
||||||
|
self.update_list_available_models()
|
||||||
self.update_chat_list()
|
self.update_chat_list()
|
||||||
|
|||||||
158
src/window.ui
158
src/window.ui
@@ -4,20 +4,36 @@
|
|||||||
<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">600</property>
|
<property name="width-request">350</property>
|
||||||
<property name="height-request">800</property>
|
<property name="height-request">500</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="min-content-width">500</property>
|
|
||||||
<property name="min-content-height">600</property>
|
|
||||||
-->
|
|
||||||
<child>
|
<child>
|
||||||
<object class="AdwBreakpoint">
|
<object class="AdwBreakpoint">
|
||||||
<condition>max-width: 800sp</condition>
|
<condition>max-width: 800sp</condition>
|
||||||
<setter object="split_view_overlay" property="collapsed">true</setter>
|
<setter object="split_view_overlay" property="collapsed">true</setter>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
<child>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="AdwBreakpoint">
|
||||||
|
<condition>max-width: 500sp</condition>
|
||||||
|
<setter object="split_view_overlay" property="collapsed">true</setter>
|
||||||
|
<setter object="connection_dialog" property="width-request">400</setter>
|
||||||
|
<setter object="connection_dialog" property="height-request">400</setter>
|
||||||
|
<setter object="manage_models_dialog" property="width-request">400</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>
|
||||||
|
</child>
|
||||||
<property name="content">
|
<property name="content">
|
||||||
<object class="AdwToastOverlay" id="main_overlay">
|
<object class="AdwToastOverlay" id="main_overlay">
|
||||||
<child>
|
<child>
|
||||||
@@ -65,7 +81,6 @@
|
|||||||
<property name="hexpand">true</property>
|
<property name="hexpand">true</property>
|
||||||
<child>
|
<child>
|
||||||
<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="boxed-list"/>
|
||||||
@@ -83,7 +98,7 @@
|
|||||||
<child type="start">
|
<child type="start">
|
||||||
<object class="GtkToggleButton" id="show_sidebar_button">
|
<object class="GtkToggleButton" id="show_sidebar_button">
|
||||||
<property name="icon-name">sidebar-show-symbolic</property>
|
<property name="icon-name">sidebar-show-symbolic</property>
|
||||||
<property name="tooltip-text" translatable="true">Toggle Sidebar</property>
|
<property name="tooltip-text" translatable="yes">Toggle Sidebar</property>
|
||||||
<property name="active" bind-source="split_view_overlay" bind-property="show-sidebar" bind-flags="sync-create"/>
|
<property name="active" bind-source="split_view_overlay" bind-property="show-sidebar" bind-flags="sync-create"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -138,8 +153,6 @@
|
|||||||
<property name="margin-bottom">12</property>
|
<property name="margin-bottom">12</property>
|
||||||
<property name="has-frame">true</property>
|
<property name="has-frame">true</property>
|
||||||
<property name="propagate-natural-height">true</property>
|
<property name="propagate-natural-height">true</property>
|
||||||
<property name="min-content-width">500</property>
|
|
||||||
<property name="min-content-height">600</property>
|
|
||||||
<property name="kinetic-scrolling">1</property>
|
<property name="kinetic-scrolling">1</property>
|
||||||
<property name="vexpand">true</property>
|
<property name="vexpand">true</property>
|
||||||
<style>
|
<style>
|
||||||
@@ -199,7 +212,7 @@
|
|||||||
</style>
|
</style>
|
||||||
<child>
|
<child>
|
||||||
<object class="AdwButtonContent">
|
<object class="AdwButtonContent">
|
||||||
<property name="label" translatable="true">Send</property>
|
<property name="label" translatable="yes">Send</property>
|
||||||
<property name="icon-name">send-to-symbolic</property>
|
<property name="icon-name">send-to-symbolic</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -208,10 +221,10 @@
|
|||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="image_button">
|
<object class="GtkButton" id="image_button">
|
||||||
<property name="sensitive">false</property>
|
<property name="sensitive">false</property>
|
||||||
<property name="tooltip-text" translatable="true">Requires model 'llava' to be selected</property>
|
<property name="tooltip-text" translatable="yes">Requires model 'llava' to be selected</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="AdwButtonContent">
|
<object class="AdwButtonContent">
|
||||||
<property name="label" translatable="true">Image</property>
|
<property name="label" translatable="yes">Image</property>
|
||||||
<property name="icon-name">image-x-generic-symbolic</property>
|
<property name="icon-name">image-x-generic-symbolic</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -231,35 +244,6 @@
|
|||||||
</object>
|
</object>
|
||||||
</property>
|
</property>
|
||||||
|
|
||||||
<object class="AdwDialog" id="pull_model_dialog">
|
|
||||||
<property name="can-close">false</property>
|
|
||||||
<property name="width-request">400</property>
|
|
||||||
<child>
|
|
||||||
<object class="AdwToastOverlay" id="pull_overlay">
|
|
||||||
<child>
|
|
||||||
<object class="AdwToolbarView">
|
|
||||||
<child>
|
|
||||||
<object class="AdwStatusPage" id="pull_model_status_page">
|
|
||||||
<property name="hexpand">true</property>
|
|
||||||
<property name="vexpand">true</property>
|
|
||||||
<property name="margin-top">24</property>
|
|
||||||
<property name="margin-bottom">24</property>
|
|
||||||
<property name="margin-start">24</property>
|
|
||||||
<property name="margin-end">24</property>
|
|
||||||
<property name="title" translatable="yes">Pulling Model</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkProgressBar" id="pull_model_progress_bar">
|
|
||||||
<property name="show-text">true</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</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>
|
||||||
<property name="width-request">400</property>
|
<property name="width-request">400</property>
|
||||||
@@ -272,7 +256,7 @@
|
|||||||
<object class="AdwHeaderBar">
|
<object class="AdwHeaderBar">
|
||||||
<property name="title-widget">
|
<property name="title-widget">
|
||||||
<object class="AdwWindowTitle">
|
<object class="AdwWindowTitle">
|
||||||
<property name="title">Manage models</property>
|
<property name="title" translatable="yes">Manage models</property>
|
||||||
</object>
|
</object>
|
||||||
</property>
|
</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -289,6 +273,21 @@
|
|||||||
<object class="GtkBox">
|
<object class="GtkBox">
|
||||||
<property name="orientation">1</property>
|
<property name="orientation">1</property>
|
||||||
<property name="spacing">12</property>
|
<property name="spacing">12</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkListBox" id="pulling_model_list_box">
|
||||||
|
<property name="selection-mode">none</property>
|
||||||
|
<style>
|
||||||
|
<class name="boxed-list"/>
|
||||||
|
</style>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkSeparator">
|
||||||
|
<style>
|
||||||
|
<class name="spacer"/>
|
||||||
|
</style>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkListBox" id="local_model_list_box">
|
<object class="GtkListBox" id="local_model_list_box">
|
||||||
<property name="selection-mode">none</property>
|
<property name="selection-mode">none</property>
|
||||||
@@ -387,7 +386,7 @@
|
|||||||
<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>
|
<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>
|
<child>
|
||||||
<object class="GtkLinkButton">
|
<object class="GtkLinkButton">
|
||||||
<property name="label" translatable="true">Ollama Website</property>
|
<property name="label" translatable="yes">Ollama Website</property>
|
||||||
<property name="uri">https://ollama.com/</property>
|
<property name="uri">https://ollama.com/</property>
|
||||||
<property name="margin-top">12</property>
|
<property name="margin-top">12</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -437,15 +436,19 @@
|
|||||||
<menu id="primary_menu">
|
<menu id="primary_menu">
|
||||||
<section>
|
<section>
|
||||||
<item>
|
<item>
|
||||||
<attribute name="label" translatable="yes">_Clear Chat</attribute>
|
<attribute name="label" translatable="yes">Clear Chat</attribute>
|
||||||
<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">Change Server</attribute>
|
||||||
<attribute name="action">app.reconnect</attribute>
|
<attribute name="action">app.reconnect</attribute>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<attribute name="label" translatable="yes">_About Alpaca</attribute>
|
<attribute name="label" translatable="yes">Keyboard Shortcuts</attribute>
|
||||||
|
<attribute name="action">win.show-help-overlay</attribute>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<attribute name="label" translatable="yes">About Alpaca</attribute>
|
||||||
<attribute name="action">app.about</attribute>
|
<attribute name="action">app.about</attribute>
|
||||||
</item>
|
</item>
|
||||||
</section>
|
</section>
|
||||||
@@ -459,4 +462,65 @@
|
|||||||
<mime-type>image/gif</mime-type>
|
<mime-type>image/gif</mime-type>
|
||||||
</mime-types>
|
</mime-types>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="GtkShortcutsWindow" id="shortcut_window">
|
||||||
|
<property name="modal">1</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkShortcutsSection">
|
||||||
|
<property name="section-name">shortcuts</property>
|
||||||
|
<property name="max-height">10</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkShortcutsGroup">
|
||||||
|
<property name="title" translatable="yes">General</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkShortcutsShortcut">
|
||||||
|
<property name="accelerator"><ctrl>Q</property>
|
||||||
|
<property name="title" translatable="yes">Close application</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkShortcutsShortcut">
|
||||||
|
<property name="accelerator"><ctrl>E</property>
|
||||||
|
<property name="title" translatable="yes">Clear chat</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkShortcutsShortcut">
|
||||||
|
<property name="accelerator"><ctrl>R</property>
|
||||||
|
<property name="title" translatable="yes">Change server</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkShortcutsShortcut">
|
||||||
|
<property name="accelerator"><ctrl>slash</property>
|
||||||
|
<property name="title" translatable="yes">Show shortcuts window</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkShortcutsGroup">
|
||||||
|
<property name="title" translatable="yes">Editor</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkShortcutsShortcut">
|
||||||
|
<property name="accelerator"><ctrl>C</property>
|
||||||
|
<property name="title" translatable="yes">Copy</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkShortcutsShortcut">
|
||||||
|
<property name="accelerator"><ctrl>V</property>
|
||||||
|
<property name="title" translatable="yes">Paste</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkShortcutsShortcut">
|
||||||
|
<property name="accelerator"><ctrl>Return</property>
|
||||||
|
<property name="title" translatable="yes">Send Message</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
</interface>
|
</interface>
|
||||||
|
|||||||
8
update_translation_files.sh
Executable file
8
update_translation_files.sh
Executable file
@@ -0,0 +1,8 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
cd "$(dirname "$0")"
|
||||||
|
echo "Preparing template..."
|
||||||
|
xgettext --output=po/alpaca.pot --files-from=po/POTFILES
|
||||||
|
echo "Updating Spanish..."
|
||||||
|
msgmerge -U po/es.po po/alpaca.pot
|
||||||
|
echo "Updating Russian..."
|
||||||
|
msgmerge -U po/ru.po po/alpaca.pot
|
||||||
Reference in New Issue
Block a user