Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dc2df81c75 | ||
|
|
ddc50ce621 | ||
|
|
701fae92a0 | ||
|
|
f3d22219b4 | ||
|
|
0027cf7c59 | ||
|
|
b6c45fc346 | ||
|
|
e6f2902bd1 | ||
|
|
1190e367bb | ||
|
|
d619f55ff2 | ||
|
|
605d837716 | ||
|
|
3aa57c6d2f | ||
|
|
1cf2f04b06 | ||
|
|
780de2b753 | ||
|
|
e19511469d | ||
|
|
bedf1a9bc5 | ||
|
|
6e330448e6 | ||
|
|
31802da0e3 |
@@ -22,7 +22,8 @@ Alpaca is an [Ollama](https://github.com/ollama/ollama) client where you can man
|
|||||||
- Delete messages
|
- Delete messages
|
||||||
|
|
||||||
## Future features!
|
## Future features!
|
||||||
- Document recognition
|
- Document recognition (Probably only Markdown because it's really easy for AI to read)
|
||||||
|
- YouTube recognition (Ask questions about a YouTube video using the transcript)
|
||||||
- Edit messages
|
- Edit messages
|
||||||
- Snap Package (maybe)
|
- Snap Package (maybe)
|
||||||
|
|
||||||
|
|||||||
@@ -5,15 +5,16 @@
|
|||||||
<project_license>GPL-3.0-or-later</project_license>
|
<project_license>GPL-3.0-or-later</project_license>
|
||||||
<launchable type="desktop-id">com.jeffser.Alpaca.desktop</launchable>
|
<launchable type="desktop-id">com.jeffser.Alpaca.desktop</launchable>
|
||||||
<name>Alpaca</name>
|
<name>Alpaca</name>
|
||||||
<summary>Chat with local AI models</summary>
|
<summary>Chat with local AI models powered by Ollama</summary>
|
||||||
<description>
|
<description>
|
||||||
<p>An Ollama client</p>
|
<p>An Ollama client</p>
|
||||||
<p>Features</p>
|
<p>Features</p>
|
||||||
<ul>
|
<ul>
|
||||||
|
<li>Built in Ollama instance</li>
|
||||||
<li>Talk to multiple models in the same conversation</li>
|
<li>Talk to multiple models in the same conversation</li>
|
||||||
<li>Pull and delete models from the app</li>
|
<li>Pull and delete models from the app</li>
|
||||||
<li>Have multiple conversations</li>
|
<li>Have multiple conversations</li>
|
||||||
<li>Image recognition (Only available with LLaVA Model)</li>
|
<li>Image recognition (Only available with compatible models)</li>
|
||||||
<li>Import and export chats</li>
|
<li>Import and export chats</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>Disclaimer</p>
|
<p>Disclaimer</p>
|
||||||
@@ -36,6 +37,8 @@
|
|||||||
</requires>
|
</requires>
|
||||||
<recommends>
|
<recommends>
|
||||||
<control>keyboard</control>
|
<control>keyboard</control>
|
||||||
|
<control>pointing</control>
|
||||||
|
<control>touch</control>
|
||||||
</recommends>
|
</recommends>
|
||||||
<branding>
|
<branding>
|
||||||
<color type="primary" scheme_preference="light">#8cdef5</color>
|
<color type="primary" scheme_preference="light">#8cdef5</color>
|
||||||
@@ -60,6 +63,27 @@
|
|||||||
<url type="homepage">https://github.com/Jeffser/Alpaca</url>
|
<url type="homepage">https://github.com/Jeffser/Alpaca</url>
|
||||||
<url type="donation">https://github.com/sponsors/Jeffser</url>
|
<url type="donation">https://github.com/sponsors/Jeffser</url>
|
||||||
<releases>
|
<releases>
|
||||||
|
<release version="0.8.5" date="2024-05-26">
|
||||||
|
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.8.5</url>
|
||||||
|
<description>
|
||||||
|
<p>Nice Update</p>
|
||||||
|
<ul>
|
||||||
|
<li>UI tweaks (Thanks Nokse22)</li>
|
||||||
|
<li>General optimizations</li>
|
||||||
|
<li>Metadata fixes</li>
|
||||||
|
</ul>
|
||||||
|
</description>
|
||||||
|
</release>
|
||||||
|
<release version="0.8.1" date="2024-05-24">
|
||||||
|
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.8.1</url>
|
||||||
|
<description>
|
||||||
|
<p>Quick fix</p>
|
||||||
|
<ul>
|
||||||
|
<li>Updated Spanish translation</li>
|
||||||
|
<li>Added compatibility for PNG</li>
|
||||||
|
</ul>
|
||||||
|
</description>
|
||||||
|
</release>
|
||||||
<release version="0.8.0" date="2024-05-24">
|
<release version="0.8.0" date="2024-05-24">
|
||||||
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.8.0</url>
|
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.8.0</url>
|
||||||
<description>
|
<description>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
project('Alpaca',
|
project('Alpaca',
|
||||||
version: '0.8.0',
|
version: '0.8.5',
|
||||||
meson_version: '>= 0.62.0',
|
meson_version: '>= 0.62.0',
|
||||||
default_options: [ 'warning_level=2', 'werror=false', ],
|
default_options: [ 'warning_level=2', 'werror=false', ],
|
||||||
)
|
)
|
||||||
|
|||||||
599
po/alpaca.pot
599
po/alpaca.pot
@@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2024-05-22 19:52-0600\n"
|
"POT-Creation-Date: 2024-05-26 00:57-0600\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@@ -23,7 +23,7 @@ msgid "Alpaca"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:8
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:8
|
||||||
msgid "Chat with multiple AI models"
|
msgid "Chat with local AI models powered by Ollama"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:10
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:10
|
||||||
@@ -31,661 +31,692 @@ msgid "An Ollama client"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:11
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:11
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:239
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:300
|
||||||
msgid "Features"
|
msgid "Features"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:13
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:13
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:241
|
msgid "Built in Ollama instance"
|
||||||
msgid "Talk to multiple models in the same conversation"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:14
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:14
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:242
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:302
|
||||||
|
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:303
|
||||||
msgid "Pull and delete models from the app"
|
msgid "Pull and delete models from the app"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:16 src/window.ui:442
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:16
|
||||||
msgid "Disclaimer"
|
msgid "Have multiple conversations"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:17
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:17
|
||||||
|
msgid "Image recognition (Only available with compatible models)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:18
|
||||||
|
msgid "Import and export chats"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:20 src/window.ui:440
|
||||||
|
msgid "Disclaimer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:21
|
||||||
msgid ""
|
msgid ""
|
||||||
"This project is not affiliated at all with Ollama, I'm not responsible for "
|
"This project is not affiliated at all with Ollama, I'm not responsible for "
|
||||||
"any damages to your device or software caused by running code given by any "
|
"any damages to your device or software caused by running code given by any "
|
||||||
"models."
|
"models."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:20
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:24
|
||||||
msgid "Jeffry Samuel Eduarte Rojas"
|
msgid "Jeffry Samuel Eduarte Rojas"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:38
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:50
|
||||||
msgid "Welcome dialog"
|
msgid "A conversation showing code highlight"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:42
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:54
|
||||||
msgid "A conversation involving multiple models"
|
msgid "A conversation involving multiple models"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:46
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:58
|
||||||
msgid "Managing models"
|
msgid "Managing models"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:57
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:69
|
||||||
msgid "Cool Update"
|
msgid "Nice Update"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:59
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:71
|
||||||
msgid "Better design for chat window"
|
msgid "UI tweaks (Thanks Nokse22)"
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:60
|
|
||||||
msgid "Better design for chat sidebar"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:61
|
|
||||||
msgid "Fixed remote connections"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:62
|
|
||||||
msgid "Fixed Ollama restarting in loop"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:63
|
|
||||||
msgid "Other cool backend stuff"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:70
|
|
||||||
msgid "Huge Update"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:72
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:72
|
||||||
msgid "Added Ollama as part of Alpaca, Ollama will run in a sandbox"
|
msgid "General optimizations"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:73
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:73
|
||||||
msgid "Added option to connect to remote instances (how it worked before)"
|
msgid "Metadata fixes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:74
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:80
|
||||||
msgid "Added option to import and export chats"
|
msgid "Quick fix"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:75
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:82
|
||||||
msgid "Added option to run Alpaca with Ollama in the background"
|
msgid "Updated Spanish translation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:76
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:83
|
||||||
msgid "Added preferences dialog"
|
msgid "Added compatibility for PNG"
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:77
|
|
||||||
msgid "Changed the welcome dialog"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:79
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:96
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:108
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:127
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:148
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:164
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:180
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:194
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:204
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:222
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:244
|
|
||||||
msgid "Please report any errors to the issues page, thank you."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:87
|
|
||||||
msgid "Yet Another Daily Update"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:89
|
|
||||||
msgid "Added better UI for 'Manage Models' dialog"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:90
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:90
|
||||||
|
msgid "New Update"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:92
|
||||||
|
msgid "Updated model list"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:93
|
||||||
|
msgid "Added image recognition to more models"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:94
|
||||||
|
msgid "Added Brazilian Portuguese translation (Thanks Daimaar Stein)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:95
|
||||||
|
msgid "Refined the general UI (Thanks Nokse22)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:96
|
||||||
|
msgid "Added 'delete message' feature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:97
|
||||||
|
msgid ""
|
||||||
|
"Added metadata so that software distributors know that the app is compatible "
|
||||||
|
"with mobile"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:98
|
||||||
|
msgid ""
|
||||||
|
"Changed 'send' shortcut to just the return/enter key (to add a new line use "
|
||||||
|
"shift+return)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:105
|
||||||
|
msgid "Bug Fixes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:107
|
||||||
|
msgid "Fixed: Minor spelling mistake"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:108
|
||||||
|
msgid "Added 'mobile' as a supported form factor"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:109
|
||||||
|
msgid "Fixed: 'Connection Error' dialog not working properly"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:110
|
||||||
|
msgid "Fixed: App might freeze randomly on startup"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:111
|
||||||
|
msgid "Changed 'chats' label on sidebar for 'Alpaca'"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:118
|
||||||
|
msgid "Cool Update"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:120
|
||||||
|
msgid "Better design for chat window"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:121
|
||||||
|
msgid "Better design for chat sidebar"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:122
|
||||||
|
msgid "Fixed remote connections"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:123
|
||||||
|
msgid "Fixed Ollama restarting in loop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:124
|
||||||
|
msgid "Other cool backend stuff"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:131
|
||||||
|
msgid "Huge Update"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:133
|
||||||
|
msgid "Added Ollama as part of Alpaca, Ollama will run in a sandbox"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:134
|
||||||
|
msgid "Added option to connect to remote instances (how it worked before)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:135
|
||||||
|
msgid "Added option to import and export chats"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:136
|
||||||
|
msgid "Added option to run Alpaca with Ollama in the background"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:137
|
||||||
|
msgid "Added preferences dialog"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:138
|
||||||
|
msgid "Changed the welcome dialog"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:140
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:157
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:169
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:188
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:209
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:225
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:241
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:255
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:265
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:283
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:305
|
||||||
|
msgid "Please report any errors to the issues page, thank you."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:148
|
||||||
|
msgid "Yet Another Daily Update"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:150
|
||||||
|
msgid "Added better UI for 'Manage Models' dialog"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:151
|
||||||
msgid "Added better UI for the chat sidebar"
|
msgid "Added better UI for the chat sidebar"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:91
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:152
|
||||||
msgid ""
|
msgid ""
|
||||||
"Replaced model description with a button to open Ollama's website for the "
|
"Replaced model description with a button to open Ollama's website for the "
|
||||||
"model"
|
"model"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:92
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:153
|
||||||
msgid "Added myself to the credits as the spanish translator"
|
msgid "Added myself to the credits as the spanish translator"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:93
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:154
|
||||||
msgid "Using XDG properly to get config folder"
|
msgid "Using XDG properly to get config folder"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:94
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:155
|
||||||
msgid "Update for translations"
|
msgid "Update for translations"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:104
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:165
|
||||||
msgid "Quick Fix"
|
msgid "Quick Fix"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:106
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:167
|
||||||
msgid "The last update had some mistakes in the description of the update"
|
msgid "The last update had some mistakes in the description of the update"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:116
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:177
|
||||||
msgid "Another Daily Update"
|
msgid "Another Daily Update"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:118
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:179
|
||||||
msgid "Added full Spanish translation"
|
msgid "Added full Spanish translation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:119
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:180
|
||||||
msgid "Added support for background pulling of multiple models"
|
msgid "Added support for background pulling of multiple models"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:120
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:181
|
||||||
msgid "Added interrupt button"
|
msgid "Added interrupt button"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:121
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:182
|
||||||
msgid "Added basic shortcuts"
|
msgid "Added basic shortcuts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:122
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:183
|
||||||
msgid "Better translation support"
|
msgid "Better translation support"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:123
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:184
|
||||||
msgid ""
|
msgid ""
|
||||||
"User can now leave chat name empty when creating a new one, it will add a "
|
"User can now leave chat name empty when creating a new one, it will add a "
|
||||||
"placeholder name"
|
"placeholder name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:124
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:185
|
||||||
msgid "Better scalling for different window sizes"
|
msgid "Better scalling for different window sizes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:125
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:186
|
||||||
msgid "Fixed: Can't close app if first time setup fails"
|
msgid "Fixed: Can't close app if first time setup fails"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:135
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:196
|
||||||
msgid "Really Big Update"
|
msgid "Really Big Update"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:137
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:198
|
||||||
msgid "Added multiple chats support!"
|
msgid "Added multiple chats support!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:138
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:199
|
||||||
msgid "Added Pango Markup support (bold, list, title, subtitle, monospace)"
|
msgid "Added Pango Markup support (bold, list, title, subtitle, monospace)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:139
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:200
|
||||||
msgid "Added autoscroll if the user is at the bottom of the chat"
|
msgid "Added autoscroll if the user is at the bottom of the chat"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:140
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:201
|
||||||
msgid "Added support for multiple tags on a single model"
|
msgid "Added support for multiple tags on a single model"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:141
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:202
|
||||||
msgid "Added better model management dialog"
|
msgid "Added better model management dialog"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:142
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:203
|
||||||
msgid "Added loading spinner when sending message"
|
msgid "Added loading spinner when sending message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:143
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:204
|
||||||
msgid "Added notifications if app is not active and a model pull finishes"
|
msgid "Added notifications if app is not active and a model pull finishes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:144
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:205
|
||||||
msgid "Added new symbolic icon"
|
msgid "Added new symbolic icon"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:145
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:206
|
||||||
msgid "Added frame to message textview widget"
|
msgid "Added frame to message textview widget"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:146
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:207
|
||||||
msgid "Fixed \"code blocks shouldn't be editable\""
|
msgid "Fixed \"code blocks shouldn't be editable\""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:156
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:217
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:213
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:274
|
||||||
msgid "Big Update"
|
msgid "Big Update"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:158
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:219
|
||||||
msgid "Added code highlighting"
|
msgid "Added code highlighting"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:159
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:220
|
||||||
msgid "Added image recognition (llava model)"
|
msgid "Added image recognition (llava model)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:160
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:221
|
||||||
msgid "Added multiline prompt"
|
msgid "Added multiline prompt"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:161
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:222
|
||||||
msgid "Fixed some small bugs"
|
msgid "Fixed some small bugs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:162
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:223
|
||||||
msgid "General optimization"
|
msgid "General optimization"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:172
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:233
|
||||||
msgid "Fixes and features"
|
msgid "Fixes and features"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:174
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:235
|
||||||
msgid "Russian translation (thanks github/alexkdeveloper)"
|
msgid "Russian translation (thanks github/alexkdeveloper)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:175
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:236
|
||||||
msgid "Fixed: Cannot close app on first setup"
|
msgid "Fixed: Cannot close app on first setup"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:176
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:237
|
||||||
msgid "Fixed: Brand colors for Flathub"
|
msgid "Fixed: Brand colors for Flathub"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:177
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:238
|
||||||
msgid "Fixed: App description"
|
msgid "Fixed: App description"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:178
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:239
|
||||||
msgid "Fixed: Only show 'save changes dialog' when you actually change the url"
|
msgid "Fixed: Only show 'save changes dialog' when you actually change the url"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:188
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:249
|
||||||
msgid "0.2.2 Bug fixes"
|
msgid "0.2.2 Bug fixes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:190
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:251
|
||||||
msgid "Toast messages appearing behind dialogs"
|
msgid "Toast messages appearing behind dialogs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:191
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:252
|
||||||
msgid "Local model list not updating when changing servers"
|
msgid "Local model list not updating when changing servers"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:192
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:253
|
||||||
msgid "Closing the setup dialog closes the whole app"
|
msgid "Closing the setup dialog closes the whole app"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:202
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:263
|
||||||
msgid "0.2.1 Data saving fix"
|
msgid "0.2.1 Data saving fix"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:203
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:264
|
||||||
msgid ""
|
msgid ""
|
||||||
"The app didn't save the config files and chat history to the right "
|
"The app didn't save the config files and chat history to the right "
|
||||||
"directory, this is now fixed"
|
"directory, this is now fixed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:212
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:273
|
||||||
msgid "0.2.0"
|
msgid "0.2.0"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:214
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:275
|
||||||
msgid "New Features"
|
msgid "New Features"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:216
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:277
|
||||||
msgid "Restore chat after closing the app"
|
msgid "Restore chat after closing the app"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:217
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:278
|
||||||
msgid "A button to clear the chat"
|
msgid "A button to clear the chat"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:218
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:279
|
||||||
msgid "Fixed multiple bugs involving how messages are shown"
|
msgid "Fixed multiple bugs involving how messages are shown"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:219
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:280
|
||||||
msgid "Added welcome dialog"
|
msgid "Added welcome dialog"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:220
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:281
|
||||||
msgid "More stability"
|
msgid "More stability"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:230
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:291
|
||||||
msgid "0.1.2 Quick fixes"
|
msgid "0.1.2 Quick fixes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:231
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:292
|
||||||
msgid ""
|
msgid ""
|
||||||
"This release fixes some metadata needed to have a proper Flatpak application"
|
"This release fixes some metadata needed to have a proper Flatpak application"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:237
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:298
|
||||||
msgid "0.1.1 Stable Release"
|
msgid "0.1.1 Stable Release"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:238
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:299
|
||||||
msgid "This is the first public version of Alpaca"
|
msgid "This is the first public version of Alpaca"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.py:56 src/window.py:780
|
#: src/window.py:54 src/window.py:624 src/window.py:626
|
||||||
msgid "New Chat"
|
msgid "New Chat"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.py:102
|
#: src/window.py:97
|
||||||
msgid "An error occurred"
|
msgid "An error occurred"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.py:103
|
#: src/window.py:98
|
||||||
msgid "Failed to connect to server"
|
msgid "Failed to connect to server"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.py:104
|
#: src/window.py:99
|
||||||
msgid "Could not list local models"
|
msgid "Could not list local models"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.py:105
|
#: src/window.py:100
|
||||||
msgid "Could not delete model"
|
msgid "Could not delete model"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.py:106
|
#: src/window.py:101
|
||||||
msgid "Could not pull model"
|
msgid "Could not pull model"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.py:107
|
#: src/window.py:102
|
||||||
msgid "Cannot open image"
|
msgid "Cannot open image"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.py:108
|
#: src/window.py:103
|
||||||
msgid "Cannot delete chat because it's the only one left"
|
msgid "Cannot delete chat because it's the only one left"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.py:109
|
#: src/window.py:104
|
||||||
msgid "There was an error with the local Ollama instance, so it has been reset"
|
msgid "There was an error with the local Ollama instance, so it has been reset"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.py:112
|
#: src/window.py:107
|
||||||
msgid "Please select a model before chatting"
|
msgid "Please select a model before chatting"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.py:113
|
#: src/window.py:108
|
||||||
msgid "Chat cannot be cleared while receiving a message"
|
msgid "Chat cannot be cleared while receiving a message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.py:114
|
#: src/window.py:109
|
||||||
msgid "That tag is already being pulled"
|
msgid "That tag is already being pulled"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.py:115
|
#: src/window.py:110
|
||||||
msgid "That tag has been pulled alreay"
|
msgid "That tag has been pulled already"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.py:118
|
#: src/window.py:111
|
||||||
|
msgid "Code copied to the clipboard"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:114
|
||||||
msgid "Model deleted successfully"
|
msgid "Model deleted successfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.py:119
|
#: src/window.py:115
|
||||||
msgid "Model pulled successfully"
|
msgid "Model pulled successfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.py:120
|
#: src/window.py:116
|
||||||
msgid "Chat exported successfully"
|
msgid "Chat exported successfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.py:121
|
#: src/window.py:117
|
||||||
msgid "Chat imported successfully"
|
msgid "Chat imported successfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.py:471
|
#: src/window.py:129
|
||||||
|
msgid "Upload image"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:133 src/window.ui:231
|
||||||
|
msgid "Only available on selected models"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:542
|
||||||
msgid "Task Complete"
|
msgid "Task Complete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.py:471
|
#: src/window.py:542
|
||||||
msgid "Model '{}' pulled successfully."
|
msgid "Model '{}' pulled successfully."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.py:476
|
#: src/window.py:547
|
||||||
msgid "Pull Model Error"
|
msgid "Pull Model Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.py:476
|
#: src/window.py:547
|
||||||
msgid "Failed to pull model '{}' due to network error."
|
msgid "Failed to pull model '{}' due to network error."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.py:492
|
#: src/window.ui:38
|
||||||
msgid "Stop Model"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.py:493
|
|
||||||
msgid "Are you sure you want to stop pulling '{}'?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.py:496 src/window.py:539 src/window.py:562 src/window.py:635
|
|
||||||
#: src/window.py:708 src/window.py:734 src/window.py:766 src/window.py:807
|
|
||||||
msgid "Cancel"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.py:497
|
|
||||||
msgid "Stop"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.py:535
|
|
||||||
msgid "Delete Model"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.py:536 src/window.py:731
|
|
||||||
msgid "Are you sure you want to delete '{}'?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.py:540 src/window.py:735
|
|
||||||
msgid "Delete"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.py:557
|
|
||||||
msgid "Pull Model"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.py:558
|
|
||||||
msgid "Please select a tag to pull '{}'"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.py:563
|
|
||||||
msgid "Pull"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.py:631 src/window.ui:458
|
|
||||||
msgid "Clear Chat"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.py:632
|
|
||||||
msgid "Are you sure you want to clear the chat?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.py:636
|
|
||||||
msgid "Clear"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.py:704
|
|
||||||
msgid "Remove Image"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.py:705
|
|
||||||
msgid "Are you sure you want to remove image?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.py:709 src/window.ui:478
|
|
||||||
msgid "Remove"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.py:730
|
|
||||||
msgid "Delete Chat"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.py:760
|
|
||||||
msgid "Rename Chat"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.py:767
|
|
||||||
msgid "Rename"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.py:788
|
|
||||||
msgid "The name '{}' is already in use"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.py:801
|
|
||||||
msgid "Create Chat"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.py:808
|
|
||||||
msgid "Create"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.ui:45
|
|
||||||
msgid "Chats"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.ui:55
|
|
||||||
msgid "Import chat"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.ui:68
|
|
||||||
msgid "Export chat"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.ui:81
|
|
||||||
msgid "New chat"
|
msgid "New chat"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:117
|
#: src/window.ui:47
|
||||||
|
msgid "Import chat"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:56
|
||||||
|
msgid "Export chat"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:89
|
||||||
msgid "Toggle Sidebar"
|
msgid "Toggle Sidebar"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:138 src/window.ui:311
|
#: src/window.ui:112 src/window.ui:308
|
||||||
msgid "Manage models"
|
msgid "Manage models"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:152
|
#: src/window.ui:126
|
||||||
msgid "Menu"
|
msgid "Menu"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:227
|
#: src/window.ui:221
|
||||||
msgid "Send"
|
msgid "Send"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:236
|
#: src/window.ui:234
|
||||||
msgid "Requires model 'llava' to be selected"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/window.ui:239
|
|
||||||
msgid "Image"
|
msgid "Image"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:262 src/window.ui:462 src/window.ui:520
|
#: src/window.ui:258 src/window.ui:458 src/window.ui:516
|
||||||
msgid "Preferences"
|
msgid "Preferences"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:265 src/window.ui:504
|
#: src/window.ui:261 src/window.ui:500
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:269
|
#: src/window.ui:265
|
||||||
msgid "Remote Connection"
|
msgid "Remote Connection"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:270
|
#: src/window.ui:266
|
||||||
msgid "Manage a remote connection to Ollama"
|
msgid "Manage a remote connection to Ollama"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:273
|
#: src/window.ui:269
|
||||||
msgid "Use remote connection"
|
msgid "Use remote connection"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:278
|
#: src/window.ui:275
|
||||||
msgid "URL of remote instance"
|
msgid "URL of remote instance"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:286
|
#: src/window.ui:283
|
||||||
msgid "Behavior"
|
msgid "Behavior"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:287
|
#: src/window.ui:284
|
||||||
msgid "Manage Alpaca's Behavior"
|
msgid "Manage Alpaca's Behavior"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:290
|
#: src/window.ui:287
|
||||||
msgid "Run in background"
|
msgid "Run in background"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:381
|
#: src/window.ui:377
|
||||||
msgid "Previous"
|
msgid "Previous"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:396
|
#: src/window.ui:393
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:422
|
#: src/window.ui:420
|
||||||
msgid "Welcome to Alpaca"
|
msgid "Welcome to Alpaca"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:423
|
#: src/window.ui:421
|
||||||
msgid "Powered by Ollama"
|
msgid "Powered by Ollama"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:426
|
#: src/window.ui:424
|
||||||
msgid "Ollama Website"
|
msgid "Ollama Website"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:443
|
#: src/window.ui:441
|
||||||
msgid ""
|
msgid ""
|
||||||
"Alpaca and its developers are not liable for any damages to devices or "
|
"Alpaca and its developers are not liable for any damages to devices or "
|
||||||
"software resulting from the execution of code generated by an AI model. "
|
"software resulting from the execution of code generated by an AI model. "
|
||||||
"Please exercise caution and review the code carefully before running it."
|
"Please exercise caution and review the code carefully before running it."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:466
|
#: src/window.ui:454
|
||||||
|
msgid "Clear Chat"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:462
|
||||||
msgid "Keyboard Shortcuts"
|
msgid "Keyboard Shortcuts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:470
|
#: src/window.ui:466
|
||||||
msgid "About Alpaca"
|
msgid "About Alpaca"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:508
|
#: src/window.ui:474
|
||||||
|
msgid "Remove"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:504
|
||||||
msgid "Close application"
|
msgid "Close application"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:514
|
#: src/window.ui:510
|
||||||
msgid "Clear chat"
|
msgid "Clear chat"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:526
|
#: src/window.ui:522
|
||||||
msgid "Show shortcuts window"
|
msgid "Show shortcuts window"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:533
|
#: src/window.ui:529
|
||||||
msgid "Editor"
|
msgid "Editor"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:537
|
#: src/window.ui:533
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:543
|
#: src/window.ui:539
|
||||||
msgid "Paste"
|
msgid "Paste"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/window.ui:549
|
#: src/window.ui:545
|
||||||
|
msgid "Insert new line"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:551
|
||||||
msgid "Send Message"
|
msgid "Send Message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
906
po/es.po~
Normal file
906
po/es.po~
Normal file
@@ -0,0 +1,906 @@
|
|||||||
|
# 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-26 00:53-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
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Chat with local AI models powered by Ollama"
|
||||||
|
msgstr "Chatea con multiples modelos de IA"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:10
|
||||||
|
msgid "An Ollama client"
|
||||||
|
msgstr "Un cliente de Ollama"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:11
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:300
|
||||||
|
msgid "Features"
|
||||||
|
msgstr "Funcionalidades"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:13
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Built in Ollama instance"
|
||||||
|
msgstr "Un cliente de Ollama"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:14
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:302
|
||||||
|
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:303
|
||||||
|
msgid "Pull and delete models from the app"
|
||||||
|
msgstr "Descarga y elimina modelos desde la app"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:16
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Have multiple conversations"
|
||||||
|
msgstr "Habla con multiples modelos en la misma conversación"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:17
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Image recognition (Only available with compatible models)"
|
||||||
|
msgstr "Añadido reconocimiento de imagenes (modelo llava)"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:18
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Import and export chats"
|
||||||
|
msgstr "Añadida la opcion de importar y exportar chats"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:20 src/window.ui:440
|
||||||
|
msgid "Disclaimer"
|
||||||
|
msgstr "Aviso Legal"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:21
|
||||||
|
msgid ""
|
||||||
|
"This project is not affiliated at all with Ollama, I'm not responsible for "
|
||||||
|
"any damages to your device or software caused by running code given by any "
|
||||||
|
"models."
|
||||||
|
msgstr ""
|
||||||
|
"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:24
|
||||||
|
msgid "Jeffry Samuel Eduarte Rojas"
|
||||||
|
msgstr "Jeffry Samuel Eduarte Rojas"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:50
|
||||||
|
#, fuzzy
|
||||||
|
msgid "A conversation showing code highlight"
|
||||||
|
msgstr "Una conversación incluyendo multiples modelos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:54
|
||||||
|
msgid "A conversation involving multiple models"
|
||||||
|
msgstr "Una conversación incluyendo multiples modelos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:58
|
||||||
|
msgid "Managing models"
|
||||||
|
msgstr "Gestionando modelos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:69
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:80
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Quick fix"
|
||||||
|
msgstr "Arreglo rápido"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:71
|
||||||
|
#, fuzzy
|
||||||
|
msgid "UI tweaks (Thanks Nokse22)"
|
||||||
|
msgstr "Mejor UI en general (Gracias Nokse22)"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:72
|
||||||
|
#, fuzzy
|
||||||
|
msgid "General optimizations"
|
||||||
|
msgstr "Optimización general"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:73
|
||||||
|
msgid "Metadata fixes"
|
||||||
|
msgstr "Correciones de metadata"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:82
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Updated Spanish translation"
|
||||||
|
msgstr "Actualización a la traducción a Español"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:83
|
||||||
|
msgid "Added compatibility for PNG"
|
||||||
|
msgstr "Añadida compatibilidad para PNG"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:90
|
||||||
|
#, fuzzy
|
||||||
|
msgid "New Update"
|
||||||
|
msgstr "Nueva Actualización"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:92
|
||||||
|
msgid "Updated model list"
|
||||||
|
msgstr "Lista de modelos actualizada"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:93
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Added image recognition to more models"
|
||||||
|
msgstr "Añadido reconocimiento de imagenes a más modelos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:94
|
||||||
|
msgid "Added Brazilian Portuguese translation (Thanks Daimaar Stein)"
|
||||||
|
msgstr "Añadida tradución a Portugues Brasileño (Gracias Daimaar Stein)"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:95
|
||||||
|
msgid "Refined the general UI (Thanks Nokse22)"
|
||||||
|
msgstr "Mejor UI en general (Gracias Nokse22)"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:96
|
||||||
|
msgid "Added 'delete message' feature"
|
||||||
|
msgstr "Añadida función 'eliminar mensaje'"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:97
|
||||||
|
msgid ""
|
||||||
|
"Added metadata so that software distributors know that the app is compatible "
|
||||||
|
"with mobile"
|
||||||
|
msgstr ""
|
||||||
|
"Añadida metadata para que distribuidores de software puedan saber que la "
|
||||||
|
"aplicación es compatible con celulares"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:98
|
||||||
|
msgid ""
|
||||||
|
"Changed 'send' shortcut to just the return/enter key (to add a new line use "
|
||||||
|
"shift+return)"
|
||||||
|
msgstr ""
|
||||||
|
"Cambiado el atajo para enviar mensaje a solo la tecla enter (para hacer "
|
||||||
|
"salto de linea usa shift+enter)"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:105
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Bug Fixes"
|
||||||
|
msgstr "Arreglo de errores"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:107
|
||||||
|
msgid "Fixed: Minor spelling mistake"
|
||||||
|
msgstr "Arregalada falta de ortografía"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:108
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Added 'mobile' as a supported form factor"
|
||||||
|
msgstr "Añadido soporte para multiples chats!"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:109
|
||||||
|
msgid "Fixed: 'Connection Error' dialog not working properly"
|
||||||
|
msgstr "Arreglado: Dialogo 'Error de conexión' no funcionando correctamente"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:110
|
||||||
|
msgid "Fixed: App might freeze randomly on startup"
|
||||||
|
msgstr "Arreglado: Aplicación se congela al azar cuando inicia"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:111
|
||||||
|
msgid "Changed 'chats' label on sidebar for 'Alpaca'"
|
||||||
|
msgstr "Cambiado label 'chats' en la barra del lado por 'Alpaca'"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:118
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Cool Update"
|
||||||
|
msgstr "Actualización Potente"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:120
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Better design for chat window"
|
||||||
|
msgstr "Mejor diseño para la ventana de chat"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:121
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Better design for chat sidebar"
|
||||||
|
msgstr "Mejor interfaz para la barra de lado de chat"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:122
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Fixed remote connections"
|
||||||
|
msgstr "Conexión remota arreglada"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:123
|
||||||
|
msgid "Fixed Ollama restarting in loop"
|
||||||
|
msgstr "Arreglado, Ollama reiniciandose en bucle"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:124
|
||||||
|
msgid "Other cool backend stuff"
|
||||||
|
msgstr "Otras cosas geniales en el backend"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:131
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Huge Update"
|
||||||
|
msgstr "Gran Actualización"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:133
|
||||||
|
msgid "Added Ollama as part of Alpaca, Ollama will run in a sandbox"
|
||||||
|
msgstr "Añadido Ollama como parte de Alpaca, Ollama se ejecutara en un sandbox"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:134
|
||||||
|
msgid "Added option to connect to remote instances (how it worked before)"
|
||||||
|
msgstr ""
|
||||||
|
"Añadida la opcion de conectarse a instancias remotas (como funcionaba) antes"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:135
|
||||||
|
msgid "Added option to import and export chats"
|
||||||
|
msgstr "Añadida la opcion de importar y exportar chats"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:136
|
||||||
|
msgid "Added option to run Alpaca with Ollama in the background"
|
||||||
|
msgstr "Añadida la opcion de ejecutar Alpaca y Ollama en el fondo"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:137
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Added preferences dialog"
|
||||||
|
msgstr "Añadido dialogo de preferencias"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:138
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Changed the welcome dialog"
|
||||||
|
msgstr "Nuevo dialogo de bienvenida"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:140
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:157
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:169
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:188
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:209
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:225
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:241
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:255
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:265
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:283
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:305
|
||||||
|
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:148
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Yet Another Daily Update"
|
||||||
|
msgstr "Otra Actulización Diaria"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:150
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Added better UI for 'Manage Models' dialog"
|
||||||
|
msgstr "Añadida mejor interfaz para el dialogo 'gestión de modelos'"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:151
|
||||||
|
msgid "Added better UI for the chat sidebar"
|
||||||
|
msgstr "Añadida mejor interfaz para la barra de lado de chat"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:152
|
||||||
|
msgid ""
|
||||||
|
"Replaced model description with a button to open Ollama's website for the "
|
||||||
|
"model"
|
||||||
|
msgstr ""
|
||||||
|
"Remplazada la descripción de modelo por un botón para abrir la página web de "
|
||||||
|
"Ollama para el modelo"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:153
|
||||||
|
msgid "Added myself to the credits as the spanish translator"
|
||||||
|
msgstr "Agregue mi nombre en los creditos como el traductor a Español"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:154
|
||||||
|
msgid "Using XDG properly to get config folder"
|
||||||
|
msgstr "Usando XDG apropiadamente para obtener el folder de configuración"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:155
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Update for translations"
|
||||||
|
msgstr "Actualización para traducciones"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:165
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Quick Fix"
|
||||||
|
msgstr "Arreglos rápidos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:167
|
||||||
|
msgid "The last update had some mistakes in the description of the update"
|
||||||
|
msgstr ""
|
||||||
|
"La última actualización tenía unos errores en la descripción de la "
|
||||||
|
"actualización"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:177
|
||||||
|
msgid "Another Daily Update"
|
||||||
|
msgstr "Otra Actulización Diaria"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:179
|
||||||
|
msgid "Added full Spanish translation"
|
||||||
|
msgstr "Añadida traducción completa a Español"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:180
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Added support for background pulling of multiple models"
|
||||||
|
msgstr "Añadido soporte para descargar multiples modelos en el fondo"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:181
|
||||||
|
msgid "Added interrupt button"
|
||||||
|
msgstr "Añadido botón de interrupción"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:182
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Added basic shortcuts"
|
||||||
|
msgstr "Añadidos atajos de teclado basicos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:183
|
||||||
|
msgid "Better translation support"
|
||||||
|
msgstr "Mejor soporte para traducciones"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:184
|
||||||
|
msgid ""
|
||||||
|
"User can now leave chat name empty when creating a new one, it will add a "
|
||||||
|
"placeholder name"
|
||||||
|
msgstr ""
|
||||||
|
"El usuario ahora puede dejar el nombre del chat vacio durante la creación, "
|
||||||
|
"la aplicación añadira un placeholder"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:185
|
||||||
|
msgid "Better scalling for different window sizes"
|
||||||
|
msgstr "Mejor escalado para distintos tamaños de ventana"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:186
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Fixed: Can't close app if first time setup fails"
|
||||||
|
msgstr "Arreglado: No se puede cerrar la aplicación en el primer setup"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:196
|
||||||
|
msgid "Really Big Update"
|
||||||
|
msgstr "Actualización Bastante Grande"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:198
|
||||||
|
msgid "Added multiple chats support!"
|
||||||
|
msgstr "Añadido soporte para multiples chats!"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:199
|
||||||
|
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:200
|
||||||
|
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:201
|
||||||
|
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:202
|
||||||
|
msgid "Added better model management dialog"
|
||||||
|
msgstr "Añadido mejor gestión de modelos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:203
|
||||||
|
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:204
|
||||||
|
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:205
|
||||||
|
msgid "Added new symbolic icon"
|
||||||
|
msgstr "Añadido nuevo icono simbolico"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:206
|
||||||
|
msgid "Added frame to message textview widget"
|
||||||
|
msgstr "Añadido borde al objeto textview del mensaje"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:207
|
||||||
|
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:217
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:274
|
||||||
|
msgid "Big Update"
|
||||||
|
msgstr "Gran Actualización"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:219
|
||||||
|
msgid "Added code highlighting"
|
||||||
|
msgstr "Añadido resaltado de código"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:220
|
||||||
|
msgid "Added image recognition (llava model)"
|
||||||
|
msgstr "Añadido reconocimiento de imagenes (modelo llava)"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:221
|
||||||
|
msgid "Added multiline prompt"
|
||||||
|
msgstr "Añadido caja de texto de multiples lineas"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:222
|
||||||
|
msgid "Fixed some small bugs"
|
||||||
|
msgstr "Arreglados unos pequeños errores"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:223
|
||||||
|
msgid "General optimization"
|
||||||
|
msgstr "Optimización general"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:233
|
||||||
|
msgid "Fixes and features"
|
||||||
|
msgstr "Arreglos y funcionalidades"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:235
|
||||||
|
msgid "Russian translation (thanks github/alexkdeveloper)"
|
||||||
|
msgstr "Traducción a Ruso (gracias github/alexkdeveloper)"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:236
|
||||||
|
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:237
|
||||||
|
msgid "Fixed: Brand colors for Flathub"
|
||||||
|
msgstr "Arreglado: Colores de marca para Flathub"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:238
|
||||||
|
msgid "Fixed: App description"
|
||||||
|
msgstr "Arreglado: Descripción de aplicación"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:239
|
||||||
|
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:249
|
||||||
|
msgid "0.2.2 Bug fixes"
|
||||||
|
msgstr "0.2.2 Arreglo de errores"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:251
|
||||||
|
msgid "Toast messages appearing behind dialogs"
|
||||||
|
msgstr "Mensajes toast apareciendo detrás de dialogos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:252
|
||||||
|
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:253
|
||||||
|
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:263
|
||||||
|
msgid "0.2.1 Data saving fix"
|
||||||
|
msgstr "0.2.1 Arreglo en el guardado de datos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:264
|
||||||
|
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:273
|
||||||
|
msgid "0.2.0"
|
||||||
|
msgstr "0.2.0"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:275
|
||||||
|
msgid "New Features"
|
||||||
|
msgstr "Nuevas funcionalidades"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:277
|
||||||
|
msgid "Restore chat after closing the app"
|
||||||
|
msgstr "Restaurar chat despues de cerrar la aplicación"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:278
|
||||||
|
msgid "A button to clear the chat"
|
||||||
|
msgstr "Un botón para limpiar el chat"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:279
|
||||||
|
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:280
|
||||||
|
msgid "Added welcome dialog"
|
||||||
|
msgstr "Añadido dialogo de bienvenida"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:281
|
||||||
|
msgid "More stability"
|
||||||
|
msgstr "Más estabilidad"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:291
|
||||||
|
msgid "0.1.2 Quick fixes"
|
||||||
|
msgstr "0.1.2 Arreglos rápidos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:292
|
||||||
|
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:298
|
||||||
|
msgid "0.1.1 Stable Release"
|
||||||
|
msgstr "0.1.1"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:299
|
||||||
|
msgid "This is the first public version of Alpaca"
|
||||||
|
msgstr "Esta es la primera versión publica de Alpaca"
|
||||||
|
|
||||||
|
#: src/window.py:54 src/window.py:624 src/window.py:626
|
||||||
|
msgid "New Chat"
|
||||||
|
msgstr "Nuevo Chat"
|
||||||
|
|
||||||
|
#: src/window.py:97
|
||||||
|
msgid "An error occurred"
|
||||||
|
msgstr "Ocurrio un error"
|
||||||
|
|
||||||
|
#: src/window.py:98
|
||||||
|
msgid "Failed to connect to server"
|
||||||
|
msgstr "No se pudo conectar al servidor"
|
||||||
|
|
||||||
|
#: src/window.py:99
|
||||||
|
msgid "Could not list local models"
|
||||||
|
msgstr "No se pudieron listar los modelos locales"
|
||||||
|
|
||||||
|
#: src/window.py:100
|
||||||
|
msgid "Could not delete model"
|
||||||
|
msgstr "No se pudo eliminar el modelo"
|
||||||
|
|
||||||
|
#: src/window.py:101
|
||||||
|
msgid "Could not pull model"
|
||||||
|
msgstr "No se pudo descargar el modelo"
|
||||||
|
|
||||||
|
#: src/window.py:102
|
||||||
|
msgid "Cannot open image"
|
||||||
|
msgstr "No se pudo abrir la imagen"
|
||||||
|
|
||||||
|
#: src/window.py:103
|
||||||
|
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:104
|
||||||
|
msgid "There was an error with the local Ollama instance, so it has been reset"
|
||||||
|
msgstr ""
|
||||||
|
"Ha ocurrido un error con la instancia local de Ollama, ha sido reinicida"
|
||||||
|
|
||||||
|
#: src/window.py:107
|
||||||
|
msgid "Please select a model before chatting"
|
||||||
|
msgstr "Por favor selecciona un modelo antes de enviar un mensaje"
|
||||||
|
|
||||||
|
#: src/window.py:108
|
||||||
|
msgid "Chat cannot be cleared while receiving a message"
|
||||||
|
msgstr "El chat no puede ser limpiado mientras se recibe un mensaje"
|
||||||
|
|
||||||
|
#: src/window.py:109
|
||||||
|
#, fuzzy
|
||||||
|
msgid "That tag is already being pulled"
|
||||||
|
msgstr "Esa etiqueta ya se está descargando"
|
||||||
|
|
||||||
|
#: src/window.py:110
|
||||||
|
#, fuzzy
|
||||||
|
msgid "That tag has been pulled already"
|
||||||
|
msgstr "Esa etiqueta ya ha sido descargada"
|
||||||
|
|
||||||
|
#: src/window.py:111
|
||||||
|
msgid "Code copied to the clipboard"
|
||||||
|
msgstr "Codigo copiado"
|
||||||
|
|
||||||
|
#: src/window.py:114
|
||||||
|
msgid "Model deleted successfully"
|
||||||
|
msgstr "Modelo eliminado exitosamente"
|
||||||
|
|
||||||
|
#: src/window.py:115
|
||||||
|
msgid "Model pulled successfully"
|
||||||
|
msgstr "Modelo descargado exitosamente"
|
||||||
|
|
||||||
|
#: src/window.py:116
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Chat exported successfully"
|
||||||
|
msgstr "Chat exportado exitosamente"
|
||||||
|
|
||||||
|
#: src/window.py:117
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Chat imported successfully"
|
||||||
|
msgstr "Chat importado exitosamente"
|
||||||
|
|
||||||
|
#: src/window.py:129
|
||||||
|
msgid "Upload image"
|
||||||
|
msgstr "Subir imagen"
|
||||||
|
|
||||||
|
#: src/window.py:133 src/window.ui:231
|
||||||
|
msgid "Only available on selected models"
|
||||||
|
msgstr "Solo disponible en modelos especificos"
|
||||||
|
|
||||||
|
#: src/window.py:542
|
||||||
|
msgid "Task Complete"
|
||||||
|
msgstr "Tarea completada"
|
||||||
|
|
||||||
|
#: src/window.py:542
|
||||||
|
msgid "Model '{}' pulled successfully."
|
||||||
|
msgstr "El modelo '{}' fue descargado exitosamente"
|
||||||
|
|
||||||
|
#: src/window.py:547
|
||||||
|
msgid "Pull Model Error"
|
||||||
|
msgstr "Error Descargando Modelo"
|
||||||
|
|
||||||
|
#: src/window.py:547
|
||||||
|
msgid "Failed to pull model '{}' due to network error."
|
||||||
|
msgstr "No se pudo descargar el modelo '{}' debido a un error de red"
|
||||||
|
|
||||||
|
#: src/window.ui:38
|
||||||
|
msgid "New chat"
|
||||||
|
msgstr "Nuevo chat"
|
||||||
|
|
||||||
|
#: src/window.ui:47
|
||||||
|
msgid "Import chat"
|
||||||
|
msgstr "Importar chat"
|
||||||
|
|
||||||
|
#: src/window.ui:56
|
||||||
|
msgid "Export chat"
|
||||||
|
msgstr "Exportar chat"
|
||||||
|
|
||||||
|
#: src/window.ui:89
|
||||||
|
msgid "Toggle Sidebar"
|
||||||
|
msgstr "Alternar barra de lado"
|
||||||
|
|
||||||
|
#: src/window.ui:112 src/window.ui:308
|
||||||
|
msgid "Manage models"
|
||||||
|
msgstr "Gestionar modelos"
|
||||||
|
|
||||||
|
#: src/window.ui:126
|
||||||
|
msgid "Menu"
|
||||||
|
msgstr "Menu"
|
||||||
|
|
||||||
|
#: src/window.ui:221
|
||||||
|
msgid "Send"
|
||||||
|
msgstr "Enviar"
|
||||||
|
|
||||||
|
#: src/window.ui:234
|
||||||
|
msgid "Image"
|
||||||
|
msgstr "Imagen"
|
||||||
|
|
||||||
|
#: src/window.ui:258 src/window.ui:458 src/window.ui:516
|
||||||
|
msgid "Preferences"
|
||||||
|
msgstr "Preferencias"
|
||||||
|
|
||||||
|
#: src/window.ui:261 src/window.ui:500
|
||||||
|
msgid "General"
|
||||||
|
msgstr "General"
|
||||||
|
|
||||||
|
#: src/window.ui:265
|
||||||
|
msgid "Remote Connection"
|
||||||
|
msgstr "Conexión Remota"
|
||||||
|
|
||||||
|
#: src/window.ui:266
|
||||||
|
msgid "Manage a remote connection to Ollama"
|
||||||
|
msgstr "Gestiona una conección remota a Ollama"
|
||||||
|
|
||||||
|
#: src/window.ui:269
|
||||||
|
msgid "Use remote connection"
|
||||||
|
msgstr "Usar conexión remota"
|
||||||
|
|
||||||
|
#: src/window.ui:275
|
||||||
|
msgid "URL of remote instance"
|
||||||
|
msgstr "URL de la instancia remota"
|
||||||
|
|
||||||
|
#: src/window.ui:283
|
||||||
|
msgid "Behavior"
|
||||||
|
msgstr "Comportamiento"
|
||||||
|
|
||||||
|
#: src/window.ui:284
|
||||||
|
msgid "Manage Alpaca's Behavior"
|
||||||
|
msgstr "Gestiona el comportamiento de Alpaca"
|
||||||
|
|
||||||
|
#: src/window.ui:287
|
||||||
|
msgid "Run in background"
|
||||||
|
msgstr "Ejecutar en el fondo"
|
||||||
|
|
||||||
|
#: src/window.ui:377
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Anterior"
|
||||||
|
|
||||||
|
#: src/window.ui:393
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Siguiente"
|
||||||
|
|
||||||
|
#: src/window.ui:420
|
||||||
|
msgid "Welcome to Alpaca"
|
||||||
|
msgstr "Bienvenido a Alpaca"
|
||||||
|
|
||||||
|
#: src/window.ui:421
|
||||||
|
msgid "Powered by Ollama"
|
||||||
|
msgstr "Impulsado por Ollama"
|
||||||
|
|
||||||
|
#: src/window.ui:424
|
||||||
|
msgid "Ollama Website"
|
||||||
|
msgstr "Sitio Web de Ollama"
|
||||||
|
|
||||||
|
#: src/window.ui:441
|
||||||
|
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:454
|
||||||
|
msgid "Clear Chat"
|
||||||
|
msgstr "Limpiar Chat"
|
||||||
|
|
||||||
|
#: src/window.ui:462
|
||||||
|
msgid "Keyboard Shortcuts"
|
||||||
|
msgstr "Atajos de Teclado"
|
||||||
|
|
||||||
|
#: src/window.ui:466
|
||||||
|
msgid "About Alpaca"
|
||||||
|
msgstr "Sobre Alpaca"
|
||||||
|
|
||||||
|
#: src/window.ui:474
|
||||||
|
msgid "Remove"
|
||||||
|
msgstr "Remover"
|
||||||
|
|
||||||
|
#: src/window.ui:504
|
||||||
|
msgid "Close application"
|
||||||
|
msgstr "Cerrar aplicación"
|
||||||
|
|
||||||
|
#: src/window.ui:510
|
||||||
|
msgid "Clear chat"
|
||||||
|
msgstr "Limpiar chat"
|
||||||
|
|
||||||
|
#: src/window.ui:522
|
||||||
|
msgid "Show shortcuts window"
|
||||||
|
msgstr "Mostrar ventana de atajos"
|
||||||
|
|
||||||
|
#: src/window.ui:529
|
||||||
|
msgid "Editor"
|
||||||
|
msgstr "Editor"
|
||||||
|
|
||||||
|
#: src/window.ui:533
|
||||||
|
msgid "Copy"
|
||||||
|
msgstr "Copiar"
|
||||||
|
|
||||||
|
#: src/window.ui:539
|
||||||
|
msgid "Paste"
|
||||||
|
msgstr "Pegar"
|
||||||
|
|
||||||
|
#: src/window.ui:545
|
||||||
|
msgid "Insert new line"
|
||||||
|
msgstr "Saltar línea"
|
||||||
|
|
||||||
|
#: src/window.ui:551
|
||||||
|
msgid "Send Message"
|
||||||
|
msgstr "Enviar Mensaje"
|
||||||
|
|
||||||
|
#~ msgid "Stop Model"
|
||||||
|
#~ msgstr "Parar Modelo"
|
||||||
|
|
||||||
|
#~ msgid "Are you sure you want to stop pulling '{}'?"
|
||||||
|
#~ msgstr "¿Estás seguro de que quieres parar la descarga de '{}'?"
|
||||||
|
|
||||||
|
#~ msgid "Cancel"
|
||||||
|
#~ msgstr "Cancelar"
|
||||||
|
|
||||||
|
#~ msgid "Stop"
|
||||||
|
#~ msgstr "Parar"
|
||||||
|
|
||||||
|
#~ msgid "Delete Model"
|
||||||
|
#~ msgstr "Eliminar Modelo"
|
||||||
|
|
||||||
|
#~ msgid "Are you sure you want to delete '{}'?"
|
||||||
|
#~ msgstr "¿Estás seguro de que quieres eliminar '{}'?"
|
||||||
|
|
||||||
|
#~ msgid "Delete"
|
||||||
|
#~ msgstr "Eliminar"
|
||||||
|
|
||||||
|
#~ msgid "Pull Model"
|
||||||
|
#~ msgstr "Descargar Modelo"
|
||||||
|
|
||||||
|
#~ msgid "Please select a tag to pull '{}'"
|
||||||
|
#~ msgstr "Por favor selecciona una etiqueta para descargar '{}'"
|
||||||
|
|
||||||
|
#~ msgid "Pull"
|
||||||
|
#~ msgstr "Descargar"
|
||||||
|
|
||||||
|
#~ msgid "Are you sure you want to clear the chat?"
|
||||||
|
#~ msgstr "¿Estás seguro de que quieres limpiar el chat?"
|
||||||
|
|
||||||
|
#~ msgid "Clear"
|
||||||
|
#~ msgstr "Limpiar"
|
||||||
|
|
||||||
|
#~ msgid "Remove Image"
|
||||||
|
#~ msgstr "Remover Imagen"
|
||||||
|
|
||||||
|
#~ msgid "Are you sure you want to remove image?"
|
||||||
|
#~ msgstr "¿Estás seguro de que quieres eliminar la imagen?"
|
||||||
|
|
||||||
|
#~ msgid "Delete Chat"
|
||||||
|
#~ msgstr "Eliminar Chat"
|
||||||
|
|
||||||
|
#~ msgid "Rename Chat"
|
||||||
|
#~ msgstr "Renombrar Chat"
|
||||||
|
|
||||||
|
#~ msgid "Rename"
|
||||||
|
#~ msgstr "Renombrar"
|
||||||
|
|
||||||
|
#~ msgid "The name '{}' is already in use"
|
||||||
|
#~ msgstr "El nombre '{}' ya está en uso"
|
||||||
|
|
||||||
|
#~ msgid "Create Chat"
|
||||||
|
#~ msgstr "Crear Chat"
|
||||||
|
|
||||||
|
#~ msgid "Create"
|
||||||
|
#~ msgstr "Crear"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
#~ msgid "Connection Error"
|
||||||
|
#~ msgstr "Conexión Remota"
|
||||||
|
|
||||||
|
#~ msgid "The remote instance has disconnected"
|
||||||
|
#~ msgstr "La instancia remota se ha desconectado"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
#~ msgid "Close Alpaca"
|
||||||
|
#~ msgstr "Bienvenido a Alpaca"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
#~ msgid "Use local instance"
|
||||||
|
#~ msgstr "URL de la instancia remota"
|
||||||
|
|
||||||
|
#~ msgid "Connect"
|
||||||
|
#~ msgstr "Conectar"
|
||||||
|
|
||||||
|
#~ msgid "Welcome dialog"
|
||||||
|
#~ msgstr "Dialogo de Bienvenida"
|
||||||
|
|
||||||
|
#~ msgid "Chats"
|
||||||
|
#~ msgstr "Chats"
|
||||||
|
|
||||||
|
#~ msgid "Requires model 'llava' to be selected"
|
||||||
|
#~ msgstr "Requiere que el modelo 'llava' sea seleccionado"
|
||||||
|
|
||||||
|
#~ msgid "Save Changes"
|
||||||
|
#~ msgstr "Guardar Cambios"
|
||||||
|
|
||||||
|
#~ msgid "Do you want to save the URL change?"
|
||||||
|
#~ msgstr "¿Deseas guardar el cambio de URL?"
|
||||||
|
|
||||||
|
#~ msgid "Discard"
|
||||||
|
#~ msgstr "Descartar"
|
||||||
|
|
||||||
|
#~ msgid "Save"
|
||||||
|
#~ msgstr "Guardar"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "To get started, please ensure you have an Ollama instance set up. You can "
|
||||||
|
#~ "either run Ollama locally on your machine or connect to a remote instance."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Para iniciar, por favor asegurate de tener una instancia de Ollama "
|
||||||
|
#~ "funcional. Puedes correr Ollama localmente o conectarte a una instancia "
|
||||||
|
#~ "remota."
|
||||||
|
|
||||||
|
#~ msgid "Setup"
|
||||||
|
#~ msgstr "Setup"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "If you are running an Ollama instance locally and haven't modified the "
|
||||||
|
#~ "default ports, you can use the default URL. Otherwise, please enter the "
|
||||||
|
#~ "URL of your Ollama instance."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Si estás corriendo una instancia local de Ollama y no modificaste los "
|
||||||
|
#~ "puertos por defecto, puedes usar la URL por defecto. De otra forma, por "
|
||||||
|
#~ "favor ingresa la URL de tu instancia de Ollama"
|
||||||
|
|
||||||
|
#~ msgid "Change Server"
|
||||||
|
#~ msgstr "Cambiar Servidor"
|
||||||
|
|
||||||
|
#~ msgid "Change server"
|
||||||
|
#~ msgstr "Cambiar servidor"
|
||||||
692
po/pt_BR.po
692
po/pt_BR.po
File diff suppressed because it is too large
Load Diff
900
po/pt_BR.po~
Normal file
900
po/pt_BR.po~
Normal file
@@ -0,0 +1,900 @@
|
|||||||
|
# Brazilian Portuguese translations for Alpaca.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2024-05-26 00:53-0600\n"
|
||||||
|
"PO-Revision-Date: 2024-05-23 23:29-0600\n"
|
||||||
|
"Last-Translator: Daimar Stein <daimarstein@pm.me>\n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"Language: pt_BR\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.desktop.in:3
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:7
|
||||||
|
msgid "Alpaca"
|
||||||
|
msgstr "Alpaca"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:8
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Chat with local AI models powered by Ollama"
|
||||||
|
msgstr "Converse com modelos de IA locais"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:10
|
||||||
|
msgid "An Ollama client"
|
||||||
|
msgstr "Um cliente Ollama"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:11
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:300
|
||||||
|
msgid "Features"
|
||||||
|
msgstr "Funcionalidades"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:13
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Built in Ollama instance"
|
||||||
|
msgstr "Um cliente Ollama"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:14
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:302
|
||||||
|
msgid "Talk to multiple models in the same conversation"
|
||||||
|
msgstr "Fale com múltiplos modelos na mesma conversa"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:15
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:303
|
||||||
|
msgid "Pull and delete models from the app"
|
||||||
|
msgstr "Baixe e delete modelos através do app"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:16
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Have multiple conversations"
|
||||||
|
msgstr "Tenha múltiplas conversas"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:17
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Image recognition (Only available with compatible models)"
|
||||||
|
msgstr "Reconhecimento de imagem (Disponível apenas com o modelo LLaVA)"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:18
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Import and export chats"
|
||||||
|
msgstr "Importe e exporte conversas"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:20 src/window.ui:440
|
||||||
|
msgid "Disclaimer"
|
||||||
|
msgstr "Aviso Legal"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:21
|
||||||
|
msgid ""
|
||||||
|
"This project is not affiliated at all with Ollama, I'm not responsible for "
|
||||||
|
"any damages to your device or software caused by running code given by any "
|
||||||
|
"models."
|
||||||
|
msgstr ""
|
||||||
|
"Esse projeto não é afiliado de nenhuma forma com Ollama. Não sou responsável "
|
||||||
|
"por quaisquer danos ao seu dispositivo ou software causados por código "
|
||||||
|
"gerado por qualquer um dos modelos disponíveis."
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:24
|
||||||
|
msgid "Jeffry Samuel Eduarte Rojas"
|
||||||
|
msgstr "Jeffry Samuel Eduarte Rojas"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:50
|
||||||
|
#, fuzzy
|
||||||
|
msgid "A conversation showing code highlight"
|
||||||
|
msgstr "Uma conversa exibindo highlighting de código"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:54
|
||||||
|
msgid "A conversation involving multiple models"
|
||||||
|
msgstr "Uma conversa envolvendo múltiplos modelos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:58
|
||||||
|
msgid "Managing models"
|
||||||
|
msgstr "Gerenciando modelos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:69
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:80
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Quick fix"
|
||||||
|
msgstr "Consertos Rápidos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:71
|
||||||
|
#, fuzzy
|
||||||
|
msgid "UI tweaks (Thanks Nokse22)"
|
||||||
|
msgstr "A interface de usuário foi refinada (obrigado, Nokse22)"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:72
|
||||||
|
#, fuzzy
|
||||||
|
msgid "General optimizations"
|
||||||
|
msgstr "Otimização geral"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:73
|
||||||
|
msgid "Metadata fixes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:82
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Updated Spanish translation"
|
||||||
|
msgstr "Tradução para o Espanhol atualizada"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:83
|
||||||
|
msgid "Added compatibility for PNG"
|
||||||
|
msgstr "Compatibilidade com PNG adicionada"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:90
|
||||||
|
#, fuzzy
|
||||||
|
msgid "New Update"
|
||||||
|
msgstr "Nova Atualização"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:92
|
||||||
|
msgid "Updated model list"
|
||||||
|
msgstr "Lista de modelos atualizada"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:93
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Added image recognition to more models"
|
||||||
|
msgstr "Reconhecimento de imagem foi adicionado para mais modelos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:94
|
||||||
|
msgid "Added Brazilian Portuguese translation (Thanks Daimaar Stein)"
|
||||||
|
msgstr ""
|
||||||
|
"Tradução para Português do Brasil foi adicionada (obrigado, Daimar Stein)"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:95
|
||||||
|
msgid "Refined the general UI (Thanks Nokse22)"
|
||||||
|
msgstr "A interface de usuário foi refinada (obrigado, Nokse22)"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:96
|
||||||
|
msgid "Added 'delete message' feature"
|
||||||
|
msgstr "A funcionalidade de 'deletar mensagem' foi adicionada"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:97
|
||||||
|
msgid ""
|
||||||
|
"Added metadata so that software distributors know that the app is compatible "
|
||||||
|
"with mobile"
|
||||||
|
msgstr ""
|
||||||
|
"Metadados foram adicionados para que distribuidores saibam que o app é "
|
||||||
|
"compatível com dispositivos móveis"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:98
|
||||||
|
msgid ""
|
||||||
|
"Changed 'send' shortcut to just the return/enter key (to add a new line use "
|
||||||
|
"shift+return)"
|
||||||
|
msgstr ""
|
||||||
|
"O atalho de 'enviar mensagem' foi modificado para 'Enter/Return'(para "
|
||||||
|
"adicionar uma nova linha use 'shift+enter/return)"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:105
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Bug Fixes"
|
||||||
|
msgstr "Conserto de Bugs"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:107
|
||||||
|
msgid "Fixed: Minor spelling mistake"
|
||||||
|
msgstr "Consertado: Pequenos erros de escrita"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:108
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Added 'mobile' as a supported form factor"
|
||||||
|
msgstr "Suporte ao formato de dispositivos móveis foi adicionado"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:109
|
||||||
|
msgid "Fixed: 'Connection Error' dialog not working properly"
|
||||||
|
msgstr "Consertado: Diálogo de 'Erro de Conexão' não funcionando corretamente"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:110
|
||||||
|
msgid "Fixed: App might freeze randomly on startup"
|
||||||
|
msgstr "Consertado: O app travava de forma aleatória ao iniciar"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:111
|
||||||
|
msgid "Changed 'chats' label on sidebar for 'Alpaca'"
|
||||||
|
msgstr "O nome 'chats' na barra lateral foi alterado para 'Alpaca'"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:118
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Cool Update"
|
||||||
|
msgstr "Atualização Legal"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:120
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Better design for chat window"
|
||||||
|
msgstr "Design da janela da conversa foi melhorado"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:121
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Better design for chat sidebar"
|
||||||
|
msgstr "A interface da barra lateral das conversas foi melhorada"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:122
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Fixed remote connections"
|
||||||
|
msgstr "Conexões remotas foram consertadas"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:123
|
||||||
|
msgid "Fixed Ollama restarting in loop"
|
||||||
|
msgstr "Erro que fazia o Ollama reiniciar em loop foi consertado"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:124
|
||||||
|
msgid "Other cool backend stuff"
|
||||||
|
msgstr "Outras coisas legais de backend"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:131
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Huge Update"
|
||||||
|
msgstr "Atualização Enorme"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:133
|
||||||
|
msgid "Added Ollama as part of Alpaca, Ollama will run in a sandbox"
|
||||||
|
msgstr "Ollama foi adicionado como parte do Alpaca, executado em sandbox"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:134
|
||||||
|
msgid "Added option to connect to remote instances (how it worked before)"
|
||||||
|
msgstr ""
|
||||||
|
"A opção de conectar com uma instância remota (como funcionava antes) foi "
|
||||||
|
"adicionada"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:135
|
||||||
|
msgid "Added option to import and export chats"
|
||||||
|
msgstr "A opção de importar e exportar conversas foi adicionada"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:136
|
||||||
|
msgid "Added option to run Alpaca with Ollama in the background"
|
||||||
|
msgstr "A opção de continuar sendo executado em segundo plano foi adicionada"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:137
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Added preferences dialog"
|
||||||
|
msgstr "Diálogo de preferências foi adicionado"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:138
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Changed the welcome dialog"
|
||||||
|
msgstr "O diálogo de boas-vindas foi modificado"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:140
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:157
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:169
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:188
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:209
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:225
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:241
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:255
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:265
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:283
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:305
|
||||||
|
msgid "Please report any errors to the issues page, thank you."
|
||||||
|
msgstr "Por favor, reportar quaisquer erros na página de issues, obrigado."
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:148
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Yet Another Daily Update"
|
||||||
|
msgstr "Mais Uma Atualização Diária"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:150
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Added better UI for 'Manage Models' dialog"
|
||||||
|
msgstr "Uma melhor interface para 'Gerenciar Modelos' foi adicionada"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:151
|
||||||
|
msgid "Added better UI for the chat sidebar"
|
||||||
|
msgstr "Uma interface melhor para a barra lateral das conversas foi adicionada"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:152
|
||||||
|
msgid ""
|
||||||
|
"Replaced model description with a button to open Ollama's website for the "
|
||||||
|
"model"
|
||||||
|
msgstr ""
|
||||||
|
"A descrição dos modelos foi substituída com um botão para abrir o site do "
|
||||||
|
"Ollama para cada modelo"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:153
|
||||||
|
msgid "Added myself to the credits as the spanish translator"
|
||||||
|
msgstr "Me adicionei aos créditos como o tradutor para espanhol"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:154
|
||||||
|
msgid "Using XDG properly to get config folder"
|
||||||
|
msgstr "Agora a spec XDG é usada propriamente para ter uma pasta de config"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:155
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Update for translations"
|
||||||
|
msgstr "Melhor suporte a traduções"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:165
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Quick Fix"
|
||||||
|
msgstr "Consertos Rápidos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:167
|
||||||
|
msgid "The last update had some mistakes in the description of the update"
|
||||||
|
msgstr "A última atualização teve alguns erros na descrição da mesma"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:177
|
||||||
|
msgid "Another Daily Update"
|
||||||
|
msgstr "Outra Atualização Diária"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:179
|
||||||
|
msgid "Added full Spanish translation"
|
||||||
|
msgstr "Tradução completa para o Espanhol foi adicionada"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:180
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Added support for background pulling of multiple models"
|
||||||
|
msgstr ""
|
||||||
|
"Suporte para o download de múltiplos modelos em segundo planofoi adicionado"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:181
|
||||||
|
msgid "Added interrupt button"
|
||||||
|
msgstr "Um botão de interromper foi adicionado"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:182
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Added basic shortcuts"
|
||||||
|
msgstr "Atalhos de teclado básicos foram adicionados"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:183
|
||||||
|
msgid "Better translation support"
|
||||||
|
msgstr "Melhor suporte a traduções"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:184
|
||||||
|
msgid ""
|
||||||
|
"User can now leave chat name empty when creating a new one, it will add a "
|
||||||
|
"placeholder name"
|
||||||
|
msgstr ""
|
||||||
|
"O usuário agora pode deixar o nome da conversa vazio ao criar uma nova, um "
|
||||||
|
"nome substituto será gerado em seu lugar"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:185
|
||||||
|
msgid "Better scalling for different window sizes"
|
||||||
|
msgstr "Melhor escala para diferentes tamanhos de janela"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:186
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Fixed: Can't close app if first time setup fails"
|
||||||
|
msgstr ""
|
||||||
|
"Consertado: Não era possível fechar o app caso a configuração inicial "
|
||||||
|
"falhasse"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:196
|
||||||
|
msgid "Really Big Update"
|
||||||
|
msgstr "Uma Atualização Realmente Grande"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:198
|
||||||
|
msgid "Added multiple chats support!"
|
||||||
|
msgstr "Suporte para múltiplas conversas foi adicionado!"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:199
|
||||||
|
msgid "Added Pango Markup support (bold, list, title, subtitle, monospace)"
|
||||||
|
msgstr ""
|
||||||
|
"Suporte para Pango Markup (negrito, lista, título, subtítulo, monospace) foi "
|
||||||
|
"adicionado"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:200
|
||||||
|
msgid "Added autoscroll if the user is at the bottom of the chat"
|
||||||
|
msgstr ""
|
||||||
|
"Rolagem automática caso o usuário esteja na mensagem mais recente da "
|
||||||
|
"conversa foi adicionado"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:201
|
||||||
|
msgid "Added support for multiple tags on a single model"
|
||||||
|
msgstr "Suporte para múltiplas tags em um único modelo foi adicionado"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:202
|
||||||
|
msgid "Added better model management dialog"
|
||||||
|
msgstr "Um melhor diálogo de gerenciamento de modelos foi adicionado"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:203
|
||||||
|
msgid "Added loading spinner when sending message"
|
||||||
|
msgstr "Um spinner de carregamento ao mandar mensagens foi adicionado"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:204
|
||||||
|
msgid "Added notifications if app is not active and a model pull finishes"
|
||||||
|
msgstr ""
|
||||||
|
"Notificações caso o app não esteja ativo e o download de um modelo for "
|
||||||
|
"finalizado foram adicionadas"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:205
|
||||||
|
msgid "Added new symbolic icon"
|
||||||
|
msgstr "Um novo ícone simbólico foi adicionado"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:206
|
||||||
|
msgid "Added frame to message textview widget"
|
||||||
|
msgstr "Quadro ao redor do textview do widget de mensagem foi adicionado"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:207
|
||||||
|
msgid "Fixed \"code blocks shouldn't be editable\""
|
||||||
|
msgstr "Consertado \"blocos de código não deveriam ser editáveis\""
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:217
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:274
|
||||||
|
msgid "Big Update"
|
||||||
|
msgstr "Grande Atualização"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:219
|
||||||
|
msgid "Added code highlighting"
|
||||||
|
msgstr "Highlighting de código foi adicionado"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:220
|
||||||
|
msgid "Added image recognition (llava model)"
|
||||||
|
msgstr "Reconhecimento de imagem foi adicionado (modelo llava)"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:221
|
||||||
|
msgid "Added multiline prompt"
|
||||||
|
msgstr "Prompt de múltiplas linhas foi adicionado"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:222
|
||||||
|
msgid "Fixed some small bugs"
|
||||||
|
msgstr "Pequenos erros foram consertados"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:223
|
||||||
|
msgid "General optimization"
|
||||||
|
msgstr "Otimização geral"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:233
|
||||||
|
msgid "Fixes and features"
|
||||||
|
msgstr "Consertos e funcionalidades"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:235
|
||||||
|
msgid "Russian translation (thanks github/alexkdeveloper)"
|
||||||
|
msgstr "Tradução para Russo (obrigado, github/alexkdeveloper)"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:236
|
||||||
|
msgid "Fixed: Cannot close app on first setup"
|
||||||
|
msgstr "Consertado: Não era possível fechar o app no setup inicial"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:237
|
||||||
|
msgid "Fixed: Brand colors for Flathub"
|
||||||
|
msgstr "Consertado: Cores de branding para o Flathub"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:238
|
||||||
|
msgid "Fixed: App description"
|
||||||
|
msgstr "Consertada: Descrição do app"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:239
|
||||||
|
msgid "Fixed: Only show 'save changes dialog' when you actually change the url"
|
||||||
|
msgstr ""
|
||||||
|
"Consertado: Somente exibir 'diálogo de salvamento de mudanças' quando "
|
||||||
|
"vocêrealmente mudar o URL"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:249
|
||||||
|
msgid "0.2.2 Bug fixes"
|
||||||
|
msgstr "0.2.2 Conserto de Bugs"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:251
|
||||||
|
msgid "Toast messages appearing behind dialogs"
|
||||||
|
msgstr "Mensagens toast aparecendo atrás de diálogos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:252
|
||||||
|
msgid "Local model list not updating when changing servers"
|
||||||
|
msgstr "Lista de modelos locais não é atualizada ao mudar de servidor"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:253
|
||||||
|
msgid "Closing the setup dialog closes the whole app"
|
||||||
|
msgstr "Fechar o diálogo de primeira configuração fecha o app"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:263
|
||||||
|
msgid "0.2.1 Data saving fix"
|
||||||
|
msgstr "0.2.1 Conserto de Salvamento de Dados"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:264
|
||||||
|
msgid ""
|
||||||
|
"The app didn't save the config files and chat history to the right "
|
||||||
|
"directory, this is now fixed"
|
||||||
|
msgstr ""
|
||||||
|
"O app não salvava os arquivos de config. e o histórico de conversa para a "
|
||||||
|
"pasta correta, isso foi corrigido."
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:273
|
||||||
|
msgid "0.2.0"
|
||||||
|
msgstr "0.2.0"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:275
|
||||||
|
msgid "New Features"
|
||||||
|
msgstr "Novas Funcionalidades"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:277
|
||||||
|
msgid "Restore chat after closing the app"
|
||||||
|
msgstr "Restaura a conversa após fechar o app"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:278
|
||||||
|
msgid "A button to clear the chat"
|
||||||
|
msgstr "Um botão para limpar a conversa"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:279
|
||||||
|
msgid "Fixed multiple bugs involving how messages are shown"
|
||||||
|
msgstr ""
|
||||||
|
"Múltiplos bugs envolvendo como mensagens são exibidas foram consertados"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:280
|
||||||
|
msgid "Added welcome dialog"
|
||||||
|
msgstr "Um diálogo de boas-vindas foi adicionado"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:281
|
||||||
|
msgid "More stability"
|
||||||
|
msgstr "Maior estabilidade"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:291
|
||||||
|
msgid "0.1.2 Quick fixes"
|
||||||
|
msgstr "0.1.2 Consertos Rápidos"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:292
|
||||||
|
msgid ""
|
||||||
|
"This release fixes some metadata needed to have a proper Flatpak application"
|
||||||
|
msgstr ""
|
||||||
|
"Este lançamento conserta parte dos metadados necessários para ter um app em "
|
||||||
|
"Flatpak corretamente"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:298
|
||||||
|
msgid "0.1.1 Stable Release"
|
||||||
|
msgstr "0.1.1 Lançamento Estável"
|
||||||
|
|
||||||
|
#: data/com.jeffser.Alpaca.metainfo.xml.in:299
|
||||||
|
msgid "This is the first public version of Alpaca"
|
||||||
|
msgstr "Essa é a primeira versão pública de Alpaca"
|
||||||
|
|
||||||
|
#: src/window.py:54 src/window.py:624 src/window.py:626
|
||||||
|
msgid "New Chat"
|
||||||
|
msgstr "Nova Conversa"
|
||||||
|
|
||||||
|
#: src/window.py:97
|
||||||
|
msgid "An error occurred"
|
||||||
|
msgstr "Ocorreu um erro"
|
||||||
|
|
||||||
|
#: src/window.py:98
|
||||||
|
msgid "Failed to connect to server"
|
||||||
|
msgstr "Falha ao conectar com o servidor"
|
||||||
|
|
||||||
|
#: src/window.py:99
|
||||||
|
msgid "Could not list local models"
|
||||||
|
msgstr "Não foi possível listar modelos locais"
|
||||||
|
|
||||||
|
#: src/window.py:100
|
||||||
|
msgid "Could not delete model"
|
||||||
|
msgstr "Não foi possível excluir o modelo"
|
||||||
|
|
||||||
|
#: src/window.py:101
|
||||||
|
msgid "Could not pull model"
|
||||||
|
msgstr "Não foi possível baixar o modelo"
|
||||||
|
|
||||||
|
#: src/window.py:102
|
||||||
|
msgid "Cannot open image"
|
||||||
|
msgstr "Não foi possível abrir a imagem"
|
||||||
|
|
||||||
|
#: src/window.py:103
|
||||||
|
msgid "Cannot delete chat because it's the only one left"
|
||||||
|
msgstr "Não foi possível excluir a conversa por ser a única restante"
|
||||||
|
|
||||||
|
#: src/window.py:104
|
||||||
|
msgid "There was an error with the local Ollama instance, so it has been reset"
|
||||||
|
msgstr "Houve um erro com a instância local Ollama, a mesma foi desconfigurada"
|
||||||
|
|
||||||
|
#: src/window.py:107
|
||||||
|
msgid "Please select a model before chatting"
|
||||||
|
msgstr "Por favor, selecione um modelo antes de conversar"
|
||||||
|
|
||||||
|
#: src/window.py:108
|
||||||
|
msgid "Chat cannot be cleared while receiving a message"
|
||||||
|
msgstr "A conversa não pode ser limpa enquanto gera uma mensagem"
|
||||||
|
|
||||||
|
#: src/window.py:109
|
||||||
|
#, fuzzy
|
||||||
|
msgid "That tag is already being pulled"
|
||||||
|
msgstr "Esta tag já está sendo baixada"
|
||||||
|
|
||||||
|
#: src/window.py:110
|
||||||
|
#, fuzzy
|
||||||
|
msgid "That tag has been pulled already"
|
||||||
|
msgstr "Esta tag já foi baixada"
|
||||||
|
|
||||||
|
#: src/window.py:111
|
||||||
|
msgid "Code copied to the clipboard"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:114
|
||||||
|
msgid "Model deleted successfully"
|
||||||
|
msgstr "Modelo excluído com sucesso"
|
||||||
|
|
||||||
|
#: src/window.py:115
|
||||||
|
msgid "Model pulled successfully"
|
||||||
|
msgstr "Modelo baixado com sucesso"
|
||||||
|
|
||||||
|
#: src/window.py:116
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Chat exported successfully"
|
||||||
|
msgstr "Conversa exportada com sucesso"
|
||||||
|
|
||||||
|
#: src/window.py:117
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Chat imported successfully"
|
||||||
|
msgstr "Conversa importada com sucesso"
|
||||||
|
|
||||||
|
#: src/window.py:129
|
||||||
|
msgid "Upload image"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:133 src/window.ui:231
|
||||||
|
msgid "Only available on selected models"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.py:542
|
||||||
|
msgid "Task Complete"
|
||||||
|
msgstr "Tarefa Concluída"
|
||||||
|
|
||||||
|
#: src/window.py:542
|
||||||
|
msgid "Model '{}' pulled successfully."
|
||||||
|
msgstr "O modelo '{}' foi baixado com sucesso"
|
||||||
|
|
||||||
|
#: src/window.py:547
|
||||||
|
msgid "Pull Model Error"
|
||||||
|
msgstr "Erro ao Baixar Modelo"
|
||||||
|
|
||||||
|
#: src/window.py:547
|
||||||
|
msgid "Failed to pull model '{}' due to network error."
|
||||||
|
msgstr "Não foi possível baixar o modelo '{}' devido a um erro de rede."
|
||||||
|
|
||||||
|
#: src/window.ui:38
|
||||||
|
msgid "New chat"
|
||||||
|
msgstr "Nova conversa"
|
||||||
|
|
||||||
|
#: src/window.ui:47
|
||||||
|
msgid "Import chat"
|
||||||
|
msgstr "Importar conversa"
|
||||||
|
|
||||||
|
#: src/window.ui:56
|
||||||
|
msgid "Export chat"
|
||||||
|
msgstr "Exportar conversa"
|
||||||
|
|
||||||
|
#: src/window.ui:89
|
||||||
|
msgid "Toggle Sidebar"
|
||||||
|
msgstr "Alternar barra lateral"
|
||||||
|
|
||||||
|
#: src/window.ui:112 src/window.ui:308
|
||||||
|
msgid "Manage models"
|
||||||
|
msgstr "Gerenciar modelos"
|
||||||
|
|
||||||
|
#: src/window.ui:126
|
||||||
|
msgid "Menu"
|
||||||
|
msgstr "Menu"
|
||||||
|
|
||||||
|
#: src/window.ui:221
|
||||||
|
msgid "Send"
|
||||||
|
msgstr "Enviar"
|
||||||
|
|
||||||
|
#: src/window.ui:234
|
||||||
|
msgid "Image"
|
||||||
|
msgstr "Imagem"
|
||||||
|
|
||||||
|
#: src/window.ui:258 src/window.ui:458 src/window.ui:516
|
||||||
|
msgid "Preferences"
|
||||||
|
msgstr "Preferências"
|
||||||
|
|
||||||
|
#: src/window.ui:261 src/window.ui:500
|
||||||
|
msgid "General"
|
||||||
|
msgstr "Geral"
|
||||||
|
|
||||||
|
#: src/window.ui:265
|
||||||
|
msgid "Remote Connection"
|
||||||
|
msgstr "Conexão Remota"
|
||||||
|
|
||||||
|
#: src/window.ui:266
|
||||||
|
msgid "Manage a remote connection to Ollama"
|
||||||
|
msgstr "Gerencia uma conexão remota com Ollama"
|
||||||
|
|
||||||
|
#: src/window.ui:269
|
||||||
|
msgid "Use remote connection"
|
||||||
|
msgstr "Usar conexão remota"
|
||||||
|
|
||||||
|
#: src/window.ui:275
|
||||||
|
msgid "URL of remote instance"
|
||||||
|
msgstr "URL da instância remota"
|
||||||
|
|
||||||
|
#: src/window.ui:283
|
||||||
|
msgid "Behavior"
|
||||||
|
msgstr "Comportamento"
|
||||||
|
|
||||||
|
#: src/window.ui:284
|
||||||
|
msgid "Manage Alpaca's Behavior"
|
||||||
|
msgstr "Gerencia o Comportamento de Alpaca"
|
||||||
|
|
||||||
|
#: src/window.ui:287
|
||||||
|
msgid "Run in background"
|
||||||
|
msgstr "Executar em segundo plano"
|
||||||
|
|
||||||
|
#: src/window.ui:377
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Anterior"
|
||||||
|
|
||||||
|
#: src/window.ui:393
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Próximo"
|
||||||
|
|
||||||
|
#: src/window.ui:420
|
||||||
|
msgid "Welcome to Alpaca"
|
||||||
|
msgstr "Bem-vindo(a) a Alpaca"
|
||||||
|
|
||||||
|
#: src/window.ui:421
|
||||||
|
msgid "Powered by Ollama"
|
||||||
|
msgstr "Com tecnologia Ollama"
|
||||||
|
|
||||||
|
#: src/window.ui:424
|
||||||
|
msgid "Ollama Website"
|
||||||
|
msgstr "Site do Ollama"
|
||||||
|
|
||||||
|
#: src/window.ui:441
|
||||||
|
msgid ""
|
||||||
|
"Alpaca and its developers are not liable for any damages to devices or "
|
||||||
|
"software resulting from the execution of code generated by an AI model. "
|
||||||
|
"Please exercise caution and review the code carefully before running it."
|
||||||
|
msgstr ""
|
||||||
|
"Alpaca e seus desenvolvedores não são responsáveis por quaisquer danos "
|
||||||
|
"causados a dispositivos ou software resultante da execução de código gerado "
|
||||||
|
"por um modelo de IA. Por favor, tenha cuidado e revise o código com cuidado "
|
||||||
|
"antes de executá-lo."
|
||||||
|
|
||||||
|
#: src/window.ui:454
|
||||||
|
msgid "Clear Chat"
|
||||||
|
msgstr "Limpar Conversa"
|
||||||
|
|
||||||
|
#: src/window.ui:462
|
||||||
|
msgid "Keyboard Shortcuts"
|
||||||
|
msgstr "Atalhos de Teclado"
|
||||||
|
|
||||||
|
#: src/window.ui:466
|
||||||
|
msgid "About Alpaca"
|
||||||
|
msgstr "Sobre Alpaca"
|
||||||
|
|
||||||
|
#: src/window.ui:474
|
||||||
|
msgid "Remove"
|
||||||
|
msgstr "Remover"
|
||||||
|
|
||||||
|
#: src/window.ui:504
|
||||||
|
msgid "Close application"
|
||||||
|
msgstr "Fechar aplicativo"
|
||||||
|
|
||||||
|
#: src/window.ui:510
|
||||||
|
msgid "Clear chat"
|
||||||
|
msgstr "Limpar chat"
|
||||||
|
|
||||||
|
#: src/window.ui:522
|
||||||
|
msgid "Show shortcuts window"
|
||||||
|
msgstr "Mostrar janela de atalhos"
|
||||||
|
|
||||||
|
#: src/window.ui:529
|
||||||
|
msgid "Editor"
|
||||||
|
msgstr "Editor"
|
||||||
|
|
||||||
|
#: src/window.ui:533
|
||||||
|
msgid "Copy"
|
||||||
|
msgstr "Copiar"
|
||||||
|
|
||||||
|
#: src/window.ui:539
|
||||||
|
msgid "Paste"
|
||||||
|
msgstr "Colar"
|
||||||
|
|
||||||
|
#: src/window.ui:545
|
||||||
|
msgid "Insert new line"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/window.ui:551
|
||||||
|
msgid "Send Message"
|
||||||
|
msgstr "Enviar Mensagem"
|
||||||
|
|
||||||
|
#~ msgid "Stop Model"
|
||||||
|
#~ msgstr "Parar Modelo"
|
||||||
|
|
||||||
|
#~ msgid "Are you sure you want to stop pulling '{}'?"
|
||||||
|
#~ msgstr "Tem certeza que deseja parar o download de '{}'?"
|
||||||
|
|
||||||
|
#~ msgid "Cancel"
|
||||||
|
#~ msgstr "Cancelar"
|
||||||
|
|
||||||
|
#~ msgid "Stop"
|
||||||
|
#~ msgstr "Parar"
|
||||||
|
|
||||||
|
#~ msgid "Delete Model"
|
||||||
|
#~ msgstr "Excluir Modelo"
|
||||||
|
|
||||||
|
#~ msgid "Are you sure you want to delete '{}'?"
|
||||||
|
#~ msgstr "Tem certeza que deseja excluir '{}'?"
|
||||||
|
|
||||||
|
#~ msgid "Delete"
|
||||||
|
#~ msgstr "Excluir"
|
||||||
|
|
||||||
|
#~ msgid "Pull Model"
|
||||||
|
#~ msgstr "Baixar Modelo"
|
||||||
|
|
||||||
|
#~ msgid "Please select a tag to pull '{}'"
|
||||||
|
#~ msgstr "Por favor, selecione uma tag para baixar '{}'"
|
||||||
|
|
||||||
|
#~ msgid "Pull"
|
||||||
|
#~ msgstr "Baixar"
|
||||||
|
|
||||||
|
#~ msgid "Are you sure you want to clear the chat?"
|
||||||
|
#~ msgstr "Tem certeza de que deseja limpar a conversa?"
|
||||||
|
|
||||||
|
#~ msgid "Clear"
|
||||||
|
#~ msgstr "Limpar"
|
||||||
|
|
||||||
|
#~ msgid "Remove Image"
|
||||||
|
#~ msgstr "Remover Imagem"
|
||||||
|
|
||||||
|
#~ msgid "Are you sure you want to remove image?"
|
||||||
|
#~ msgstr "Tem certeza que quer remover a imagem?"
|
||||||
|
|
||||||
|
#~ msgid "Delete Chat"
|
||||||
|
#~ msgstr "Excluir Conversa"
|
||||||
|
|
||||||
|
#~ msgid "Rename Chat"
|
||||||
|
#~ msgstr "Renomear Conversa"
|
||||||
|
|
||||||
|
#~ msgid "Rename"
|
||||||
|
#~ msgstr "Renomear"
|
||||||
|
|
||||||
|
#~ msgid "The name '{}' is already in use"
|
||||||
|
#~ msgstr "O nome '{}' já está em uso"
|
||||||
|
|
||||||
|
#~ msgid "Create Chat"
|
||||||
|
#~ msgstr "Criar Conversa"
|
||||||
|
|
||||||
|
#~ msgid "Create"
|
||||||
|
#~ msgstr "Criar"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
#~ msgid "Connection Error"
|
||||||
|
#~ msgstr "Conexão Remota"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
#~ msgid "Close Alpaca"
|
||||||
|
#~ msgstr "Bem-vindo(a) a Alpaca"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
#~ msgid "Use local instance"
|
||||||
|
#~ msgstr "URL da instância remota"
|
||||||
|
|
||||||
|
#~ msgid "Welcome dialog"
|
||||||
|
#~ msgstr "Diálogo de Boas-vindas"
|
||||||
|
|
||||||
|
#~ msgid "Chats"
|
||||||
|
#~ msgstr "Conversas"
|
||||||
|
|
||||||
|
#~ msgid "Requires model 'llava' to be selected"
|
||||||
|
#~ msgstr "Requer que um modelo 'llava' esteja selecionado"
|
||||||
|
|
||||||
|
#~ msgid "Save Changes"
|
||||||
|
#~ msgstr "Salvar Mudanças"
|
||||||
|
|
||||||
|
#~ msgid "Do you want to save the URL change?"
|
||||||
|
#~ msgstr "Deseja salvar as mudanças na URL?"
|
||||||
|
|
||||||
|
#~ msgid "Discard"
|
||||||
|
#~ msgstr "Descartar"
|
||||||
|
|
||||||
|
#~ msgid "Save"
|
||||||
|
#~ msgstr "Salvar"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "To get started, please ensure you have an Ollama instance set up. You can "
|
||||||
|
#~ "either run Ollama locally on your machine or connect to a remote instance."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Para iniciar, por favor assegure-se que você tem uma insância Ollama "
|
||||||
|
#~ "configurada e funcional. Você pode rodar Ollama localmente em sua máquina "
|
||||||
|
#~ "ou através de uma instância remota."
|
||||||
|
|
||||||
|
#~ msgid "Setup"
|
||||||
|
#~ msgstr "Setup"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "If you are running an Ollama instance locally and haven't modified the "
|
||||||
|
#~ "default ports, you can use the default URL. Otherwise, please enter the "
|
||||||
|
#~ "URL of your Ollama instance."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Caso esteja rodando uma instância Ollama localmente e não modificou as "
|
||||||
|
#~ "portas padrão, você pode usar a URL padrão. Caso contrário, por favor, "
|
||||||
|
#~ "insira a URL da sua instância Ollama."
|
||||||
|
|
||||||
|
#~ msgid "Change Server"
|
||||||
|
#~ msgstr "Mudar Servidor"
|
||||||
|
|
||||||
|
#~ msgid "Change server"
|
||||||
|
#~ msgstr "Mudar servidor"
|
||||||
242
po/ru.po
242
po/ru.po
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2024-05-22 19:17+0800\n"
|
"POT-Creation-Date: 2024-05-25 10:21+0800\n"
|
||||||
"PO-Revision-Date: 2024-05-22 19:33+0800\n"
|
"PO-Revision-Date: 2024-05-25 10:44+0800\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
"Language: ru_RU\n"
|
"Language: ru_RU\n"
|
||||||
@@ -29,281 +29,297 @@ msgctxt "shortcut window"
|
|||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Выйти"
|
msgstr "Выйти"
|
||||||
|
|
||||||
#: window.py:54 window.py:761
|
#: window.py:57 window.py:783
|
||||||
msgid "New Chat"
|
msgid "New Chat"
|
||||||
msgstr "Новый Чат"
|
msgstr "Новый Чат"
|
||||||
|
|
||||||
#: window.py:100
|
#: window.py:102
|
||||||
msgid "An error occurred"
|
msgid "An error occurred"
|
||||||
msgstr "Произошла ошибка"
|
msgstr "Произошла ошибка"
|
||||||
|
|
||||||
#: window.py:101
|
#: window.py:103
|
||||||
msgid "Failed to connect to server"
|
msgid "Failed to connect to server"
|
||||||
msgstr "Не удалось подключиться к серверу"
|
msgstr "Не удалось подключиться к серверу"
|
||||||
|
|
||||||
#: window.py:102
|
#: window.py:104
|
||||||
msgid "Could not list local models"
|
msgid "Could not list local models"
|
||||||
msgstr "Не удалось перечислить локальные модели"
|
msgstr "Не удалось перечислить локальные модели"
|
||||||
|
|
||||||
#: window.py:103
|
#: window.py:105
|
||||||
msgid "Could not delete model"
|
msgid "Could not delete model"
|
||||||
msgstr "Не удалось удалить модель"
|
msgstr "Не удалось удалить модель"
|
||||||
|
|
||||||
#: window.py:104
|
#: window.py:106
|
||||||
msgid "Could not pull model"
|
msgid "Could not pull model"
|
||||||
msgstr "Не удалось извлечь модель"
|
msgstr "Не удалось извлечь модель"
|
||||||
|
|
||||||
#: window.py:105
|
#: window.py:107
|
||||||
msgid "Cannot open image"
|
msgid "Cannot open image"
|
||||||
msgstr "Не удается открыть изображение"
|
msgstr "Не удается открыть изображение"
|
||||||
|
|
||||||
#: window.py:106
|
#: window.py:108
|
||||||
msgid "Cannot delete chat because it's the only one left"
|
msgid "Cannot delete chat because it's the only one left"
|
||||||
msgstr "Не удается удалить чат, потому что он единственный оставшийся"
|
msgstr "Не удается удалить чат, потому что он единственный оставшийся"
|
||||||
|
|
||||||
#: window.py:107
|
#: window.py:109
|
||||||
msgid "There was an error with the local Ollama instance, so it has been reset"
|
msgid "There was an error with the local Ollama instance, so it has been reset"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Произошла ошибка с локальным экземпляром Ollama, поэтому он был сброшен"
|
"Произошла ошибка с локальным экземпляром Ollama, поэтому он был сброшен"
|
||||||
|
|
||||||
#: window.py:110
|
#: window.py:112
|
||||||
msgid "Please select a model before chatting"
|
msgid "Please select a model before chatting"
|
||||||
msgstr "Пожалуйста, выберите модель перед началом общения"
|
msgstr "Пожалуйста, выберите модель перед началом общения"
|
||||||
|
|
||||||
#: window.py:111
|
#: window.py:113
|
||||||
msgid "Chat cannot be cleared while receiving a message"
|
msgid "Chat cannot be cleared while receiving a message"
|
||||||
msgstr "Чат не может быть удален при получении сообщения"
|
msgstr "Чат не может быть удален при получении сообщения"
|
||||||
|
|
||||||
#: window.py:112
|
#: window.py:114
|
||||||
msgid "That tag is already being pulled"
|
msgid "That tag is already being pulled"
|
||||||
msgstr "Этот тег уже удален"
|
msgstr "Этот тег уже удален"
|
||||||
|
|
||||||
#: window.py:113
|
#: window.py:115
|
||||||
msgid "That tag has been pulled alreay"
|
msgid "That tag has been pulled already"
|
||||||
msgstr "Этот тег уже был удален"
|
msgstr "Этот тег уже был удален"
|
||||||
|
|
||||||
#: window.py:116
|
#: window.py:118
|
||||||
msgid "Model deleted successfully"
|
msgid "Model deleted successfully"
|
||||||
msgstr "Модель успешно удалена"
|
msgstr "Модель успешно удалена"
|
||||||
|
|
||||||
#: window.py:117
|
#: window.py:119
|
||||||
msgid "Model pulled successfully"
|
msgid "Model pulled successfully"
|
||||||
msgstr "Модель успешно извлечена"
|
msgstr "Модель успешно извлечена"
|
||||||
|
|
||||||
#: window.py:118
|
#: window.py:120
|
||||||
msgid "Chat exported successfully"
|
msgid "Chat exported successfully"
|
||||||
msgstr "Чат успешно экспортирован"
|
msgstr "Чат успешно экспортирован"
|
||||||
|
|
||||||
#: window.py:119
|
#: window.py:121
|
||||||
msgid "Chat imported successfully"
|
msgid "Chat imported successfully"
|
||||||
msgstr "Чат успешно импортирован"
|
msgstr "Чат успешно импортирован"
|
||||||
|
|
||||||
#: window.py:451
|
#: window.py:476
|
||||||
msgid "Task Complete"
|
msgid "Task Complete"
|
||||||
msgstr "Задача выполнена"
|
msgstr "Задача выполнена"
|
||||||
|
|
||||||
#: window.py:451
|
#: window.py:476
|
||||||
msgid "Model '{}' pulled successfully."
|
msgid "Model '{}' pulled successfully."
|
||||||
msgstr "Модель '{}' успешно извлечена."
|
msgstr "Модель '{}' успешно извлечена."
|
||||||
|
|
||||||
#: window.py:456
|
#: window.py:481
|
||||||
msgid "Pull Model Error"
|
msgid "Pull Model Error"
|
||||||
msgstr "Ошибка Извлечения Модели"
|
msgstr "Ошибка Извлечения Модели"
|
||||||
|
|
||||||
#: window.py:456
|
#: window.py:481
|
||||||
msgid "Failed to pull model '{}' due to network error."
|
msgid "Failed to pull model '{}' due to network error."
|
||||||
msgstr "Не удалось извлечь модель '{}' из-за сетевой ошибки."
|
msgstr "Не удалось извлечь модель '{}' из-за сетевой ошибки."
|
||||||
|
|
||||||
#: window.py:472
|
#: window.py:496
|
||||||
msgid "Stop Model"
|
msgid "Stop Model"
|
||||||
msgstr "Остановить Модель"
|
msgstr "Остановить Модель"
|
||||||
|
|
||||||
#: window.py:473
|
#: window.py:497
|
||||||
msgid "Are you sure you want to stop pulling '{}'?"
|
msgid "Are you sure you want to stop pulling '{}'?"
|
||||||
msgstr "Вы уверены, что хотите прекратить извлечение '{}'?"
|
msgstr "Вы уверены, что хотите прекратить извлечение '{}'?"
|
||||||
|
|
||||||
#: window.py:476 window.py:519 window.py:542 window.py:615 window.py:688
|
#: window.py:500 window.py:543 window.py:566 window.py:638 window.py:711
|
||||||
#: window.py:715 window.py:748 window.py:788
|
#: window.py:737 window.py:769 window.py:810
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Отмена"
|
msgstr "Отмена"
|
||||||
|
|
||||||
#: window.py:477
|
#: window.py:501
|
||||||
msgid "Stop"
|
msgid "Stop"
|
||||||
msgstr "Стоп"
|
msgstr "Стоп"
|
||||||
|
|
||||||
#: window.py:515
|
#: window.py:539
|
||||||
msgid "Delete Model"
|
msgid "Delete Model"
|
||||||
msgstr "Удалить Модель"
|
msgstr "Удалить Модель"
|
||||||
|
|
||||||
#: window.py:516 window.py:712
|
#: window.py:540 window.py:734
|
||||||
msgid "Are you sure you want to delete '{}'?"
|
msgid "Are you sure you want to delete '{}'?"
|
||||||
msgstr "Вы уверены, что хотите удалить '{}'?"
|
msgstr "Вы уверены, что хотите удалить '{}'?"
|
||||||
|
|
||||||
#: window.py:520 window.py:716
|
#: window.py:544 window.py:738
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr "Удалить"
|
msgstr "Удалить"
|
||||||
|
|
||||||
#: window.py:537
|
#: window.py:561
|
||||||
msgid "Pull Model"
|
msgid "Pull Model"
|
||||||
msgstr "Извлечение модели"
|
msgstr "Извлечение модели"
|
||||||
|
|
||||||
#: window.py:538
|
#: window.py:562
|
||||||
msgid "Please select a tag to pull '{}'"
|
msgid "Please select a tag to pull '{}'"
|
||||||
msgstr "Пожалуйста, выберите тег для извлечения '{}'"
|
msgstr "Пожалуйста, выберите тег для извлечения '{}'"
|
||||||
|
|
||||||
#: window.py:543
|
#: window.py:567
|
||||||
msgid "Pull"
|
msgid "Pull"
|
||||||
msgstr "Извлечение"
|
msgstr "Извлечение"
|
||||||
|
|
||||||
#: window.py:611 window.ui:462
|
#: window.py:634 window.ui:446
|
||||||
msgid "Clear Chat"
|
msgid "Clear Chat"
|
||||||
msgstr "Очистить Чат"
|
msgstr "Очистить Чат"
|
||||||
|
|
||||||
#: window.py:612
|
#: window.py:635
|
||||||
msgid "Are you sure you want to clear the chat?"
|
msgid "Are you sure you want to clear the chat?"
|
||||||
msgstr "Вы уверены, что хотите очистить чат?"
|
msgstr "Вы уверены, что хотите очистить чат?"
|
||||||
|
|
||||||
#: window.py:616
|
#: window.py:639
|
||||||
msgid "Clear"
|
msgid "Clear"
|
||||||
msgstr "Очистить"
|
msgstr "Очистить"
|
||||||
|
|
||||||
#: window.py:684
|
#: window.py:707
|
||||||
msgid "Remove Image"
|
msgid "Remove Image"
|
||||||
msgstr "Удалить Изображение"
|
msgstr "Удалить Изображение"
|
||||||
|
|
||||||
#: window.py:685
|
#: window.py:708
|
||||||
msgid "Are you sure you want to remove image?"
|
msgid "Are you sure you want to remove image?"
|
||||||
msgstr "Вы уверены, что хотите удалить изображение?"
|
msgstr "Вы уверены, что хотите удалить изображение?"
|
||||||
|
|
||||||
#: window.py:689
|
#: window.py:712 window.ui:466
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Удалить"
|
msgstr "Удалить"
|
||||||
|
|
||||||
#: window.py:711
|
#: window.py:733
|
||||||
msgid "Delete Chat"
|
msgid "Delete Chat"
|
||||||
msgstr "Удалить Чат"
|
msgstr "Удалить Чат"
|
||||||
|
|
||||||
#: window.py:742
|
#: window.py:763
|
||||||
msgid "Rename Chat"
|
msgid "Rename Chat"
|
||||||
msgstr "Переименовать Чат"
|
msgstr "Переименовать Чат"
|
||||||
|
|
||||||
#: window.py:749
|
#: window.py:770
|
||||||
msgid "Rename"
|
msgid "Rename"
|
||||||
msgstr "Переименовать"
|
msgstr "Переименовать"
|
||||||
|
|
||||||
#: window.py:769
|
#: window.py:791
|
||||||
msgid "The name '{}' is already in use"
|
msgid "The name '{}' is already in use"
|
||||||
msgstr "Имя '{}' уже используется"
|
msgstr "Имя '{}' уже используется"
|
||||||
|
|
||||||
#: window.py:782
|
#: window.py:804
|
||||||
msgid "Create Chat"
|
msgid "Create Chat"
|
||||||
msgstr "Создать Чат"
|
msgstr "Создать Чат"
|
||||||
|
|
||||||
#: window.py:789
|
#: window.py:811
|
||||||
msgid "Create"
|
msgid "Create"
|
||||||
msgstr "Создать"
|
msgstr "Создать"
|
||||||
|
|
||||||
#: window.ui:46
|
#: window.py:914
|
||||||
msgid "Chats"
|
msgid "Connection Error"
|
||||||
msgstr "Чаты"
|
msgstr "Ошибка Соединения"
|
||||||
|
|
||||||
#: window.ui:56
|
#: window.py:915
|
||||||
msgid "Import chat"
|
msgid "The remote instance has disconnected"
|
||||||
msgstr "Импорт чата"
|
msgstr "Удаленный экземпляр отключился"
|
||||||
|
|
||||||
#: window.ui:69
|
#: window.py:919
|
||||||
msgid "Export chat"
|
msgid "Close Alpaca"
|
||||||
msgstr "Экспорт чата"
|
msgstr "Закрыть Программу"
|
||||||
|
|
||||||
#: window.ui:82
|
#: window.py:920
|
||||||
|
msgid "Use local instance"
|
||||||
|
msgstr "Использовать локальный экземпляр"
|
||||||
|
|
||||||
|
#: window.py:921
|
||||||
|
msgid "Connect"
|
||||||
|
msgstr "Подключить"
|
||||||
|
|
||||||
|
#: window.ui:40
|
||||||
msgid "New chat"
|
msgid "New chat"
|
||||||
msgstr "Новый чат"
|
msgstr "Новый чат"
|
||||||
|
|
||||||
#: window.ui:118
|
#: window.ui:49
|
||||||
|
msgid "Import chat"
|
||||||
|
msgstr "Импорт чата"
|
||||||
|
|
||||||
|
#: window.ui:58
|
||||||
|
msgid "Export chat"
|
||||||
|
msgstr "Экспорт чата"
|
||||||
|
|
||||||
|
#: window.ui:90
|
||||||
msgid "Toggle Sidebar"
|
msgid "Toggle Sidebar"
|
||||||
msgstr "Переключение боковой панели"
|
msgstr "Переключение боковой панели"
|
||||||
|
|
||||||
#: window.ui:139 window.ui:315
|
#: window.ui:111 window.ui:303
|
||||||
msgid "Manage models"
|
msgid "Manage models"
|
||||||
msgstr "Управление моделями"
|
msgstr "Управление моделями"
|
||||||
|
|
||||||
#: window.ui:153
|
#: window.ui:125
|
||||||
msgid "Menu"
|
msgid "Menu"
|
||||||
msgstr "Меню"
|
msgstr "Меню"
|
||||||
|
|
||||||
#: window.ui:231
|
#: window.ui:216
|
||||||
msgid "Send"
|
msgid "Send"
|
||||||
msgstr "Отправить"
|
msgstr "Отправить"
|
||||||
|
|
||||||
#: window.ui:240
|
#: window.ui:225
|
||||||
msgid "Requires model 'llava' to be selected"
|
msgid "Only available on selected models"
|
||||||
msgstr "Требуется выбрать модель \"llava\""
|
msgstr "Доступно только для некоторых моделей"
|
||||||
|
|
||||||
#: window.ui:243
|
#: window.ui:228
|
||||||
msgid "Image"
|
msgid "Image"
|
||||||
msgstr "Изображение"
|
msgstr "Изображение"
|
||||||
|
|
||||||
#: window.ui:266 window.ui:466 window.ui:517
|
#: window.ui:254 window.ui:450 window.ui:508
|
||||||
msgid "Preferences"
|
msgid "Preferences"
|
||||||
msgstr "Настройки"
|
msgstr "Настройки"
|
||||||
|
|
||||||
#: window.ui:269 window.ui:501
|
#: window.ui:257 window.ui:492
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr "Общие"
|
msgstr "Общие"
|
||||||
|
|
||||||
#: window.ui:273
|
#: window.ui:261
|
||||||
msgid "Remote Connection"
|
msgid "Remote Connection"
|
||||||
msgstr "Удаленное подключение"
|
msgstr "Удаленное подключение"
|
||||||
|
|
||||||
#: window.ui:274
|
#: window.ui:262
|
||||||
msgid "Manage a remote connection to Ollama"
|
msgid "Manage a remote connection to Ollama"
|
||||||
msgstr "Управление удаленным подключением к Ollama"
|
msgstr "Управление удаленным подключением к Ollama"
|
||||||
|
|
||||||
#: window.ui:277
|
#: window.ui:265
|
||||||
msgid "Use remote connection"
|
msgid "Use remote connection"
|
||||||
msgstr "Использовать удаленное подключение"
|
msgstr "Использовать удаленное подключение"
|
||||||
|
|
||||||
#: window.ui:282
|
#: window.ui:270
|
||||||
msgid "URL of remote instance"
|
msgid "URL of remote instance"
|
||||||
msgstr "URL-адрес удаленного экземпляра"
|
msgstr "URL-адрес удаленного экземпляра"
|
||||||
|
|
||||||
#: window.ui:290
|
#: window.ui:278
|
||||||
msgid "Behavior"
|
msgid "Behavior"
|
||||||
msgstr "Поведение"
|
msgstr "Поведение"
|
||||||
|
|
||||||
#: window.ui:291
|
#: window.ui:279
|
||||||
msgid "Manage Alpaca's Behavior"
|
msgid "Manage Alpaca's Behavior"
|
||||||
msgstr "Управление поведением Alpaca"
|
msgstr "Управление поведением Alpaca"
|
||||||
|
|
||||||
#: window.ui:294
|
#: window.ui:282
|
||||||
msgid "Run in background"
|
msgid "Run in background"
|
||||||
msgstr "Запуск в фоновом режиме"
|
msgstr "Запуск в фоновом режиме"
|
||||||
|
|
||||||
#: window.ui:385
|
#: window.ui:371
|
||||||
msgid "Previous"
|
msgid "Previous"
|
||||||
msgstr "Предыдущий"
|
msgstr "Предыдущий"
|
||||||
|
|
||||||
#: window.ui:400
|
#: window.ui:386
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Следующий"
|
msgstr "Следующий"
|
||||||
|
|
||||||
#: window.ui:426
|
#: window.ui:412
|
||||||
msgid "Welcome to Alpaca"
|
msgid "Welcome to Alpaca"
|
||||||
msgstr "Добро пожаловать в Alpaca"
|
msgstr "Добро пожаловать в Alpaca"
|
||||||
|
|
||||||
#: window.ui:427
|
#: window.ui:413
|
||||||
msgid "Powered by Ollama"
|
msgid "Powered by Ollama"
|
||||||
msgstr "При поддержке Ollama"
|
msgstr "При поддержке Ollama"
|
||||||
|
|
||||||
#: window.ui:430
|
#: window.ui:416
|
||||||
msgid "Ollama Website"
|
msgid "Ollama Website"
|
||||||
msgstr "Веб-сайт Ollama"
|
msgstr "Веб-сайт Ollama"
|
||||||
|
|
||||||
#: window.ui:446
|
#: window.ui:432
|
||||||
msgid "Disclaimer"
|
msgid "Disclaimer"
|
||||||
msgstr "Отказ от ответственности"
|
msgstr "Отказ от ответственности"
|
||||||
|
|
||||||
#: window.ui:447
|
#: window.ui:433
|
||||||
msgid ""
|
msgid ""
|
||||||
"Alpaca and its developers are not liable for any damages to devices or "
|
"Alpaca and its developers are not liable for any damages to devices or "
|
||||||
"software resulting from the execution of code generated by an AI model. "
|
"software resulting from the execution of code generated by an AI model. "
|
||||||
@@ -315,46 +331,92 @@ msgstr ""
|
|||||||
"Пожалуйста, будьте осторожны и внимательно ознакомьтесь с кодом перед его "
|
"Пожалуйста, будьте осторожны и внимательно ознакомьтесь с кодом перед его "
|
||||||
"запуском."
|
"запуском."
|
||||||
|
|
||||||
#: window.ui:470
|
#: window.ui:454
|
||||||
msgid "Keyboard Shortcuts"
|
msgid "Keyboard Shortcuts"
|
||||||
msgstr "Комбинации Клавиш"
|
msgstr "Комбинации Клавиш"
|
||||||
|
|
||||||
#: window.ui:474
|
#: window.ui:458
|
||||||
msgid "About Alpaca"
|
msgid "About Alpaca"
|
||||||
msgstr "О Программе"
|
msgstr "О Программе"
|
||||||
|
|
||||||
#: window.ui:505
|
#: window.ui:496
|
||||||
msgid "Close application"
|
msgid "Close application"
|
||||||
msgstr "Закрыть приложение"
|
msgstr "Закрыть приложение"
|
||||||
|
|
||||||
#: window.ui:511
|
#: window.ui:502
|
||||||
msgid "Clear chat"
|
msgid "Clear chat"
|
||||||
msgstr "Очистить чат"
|
msgstr "Очистить чат"
|
||||||
|
|
||||||
#: window.ui:523
|
#: window.ui:514
|
||||||
msgid "Show shortcuts window"
|
msgid "Show shortcuts window"
|
||||||
msgstr "Показать окно комбинаций клавиш"
|
msgstr "Показать окно комбинаций клавиш"
|
||||||
|
|
||||||
#: window.ui:530
|
#: window.ui:521
|
||||||
msgid "Editor"
|
msgid "Editor"
|
||||||
msgstr "Редактор"
|
msgstr "Редактор"
|
||||||
|
|
||||||
#: window.ui:534
|
#: window.ui:525
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr "Копировать"
|
msgstr "Копировать"
|
||||||
|
|
||||||
#: window.ui:540
|
#: window.ui:531
|
||||||
msgid "Paste"
|
msgid "Paste"
|
||||||
msgstr "Вставить"
|
msgstr "Вставить"
|
||||||
|
|
||||||
#: window.ui:546
|
#: window.ui:537
|
||||||
|
msgid "Insert new line"
|
||||||
|
msgstr "Вставить новую строку"
|
||||||
|
|
||||||
|
#: window.ui:543
|
||||||
msgid "Send Message"
|
msgid "Send Message"
|
||||||
msgstr "Отправить Сообщение"
|
msgstr "Отправить Сообщение"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
#~ msgid "Alpaca"
|
||||||
|
#~ msgstr "О Программе"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
#~ msgid "Chat with local AI models"
|
||||||
|
#~ msgstr "Не удалось перечислить локальные модели"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
#~ msgid "An Ollama client"
|
||||||
|
#~ msgstr "Веб-сайт Ollama"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
#~ msgid "Import and export chats"
|
||||||
|
#~ msgstr "Импорт чата"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
#~ msgid "Managing models"
|
||||||
|
#~ msgstr "Управление моделями"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
#~ msgid "New Update"
|
||||||
|
#~ msgstr "Новый Чат"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
#~ msgid "Fixed remote connections"
|
||||||
|
#~ msgstr "Использовать удаленное подключение"
|
||||||
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#~ msgid "Added basic shortcuts"
|
#~ msgid "Added basic shortcuts"
|
||||||
#~ msgstr "Показывать ярлыки"
|
#~ msgstr "Показывать ярлыки"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
#~ msgid "New Features"
|
||||||
|
#~ msgstr "Новый Чат"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
#~ msgid "A button to clear the chat"
|
||||||
|
#~ msgstr "Вы уверены, что хотите очистить чат?"
|
||||||
|
|
||||||
|
#~ msgid "Chats"
|
||||||
|
#~ msgstr "Чаты"
|
||||||
|
|
||||||
|
#~ msgid "Requires model 'llava' to be selected"
|
||||||
|
#~ msgstr "Требуется выбрать модель \"llava\""
|
||||||
|
|
||||||
#~ msgid "Save Changes"
|
#~ msgid "Save Changes"
|
||||||
#~ msgstr "Сохранить Изменения"
|
#~ msgstr "Сохранить Изменения"
|
||||||
|
|
||||||
|
|||||||
394
po/ru.po~
Normal file
394
po/ru.po~
Normal file
@@ -0,0 +1,394 @@
|
|||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2024-05-22 19:17+0800\n"
|
||||||
|
"PO-Revision-Date: 2024-05-22 19:33+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.4\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.py:54 window.py:761
|
||||||
|
msgid "New Chat"
|
||||||
|
msgstr "Новый Чат"
|
||||||
|
|
||||||
|
#: window.py:100
|
||||||
|
msgid "An error occurred"
|
||||||
|
msgstr "Произошла ошибка"
|
||||||
|
|
||||||
|
#: window.py:101
|
||||||
|
msgid "Failed to connect to server"
|
||||||
|
msgstr "Не удалось подключиться к серверу"
|
||||||
|
|
||||||
|
#: window.py:102
|
||||||
|
msgid "Could not list local models"
|
||||||
|
msgstr "Не удалось перечислить локальные модели"
|
||||||
|
|
||||||
|
#: window.py:103
|
||||||
|
msgid "Could not delete model"
|
||||||
|
msgstr "Не удалось удалить модель"
|
||||||
|
|
||||||
|
#: window.py:104
|
||||||
|
msgid "Could not pull model"
|
||||||
|
msgstr "Не удалось извлечь модель"
|
||||||
|
|
||||||
|
#: window.py:105
|
||||||
|
msgid "Cannot open image"
|
||||||
|
msgstr "Не удается открыть изображение"
|
||||||
|
|
||||||
|
#: window.py:106
|
||||||
|
msgid "Cannot delete chat because it's the only one left"
|
||||||
|
msgstr "Не удается удалить чат, потому что он единственный оставшийся"
|
||||||
|
|
||||||
|
#: window.py:107
|
||||||
|
msgid "There was an error with the local Ollama instance, so it has been reset"
|
||||||
|
msgstr ""
|
||||||
|
"Произошла ошибка с локальным экземпляром Ollama, поэтому он был сброшен"
|
||||||
|
|
||||||
|
#: window.py:110
|
||||||
|
msgid "Please select a model before chatting"
|
||||||
|
msgstr "Пожалуйста, выберите модель перед началом общения"
|
||||||
|
|
||||||
|
#: window.py:111
|
||||||
|
msgid "Chat cannot be cleared while receiving a message"
|
||||||
|
msgstr "Чат не может быть удален при получении сообщения"
|
||||||
|
|
||||||
|
#: window.py:112
|
||||||
|
msgid "That tag is already being pulled"
|
||||||
|
msgstr "Этот тег уже удален"
|
||||||
|
|
||||||
|
#: window.py:113
|
||||||
|
msgid "That tag has been pulled alreay"
|
||||||
|
msgstr "Этот тег уже был удален"
|
||||||
|
|
||||||
|
#: window.py:116
|
||||||
|
msgid "Model deleted successfully"
|
||||||
|
msgstr "Модель успешно удалена"
|
||||||
|
|
||||||
|
#: window.py:117
|
||||||
|
msgid "Model pulled successfully"
|
||||||
|
msgstr "Модель успешно извлечена"
|
||||||
|
|
||||||
|
#: window.py:118
|
||||||
|
msgid "Chat exported successfully"
|
||||||
|
msgstr "Чат успешно экспортирован"
|
||||||
|
|
||||||
|
#: window.py:119
|
||||||
|
msgid "Chat imported successfully"
|
||||||
|
msgstr "Чат успешно импортирован"
|
||||||
|
|
||||||
|
#: window.py:451
|
||||||
|
msgid "Task Complete"
|
||||||
|
msgstr "Задача выполнена"
|
||||||
|
|
||||||
|
#: window.py:451
|
||||||
|
msgid "Model '{}' pulled successfully."
|
||||||
|
msgstr "Модель '{}' успешно извлечена."
|
||||||
|
|
||||||
|
#: window.py:456
|
||||||
|
msgid "Pull Model Error"
|
||||||
|
msgstr "Ошибка Извлечения Модели"
|
||||||
|
|
||||||
|
#: window.py:456
|
||||||
|
msgid "Failed to pull model '{}' due to network error."
|
||||||
|
msgstr "Не удалось извлечь модель '{}' из-за сетевой ошибки."
|
||||||
|
|
||||||
|
#: window.py:472
|
||||||
|
msgid "Stop Model"
|
||||||
|
msgstr "Остановить Модель"
|
||||||
|
|
||||||
|
#: window.py:473
|
||||||
|
msgid "Are you sure you want to stop pulling '{}'?"
|
||||||
|
msgstr "Вы уверены, что хотите прекратить извлечение '{}'?"
|
||||||
|
|
||||||
|
#: window.py:476 window.py:519 window.py:542 window.py:615 window.py:688
|
||||||
|
#: window.py:715 window.py:748 window.py:788
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Отмена"
|
||||||
|
|
||||||
|
#: window.py:477
|
||||||
|
msgid "Stop"
|
||||||
|
msgstr "Стоп"
|
||||||
|
|
||||||
|
#: window.py:515
|
||||||
|
msgid "Delete Model"
|
||||||
|
msgstr "Удалить Модель"
|
||||||
|
|
||||||
|
#: window.py:516 window.py:712
|
||||||
|
msgid "Are you sure you want to delete '{}'?"
|
||||||
|
msgstr "Вы уверены, что хотите удалить '{}'?"
|
||||||
|
|
||||||
|
#: window.py:520 window.py:716
|
||||||
|
msgid "Delete"
|
||||||
|
msgstr "Удалить"
|
||||||
|
|
||||||
|
#: window.py:537
|
||||||
|
msgid "Pull Model"
|
||||||
|
msgstr "Извлечение модели"
|
||||||
|
|
||||||
|
#: window.py:538
|
||||||
|
msgid "Please select a tag to pull '{}'"
|
||||||
|
msgstr "Пожалуйста, выберите тег для извлечения '{}'"
|
||||||
|
|
||||||
|
#: window.py:543
|
||||||
|
msgid "Pull"
|
||||||
|
msgstr "Извлечение"
|
||||||
|
|
||||||
|
#: window.py:611 window.ui:462
|
||||||
|
msgid "Clear Chat"
|
||||||
|
msgstr "Очистить Чат"
|
||||||
|
|
||||||
|
#: window.py:612
|
||||||
|
msgid "Are you sure you want to clear the chat?"
|
||||||
|
msgstr "Вы уверены, что хотите очистить чат?"
|
||||||
|
|
||||||
|
#: window.py:616
|
||||||
|
msgid "Clear"
|
||||||
|
msgstr "Очистить"
|
||||||
|
|
||||||
|
#: window.py:684
|
||||||
|
msgid "Remove Image"
|
||||||
|
msgstr "Удалить Изображение"
|
||||||
|
|
||||||
|
#: window.py:685
|
||||||
|
msgid "Are you sure you want to remove image?"
|
||||||
|
msgstr "Вы уверены, что хотите удалить изображение?"
|
||||||
|
|
||||||
|
#: window.py:689
|
||||||
|
msgid "Remove"
|
||||||
|
msgstr "Удалить"
|
||||||
|
|
||||||
|
#: window.py:711
|
||||||
|
msgid "Delete Chat"
|
||||||
|
msgstr "Удалить Чат"
|
||||||
|
|
||||||
|
#: window.py:742
|
||||||
|
msgid "Rename Chat"
|
||||||
|
msgstr "Переименовать Чат"
|
||||||
|
|
||||||
|
#: window.py:749
|
||||||
|
msgid "Rename"
|
||||||
|
msgstr "Переименовать"
|
||||||
|
|
||||||
|
#: window.py:769
|
||||||
|
msgid "The name '{}' is already in use"
|
||||||
|
msgstr "Имя '{}' уже используется"
|
||||||
|
|
||||||
|
#: window.py:782
|
||||||
|
msgid "Create Chat"
|
||||||
|
msgstr "Создать Чат"
|
||||||
|
|
||||||
|
#: window.py:789
|
||||||
|
msgid "Create"
|
||||||
|
msgstr "Создать"
|
||||||
|
|
||||||
|
#: window.ui:46
|
||||||
|
msgid "Chats"
|
||||||
|
msgstr "Чаты"
|
||||||
|
|
||||||
|
#: window.ui:56
|
||||||
|
msgid "Import chat"
|
||||||
|
msgstr "Импорт чата"
|
||||||
|
|
||||||
|
#: window.ui:69
|
||||||
|
msgid "Export chat"
|
||||||
|
msgstr "Экспорт чата"
|
||||||
|
|
||||||
|
#: window.ui:82
|
||||||
|
msgid "New chat"
|
||||||
|
msgstr "Новый чат"
|
||||||
|
|
||||||
|
#: window.ui:118
|
||||||
|
msgid "Toggle Sidebar"
|
||||||
|
msgstr "Переключение боковой панели"
|
||||||
|
|
||||||
|
#: window.ui:139 window.ui:315
|
||||||
|
msgid "Manage models"
|
||||||
|
msgstr "Управление моделями"
|
||||||
|
|
||||||
|
#: window.ui:153
|
||||||
|
msgid "Menu"
|
||||||
|
msgstr "Меню"
|
||||||
|
|
||||||
|
#: window.ui:231
|
||||||
|
msgid "Send"
|
||||||
|
msgstr "Отправить"
|
||||||
|
|
||||||
|
#: window.ui:240
|
||||||
|
msgid "Requires model 'llava' to be selected"
|
||||||
|
msgstr "Требуется выбрать модель \"llava\""
|
||||||
|
|
||||||
|
#: window.ui:243
|
||||||
|
msgid "Image"
|
||||||
|
msgstr "Изображение"
|
||||||
|
|
||||||
|
#: window.ui:266 window.ui:466 window.ui:517
|
||||||
|
msgid "Preferences"
|
||||||
|
msgstr "Настройки"
|
||||||
|
|
||||||
|
#: window.ui:269 window.ui:501
|
||||||
|
msgid "General"
|
||||||
|
msgstr "Общие"
|
||||||
|
|
||||||
|
#: window.ui:273
|
||||||
|
msgid "Remote Connection"
|
||||||
|
msgstr "Удаленное подключение"
|
||||||
|
|
||||||
|
#: window.ui:274
|
||||||
|
msgid "Manage a remote connection to Ollama"
|
||||||
|
msgstr "Управление удаленным подключением к Ollama"
|
||||||
|
|
||||||
|
#: window.ui:277
|
||||||
|
msgid "Use remote connection"
|
||||||
|
msgstr "Использовать удаленное подключение"
|
||||||
|
|
||||||
|
#: window.ui:282
|
||||||
|
msgid "URL of remote instance"
|
||||||
|
msgstr "URL-адрес удаленного экземпляра"
|
||||||
|
|
||||||
|
#: window.ui:290
|
||||||
|
msgid "Behavior"
|
||||||
|
msgstr "Поведение"
|
||||||
|
|
||||||
|
#: window.ui:291
|
||||||
|
msgid "Manage Alpaca's Behavior"
|
||||||
|
msgstr "Управление поведением Alpaca"
|
||||||
|
|
||||||
|
#: window.ui:294
|
||||||
|
msgid "Run in background"
|
||||||
|
msgstr "Запуск в фоновом режиме"
|
||||||
|
|
||||||
|
#: window.ui:385
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Предыдущий"
|
||||||
|
|
||||||
|
#: window.ui:400
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Следующий"
|
||||||
|
|
||||||
|
#: window.ui:426
|
||||||
|
msgid "Welcome to Alpaca"
|
||||||
|
msgstr "Добро пожаловать в Alpaca"
|
||||||
|
|
||||||
|
#: window.ui:427
|
||||||
|
msgid "Powered by Ollama"
|
||||||
|
msgstr "При поддержке Ollama"
|
||||||
|
|
||||||
|
#: window.ui:430
|
||||||
|
msgid "Ollama Website"
|
||||||
|
msgstr "Веб-сайт Ollama"
|
||||||
|
|
||||||
|
#: window.ui:446
|
||||||
|
msgid "Disclaimer"
|
||||||
|
msgstr "Отказ от ответственности"
|
||||||
|
|
||||||
|
#: window.ui:447
|
||||||
|
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:470
|
||||||
|
msgid "Keyboard Shortcuts"
|
||||||
|
msgstr "Комбинации Клавиш"
|
||||||
|
|
||||||
|
#: window.ui:474
|
||||||
|
msgid "About Alpaca"
|
||||||
|
msgstr "О Программе"
|
||||||
|
|
||||||
|
#: window.ui:505
|
||||||
|
msgid "Close application"
|
||||||
|
msgstr "Закрыть приложение"
|
||||||
|
|
||||||
|
#: window.ui:511
|
||||||
|
msgid "Clear chat"
|
||||||
|
msgstr "Очистить чат"
|
||||||
|
|
||||||
|
#: window.ui:523
|
||||||
|
msgid "Show shortcuts window"
|
||||||
|
msgstr "Показать окно комбинаций клавиш"
|
||||||
|
|
||||||
|
#: window.ui:530
|
||||||
|
msgid "Editor"
|
||||||
|
msgstr "Редактор"
|
||||||
|
|
||||||
|
#: window.ui:534
|
||||||
|
msgid "Copy"
|
||||||
|
msgstr "Копировать"
|
||||||
|
|
||||||
|
#: window.ui:540
|
||||||
|
msgid "Paste"
|
||||||
|
msgstr "Вставить"
|
||||||
|
|
||||||
|
#: window.ui:546
|
||||||
|
msgid "Send Message"
|
||||||
|
msgstr "Отправить Сообщение"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
#~ msgid "Added basic shortcuts"
|
||||||
|
#~ msgstr "Показывать ярлыки"
|
||||||
|
|
||||||
|
#~ msgid "Save Changes"
|
||||||
|
#~ msgstr "Сохранить Изменения"
|
||||||
|
|
||||||
|
#~ msgid "Do you want to save the URL change?"
|
||||||
|
#~ msgstr "Хотите сохранить изменение URL?"
|
||||||
|
|
||||||
|
#~ msgid "Discard"
|
||||||
|
#~ msgstr "Отказаться"
|
||||||
|
|
||||||
|
#~ msgid "Save"
|
||||||
|
#~ msgstr "Сохранить"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "To get started, please ensure you have an Ollama instance set up. You can "
|
||||||
|
#~ "either run Ollama locally on your machine or connect to a remote instance."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Для начала, пожалуйста, убедитесь, что у вас настроен экземпляр Ollama. "
|
||||||
|
#~ "Вы можете либо запустить Ollama локально на своем компьютере, либо "
|
||||||
|
#~ "подключиться к удаленному экземпляру."
|
||||||
|
|
||||||
|
#~ msgid "Setup"
|
||||||
|
#~ msgstr "Установка"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "If you are running an Ollama instance locally and haven't modified the "
|
||||||
|
#~ "default ports, you can use the default URL. Otherwise, please enter the "
|
||||||
|
#~ "URL of your Ollama instance."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Если вы запускаете локальный экземпляр Ollama и не изменили порты по "
|
||||||
|
#~ "умолчанию, вы можете использовать URL-адрес по умолчанию. В противном "
|
||||||
|
#~ "случае, пожалуйста, введите URL-адрес вашего экземпляра Ollama."
|
||||||
|
|
||||||
|
#~ msgid "Change Server"
|
||||||
|
#~ msgstr "Изменить Сервер"
|
||||||
|
|
||||||
|
#~ msgid "Change server"
|
||||||
|
#~ msgstr "Изменить Сервер"
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
# connectionhandler.py
|
# connectionhandler.py
|
||||||
import json, requests
|
import json, requests
|
||||||
|
|
||||||
|
url = None
|
||||||
|
|
||||||
def simple_get(connection_url:str) -> dict:
|
def simple_get(connection_url:str) -> dict:
|
||||||
try:
|
try:
|
||||||
response = requests.get(connection_url)
|
response = requests.get(connection_url)
|
||||||
@@ -37,25 +39,3 @@ def stream_post(connection_url:str, data, callback:callable) -> dict:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
return {"status": "error", "status_code": 0}
|
return {"status": "error", "status_code": 0}
|
||||||
|
|
||||||
|
|
||||||
from time import sleep
|
|
||||||
def stream_post_fake(connection_url:str, data, callback:callable) -> dict:
|
|
||||||
data = {
|
|
||||||
"status": "pulling manifest"
|
|
||||||
}
|
|
||||||
callback(data)
|
|
||||||
for i in range(2):
|
|
||||||
for a in range(11):
|
|
||||||
sleep(.1)
|
|
||||||
data = {
|
|
||||||
"status": f"downloading digestname {i}",
|
|
||||||
"digest": f"digestname {i}",
|
|
||||||
"total": 500,
|
|
||||||
"completed": a * 50
|
|
||||||
}
|
|
||||||
callback(data)
|
|
||||||
for msg in ["verifying sha256 digest", "writting manifest", "removing any unused layers", "success"]:
|
|
||||||
sleep(.1)
|
|
||||||
data = {"status": msg}
|
|
||||||
callback(data)
|
|
||||||
return {"status": "ok", "status_code": 200}
|
|
||||||
|
|||||||
228
src/dialogs.py
Normal file
228
src/dialogs.py
Normal file
@@ -0,0 +1,228 @@
|
|||||||
|
# dialogs.py
|
||||||
|
|
||||||
|
from gi.repository import Adw, Gtk, Gdk, GLib, GtkSource, Gio, GdkPixbuf
|
||||||
|
from .available_models import available_models
|
||||||
|
|
||||||
|
# CLEAR CHAT | WORKS
|
||||||
|
|
||||||
|
def clear_chat_response(self, dialog, task):
|
||||||
|
if dialog.choose_finish(task) == "clear":
|
||||||
|
self.clear_chat()
|
||||||
|
|
||||||
|
def clear_chat(self):
|
||||||
|
if self.bot_message is not None:
|
||||||
|
self.show_toast("info", 1, self.main_overlay)
|
||||||
|
return
|
||||||
|
dialog = Adw.AlertDialog(
|
||||||
|
heading=_("Clear Chat"),
|
||||||
|
body=_("Are you sure you want to clear the chat?"),
|
||||||
|
close_response="cancel"
|
||||||
|
)
|
||||||
|
dialog.add_response("cancel", _("Cancel"))
|
||||||
|
dialog.add_response("clear", _("Clear"))
|
||||||
|
dialog.set_response_appearance("clear", Adw.ResponseAppearance.DESTRUCTIVE)
|
||||||
|
dialog.choose(
|
||||||
|
parent = self,
|
||||||
|
cancellable = None,
|
||||||
|
callback = lambda dialog, task: clear_chat_response(self, dialog, task)
|
||||||
|
)
|
||||||
|
|
||||||
|
# DELETE CHAT | WORKS
|
||||||
|
|
||||||
|
def delete_chat_response(self, dialog, task, chat_name):
|
||||||
|
if dialog.choose_finish(task) == "delete":
|
||||||
|
self.delete_chat(chat_name)
|
||||||
|
|
||||||
|
def delete_chat(self, chat_name):
|
||||||
|
dialog = Adw.AlertDialog(
|
||||||
|
heading=_("Delete Chat"),
|
||||||
|
body=_("Are you sure you want to delete '{}'?").format(chat_name),
|
||||||
|
close_response="cancel"
|
||||||
|
)
|
||||||
|
dialog.add_response("cancel", _("Cancel"))
|
||||||
|
dialog.add_response("delete", _("Delete"))
|
||||||
|
dialog.set_response_appearance("delete", Adw.ResponseAppearance.DESTRUCTIVE)
|
||||||
|
dialog.choose(
|
||||||
|
parent = self,
|
||||||
|
cancellable = None,
|
||||||
|
callback = lambda dialog, task, chat_name=chat_name: delete_chat_response(self, dialog, task, chat_name)
|
||||||
|
)
|
||||||
|
|
||||||
|
# RENAME CHAT | WORKS
|
||||||
|
|
||||||
|
def rename_chat_response(self, dialog, task, old_chat_name, entry, label_element):
|
||||||
|
if not entry: return
|
||||||
|
new_chat_name = entry.get_text()
|
||||||
|
if old_chat_name == new_chat_name: return
|
||||||
|
if new_chat_name and (task is None or dialog.choose_finish(task) == "rename"):
|
||||||
|
self.rename_chat(old_chat_name, new_chat_name, label_element)
|
||||||
|
|
||||||
|
def rename_chat(self, chat_name:str, label_element):
|
||||||
|
entry = Gtk.Entry()
|
||||||
|
dialog = Adw.AlertDialog(
|
||||||
|
heading=_("Rename Chat"),
|
||||||
|
body=_("Renaming '{}'").format(chat_name),
|
||||||
|
extra_child=entry,
|
||||||
|
close_response="cancel"
|
||||||
|
)
|
||||||
|
entry.connect("activate", lambda dialog, old_chat_name=chat_name, entry=entry, label_element=label_element: rename_chat_response(self, dialog, None, old_chat_name, entry, label_element))
|
||||||
|
dialog.add_response("cancel", _("Cancel"))
|
||||||
|
dialog.add_response("rename", _("Rename"))
|
||||||
|
dialog.set_response_appearance("rename", Adw.ResponseAppearance.SUGGESTED)
|
||||||
|
dialog.choose(
|
||||||
|
parent = self,
|
||||||
|
cancellable = None,
|
||||||
|
callback = lambda dialog, task, old_chat_name=chat_name, entry=entry, label_element=label_element: rename_chat_response(self, dialog, task, old_chat_name, entry, label_element)
|
||||||
|
)
|
||||||
|
|
||||||
|
# NEW CHAT | WORKS
|
||||||
|
|
||||||
|
def new_chat_response(self, dialog, task, entry):
|
||||||
|
chat_name = _("New Chat")
|
||||||
|
if entry is not None and entry.get_text() != "": chat_name = entry.get_text()
|
||||||
|
if chat_name and (task is None or dialog.choose_finish(task) == "create"):
|
||||||
|
self.new_chat(chat_name)
|
||||||
|
|
||||||
|
|
||||||
|
def new_chat(self):
|
||||||
|
entry = Gtk.Entry()
|
||||||
|
dialog = Adw.AlertDialog(
|
||||||
|
heading=_("Create Chat"),
|
||||||
|
body=_("Enter name for new chat"),
|
||||||
|
extra_child=entry,
|
||||||
|
close_response="cancel"
|
||||||
|
)
|
||||||
|
entry.connect("activate", lambda dialog, entry: new_chat_response(self, dialog, None, entry))
|
||||||
|
dialog.add_response("cancel", _("Cancel"))
|
||||||
|
dialog.add_response("create", _("Create"))
|
||||||
|
dialog.set_response_appearance("create", Adw.ResponseAppearance.SUGGESTED)
|
||||||
|
dialog.choose(
|
||||||
|
parent = self,
|
||||||
|
cancellable = None,
|
||||||
|
callback = lambda dialog, task, entry=entry: new_chat_response(self, dialog, task, entry)
|
||||||
|
)
|
||||||
|
|
||||||
|
# STOP PULL MODEL | WORKS
|
||||||
|
|
||||||
|
def stop_pull_model_response(self, dialog, task, model_name):
|
||||||
|
if dialog.choose_finish(task) == "stop":
|
||||||
|
self.stop_pull_model(model_name)
|
||||||
|
|
||||||
|
def stop_pull_model(self, model_name):
|
||||||
|
dialog = Adw.AlertDialog(
|
||||||
|
heading=_("Stop Model"),
|
||||||
|
body=_("Are you sure you want to stop pulling '{}'?").format(model_name),
|
||||||
|
close_response="cancel"
|
||||||
|
)
|
||||||
|
dialog.add_response("cancel", _("Cancel"))
|
||||||
|
dialog.add_response("stop", _("Stop"))
|
||||||
|
dialog.set_response_appearance("stop", Adw.ResponseAppearance.DESTRUCTIVE)
|
||||||
|
dialog.choose(
|
||||||
|
parent = self.manage_models_dialog,
|
||||||
|
cancellable = None,
|
||||||
|
callback = lambda dialog, task, model_name = model_name: stop_pull_model_response(self, dialog, task, model_name)
|
||||||
|
)
|
||||||
|
|
||||||
|
# DELETE MODEL | WORKS
|
||||||
|
|
||||||
|
def delete_model_response(self, dialog, task, model_name):
|
||||||
|
if dialog.choose_finish(task) == "delete":
|
||||||
|
self.delete_model(model_name)
|
||||||
|
|
||||||
|
def delete_model(self, model_name):
|
||||||
|
dialog = Adw.AlertDialog(
|
||||||
|
heading=_("Delete Model"),
|
||||||
|
body=_("Are you sure you want to delete '{}'?").format(model_name),
|
||||||
|
close_response="cancel"
|
||||||
|
)
|
||||||
|
dialog.add_response("cancel", _("Cancel"))
|
||||||
|
dialog.add_response("delete", _("Delete"))
|
||||||
|
dialog.set_response_appearance("delete", Adw.ResponseAppearance.DESTRUCTIVE)
|
||||||
|
dialog.choose(
|
||||||
|
parent = self.manage_models_dialog,
|
||||||
|
cancellable = None,
|
||||||
|
callback = lambda dialog, task, model_name = model_name: delete_model_response(self, dialog, task, model_name)
|
||||||
|
)
|
||||||
|
|
||||||
|
# PULL MODEL | WORKS
|
||||||
|
|
||||||
|
def pull_model_response(self, dialog, task, model_name, tag_drop_down):
|
||||||
|
if dialog.choose_finish(task) == "pull":
|
||||||
|
model = f"{model_name}:{tag_drop_down.get_selected_item().get_string()}"
|
||||||
|
self.pull_model(model)
|
||||||
|
|
||||||
|
def pull_model(self, model_name):
|
||||||
|
tag_list = Gtk.StringList()
|
||||||
|
for tag in available_models[model_name]['tags']:
|
||||||
|
tag_list.append(tag)
|
||||||
|
tag_drop_down = Gtk.DropDown(
|
||||||
|
enable_search=True,
|
||||||
|
model=tag_list
|
||||||
|
)
|
||||||
|
dialog = Adw.AlertDialog(
|
||||||
|
heading=_("Pull Model"),
|
||||||
|
body=_("Please select a tag to pull '{}'").format(model_name),
|
||||||
|
extra_child=tag_drop_down,
|
||||||
|
close_response="cancel"
|
||||||
|
)
|
||||||
|
dialog.add_response("cancel", _("Cancel"))
|
||||||
|
dialog.add_response("pull", _("Pull"))
|
||||||
|
dialog.set_response_appearance("pull", Adw.ResponseAppearance.SUGGESTED)
|
||||||
|
dialog.choose(
|
||||||
|
parent = self.manage_models_dialog,
|
||||||
|
cancellable = None,
|
||||||
|
callback = lambda dialog, task, model_name = model_name, tag_drop_down = tag_drop_down: pull_model_response(self, dialog, task, model_name, tag_drop_down)
|
||||||
|
)
|
||||||
|
|
||||||
|
# REMOVE IMAGE | WORKS
|
||||||
|
|
||||||
|
def remove_image_response(self, dialog, task):
|
||||||
|
if dialog.choose_finish(task) == 'remove':
|
||||||
|
self.remove_image()
|
||||||
|
|
||||||
|
def remove_image(self):
|
||||||
|
dialog = Adw.AlertDialog(
|
||||||
|
heading=_("Remove Image"),
|
||||||
|
body=_("Are you sure you want to remove image?"),
|
||||||
|
close_response="cancel"
|
||||||
|
)
|
||||||
|
dialog.add_response("cancel", _("Cancel"))
|
||||||
|
dialog.add_response("remove", _("Remove"))
|
||||||
|
dialog.set_response_appearance("remove", Adw.ResponseAppearance.DESTRUCTIVE)
|
||||||
|
dialog.choose(
|
||||||
|
parent = self,
|
||||||
|
cancellable = None,
|
||||||
|
callback = lambda dialog, task: remove_image_response(self, dialog, task)
|
||||||
|
)
|
||||||
|
|
||||||
|
# RECONNECT REMOTE |
|
||||||
|
|
||||||
|
def reconnect_remote_response(self, dialog, task, entry):
|
||||||
|
response = dialog.choose_finish(task)
|
||||||
|
if not task or response == "remote":
|
||||||
|
self.connect_remote(entry.get_text())
|
||||||
|
elif response == "local":
|
||||||
|
self.connect_local()
|
||||||
|
elif response == "close":
|
||||||
|
self.destroy()
|
||||||
|
|
||||||
|
def reconnect_remote(self):
|
||||||
|
entry = Gtk.Entry(
|
||||||
|
css_classes = ["error"],
|
||||||
|
text = self.ollama_url
|
||||||
|
)
|
||||||
|
dialog = Adw.AlertDialog(
|
||||||
|
heading=_("Connection Error"),
|
||||||
|
body=_("The remote instance has disconnected"),
|
||||||
|
extra_child=entry
|
||||||
|
)
|
||||||
|
entry.connect("activate", lambda entry, dialog: reconnect_remote_response(self, dialog, None, entry))
|
||||||
|
dialog.add_response("close", _("Close Alpaca"))
|
||||||
|
dialog.add_response("local", _("Use local instance"))
|
||||||
|
dialog.add_response("remote", _("Connect"))
|
||||||
|
dialog.set_response_appearance("remote", Adw.ResponseAppearance.SUGGESTED)
|
||||||
|
dialog.choose(
|
||||||
|
parent = self,
|
||||||
|
cancellable = None,
|
||||||
|
callback = lambda dialog, task, entry=entry: reconnect_remote_response(self, dialog, task, entry)
|
||||||
|
)
|
||||||
23
src/local_instance.py
Normal file
23
src/local_instance.py
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# local_instance.py
|
||||||
|
import subprocess, os
|
||||||
|
from time import sleep
|
||||||
|
|
||||||
|
instance = None
|
||||||
|
port = 11435
|
||||||
|
|
||||||
|
def start(data_dir):
|
||||||
|
instance = subprocess.Popen(["/app/bin/ollama", "serve"], env={**os.environ, 'OLLAMA_HOST': f"127.0.0.1:{port}", "HOME": data_dir}, stderr=subprocess.PIPE, text=True)
|
||||||
|
print("Starting Alpaca's Ollama instance...")
|
||||||
|
sleep(1)
|
||||||
|
while True:
|
||||||
|
err = instance.stderr.readline()
|
||||||
|
if err == '' and instance.poll() is not None:
|
||||||
|
break
|
||||||
|
if 'msg="inference compute"' in err: #Ollama outputs a line with this when it finishes loading, yeah
|
||||||
|
break
|
||||||
|
print("Started Alpaca's Ollama instance")
|
||||||
|
|
||||||
|
def stop():
|
||||||
|
if instance: instance.kill()
|
||||||
|
print("Stopped Alpaca's Ollama instance")
|
||||||
|
|
||||||
@@ -33,7 +33,6 @@ 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_chat_dialog(self.props.active_window), ['<primary>e'])
|
|
||||||
self.create_action('preferences', lambda *_: AlpacaWindow.show_preferences_dialog(self.props.active_window), ['<primary>p'])
|
self.create_action('preferences', lambda *_: AlpacaWindow.show_preferences_dialog(self.props.active_window), ['<primary>p'])
|
||||||
self.create_action('about', self.on_about_action)
|
self.create_action('about', self.on_about_action)
|
||||||
|
|
||||||
@@ -48,7 +47,7 @@ class AlpacaApplication(Adw.Application):
|
|||||||
application_name='Alpaca',
|
application_name='Alpaca',
|
||||||
application_icon='com.jeffser.Alpaca',
|
application_icon='com.jeffser.Alpaca',
|
||||||
developer_name='Jeffry Samuel Eduarte Rojas',
|
developer_name='Jeffry Samuel Eduarte Rojas',
|
||||||
version='0.8.0',
|
version='0.8.5',
|
||||||
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\nJeffser (Spanish) https://jeffser.com\nDaimar Stein (Brazilian Portuguese) https://github.com/not-a-dev-stein',
|
translator_credits='Alex K (Russian) https://github.com/alexkdeveloper\nJeffser (Spanish) https://jeffser.com\nDaimar Stein (Brazilian Portuguese) https://github.com/not-a-dev-stein',
|
||||||
|
|||||||
@@ -31,7 +31,9 @@ alpaca_sources = [
|
|||||||
'main.py',
|
'main.py',
|
||||||
'window.py',
|
'window.py',
|
||||||
'connection_handler.py',
|
'connection_handler.py',
|
||||||
'available_models.py'
|
'available_models.py',
|
||||||
|
'dialogs.py',
|
||||||
|
'local_instance.py'
|
||||||
]
|
]
|
||||||
|
|
||||||
install_data(alpaca_sources, install_dir: moduledir)
|
install_data(alpaca_sources, install_dir: moduledir)
|
||||||
|
|||||||
697
src/window.py
697
src/window.py
@@ -26,8 +26,8 @@ from time import sleep
|
|||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from .connection_handler import simple_get, simple_delete, stream_post, stream_post_fake
|
|
||||||
from .available_models import available_models
|
from .available_models import available_models
|
||||||
|
from . import dialogs, local_instance, connection_handler
|
||||||
|
|
||||||
@Gtk.Template(resource_path='/com/jeffser/Alpaca/window.ui')
|
@Gtk.Template(resource_path='/com/jeffser/Alpaca/window.ui')
|
||||||
class AlpacaWindow(Adw.ApplicationWindow):
|
class AlpacaWindow(Adw.ApplicationWindow):
|
||||||
@@ -46,17 +46,13 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
|
|
||||||
#Variables
|
#Variables
|
||||||
run_on_background = False
|
run_on_background = False
|
||||||
ollama_url = ""
|
|
||||||
remote_url = ""
|
remote_url = ""
|
||||||
run_remote = False
|
run_remote = False
|
||||||
local_ollama_port = 11435
|
|
||||||
local_ollama_instance = None
|
|
||||||
local_models = []
|
local_models = []
|
||||||
pulling_models = {}
|
pulling_models = {}
|
||||||
current_chat_elements = [] #Used for deleting
|
current_chat_elements = [] #Used for deleting
|
||||||
chats = {"chats": {_("New Chat"): {"messages": []}}, "selected_chat": "New Chat"}
|
chats = {"chats": {_("New Chat"): {"messages": []}}, "selected_chat": "New Chat"}
|
||||||
attached_image = {"path": None, "base64": None}
|
attached_image = {"path": None, "base64": None}
|
||||||
first_time_setup = False
|
|
||||||
|
|
||||||
#Elements
|
#Elements
|
||||||
preferences_dialog = Gtk.Template.Child()
|
preferences_dialog = Gtk.Template.Child()
|
||||||
@@ -80,7 +76,6 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
model_drop_down = Gtk.Template.Child()
|
model_drop_down = Gtk.Template.Child()
|
||||||
model_string_list = Gtk.Template.Child()
|
model_string_list = Gtk.Template.Child()
|
||||||
|
|
||||||
manage_models_button = Gtk.Template.Child()
|
|
||||||
manage_models_dialog = Gtk.Template.Child()
|
manage_models_dialog = Gtk.Template.Child()
|
||||||
pulling_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()
|
||||||
@@ -112,7 +107,8 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
_("Please select a model before chatting"),
|
_("Please select a model before chatting"),
|
||||||
_("Chat cannot be cleared while receiving a message"),
|
_("Chat cannot be cleared while receiving a message"),
|
||||||
_("That tag is already being pulled"),
|
_("That tag is already being pulled"),
|
||||||
_("That tag has been pulled already")
|
_("That tag has been pulled already"),
|
||||||
|
_("Code copied to the clipboard")
|
||||||
],
|
],
|
||||||
"good": [
|
"good": [
|
||||||
_("Model deleted successfully"),
|
_("Model deleted successfully"),
|
||||||
@@ -122,6 +118,127 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
style_manager = Adw.StyleManager()
|
||||||
|
|
||||||
|
@Gtk.Template.Callback()
|
||||||
|
def verify_if_image_can_be_used(self, pspec=None, user_data=None):
|
||||||
|
if self.model_drop_down.get_selected_item() == None: return True
|
||||||
|
selected = self.model_drop_down.get_selected_item().get_string().split(":")[0]
|
||||||
|
if selected in ['llava', 'bakllava', 'moondream', 'llava-llama3']:
|
||||||
|
self.image_button.set_sensitive(True)
|
||||||
|
self.image_button.set_tooltip_text(_("Upload image"))
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
self.image_button.set_sensitive(False)
|
||||||
|
self.image_button.set_tooltip_text(_("Only available on selected models"))
|
||||||
|
self.image_button.set_css_classes([])
|
||||||
|
self.image_button.get_child().set_icon_name("image-x-generic-symbolic")
|
||||||
|
self.attached_image = {"path": None, "base64": None}
|
||||||
|
return False
|
||||||
|
|
||||||
|
@Gtk.Template.Callback()
|
||||||
|
def send_message(self, button=None):
|
||||||
|
if button and self.bot_message: #STOP BUTTON
|
||||||
|
if self.loading_spinner: self.chat_container.remove(self.loading_spinner)
|
||||||
|
if self.verify_if_image_can_be_used(): self.image_button.set_sensitive(True)
|
||||||
|
self.image_button.set_css_classes([])
|
||||||
|
self.image_button.get_child().set_icon_name("image-x-generic-symbolic")
|
||||||
|
self.attached_image = {"path": None, "base64": None}
|
||||||
|
self.toggle_ui_sensitive(True)
|
||||||
|
self.send_button.set_css_classes(["suggested-action"])
|
||||||
|
self.send_button.get_child().set_label("Send")
|
||||||
|
self.send_button.get_child().set_icon_name("send-to-symbolic")
|
||||||
|
self.bot_message = None
|
||||||
|
self.bot_message_box = None
|
||||||
|
self.bot_message_view = None
|
||||||
|
else:
|
||||||
|
if not self.message_text_view.get_buffer().get_text(self.message_text_view.get_buffer().get_start_iter(), self.message_text_view.get_buffer().get_end_iter(), False): return
|
||||||
|
current_model = self.model_drop_down.get_selected_item()
|
||||||
|
if current_model is None:
|
||||||
|
self.show_toast("info", 0, self.main_overlay)
|
||||||
|
return
|
||||||
|
formated_datetime = datetime.now().strftime("%Y/%m/%d %H:%M")
|
||||||
|
self.chats["chats"][self.chats["selected_chat"]]["messages"].append({
|
||||||
|
"role": "user",
|
||||||
|
"model": "User",
|
||||||
|
"date": formated_datetime,
|
||||||
|
"content": self.message_text_view.get_buffer().get_text(self.message_text_view.get_buffer().get_start_iter(), self.message_text_view.get_buffer().get_end_iter(), False)
|
||||||
|
})
|
||||||
|
data = {
|
||||||
|
"model": current_model.get_string(),
|
||||||
|
"messages": self.chats["chats"][self.chats["selected_chat"]]["messages"]
|
||||||
|
}
|
||||||
|
if self.verify_if_image_can_be_used() and self.attached_image["base64"] is not None:
|
||||||
|
data["messages"][-1]["images"] = [self.attached_image["base64"]]
|
||||||
|
self.send_button.set_css_classes(["destructive-action"])
|
||||||
|
self.send_button.get_child().set_label("Stop")
|
||||||
|
self.send_button.get_child().set_icon_name("edit-delete-symbolic")
|
||||||
|
self.toggle_ui_sensitive(False)
|
||||||
|
self.image_button.set_sensitive(False)
|
||||||
|
|
||||||
|
self.show_message(self.message_text_view.get_buffer().get_text(self.message_text_view.get_buffer().get_start_iter(), self.message_text_view.get_buffer().get_end_iter(), False), False, f"\n\n<small>{formated_datetime}</small>", self.attached_image["base64"])
|
||||||
|
self.message_text_view.get_buffer().set_text("", 0)
|
||||||
|
self.loading_spinner = Gtk.Spinner(spinning=True, margin_top=12, margin_bottom=12, hexpand=True)
|
||||||
|
self.chat_container.append(self.loading_spinner)
|
||||||
|
self.show_message("", True)
|
||||||
|
|
||||||
|
vadjustment = self.chat_window.get_vadjustment()
|
||||||
|
vadjustment.set_value(vadjustment.get_upper())
|
||||||
|
thread = threading.Thread(target=self.run_message, args=(data['messages'], data['model']))
|
||||||
|
thread.start()
|
||||||
|
|
||||||
|
@Gtk.Template.Callback()
|
||||||
|
def manage_models_button_activate(self, button=None):
|
||||||
|
self.update_list_local_models()
|
||||||
|
self.manage_models_dialog.present(self)
|
||||||
|
|
||||||
|
@Gtk.Template.Callback()
|
||||||
|
def welcome_carousel_page_changed(self, carousel, index):
|
||||||
|
if index == 0: self.welcome_previous_button.set_sensitive(False)
|
||||||
|
else: self.welcome_previous_button.set_sensitive(True)
|
||||||
|
if index == carousel.get_n_pages()-1: self.welcome_next_button.set_label("Connect")
|
||||||
|
else: self.welcome_next_button.set_label("Next")
|
||||||
|
|
||||||
|
@Gtk.Template.Callback()
|
||||||
|
def welcome_previous_button_activate(self, button):
|
||||||
|
self.welcome_carousel.scroll_to(self.welcome_carousel.get_nth_page(self.welcome_carousel.get_position()-1), True)
|
||||||
|
|
||||||
|
@Gtk.Template.Callback()
|
||||||
|
def welcome_next_button_activate(self, button):
|
||||||
|
if button.get_label() == "Next": self.welcome_carousel.scroll_to(self.welcome_carousel.get_nth_page(self.welcome_carousel.get_position()+1), True)
|
||||||
|
else:
|
||||||
|
self.welcome_dialog.force_close()
|
||||||
|
if not self.verify_connection():
|
||||||
|
self.connection_error()
|
||||||
|
|
||||||
|
@Gtk.Template.Callback()
|
||||||
|
def open_image(self, button):
|
||||||
|
if "destructive-action" in button.get_css_classes():
|
||||||
|
dialogs.remove_image(self)
|
||||||
|
else:
|
||||||
|
file_dialog = Gtk.FileDialog(default_filter=self.file_filter_image)
|
||||||
|
file_dialog.open(self, None, self.load_image)
|
||||||
|
|
||||||
|
@Gtk.Template.Callback()
|
||||||
|
def chat_changed(self, listbox, row):
|
||||||
|
if row and row.get_name() != self.chats["selected_chat"]:
|
||||||
|
self.chats["selected_chat"] = row.get_name()
|
||||||
|
self.load_history_into_chat()
|
||||||
|
if len(self.chats["chats"][self.chats["selected_chat"]]["messages"]) > 0:
|
||||||
|
for i in range(self.model_string_list.get_n_items()):
|
||||||
|
if self.model_string_list.get_string(i) == self.chats["chats"][self.chats["selected_chat"]]["messages"][-1]["model"]:
|
||||||
|
self.model_drop_down.set_selected(i)
|
||||||
|
break
|
||||||
|
|
||||||
|
@Gtk.Template.Callback()
|
||||||
|
def change_remote_url(self, entry):
|
||||||
|
self.remote_url = entry.get_text()
|
||||||
|
if self.run_remote:
|
||||||
|
connection_handler.url = self.remote_url
|
||||||
|
if self.verify_connection() == False:
|
||||||
|
entry.set_css_classes(["error"])
|
||||||
|
self.show_toast("error", 1, self.preferences_dialog)
|
||||||
|
|
||||||
def show_toast(self, message_type:str, message_id:int, overlay):
|
def show_toast(self, message_type:str, message_id:int, overlay):
|
||||||
if message_type not in self.toast_messages or message_id > len(self.toast_messages[message_type] or message_id < 0):
|
if message_type not in self.toast_messages or message_id > len(self.toast_messages[message_type] or message_id < 0):
|
||||||
message_type = "error"
|
message_type = "error"
|
||||||
@@ -174,7 +291,8 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
message_box = Gtk.Box(
|
message_box = Gtk.Box(
|
||||||
orientation=1,
|
orientation=1,
|
||||||
halign='fill',
|
halign='fill',
|
||||||
css_classes=[None if bot else "card"]
|
css_classes=[None if bot else "card"],
|
||||||
|
margin_start=0 if bot else 50,
|
||||||
)
|
)
|
||||||
message_text.set_valign(Gtk.Align.CENTER)
|
message_text.set_valign(Gtk.Align.CENTER)
|
||||||
|
|
||||||
@@ -209,22 +327,9 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
self.bot_message_view = message_text
|
self.bot_message_view = message_text
|
||||||
self.bot_message_box = message_box
|
self.bot_message_box = message_box
|
||||||
|
|
||||||
def verify_if_image_can_be_used(self, pspec=None, user_data=None):
|
|
||||||
if self.model_drop_down.get_selected_item() == None: return True
|
|
||||||
selected = self.model_drop_down.get_selected_item().get_string().split(":")[0]
|
|
||||||
if selected in ['llava', 'bakllava', 'moondream', 'llava-llama3']:
|
|
||||||
self.image_button.set_sensitive(True)
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
self.image_button.set_sensitive(False)
|
|
||||||
self.image_button.set_css_classes([])
|
|
||||||
self.image_button.get_child().set_icon_name("image-x-generic-symbolic")
|
|
||||||
self.attached_image = {"path": None, "base64": None}
|
|
||||||
return False
|
|
||||||
|
|
||||||
def update_list_local_models(self):
|
def update_list_local_models(self):
|
||||||
self.local_models = []
|
self.local_models = []
|
||||||
response = simple_get(self.ollama_url + "/api/tags")
|
response = connection_handler.simple_get(connection_handler.url + "/api/tags")
|
||||||
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':
|
||||||
@@ -244,7 +349,7 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
valign = 3,
|
valign = 3,
|
||||||
css_classes = ["error"]
|
css_classes = ["error"]
|
||||||
)
|
)
|
||||||
button.connect("clicked", lambda button=button, model_name=model["name"]: self.model_delete_button_activate(model_name))
|
button.connect("clicked", lambda button=button, model_name=model["name"]: dialogs.delete_model(self, model_name))
|
||||||
model_row.add_suffix(button)
|
model_row.add_suffix(button)
|
||||||
self.local_model_list_box.append(model_row)
|
self.local_model_list_box.append(model_row)
|
||||||
|
|
||||||
@@ -257,12 +362,11 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
self.connection_error()
|
self.connection_error()
|
||||||
|
|
||||||
def verify_connection(self):
|
def verify_connection(self):
|
||||||
response = simple_get(self.ollama_url)
|
response = connection_handler.simple_get(connection_handler.url)
|
||||||
if response['status'] == 'ok':
|
if response['status'] == 'ok':
|
||||||
if "Ollama is running" in response['text']:
|
if "Ollama is running" in response['text']:
|
||||||
with open(os.path.join(self.config_dir, "server.json"), "w+") as f:
|
with open(os.path.join(self.config_dir, "server.json"), "w+") as f:
|
||||||
json.dump({'remote_url': self.remote_url, 'run_remote': self.run_remote, 'local_port': self.local_ollama_port, 'run_on_background': self.run_on_background}, f)
|
json.dump({'remote_url': self.remote_url, 'run_remote': self.run_remote, 'local_port': local_instance.port, 'run_on_background': self.run_on_background}, f)
|
||||||
#self.message_text_view.grab_focus_without_selecting()
|
|
||||||
self.update_list_local_models()
|
self.update_list_local_models()
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
@@ -301,8 +405,6 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
wrap_mode= Gtk.WrapMode.WORD,
|
wrap_mode= Gtk.WrapMode.WORD,
|
||||||
margin_top=12,
|
margin_top=12,
|
||||||
margin_bottom=12,
|
margin_bottom=12,
|
||||||
margin_start=12,
|
|
||||||
margin_end=12,
|
|
||||||
hexpand=True,
|
hexpand=True,
|
||||||
css_classes=["flat"]
|
css_classes=["flat"]
|
||||||
)
|
)
|
||||||
@@ -336,18 +438,50 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
self.bot_message_box.append(message_text)
|
self.bot_message_box.append(message_text)
|
||||||
else:
|
else:
|
||||||
language = GtkSource.LanguageManager.get_default().get_language(part['language'])
|
language = GtkSource.LanguageManager.get_default().get_language(part['language'])
|
||||||
|
if language:
|
||||||
buffer = GtkSource.Buffer.new_with_language(language)
|
buffer = GtkSource.Buffer.new_with_language(language)
|
||||||
|
else:
|
||||||
|
buffer = GtkSource.Buffer()
|
||||||
buffer.set_text(part['text'])
|
buffer.set_text(part['text'])
|
||||||
buffer.set_style_scheme(GtkSource.StyleSchemeManager.get_default().get_scheme('classic-dark'))
|
if self.style_manager.get_dark():
|
||||||
|
source_style = GtkSource.StyleSchemeManager.get_default().get_scheme('Adwaita-dark')
|
||||||
|
else:
|
||||||
|
source_style = GtkSource.StyleSchemeManager.get_default().get_scheme('Adwaita')
|
||||||
|
buffer.set_style_scheme(source_style)
|
||||||
source_view = GtkSource.View(
|
source_view = GtkSource.View(
|
||||||
auto_indent=True, indent_width=4, buffer=buffer, show_line_numbers=True
|
auto_indent=True, indent_width=4, buffer=buffer, show_line_numbers=True,
|
||||||
|
top_margin=6, bottom_margin=6, left_margin=12, right_margin=12
|
||||||
)
|
)
|
||||||
source_view.set_editable(False)
|
source_view.set_editable(False)
|
||||||
source_view.get_style_context().add_class("card")
|
code_block_box = Gtk.Box(css_classes=["card"], orientation=1, overflow=1)
|
||||||
self.bot_message_box.append(source_view)
|
title_box = Gtk.Box(margin_start=12, margin_top=3, margin_bottom=3, margin_end=3)
|
||||||
|
title_box.append(Gtk.Label(label=language.get_name() if language else part['language'], hexpand=True, xalign=0))
|
||||||
|
copy_button = Gtk.Button(icon_name="edit-copy-symbolic", css_classes=["flat", "circular"])
|
||||||
|
copy_button.connect("clicked", self.on_copy_code_clicked, buffer)
|
||||||
|
title_box.append(copy_button)
|
||||||
|
code_block_box.append(title_box)
|
||||||
|
code_block_box.append(Gtk.Separator())
|
||||||
|
code_block_box.append(source_view)
|
||||||
|
self.bot_message_box.append(code_block_box)
|
||||||
|
self.style_manager.connect("notify::dark", self.on_theme_changed, buffer)
|
||||||
self.bot_message = None
|
self.bot_message = None
|
||||||
self.bot_message_box = None
|
self.bot_message_box = None
|
||||||
|
|
||||||
|
def on_theme_changed(self, manager, dark, buffer):
|
||||||
|
if manager.get_dark():
|
||||||
|
source_style = GtkSource.StyleSchemeManager.get_default().get_scheme('Adwaita-dark')
|
||||||
|
else:
|
||||||
|
source_style = GtkSource.StyleSchemeManager.get_default().get_scheme('Adwaita')
|
||||||
|
buffer.set_style_scheme(source_style)
|
||||||
|
|
||||||
|
def on_copy_code_clicked(self, btn, text_buffer):
|
||||||
|
clipboard = Gdk.Display().get_default().get_clipboard()
|
||||||
|
start = text_buffer.get_start_iter()
|
||||||
|
end = text_buffer.get_end_iter()
|
||||||
|
text = text_buffer.get_text(start, end, False)
|
||||||
|
clipboard.set(text)
|
||||||
|
self.show_toast("info", 4, self.main_overlay)
|
||||||
|
|
||||||
def update_bot_message(self, data):
|
def update_bot_message(self, data):
|
||||||
if self.bot_message is None:
|
if self.bot_message is None:
|
||||||
self.save_history()
|
self.save_history()
|
||||||
@@ -373,92 +507,24 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
GLib.idle_add(self.bot_message.insert, self.bot_message.get_end_iter(), data['message']['content'])
|
GLib.idle_add(self.bot_message.insert, self.bot_message.get_end_iter(), data['message']['content'])
|
||||||
self.chats["chats"][self.chats["selected_chat"]]["messages"][-1]['content'] += data['message']['content']
|
self.chats["chats"][self.chats["selected_chat"]]["messages"][-1]['content'] += data['message']['content']
|
||||||
|
|
||||||
|
def toggle_ui_sensitive(self, status):
|
||||||
|
for element in [self.chat_list_box, self.export_chat_button, self.import_chat_button, self.add_chat_button]:
|
||||||
|
element.set_sensitive(status)
|
||||||
|
|
||||||
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 = connection_handler.stream_post(f"{connection_handler.url}/api/chat", data=json.dumps({"model": model, "messages": messages}), callback=self.update_bot_message)
|
||||||
GLib.idle_add(self.add_code_blocks)
|
GLib.idle_add(self.add_code_blocks)
|
||||||
GLib.idle_add(self.send_button.set_css_classes, ["suggested-action"])
|
GLib.idle_add(self.send_button.set_css_classes, ["suggested-action"])
|
||||||
GLib.idle_add(self.send_button.get_child().set_label, "Send")
|
GLib.idle_add(self.send_button.get_child().set_label, "Send")
|
||||||
GLib.idle_add(self.send_button.get_child().set_icon_name, "send-to-symbolic")
|
GLib.idle_add(self.send_button.get_child().set_icon_name, "send-to-symbolic")
|
||||||
GLib.idle_add(self.chat_list_box.set_sensitive, True)
|
GLib.idle_add(self.toggle_ui_sensitive, True)
|
||||||
GLib.idle_add(self.export_chat_button.set_sensitive, True)
|
|
||||||
GLib.idle_add(self.import_chat_button.set_sensitive, True)
|
|
||||||
GLib.idle_add(self.add_chat_button.set_sensitive, True)
|
|
||||||
if self.verify_if_image_can_be_used(): GLib.idle_add(self.image_button.set_sensitive, True)
|
if self.verify_if_image_can_be_used(): GLib.idle_add(self.image_button.set_sensitive, True)
|
||||||
GLib.idle_add(self.image_button.set_css_classes, [])
|
GLib.idle_add(self.image_button.set_css_classes, [])
|
||||||
GLib.idle_add(self.image_button.get_child().set_icon_name, "image-x-generic-symbolic")
|
GLib.idle_add(self.image_button.get_child().set_icon_name, "image-x-generic-symbolic")
|
||||||
self.attached_image = {"path": None, "base64": None}
|
self.attached_image = {"path": None, "base64": None}
|
||||||
# GLib.idle_add(self.message_text_view.set_sensitive, True)
|
|
||||||
if response['status'] == 'error':
|
if response['status'] == 'error':
|
||||||
GLib.idle_add(self.connection_error)
|
GLib.idle_add(self.connection_error)
|
||||||
|
|
||||||
def send_message(self, button=None):
|
|
||||||
if button and self.bot_message: #STOP BUTTON
|
|
||||||
if self.loading_spinner: self.chat_container.remove(self.loading_spinner)
|
|
||||||
if self.verify_if_image_can_be_used(): self.image_button.set_sensitive(True)
|
|
||||||
self.image_button.set_css_classes([])
|
|
||||||
self.image_button.get_child().set_icon_name("image-x-generic-symbolic")
|
|
||||||
self.attached_image = {"path": None, "base64": None}
|
|
||||||
self.chat_list_box.set_sensitive(True)
|
|
||||||
self.add_chat_button.set_sensitive(True)
|
|
||||||
self.export_chat_button.set_sensitive(True)
|
|
||||||
self.import_chat_button.set_sensitive(True)
|
|
||||||
# self.message_text_view.set_sensitive(True)
|
|
||||||
self.send_button.set_css_classes(["suggested-action"])
|
|
||||||
self.send_button.get_child().set_label("Send")
|
|
||||||
self.send_button.get_child().set_icon_name("send-to-symbolic")
|
|
||||||
self.bot_message = None
|
|
||||||
self.bot_message_box = None
|
|
||||||
self.bot_message_view = None
|
|
||||||
else:
|
|
||||||
if not self.message_text_view.get_buffer().get_text(self.message_text_view.get_buffer().get_start_iter(), self.message_text_view.get_buffer().get_end_iter(), False): return
|
|
||||||
current_model = self.model_drop_down.get_selected_item()
|
|
||||||
if current_model is None:
|
|
||||||
self.show_toast("info", 0, self.main_overlay)
|
|
||||||
return
|
|
||||||
formated_datetime = datetime.now().strftime("%Y/%m/%d %H:%M")
|
|
||||||
self.chats["chats"][self.chats["selected_chat"]]["messages"].append({
|
|
||||||
"role": "user",
|
|
||||||
"model": "User",
|
|
||||||
"date": formated_datetime,
|
|
||||||
"content": self.message_text_view.get_buffer().get_text(self.message_text_view.get_buffer().get_start_iter(), self.message_text_view.get_buffer().get_end_iter(), False)
|
|
||||||
})
|
|
||||||
data = {
|
|
||||||
"model": current_model.get_string(),
|
|
||||||
"messages": self.chats["chats"][self.chats["selected_chat"]]["messages"]
|
|
||||||
}
|
|
||||||
if self.verify_if_image_can_be_used() and self.attached_image["base64"] is not None:
|
|
||||||
data["messages"][-1]["images"] = [self.attached_image["base64"]]
|
|
||||||
# self.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.export_chat_button.set_sensitive(False)
|
|
||||||
self.import_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.loading_spinner = Gtk.Spinner(spinning=True, margin_top=12, margin_bottom=12, hexpand=True)
|
|
||||||
self.chat_container.append(self.loading_spinner)
|
|
||||||
self.show_message("", True)
|
|
||||||
|
|
||||||
vadjustment = self.chat_window.get_vadjustment()
|
|
||||||
vadjustment.set_value(vadjustment.get_upper())
|
|
||||||
thread = threading.Thread(target=self.run_message, args=(data['messages'], data['model']))
|
|
||||||
thread.start()
|
|
||||||
|
|
||||||
def delete_model(self, dialog, task, model_name):
|
|
||||||
if dialog.choose_finish(task) == "delete":
|
|
||||||
response = simple_delete(self.ollama_url + "/api/delete", data={"name": model_name})
|
|
||||||
self.update_list_local_models()
|
|
||||||
if response['status'] == 'ok':
|
|
||||||
self.show_toast("good", 0, self.manage_models_overlay)
|
|
||||||
else:
|
|
||||||
self.manage_models_dialog.close()
|
|
||||||
self.connection_error()
|
|
||||||
|
|
||||||
def pull_model_update(self, data, model_name):
|
def pull_model_update(self, data, model_name):
|
||||||
if model_name in list(self.pulling_models.keys()):
|
if model_name in list(self.pulling_models.keys()):
|
||||||
GLib.idle_add(self.pulling_models[model_name].set_subtitle, data['status'] + (f" | {round(data['completed'] / data['total'] * 100, 2)}%" if 'completed' in data and 'total' in data else ""))
|
GLib.idle_add(self.pulling_models[model_name].set_subtitle, data['status'] + (f" | {round(data['completed'] / data['total'] * 100, 2)}%" if 'completed' in data and 'total' in data else ""))
|
||||||
@@ -467,111 +533,49 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
GLib.idle_add(self.pulling_model_list_box.set_visible, False)
|
GLib.idle_add(self.pulling_model_list_box.set_visible, False)
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
def pull_model(self, model_name, tag):
|
def pull_model_process(self, model):
|
||||||
data = {"name":f"{model_name}:{tag}"}
|
data = {"name":model}
|
||||||
response = stream_post(f"{self.ollama_url}/api/pull", data=json.dumps(data), callback=lambda data, model_name=f"{model_name}:{tag}": self.pull_model_update(data, model_name))
|
response = connection_handler.stream_post(f"{connection_handler.url}/api/pull", data=json.dumps(data), callback=lambda data, model_name=model: self.pull_model_update(data, model_name))
|
||||||
GLib.idle_add(self.update_list_local_models)
|
GLib.idle_add(self.update_list_local_models)
|
||||||
|
|
||||||
if response['status'] == 'ok':
|
if response['status'] == 'ok':
|
||||||
GLib.idle_add(self.show_notification, _("Task Complete"), _("Model '{}' pulled successfully.").format(f"{model_name}:{tag}"), True, Gio.ThemedIcon.new("emblem-ok-symbolic"))
|
GLib.idle_add(self.show_notification, _("Task Complete"), _("Model '{}' pulled successfully.").format(model), True, Gio.ThemedIcon.new("emblem-ok-symbolic"))
|
||||||
GLib.idle_add(self.show_toast, "good", 1, self.manage_models_overlay)
|
GLib.idle_add(self.show_toast, "good", 1, self.manage_models_overlay)
|
||||||
GLib.idle_add(self.pulling_models[f"{model_name}:{tag}"].get_parent().remove, self.pulling_models[f"{model_name}:{tag}"])
|
GLib.idle_add(self.pulling_models[model].get_parent().remove, self.pulling_models[model])
|
||||||
del self.pulling_models[f"{model_name}:{tag}"]
|
del self.pulling_models[model]
|
||||||
else:
|
else:
|
||||||
GLib.idle_add(self.show_notification, _("Pull Model Error"), _("Failed to pull model '{}' due to network error.").format(f"{model_name}:{tag}"), True, Gio.ThemedIcon.new("dialog-error-symbolic"))
|
GLib.idle_add(self.show_notification, _("Pull Model Error"), _("Failed to pull model '{}' due to network error.").format(model), True, Gio.ThemedIcon.new("dialog-error-symbolic"))
|
||||||
GLib.idle_add(self.pulling_models[f"{model_name}:{tag}"].get_parent().remove, self.pulling_models[f"{model_name}:{tag}"])
|
GLib.idle_add(self.pulling_models[model].get_parent().remove, self.pulling_models[model])
|
||||||
del self.pulling_models[f"{model_name}:{tag}"]
|
del self.pulling_models[model]
|
||||||
GLib.idle_add(self.manage_models_dialog.close)
|
GLib.idle_add(self.manage_models_dialog.close)
|
||||||
GLib.idle_add(self.connection_error)
|
GLib.idle_add(self.connection_error)
|
||||||
if len(list(self.pulling_models.keys())) == 0:
|
if len(list(self.pulling_models.keys())) == 0:
|
||||||
GLib.idle_add(self.pulling_model_list_box.set_visible, False)
|
GLib.idle_add(self.pulling_model_list_box.set_visible, False)
|
||||||
|
|
||||||
def stop_pull_model(self, dialog, task, model_name):
|
def pull_model(self, model):
|
||||||
if dialog.choose_finish(task) == "stop":
|
if model in list(self.pulling_models.keys()):
|
||||||
GLib.idle_add(self.pulling_models[model_name].get_parent().remove, self.pulling_models[model_name])
|
|
||||||
del self.pulling_models[model_name]
|
|
||||||
|
|
||||||
def stop_pull_model_dialog(self, model_name):
|
|
||||||
dialog = Adw.AlertDialog(
|
|
||||||
heading=_("Stop Model"),
|
|
||||||
body=_("Are you sure you want to stop pulling '{}'?").format(model_name),
|
|
||||||
close_response="cancel"
|
|
||||||
)
|
|
||||||
dialog.add_response("cancel", _("Cancel"))
|
|
||||||
dialog.add_response("stop", _("Stop"))
|
|
||||||
dialog.set_response_appearance("stop", Adw.ResponseAppearance.DESTRUCTIVE)
|
|
||||||
dialog.choose(
|
|
||||||
parent = self.manage_models_dialog,
|
|
||||||
cancellable = None,
|
|
||||||
callback = lambda dialog, task, model_name = model_name: self.stop_pull_model(dialog, task, model_name)
|
|
||||||
)
|
|
||||||
|
|
||||||
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()):
|
|
||||||
self.show_toast("info", 3, self.manage_models_overlay)
|
self.show_toast("info", 3, self.manage_models_overlay)
|
||||||
return
|
return
|
||||||
if f"{model_name}:{tag}" in self.local_models:
|
if model in self.local_models:
|
||||||
self.show_toast("info", 4, self.manage_models_overlay)
|
self.show_toast("info", 4, self.manage_models_overlay)
|
||||||
return
|
return
|
||||||
#self.pull_model_status_page.set_description(f"{model_name}:{tag}")
|
|
||||||
self.pulling_model_list_box.set_visible(True)
|
self.pulling_model_list_box.set_visible(True)
|
||||||
model_row = Adw.ActionRow(
|
model_row = Adw.ActionRow(
|
||||||
title = f"{model_name}:{tag}",
|
title = model
|
||||||
subtitle = ""
|
|
||||||
)
|
)
|
||||||
thread = threading.Thread(target=self.pull_model, args=(model_name, tag))
|
thread = threading.Thread(target=self.pull_model_process, kwargs={"model": model})
|
||||||
self.pulling_models[f"{model_name}:{tag}"] = model_row
|
self.pulling_models[model] = model_row
|
||||||
button = Gtk.Button(
|
button = Gtk.Button(
|
||||||
icon_name = "media-playback-stop-symbolic",
|
icon_name = "media-playback-stop-symbolic",
|
||||||
vexpand = False,
|
vexpand = False,
|
||||||
valign = 3,
|
valign = 3,
|
||||||
css_classes = ["error"]
|
css_classes = ["error"]
|
||||||
)
|
)
|
||||||
button.connect("clicked", lambda button, model_name=f"{model_name}:{tag}" : self.stop_pull_model_dialog(model_name))
|
button.connect("clicked", lambda button, model_name=model : dialogs.stop_pull_model(self, model_name))
|
||||||
model_row.add_suffix(button)
|
model_row.add_suffix(button)
|
||||||
self.pulling_model_list_box.append(model_row)
|
self.pulling_model_list_box.append(model_row)
|
||||||
thread.start()
|
thread.start()
|
||||||
|
|
||||||
def model_delete_button_activate(self, model_name):
|
|
||||||
dialog = Adw.AlertDialog(
|
|
||||||
heading=_("Delete Model"),
|
|
||||||
body=_("Are you sure you want to delete '{}'?").format(model_name),
|
|
||||||
close_response="cancel"
|
|
||||||
)
|
|
||||||
dialog.add_response("cancel", _("Cancel"))
|
|
||||||
dialog.add_response("delete", _("Delete"))
|
|
||||||
dialog.set_response_appearance("delete", Adw.ResponseAppearance.DESTRUCTIVE)
|
|
||||||
dialog.choose(
|
|
||||||
parent = self.manage_models_dialog,
|
|
||||||
cancellable = None,
|
|
||||||
callback = lambda dialog, task, model_name = model_name: self.delete_model(dialog, task, model_name)
|
|
||||||
)
|
|
||||||
|
|
||||||
def model_pull_button_activate(self, model_name):
|
|
||||||
tag_list = Gtk.StringList()
|
|
||||||
for tag in available_models[model_name]['tags']:
|
|
||||||
tag_list.append(tag)
|
|
||||||
tag_drop_down = Gtk.DropDown(
|
|
||||||
enable_search=True,
|
|
||||||
model=tag_list
|
|
||||||
)
|
|
||||||
dialog = Adw.AlertDialog(
|
|
||||||
heading=_("Pull Model"),
|
|
||||||
body=_("Please select a tag to pull '{}'").format(model_name),
|
|
||||||
extra_child=tag_drop_down,
|
|
||||||
close_response="cancel"
|
|
||||||
)
|
|
||||||
dialog.add_response("cancel", _("Cancel"))
|
|
||||||
dialog.add_response("pull", _("Pull"))
|
|
||||||
dialog.set_response_appearance("pull", Adw.ResponseAppearance.SUGGESTED)
|
|
||||||
dialog.choose(
|
|
||||||
parent = self.manage_models_dialog,
|
|
||||||
cancellable = None,
|
|
||||||
callback = lambda dialog, task, model_name = model_name, tag_drop_down = tag_drop_down: self.pull_model_start(dialog, task, model_name, tag_drop_down)
|
|
||||||
)
|
|
||||||
|
|
||||||
def update_list_available_models(self):
|
def update_list_available_models(self):
|
||||||
self.available_model_list_box.remove_all()
|
self.available_model_list_box.remove_all()
|
||||||
for name, model_info in available_models.items():
|
for name, model_info in available_models.items():
|
||||||
@@ -592,58 +596,11 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
css_classes = ["accent"]
|
css_classes = ["accent"]
|
||||||
)
|
)
|
||||||
link_button.connect("clicked", lambda button=link_button, link=model_info["url"]: webbrowser.open(link))
|
link_button.connect("clicked", lambda button=link_button, link=model_info["url"]: webbrowser.open(link))
|
||||||
pull_button.connect("clicked", lambda button=pull_button, model_name=name: self.model_pull_button_activate(model_name))
|
pull_button.connect("clicked", lambda button=pull_button, model_name=name: dialogs.pull_model(self, model_name))
|
||||||
model.add_suffix(link_button)
|
model.add_suffix(link_button)
|
||||||
model.add_suffix(pull_button)
|
model.add_suffix(pull_button)
|
||||||
self.available_model_list_box.append(model)
|
self.available_model_list_box.append(model)
|
||||||
|
|
||||||
def manage_models_button_activate(self, button=None):
|
|
||||||
self.update_list_local_models()
|
|
||||||
self.manage_models_dialog.present(self)
|
|
||||||
|
|
||||||
def welcome_carousel_page_changed(self, carousel, index):
|
|
||||||
if index == 0: self.welcome_previous_button.set_sensitive(False)
|
|
||||||
else: self.welcome_previous_button.set_sensitive(True)
|
|
||||||
if index == carousel.get_n_pages()-1: self.welcome_next_button.set_label("Connect")
|
|
||||||
else: self.welcome_next_button.set_label("Next")
|
|
||||||
|
|
||||||
def welcome_previous_button_activate(self, button):
|
|
||||||
self.welcome_carousel.scroll_to(self.welcome_carousel.get_nth_page(self.welcome_carousel.get_position()-1), True)
|
|
||||||
|
|
||||||
def welcome_next_button_activate(self, button):
|
|
||||||
if button.get_label() == "Next": self.welcome_carousel.scroll_to(self.welcome_carousel.get_nth_page(self.welcome_carousel.get_position()+1), True)
|
|
||||||
else:
|
|
||||||
self.welcome_dialog.force_close()
|
|
||||||
if not self.verify_connection():
|
|
||||||
self.connection_error()
|
|
||||||
|
|
||||||
def clear_chat(self):
|
|
||||||
for widget in list(self.chat_container): self.chat_container.remove(widget)
|
|
||||||
self.chats["chats"][self.chats["selected_chat"]]["messages"] = []
|
|
||||||
|
|
||||||
def clear_chat_dialog_response(self, dialog, task):
|
|
||||||
if dialog.choose_finish(task) == "clear":
|
|
||||||
self.clear_chat()
|
|
||||||
self.save_history()
|
|
||||||
|
|
||||||
def clear_chat_dialog(self):
|
|
||||||
if self.bot_message is not None:
|
|
||||||
self.show_toast("info", 1, self.main_overlay)
|
|
||||||
return
|
|
||||||
dialog = Adw.AlertDialog(
|
|
||||||
heading=_("Clear Chat"),
|
|
||||||
body=_("Are you sure you want to clear the chat?"),
|
|
||||||
close_response="cancel"
|
|
||||||
)
|
|
||||||
dialog.add_response("cancel", _("Cancel"))
|
|
||||||
dialog.add_response("clear", _("Clear"))
|
|
||||||
dialog.set_response_appearance("clear", Adw.ResponseAppearance.DESTRUCTIVE)
|
|
||||||
dialog.choose(
|
|
||||||
parent = self,
|
|
||||||
cancellable = None,
|
|
||||||
callback = self.clear_chat_dialog_response
|
|
||||||
)
|
|
||||||
|
|
||||||
def save_history(self):
|
def save_history(self):
|
||||||
with open(os.path.join(self.config_dir, "chats.json"), "w+") as f:
|
with open(os.path.join(self.config_dir, "chats.json"), "w+") as f:
|
||||||
json.dump(self.chats, f, indent=4)
|
json.dump(self.chats, f, indent=4)
|
||||||
@@ -660,14 +617,13 @@ 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_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)
|
||||||
if "selected_chat" not in self.chats or self.chats["selected_chat"] not in self.chats["chats"]: self.chats["selected_chat"] = list(self.chats["chats"].keys())[0]
|
if "selected_chat" not in self.chats or self.chats["selected_chat"] not in self.chats["chats"]: self.chats["selected_chat"] = list(self.chats["chats"].keys())[0]
|
||||||
if len(list(self.chats["chats"].keys())) == 0: self.chats["chats"]["New Chat"] = {"messages": []}
|
if len(list(self.chats["chats"].keys())) == 0: self.chats["chats"][_("New Chat")] = {"messages": []}
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.chats = {"chats": {"New Chat": {"messages": []}}, "selected_chat": "New Chat"}
|
self.chats = {"chats": {_("New Chat"): {"messages": []}}, "selected_chat": _("New Chat")}
|
||||||
self.load_history_into_chat()
|
self.load_history_into_chat()
|
||||||
|
|
||||||
def load_image(self, file_dialog, result):
|
def load_image(self, file_dialog, result):
|
||||||
@@ -686,7 +642,7 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
new_width = int((max_size / height) * width)
|
new_width = int((max_size / height) * width)
|
||||||
resized_img = img.resize((new_width, new_height), Image.LANCZOS)
|
resized_img = img.resize((new_width, new_height), Image.LANCZOS)
|
||||||
with BytesIO() as output:
|
with BytesIO() as output:
|
||||||
resized_img.save(output, format="JPEG")
|
resized_img.save(output, format="PNG")
|
||||||
image_data = output.getvalue()
|
image_data = output.getvalue()
|
||||||
self.attached_image["base64"] = base64.b64encode(image_data).decode("utf-8")
|
self.attached_image["base64"] = base64.b64encode(image_data).decode("utf-8")
|
||||||
|
|
||||||
@@ -695,141 +651,70 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.show_toast("error", 5, self.main_overlay)
|
self.show_toast("error", 5, self.main_overlay)
|
||||||
|
|
||||||
def remove_image(self, dialog, task):
|
def remove_image(self):
|
||||||
if dialog.choose_finish(task) == 'remove':
|
|
||||||
self.image_button.set_css_classes([])
|
self.image_button.set_css_classes([])
|
||||||
self.image_button.get_child().set_icon_name("image-x-generic-symbolic")
|
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}
|
||||||
|
|
||||||
def open_image(self, button):
|
def generate_numbered_chat_name(self, chat_name) -> str:
|
||||||
if "destructive-action" in button.get_css_classes():
|
if chat_name in self.chats["chats"]:
|
||||||
dialog = Adw.AlertDialog(
|
for i in range(len(list(self.chats["chats"].keys()))):
|
||||||
heading=_("Remove Image"),
|
if chat_name + f" {i+1}" not in self.chats["chats"]:
|
||||||
body=_("Are you sure you want to remove image?"),
|
chat_name += f" {i+1}"
|
||||||
close_response="cancel"
|
break
|
||||||
)
|
return chat_name
|
||||||
dialog.add_response("cancel", _("Cancel"))
|
|
||||||
dialog.add_response("remove", _("Remove"))
|
|
||||||
dialog.set_response_appearance("remove", Adw.ResponseAppearance.DESTRUCTIVE)
|
|
||||||
dialog.choose(
|
|
||||||
parent = self,
|
|
||||||
cancellable = None,
|
|
||||||
callback = self.remove_image
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
file_dialog = Gtk.FileDialog(default_filter=self.file_filter_image)
|
|
||||||
file_dialog.open(self, None, self.load_image)
|
|
||||||
|
|
||||||
def chat_delete(self, dialog, task, chat_name):
|
def clear_chat(self):
|
||||||
if dialog.choose_finish(task) == "delete":
|
for widget in list(self.chat_container): self.chat_container.remove(widget)
|
||||||
|
self.chats["chats"][self.chats["selected_chat"]]["messages"] = []
|
||||||
|
self.save_history()
|
||||||
|
|
||||||
|
def delete_chat(self, chat_name):
|
||||||
del self.chats['chats'][chat_name]
|
del self.chats['chats'][chat_name]
|
||||||
self.save_history()
|
self.save_history()
|
||||||
self.update_chat_list()
|
self.update_chat_list()
|
||||||
if len(self.chats['chats'])==0:
|
if len(self.chats['chats'])==0:
|
||||||
self.chat_new()
|
self.chat_new()
|
||||||
|
|
||||||
def chat_delete_dialog(self, chat_name):
|
def rename_chat(self, old_chat_name, new_chat_name, label_element):
|
||||||
dialog = Adw.AlertDialog(
|
new_chat_name = self.generate_numbered_chat_name(new_chat_name)
|
||||||
heading=_("Delete Chat"),
|
|
||||||
body=_("Are you sure you want to delete '{}'?").format(chat_name),
|
|
||||||
close_response="cancel"
|
|
||||||
)
|
|
||||||
dialog.add_response("cancel", _("Cancel"))
|
|
||||||
dialog.add_response("delete", _("Delete"))
|
|
||||||
dialog.set_response_appearance("delete", Adw.ResponseAppearance.DESTRUCTIVE)
|
|
||||||
dialog.choose(
|
|
||||||
parent = self,
|
|
||||||
cancellable = None,
|
|
||||||
callback = lambda dialog, task, chat_name=chat_name: self.chat_delete(dialog, task, chat_name)
|
|
||||||
)
|
|
||||||
def chat_rename(self, dialog=None, task=None, old_chat_name:str="", entry=None):
|
|
||||||
if not entry: return
|
|
||||||
new_chat_name = entry.get_text()
|
|
||||||
if old_chat_name == new_chat_name: return
|
|
||||||
if new_chat_name and (not task or dialog.choose_finish(task) == "rename"):
|
|
||||||
dialog.force_close()
|
|
||||||
if new_chat_name in self.chats["chats"]: self.chat_rename_dialog(old_chat_name, f"The name '{new_chat_name}' is already in use", True)
|
|
||||||
else:
|
|
||||||
self.chats["chats"][new_chat_name] = self.chats["chats"][old_chat_name]
|
self.chats["chats"][new_chat_name] = self.chats["chats"][old_chat_name]
|
||||||
del self.chats["chats"][old_chat_name]
|
del self.chats["chats"][old_chat_name]
|
||||||
|
label_element.set_label(new_chat_name)
|
||||||
self.save_history()
|
self.save_history()
|
||||||
self.update_chat_list()
|
|
||||||
|
|
||||||
def chat_rename_dialog(self, chat_name:str, body:str, error:bool=False):
|
def new_chat(self, chat_name):
|
||||||
entry = Gtk.Entry(
|
chat_name = self.generate_numbered_chat_name(chat_name)
|
||||||
css_classes = ["error"] if error else None
|
|
||||||
)
|
|
||||||
dialog = Adw.AlertDialog(
|
|
||||||
heading=_("Rename Chat"),
|
|
||||||
body=body,
|
|
||||||
extra_child=entry,
|
|
||||||
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))
|
|
||||||
dialog.add_response("cancel", _("Cancel"))
|
|
||||||
dialog.add_response("rename", _("Rename"))
|
|
||||||
dialog.set_response_appearance("rename", Adw.ResponseAppearance.SUGGESTED)
|
|
||||||
dialog.choose(
|
|
||||||
parent = self,
|
|
||||||
cancellable = None,
|
|
||||||
callback = lambda dialog, task, old_chat_name=chat_name, entry=entry: self.chat_rename(dialog=dialog, task=task, old_chat_name=old_chat_name, entry=entry)
|
|
||||||
)
|
|
||||||
|
|
||||||
def chat_new(self, dialog=None, task=None, entry=None):
|
|
||||||
#if not entry: return
|
|
||||||
chat_name = None
|
|
||||||
if entry is not None: chat_name = entry.get_text()
|
|
||||||
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":
|
|
||||||
if dialog is not None: dialog.force_close()
|
|
||||||
if chat_name in self.chats["chats"]: self.chat_new_dialog(_("The name '{}' is already in use").format(chat_name), True)
|
|
||||||
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
|
||||||
self.save_history()
|
self.save_history()
|
||||||
self.update_chat_list()
|
self.new_chat_element(chat_name)
|
||||||
self.load_history_into_chat()
|
|
||||||
|
|
||||||
def chat_new_dialog(self, body:str, error:bool=False):
|
def stop_pull_model(self, model_name):
|
||||||
entry = Gtk.Entry(
|
self.pulling_models[model_name].get_parent().remove(self.pulling_models[model_name])
|
||||||
css_classes = ["error"] if error else None
|
del self.pulling_models[model_name]
|
||||||
)
|
|
||||||
dialog = Adw.AlertDialog(
|
|
||||||
heading=_("Create Chat"),
|
|
||||||
body=body,
|
|
||||||
extra_child=entry,
|
|
||||||
close_response="cancel"
|
|
||||||
)
|
|
||||||
entry.connect("activate", lambda entry, dialog=dialog: self.chat_new(dialog=dialog, entry=entry))
|
|
||||||
dialog.add_response("cancel", _("Cancel"))
|
|
||||||
dialog.add_response("create", _("Create"))
|
|
||||||
dialog.set_response_appearance("rename", Adw.ResponseAppearance.SUGGESTED)
|
|
||||||
dialog.choose(
|
|
||||||
parent = self,
|
|
||||||
cancellable = None,
|
|
||||||
callback = lambda dialog, task, entry=entry: self.chat_new(dialog=dialog, task=task, entry=entry)
|
|
||||||
)
|
|
||||||
|
|
||||||
def update_chat_list(self):
|
def delete_model(self, model_name):
|
||||||
self.chat_list_box.remove_all()
|
response = connection_handler.simple_delete(connection_handler.url + "/api/delete", data={"name": model_name})
|
||||||
for name, content in self.chats['chats'].items():
|
self.update_list_local_models()
|
||||||
|
if response['status'] == 'ok':
|
||||||
|
self.show_toast("good", 0, self.manage_models_overlay)
|
||||||
|
else:
|
||||||
|
self.manage_models_dialog.close()
|
||||||
|
self.connection_error()
|
||||||
|
|
||||||
|
def new_chat_element(self, chat_name):
|
||||||
chat_content = Gtk.Box(
|
chat_content = Gtk.Box(
|
||||||
spacing = 6,
|
spacing=6
|
||||||
)
|
)
|
||||||
chat_row = Gtk.ListBoxRow(
|
chat_row = Gtk.ListBoxRow(
|
||||||
css_classes = ["chat_row"],
|
css_classes = ["chat_row"],
|
||||||
height_request = 45,
|
height_request = 45,
|
||||||
child = chat_content,
|
child = chat_content,
|
||||||
name = name
|
name = chat_name
|
||||||
)
|
)
|
||||||
chat_label = Gtk.Label(
|
chat_label = Gtk.Label(
|
||||||
label=name,
|
label=chat_name,
|
||||||
hexpand=True,
|
hexpand=True,
|
||||||
halign=1
|
halign=1
|
||||||
)
|
)
|
||||||
@@ -839,94 +724,47 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
valign = 3,
|
valign = 3,
|
||||||
css_classes = ["error", "flat"]
|
css_classes = ["error", "flat"]
|
||||||
)
|
)
|
||||||
button_delete.connect("clicked", lambda button, chat_name=name: self.chat_delete_dialog(chat_name=chat_name))
|
button_delete.connect("clicked", lambda button, chat_name=chat_name: dialogs.delete_chat(self, chat_name))
|
||||||
button_rename = Gtk.Button(
|
button_rename = Gtk.Button(
|
||||||
icon_name = "document-edit-symbolic",
|
icon_name = "document-edit-symbolic",
|
||||||
vexpand = False,
|
vexpand = False,
|
||||||
valign = 3,
|
valign = 3,
|
||||||
css_classes = ["accent", "flat"]
|
css_classes = ["accent", "flat"]
|
||||||
)
|
)
|
||||||
button_rename.connect("clicked", lambda button, chat_name=name: self.chat_rename_dialog(chat_name=chat_name, body=f"Renaming '{chat_name}'", error=False))
|
button_rename.connect("clicked", lambda button, chat_name=chat_name, label_element=chat_label: dialogs.rename_chat(self, chat_name, label_element))
|
||||||
|
|
||||||
chat_content.append(chat_label)
|
chat_content.append(chat_label)
|
||||||
chat_content.append(button_delete)
|
chat_content.append(button_delete)
|
||||||
chat_content.append(button_rename)
|
chat_content.append(button_rename)
|
||||||
self.chat_list_box.append(chat_row)
|
self.chat_list_box.append(chat_row)
|
||||||
if name==self.chats["selected_chat"]: self.chat_list_box.select_row(chat_row)
|
if chat_name==self.chats["selected_chat"]: self.chat_list_box.select_row(chat_row)
|
||||||
|
|
||||||
def chat_changed(self, listbox, row):
|
def update_chat_list(self):
|
||||||
if row and row.get_name() != self.chats["selected_chat"]:
|
self.chat_list_box.remove_all()
|
||||||
self.chats["selected_chat"] = row.get_name()
|
for name, content in self.chats['chats'].items():
|
||||||
self.load_history_into_chat()
|
self.new_chat_element(name)
|
||||||
if len(self.chats["chats"][self.chats["selected_chat"]]["messages"]) > 0:
|
|
||||||
for i in range(self.model_string_list.get_n_items()):
|
|
||||||
if self.model_string_list.get_string(i) == self.chats["chats"][self.chats["selected_chat"]]["messages"][-1]["model"]:
|
|
||||||
self.model_drop_down.set_selected(i)
|
|
||||||
break
|
|
||||||
|
|
||||||
def show_preferences_dialog(self):
|
def show_preferences_dialog(self):
|
||||||
self.preferences_dialog.present(self)
|
self.preferences_dialog.present(self)
|
||||||
|
|
||||||
def start_instance(self):
|
def connect_remote(self, url):
|
||||||
self.ollama_instance = subprocess.Popen(["/app/bin/ollama", "serve"], env={**os.environ, 'OLLAMA_HOST': f"127.0.0.1:{self.local_ollama_port}", "HOME": self.data_dir}, stderr=subprocess.PIPE, text=True)
|
connection_handler.url = url
|
||||||
print("Starting Alpaca's Ollama instance...")
|
self.remote_url = connection_handler.url
|
||||||
sleep(1)
|
|
||||||
while True:
|
|
||||||
err = self.ollama_instance.stderr.readline()
|
|
||||||
if err == '' and self.ollama_instance.poll() is not None:
|
|
||||||
break
|
|
||||||
if 'msg="inference compute"' in err: #Ollama outputs a line with this when it finishes loading, yeah
|
|
||||||
break
|
|
||||||
print("Started Alpaca's Ollama instance")
|
|
||||||
|
|
||||||
def stop_instance(self):
|
|
||||||
self.ollama_instance.kill()
|
|
||||||
print("Stopped Alpaca's Ollama instance")
|
|
||||||
|
|
||||||
def restart_instance(self):
|
|
||||||
if self.ollama_instance is not None: self.stop_instance()
|
|
||||||
start_instance(self)
|
|
||||||
|
|
||||||
def reconnect_remote(self, dialog, task=None, entry=None):
|
|
||||||
response = dialog.choose_finish(task)
|
|
||||||
dialog.force_close()
|
|
||||||
if not task or response == "remote":
|
|
||||||
self.ollama_url = entry.get_text()
|
|
||||||
self.remote_url = self.ollama_url
|
|
||||||
self.remote_connection_entry.set_text(self.remote_url)
|
self.remote_connection_entry.set_text(self.remote_url)
|
||||||
if self.verify_connection() == False: self.connection_error()
|
if self.verify_connection() == False: self.connection_error()
|
||||||
elif response == "local":
|
|
||||||
|
def connect_local(self):
|
||||||
self.run_remote = False
|
self.run_remote = False
|
||||||
self.ollama_url = f"http://127.0.0.1:{self.local_ollama_port}"
|
connection_handler.url = f"http://127.0.0.1:{local_instance.port}"
|
||||||
self.start_instance()
|
local_instance.start(self.data_dir)
|
||||||
if self.verify_connection() == False: self.connection_error()
|
if self.verify_connection() == False: self.connection_error()
|
||||||
else: self.remote_connection_switch.set_active(False)
|
else: self.remote_connection_switch.set_active(False)
|
||||||
elif response == "close":
|
|
||||||
self.destroy()
|
|
||||||
|
|
||||||
def connection_error(self):
|
def connection_error(self):
|
||||||
if self.run_remote:
|
if self.run_remote:
|
||||||
entry = Gtk.Entry(
|
dialogs.reconnect_remote(self)
|
||||||
css_classes = ["error"],
|
|
||||||
text = self.ollama_url
|
|
||||||
)
|
|
||||||
dialog = Adw.AlertDialog(
|
|
||||||
heading=_("Connection Error"),
|
|
||||||
body=_("The remote instance has disconnected"),
|
|
||||||
extra_child=entry
|
|
||||||
)
|
|
||||||
entry.connect("activate", lambda entry, dialog=dialog: self.reconnect_remote(dialog=dialog, entry=entry))
|
|
||||||
dialog.add_response("close", _("Close Alpaca"))
|
|
||||||
dialog.add_response("local", _("Use local instance"))
|
|
||||||
dialog.add_response("remote", _("Connect"))
|
|
||||||
dialog.set_response_appearance("remote", Adw.ResponseAppearance.SUGGESTED)
|
|
||||||
dialog.choose(
|
|
||||||
parent = self,
|
|
||||||
cancellable = None,
|
|
||||||
callback = lambda dialog, task, entry=entry: self.reconnect_remote(dialog=dialog, task=task, entry=entry)
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
self.restart_instance()
|
local_instance.stop()
|
||||||
|
local_instance.start(self.data_dir)
|
||||||
self.show_toast("error", 7, self.main_overlay)
|
self.show_toast("error", 7, self.main_overlay)
|
||||||
|
|
||||||
def connection_switched(self):
|
def connection_switched(self):
|
||||||
@@ -934,23 +772,14 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
if new_value != self.run_remote:
|
if new_value != self.run_remote:
|
||||||
self.run_remote = new_value
|
self.run_remote = new_value
|
||||||
if self.run_remote:
|
if self.run_remote:
|
||||||
self.ollama_url = self.remote_url
|
connection_handler.url = self.remote_url
|
||||||
if self.verify_connection() == False: self.connection_error()
|
if self.verify_connection() == False: self.connection_error()
|
||||||
else: self.stop_instance()
|
else: local_instance.stop()
|
||||||
else:
|
else:
|
||||||
self.ollama_url = f"http://127.0.0.1:{self.local_ollama_port}"
|
connection_handler.url = f"http://127.0.0.1:{local_instance.port}"
|
||||||
self.start_instance()
|
local_instance.start(self.data_dir)
|
||||||
if self.verify_connection() == False: self.connection_error()
|
if self.verify_connection() == False: self.connection_error()
|
||||||
self.update_list_available_models()
|
self.update_list_available_models()
|
||||||
self.update_list_local_models()
|
|
||||||
|
|
||||||
def change_remote_url(self, entry):
|
|
||||||
self.remote_url = entry.get_text()
|
|
||||||
if self.run_remote:
|
|
||||||
self.ollama_url = self.remote_url
|
|
||||||
if self.verify_connection() == False:
|
|
||||||
entry.set_css_classes(["error"])
|
|
||||||
self.show_toast("error", 1, self.preferences_dialog)
|
|
||||||
|
|
||||||
def on_replace_contents(self, file, result):
|
def on_replace_contents(self, file, result):
|
||||||
file.replace_contents_finish(result)
|
file.replace_contents_finish(result)
|
||||||
@@ -999,46 +828,36 @@ class AlpacaWindow(Adw.ApplicationWindow):
|
|||||||
GtkSource.init()
|
GtkSource.init()
|
||||||
self.set_help_overlay(self.shortcut_window)
|
self.set_help_overlay(self.shortcut_window)
|
||||||
self.get_application().set_accels_for_action("win.show-help-overlay", ['<primary>slash'])
|
self.get_application().set_accels_for_action("win.show-help-overlay", ['<primary>slash'])
|
||||||
|
self.get_application().create_action('clear', lambda *_: dialogs.clear_chat(self), ['<primary>e'])
|
||||||
self.get_application().create_action('send', lambda *_: self.send_message(self), ['Return'])
|
self.get_application().create_action('send', lambda *_: self.send_message(self), ['Return'])
|
||||||
self.manage_models_button.connect("clicked", self.manage_models_button_activate)
|
self.add_chat_button.connect("clicked", lambda button : dialogs.new_chat(self))
|
||||||
self.send_button.connect("clicked", self.send_message)
|
|
||||||
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.set_default_widget(self.send_button)
|
|
||||||
self.model_drop_down.connect("notify", self.verify_if_image_can_be_used)
|
|
||||||
self.chat_list_box.connect("row-selected", self.chat_changed)
|
|
||||||
self.welcome_carousel.connect("page-changed", self.welcome_carousel_page_changed)
|
|
||||||
self.welcome_previous_button.connect("clicked", self.welcome_previous_button_activate)
|
|
||||||
self.welcome_next_button.connect("clicked", self.welcome_next_button_activate)
|
|
||||||
|
|
||||||
self.export_chat_button.connect("clicked", lambda button : self.export_current_chat())
|
self.export_chat_button.connect("clicked", lambda button : self.export_current_chat())
|
||||||
self.import_chat_button.connect("clicked", lambda button : self.import_chat())
|
self.import_chat_button.connect("clicked", lambda button : self.import_chat())
|
||||||
#Preferences
|
|
||||||
self.remote_connection_entry.connect("entry-activated", lambda entry : entry.set_css_classes([]))
|
self.remote_connection_entry.connect("entry-activated", lambda entry : entry.set_css_classes([]))
|
||||||
self.remote_connection_entry.connect("apply", self.change_remote_url)
|
|
||||||
self.remote_connection_switch.connect("notify", lambda pspec, user_data : self.connection_switched())
|
self.remote_connection_switch.connect("notify", lambda pspec, user_data : self.connection_switched())
|
||||||
self.background_switch.connect("notify", lambda pspec, user_data : self.switch_run_on_background())
|
self.background_switch.connect("notify", lambda pspec, user_data : self.switch_run_on_background())
|
||||||
if os.path.exists(os.path.join(self.config_dir, "server.json")):
|
if os.path.exists(os.path.join(self.config_dir, "server.json")):
|
||||||
with open(os.path.join(self.config_dir, "server.json"), "r") as f:
|
with open(os.path.join(self.config_dir, "server.json"), "r") as f:
|
||||||
data = json.load(f)
|
data = json.load(f)
|
||||||
self.run_remote = data['run_remote']
|
self.run_remote = data['run_remote']
|
||||||
self.local_ollama_port = data['local_port']
|
local_instance.port = data['local_port']
|
||||||
self.remote_url = data['remote_url']
|
self.remote_url = data['remote_url']
|
||||||
self.run_on_background = data['run_on_background']
|
self.run_on_background = data['run_on_background']
|
||||||
self.background_switch.set_active(self.run_on_background)
|
self.background_switch.set_active(self.run_on_background)
|
||||||
self.set_hide_on_close(self.run_on_background)
|
self.set_hide_on_close(self.run_on_background)
|
||||||
self.remote_connection_entry.set_text(self.remote_url)
|
self.remote_connection_entry.set_text(self.remote_url)
|
||||||
if self.run_remote:
|
if self.run_remote:
|
||||||
self.ollama_url = data['remote_url']
|
connection_handler.url = data['remote_url']
|
||||||
self.remote_connection_switch.set_active(True)
|
self.remote_connection_switch.set_active(True)
|
||||||
else:
|
else:
|
||||||
self.remote_connection_switch.set_active(False)
|
self.remote_connection_switch.set_active(False)
|
||||||
self.ollama_url = f"http://127.0.0.1:{self.local_ollama_port}"
|
connection_handler.url = f"http://127.0.0.1:{local_instance.port}"
|
||||||
self.start_instance()
|
local_instance.start(self.data_dir)
|
||||||
else:
|
else:
|
||||||
self.start_instance()
|
local_instance.start(self.data_dir)
|
||||||
self.ollama_url = f"http://127.0.0.1:{self.local_ollama_port}"
|
connection_handler.url = f"http://127.0.0.1:{local_instance.port}"
|
||||||
self.first_time_setup = True
|
|
||||||
self.welcome_dialog.present(self)
|
self.welcome_dialog.present(self)
|
||||||
if self.verify_connection() is False and self.run_remote == False: self.connection_error()
|
if self.verify_connection() is False and self.run_remote == False: self.connection_error()
|
||||||
self.update_list_available_models()
|
self.update_list_available_models()
|
||||||
|
|||||||
@@ -27,8 +27,6 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<property name="content">
|
<property name="content">
|
||||||
<object class="AdwToastOverlay" id="main_overlay">
|
|
||||||
<child>
|
|
||||||
<object class="AdwOverlaySplitView" id="split_view_overlay">
|
<object class="AdwOverlaySplitView" id="split_view_overlay">
|
||||||
<property name="show-sidebar" bind-source="show_sidebar_button" bind-property="active" bind-flags="sync-create"/>
|
<property name="show-sidebar" bind-source="show_sidebar_button" bind-property="active" bind-flags="sync-create"/>
|
||||||
<property name="sidebar">
|
<property name="sidebar">
|
||||||
@@ -38,7 +36,7 @@
|
|||||||
<child type="start">
|
<child type="start">
|
||||||
<object class="GtkButton" id="add_chat_button">
|
<object class="GtkButton" id="add_chat_button">
|
||||||
<property name="tooltip-text" translatable="yes">New chat</property>
|
<property name="tooltip-text" translatable="yes">New chat</property>
|
||||||
<property name="icon-name">tab-new-symbolic</property>
|
<property name="icon-name">chat-message-new-symbolic</property>
|
||||||
<style>
|
<style>
|
||||||
<class name="flat"/>
|
<class name="flat"/>
|
||||||
</style>
|
</style>
|
||||||
@@ -70,6 +68,7 @@
|
|||||||
<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">
|
||||||
|
<signal name="row-selected" handler="chat_changed"/>
|
||||||
<property name="selection-mode">single</property>
|
<property name="selection-mode">single</property>
|
||||||
<style>
|
<style>
|
||||||
<class name="navigation-sidebar"></class>
|
<class name="navigation-sidebar"></class>
|
||||||
@@ -97,6 +96,7 @@
|
|||||||
<property name="spacing">12</property>
|
<property name="spacing">12</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkDropDown" id="model_drop_down">
|
<object class="GtkDropDown" id="model_drop_down">
|
||||||
|
<signal name="notify" handler="verify_if_image_can_be_used"/>
|
||||||
<property name="enable-search">true</property>
|
<property name="enable-search">true</property>
|
||||||
<property name="model">
|
<property name="model">
|
||||||
<object class="GtkStringList" id="model_string_list">
|
<object class="GtkStringList" id="model_string_list">
|
||||||
@@ -108,6 +108,7 @@
|
|||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="manage_models_button">
|
<object class="GtkButton" id="manage_models_button">
|
||||||
|
<signal name="clicked" handler="manage_models_button_activate"/>
|
||||||
<property name="tooltip-text" translatable="yes">Manage models</property>
|
<property name="tooltip-text" translatable="yes">Manage models</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="AdwButtonContent">
|
<object class="AdwButtonContent">
|
||||||
@@ -133,6 +134,8 @@
|
|||||||
<property name="orientation">1</property>
|
<property name="orientation">1</property>
|
||||||
<property name="vexpand">true</property>
|
<property name="vexpand">true</property>
|
||||||
<property name="hexpand">true</property>
|
<property name="hexpand">true</property>
|
||||||
|
<child>
|
||||||
|
<object class="AdwToastOverlay" id="main_overlay">
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkScrolledWindow" id="chat_window">
|
<object class="GtkScrolledWindow" id="chat_window">
|
||||||
<property name="propagate-natural-height">true</property>
|
<property name="propagate-natural-height">true</property>
|
||||||
@@ -162,7 +165,8 @@
|
|||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="AdwClamp">
|
<object class="AdwClamp">
|
||||||
<property name="maximum-size">1000</property>
|
<property name="maximum-size">1000</property>
|
||||||
@@ -208,6 +212,7 @@
|
|||||||
<property name="spacing">12</property>
|
<property name="spacing">12</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="send_button">
|
<object class="GtkButton" id="send_button">
|
||||||
|
<signal name="clicked" handler="send_message"/>
|
||||||
<style>
|
<style>
|
||||||
<class name="suggested-action"/>
|
<class name="suggested-action"/>
|
||||||
</style>
|
</style>
|
||||||
@@ -221,6 +226,7 @@
|
|||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="image_button">
|
<object class="GtkButton" id="image_button">
|
||||||
|
<signal name="clicked" handler="open_image"/>
|
||||||
<property name="sensitive">false</property>
|
<property name="sensitive">false</property>
|
||||||
<property name="tooltip-text" translatable="yes">Only available on selected models</property>
|
<property name="tooltip-text" translatable="yes">Only available on selected models</property>
|
||||||
<child>
|
<child>
|
||||||
@@ -244,8 +250,6 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</property>
|
</property>
|
||||||
<object class="AdwPreferencesDialog" id="preferences_dialog">
|
<object class="AdwPreferencesDialog" id="preferences_dialog">
|
||||||
<property name="can-close">true</property>
|
<property name="can-close">true</property>
|
||||||
@@ -267,6 +271,7 @@
|
|||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="AdwEntryRow" id="remote_connection_entry">
|
<object class="AdwEntryRow" id="remote_connection_entry">
|
||||||
|
<signal name="apply" handler="change_remote_url"/>
|
||||||
<property name="title" translatable="yes">URL of remote instance</property>
|
<property name="title" translatable="yes">URL of remote instance</property>
|
||||||
<property name="show-apply-button">true</property>
|
<property name="show-apply-button">true</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -368,6 +373,7 @@
|
|||||||
<property name="margin-bottom">5</property>
|
<property name="margin-bottom">5</property>
|
||||||
<child type="start">
|
<child type="start">
|
||||||
<object class="GtkButton" id="welcome_previous_button">
|
<object class="GtkButton" id="welcome_previous_button">
|
||||||
|
<signal name="clicked" handler="welcome_previous_button_activate"/>
|
||||||
<property name="tooltip-text" translatable="yes">Previous</property>
|
<property name="tooltip-text" translatable="yes">Previous</property>
|
||||||
<property name="label">Previous</property>
|
<property name="label">Previous</property>
|
||||||
<property name="sensitive">false</property>
|
<property name="sensitive">false</property>
|
||||||
@@ -383,6 +389,7 @@
|
|||||||
</child>
|
</child>
|
||||||
<child type="end">
|
<child type="end">
|
||||||
<object class="GtkButton" id="welcome_next_button">
|
<object class="GtkButton" id="welcome_next_button">
|
||||||
|
<signal name="clicked" handler="welcome_next_button_activate"/>
|
||||||
<property name="tooltip-text" translatable="yes">Next</property>
|
<property name="tooltip-text" translatable="yes">Next</property>
|
||||||
<property name="label">Next</property>
|
<property name="label">Next</property>
|
||||||
<style>
|
<style>
|
||||||
@@ -395,6 +402,7 @@
|
|||||||
|
|
||||||
<child>
|
<child>
|
||||||
<object class="AdwCarousel" id="welcome_carousel">
|
<object class="AdwCarousel" id="welcome_carousel">
|
||||||
|
<signal name="page-changed" handler="welcome_carousel_page_changed"/>
|
||||||
<property name="hexpand">true</property>
|
<property name="hexpand">true</property>
|
||||||
<property name="vexpand">true</property>
|
<property name="vexpand">true</property>
|
||||||
<property name="allow-long-swipes">true</property>
|
<property name="allow-long-swipes">true</property>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ echo "Preparing template..."
|
|||||||
xgettext --output=po/alpaca.pot --files-from=po/POTFILES
|
xgettext --output=po/alpaca.pot --files-from=po/POTFILES
|
||||||
echo "Updating Spanish..."
|
echo "Updating Spanish..."
|
||||||
msgmerge -U po/es.po po/alpaca.pot
|
msgmerge -U po/es.po po/alpaca.pot
|
||||||
echo "Updating Russian..."
|
#echo "Updating Russian..."
|
||||||
msgmerge -U po/ru.po po/alpaca.pot
|
#msgmerge -U po/ru.po po/alpaca.pot
|
||||||
echo "Updating Brazilian Portuguese"
|
echo "Updating Brazilian Portuguese"
|
||||||
msgmerge -U po/pt_BR.po po/alpaca.pot
|
msgmerge -U po/pt_BR.po po/alpaca.pot
|
||||||
|
|||||||
Reference in New Issue
Block a user