Compare commits
140 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5f0cddffd0 | ||
|
|
6fdf335412 | ||
|
|
3db0a374e6 | ||
|
|
aa6d317321 | ||
|
|
37702a2527 | ||
|
|
ccb19516bb | ||
|
|
b7f11f17d2 | ||
|
|
60dd1de39d | ||
|
|
887a7645d4 | ||
|
|
340cf9375e | ||
|
|
1d37de6499 | ||
|
|
2d8cb68628 | ||
|
|
4ececd850b | ||
|
|
a4d26b2bda | ||
|
|
d7961f2510 | ||
|
|
45f5214ec9 | ||
|
|
5e1e770aee | ||
|
|
5eb18d00d3 | ||
|
|
bcbfd44e1f | ||
|
|
073c619d89 | ||
|
|
71ab8cfba4 | ||
|
|
0ec812099c | ||
|
|
f7f05a0538 | ||
|
|
82a0ab0d9e | ||
|
|
60b24da482 | ||
|
|
66d209e4c6 | ||
|
|
0c9ab4e17e | ||
|
|
fff3a68b29 | ||
|
|
580a104894 | ||
|
|
3fe9b6e121 | ||
|
|
6979d1a775 | ||
|
|
90385ce461 | ||
|
|
c579e6ec99 | ||
|
|
b8d93cfd17 | ||
|
|
359f28f5c1 | ||
|
|
6e8bff8493 | ||
|
|
ad25d5a50f | ||
|
|
4b17601baf | ||
|
|
c994307954 | ||
|
|
a13ffd22f1 | ||
|
|
7b8f40e117 | ||
|
|
add4dad8c0 | ||
|
|
7faa805176 | ||
|
|
91651b918e | ||
|
|
725e0930fe | ||
|
|
93ba903fc8 | ||
|
|
56064831d3 | ||
|
|
4bdb813b64 | ||
|
|
ad69887e4a | ||
|
|
c8f148d1f8 | ||
|
|
365e39a20a | ||
|
|
48c2fd2e81 | ||
|
|
3a5dc568c5 | ||
|
|
a180f7a46c | ||
|
|
07a12ba41f | ||
|
|
dd5351a3de | ||
|
|
ae48a17301 | ||
|
|
9e19698788 | ||
|
|
323725df33 | ||
|
|
7c40420048 | ||
|
|
fac51aefb9 | ||
|
|
8f1fbc511a | ||
|
|
f0bf112faf | ||
|
|
b2a15b92cd | ||
|
|
9b71bbea2e | ||
|
|
2645ab3732 | ||
|
|
8672c4ac40 | ||
|
|
b8bfd54515 | ||
|
|
a29d245381 | ||
|
|
f57427e2c4 | ||
|
|
3631f06075 | ||
|
|
67a66f85da | ||
|
|
16f620b034 | ||
|
|
77b32b4912 | ||
|
|
257197d4d8 | ||
|
|
19cc97a1c4 | ||
|
|
93652cd9f7 | ||
|
|
540a0dc915 | ||
|
|
54c1b9a96e | ||
|
|
a9663b45fc | ||
|
|
9bf029f8b3 | ||
|
|
a94d1dfc92 | ||
|
|
e90ef93a04 | ||
|
|
a7ba5da943 | ||
|
|
1e287dde6f | ||
|
|
05461fb03a | ||
|
|
aa79368b54 | ||
|
|
cb4e52f103 | ||
|
|
91fc745d2f | ||
|
|
a719783cce | ||
|
|
766636718a | ||
|
|
59d2430e2f | ||
|
|
074b4dc643 | ||
|
|
92dd56b0c4 | ||
|
|
25c414faa3 | ||
|
|
dc2df81c75 | ||
|
|
ddc50ce621 | ||
|
|
701fae92a0 | ||
|
|
f3d22219b4 | ||
|
|
0027cf7c59 | ||
|
|
b6c45fc346 | ||
|
|
e6f2902bd1 | ||
|
|
1190e367bb | ||
|
|
d619f55ff2 | ||
|
|
605d837716 | ||
|
|
3aa57c6d2f | ||
|
|
1cf2f04b06 | ||
|
|
780de2b753 | ||
|
|
e19511469d | ||
|
|
bedf1a9bc5 | ||
|
|
6e330448e6 | ||
|
|
31802da0e3 | ||
|
|
9fae5b2cf2 | ||
|
|
cde62c3511 | ||
|
|
2b6256ff25 | ||
|
|
0c9fd6685b | ||
|
|
999f7a7151 | ||
|
|
a1397ef09e | ||
|
|
a43aac0c66 | ||
|
|
06747abcb9 | ||
|
|
8bce45cf71 | ||
|
|
084654582a | ||
|
|
29d5023cf4 | ||
|
|
a0c50c4b50 | ||
|
|
45a8d23347 | ||
|
|
6d87f4c52b | ||
|
|
8352d016cc | ||
|
|
2dd9623ea9 | ||
|
|
9e6fba0e7f | ||
|
|
e89ef2aa37 | ||
|
|
8ed8c6d04b | ||
|
|
913a7a0b39 | ||
|
|
8dabb27689 | ||
|
|
db0daa1f41 | ||
|
|
748406b2c0 | ||
|
|
46b43ca670 | ||
|
|
471159417c | ||
|
|
5b92186930 | ||
|
|
cde081acb5 | ||
|
|
4af0f718bc |
1
.github/FUNDING.yml
vendored
@@ -1,6 +1,7 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: jeffser # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||
ko_fi: jeffser
|
||||
#patreon: # Replace with a single Patreon username
|
||||
#open_collective: # Replace with a single Open Collective username
|
||||
#ko_fi: # Replace with a single Ko-fi username
|
||||
|
||||
20
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Something is wrong
|
||||
title: ''
|
||||
labels: bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: enhancement
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
35
README.md
@@ -15,24 +15,23 @@ Alpaca is an [Ollama](https://github.com/ollama/ollama) client where you can man
|
||||
- Talk to multiple models in the same conversation
|
||||
- Pull and delete models from the app
|
||||
- Image recognition
|
||||
- Document recognition (plain text files)
|
||||
- Code highlighting
|
||||
- Multiple conversations
|
||||
- Notifications
|
||||
- Import / Export chats
|
||||
- Delete messages
|
||||
|
||||
## Future features!
|
||||
- Document recognition
|
||||
- Delete / Edit messages
|
||||
- YouTube recognition (Ask questions about a YouTube video using the transcript)
|
||||
- Edit messages
|
||||
- Snap Package (maybe)
|
||||
|
||||
## Screenies
|
||||
Login to Ollama instance | Chatting with models | Managing models
|
||||
Code highlighting | Chatting with models | Managing models
|
||||
:-------------------------:|:-------------------------:|:-------------------------:
|
||||
 |  | 
|
||||
|
||||
## Thanks
|
||||
So, apparently there's people who like something I did, that's cool. I mean really, this is the first big project I've made and there's still a lot of stuff I want to add, I wanted to thank all of you that have reported issues and enhancements to the app, I appreciate it a lot.
|
||||
|
||||
## Preview
|
||||
1. Clone repo using Gnome Builder
|
||||
2. Press the `run` button
|
||||
@@ -42,5 +41,29 @@ So, apparently there's people who like something I did, that's cool. I mean real
|
||||
2. Download the latest flatpak package
|
||||
3. Open it
|
||||
|
||||
## Ollama session tips
|
||||
|
||||
### Change the port of the integrated Ollama instance
|
||||
Go to `~/.var/app/com.jeffser.Alpaca/config/server.json` and change the `"local_port"` value, by default it is `11435`.
|
||||
|
||||
### Backup all the chats
|
||||
The chat data is located in `~/.var/app/com.jeffser.Alpaca/data/chats` you can copy that directory wherever you want to.
|
||||
|
||||
### Force showing the welcome dialog
|
||||
To do that you just need to delete the file `~/.var/app/com.jeffser.Alpaca/config/server.json`, this won't affect your saved chats or models.
|
||||
|
||||
### Add/Change environment variables for Ollama
|
||||
You can change anything except `$HOME` and `$OLLAMA_HOST`, to do this go to `~/.var/app/com.jeffser.Alpaca/config/server.json` and change `ollama_overrides` accordingly, some overrides are available to change on the GUI.
|
||||
|
||||
---
|
||||
|
||||
## Thanks
|
||||
- [not-a-dev-stein](https://github.com/not-a-dev-stein) for their help with requesting a new icon, bug reports and the translation to Brazilian Portuguese
|
||||
- [TylerLaBree](https://github.com/TylerLaBree) for their requests and ideas
|
||||
- [Alexkdeveloper](https://github.com/alexkdeveloper) for their help translating the app to Russian
|
||||
- [Imbev](https://github.com/imbev) for their reports and suggestions
|
||||
- [Nokse](https://github.com/Nokse22) for their contributions to the UI
|
||||
- [Louis Chauvet-Villaret](https://github.com/loulou64490) for their suggestions and help translating the app to French
|
||||
|
||||
## About forks
|
||||
If you want to fork this... I mean, I think it would be better if you start from scratch, my code isn't well documented at all, but if you really want to, please give me some credit, that's all I ask for... And maybe a donation (joke)
|
||||
|
||||
@@ -71,6 +71,44 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "python3-pypdf",
|
||||
"buildsystem": "simple",
|
||||
"build-commands": [
|
||||
"pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"pypdf\" --no-build-isolation"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"type": "file",
|
||||
"url": "https://files.pythonhosted.org/packages/c9/d1/450b19bbdbb2c802f554312c62ce2a2c0d8744fe14735bc70ad2803578c7/pypdf-4.2.0-py3-none-any.whl",
|
||||
"sha256": "dc035581664e0ad717e3492acebc1a5fc23dba759e788e3d4a9fc9b1a32e72c1"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "python3-python-docx",
|
||||
"buildsystem": "simple",
|
||||
"build-commands": [
|
||||
"pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"python-docx\" --no-build-isolation"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"type": "file",
|
||||
"url": "https://files.pythonhosted.org/packages/63/f7/ffbb6d2eb67b80a45b8a0834baa5557a14a5ffce0979439e7cd7f0c4055b/lxml-5.2.2.tar.gz",
|
||||
"sha256": "bb2dc4898180bea79863d5487e5f9c7c34297414bad54bcd0f0852aee9cfdb87"
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"url": "https://files.pythonhosted.org/packages/3e/3d/330d9efbdb816d3f60bf2ad92f05e1708e4a1b9abe80461ac3444c83f749/python_docx-1.1.2-py3-none-any.whl",
|
||||
"sha256": "08c20d6058916fb19853fcf080f7f42b6270d89eac9fa5f8c15f691c0017fabe"
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"url": "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl",
|
||||
"sha256": "04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ollama",
|
||||
"buildsystem": "simple",
|
||||
@@ -80,16 +118,16 @@
|
||||
"sources": [
|
||||
{
|
||||
"type": "file",
|
||||
"url": "https://github.com/ollama/ollama/releases/download/v0.1.38/ollama-linux-amd64",
|
||||
"sha256": "c3360812503a9756a507ebb9d78667e2b21800a760b45046bc48a8f3b81972f4",
|
||||
"url": "https://github.com/ollama/ollama/releases/download/v0.1.39/ollama-linux-amd64",
|
||||
"sha256": "4d19be355842a6297c93ab5ada139fe396126736bf3c3882a879dc245dffe3af",
|
||||
"only-arches": [
|
||||
"x86_64"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"url": "https://github.com/ollama/ollama/releases/download/v0.1.38/ollama-linux-arm64",
|
||||
"sha256": "f2d091afe665b2d5ba8b68e2473d36cdfaf80c61c7d2844a0a8f533c4e62f547",
|
||||
"url": "https://github.com/ollama/ollama/releases/download/v0.1.39/ollama-linux-arm64",
|
||||
"sha256": "60ec2d36928c11d6c6d84fe91451308a46aafaedbdba44664e5a6080009ce097",
|
||||
"only-arches": [
|
||||
"aarch64"
|
||||
]
|
||||
|
||||
6
data/com.jeffser.Alpaca.SearchProvider.ini.in
Normal file
@@ -0,0 +1,6 @@
|
||||
[Shell Search Provider]
|
||||
DesktopId=@appid@.desktop
|
||||
BusName=@appid@.SearchProvider
|
||||
ObjectPath=/com/jeffser/Alpaca/SearchProvider
|
||||
Version=2
|
||||
|
||||
3
data/com.jeffser.Alpaca.SearchProvider.service.in
Normal file
@@ -0,0 +1,3 @@
|
||||
[D-BUS Service]
|
||||
Name=@appid@.SearchProvider
|
||||
Exec=@libexecdir@/alpaca_search_provider
|
||||
@@ -5,13 +5,18 @@
|
||||
<project_license>GPL-3.0-or-later</project_license>
|
||||
<launchable type="desktop-id">com.jeffser.Alpaca.desktop</launchable>
|
||||
<name>Alpaca</name>
|
||||
<summary>Chat with multiple AI models</summary>
|
||||
<summary>Chat with local AI models</summary>
|
||||
<description>
|
||||
<p>An Ollama client</p>
|
||||
<p>Features</p>
|
||||
<ul>
|
||||
<li>Built in Ollama instance</li>
|
||||
<li>Talk to multiple models in the same conversation</li>
|
||||
<li>Pull and delete models from the app</li>
|
||||
<li>Have multiple conversations</li>
|
||||
<li>Image recognition (Only available with compatible models)</li>
|
||||
<li>Plain text documents recognition</li>
|
||||
<li>Import and export chats</li>
|
||||
</ul>
|
||||
<p>Disclaimer</p>
|
||||
<p>This project is not affiliated at all with Ollama, I'm not responsible for any damages to your device or software caused by running code given by any models.</p>
|
||||
@@ -28,6 +33,14 @@
|
||||
<category>Development</category>
|
||||
<category>Chat</category>
|
||||
</categories>
|
||||
<requires>
|
||||
<display_length compare="ge">360</display_length>
|
||||
</requires>
|
||||
<recommends>
|
||||
<control>keyboard</control>
|
||||
<control>pointing</control>
|
||||
<control>touch</control>
|
||||
</recommends>
|
||||
<branding>
|
||||
<color type="primary" scheme_preference="light">#8cdef5</color>
|
||||
<color type="primary" scheme_preference="dark">#0f2b78</color>
|
||||
@@ -35,7 +48,7 @@
|
||||
<screenshots>
|
||||
<screenshot type="default">
|
||||
<image>https://jeffser.com/images/alpaca/screenie1.png</image>
|
||||
<caption>Welcome dialog</caption>
|
||||
<caption>A conversation showing code highlight</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://jeffser.com/images/alpaca/screenie2.png</image>
|
||||
@@ -51,6 +64,150 @@
|
||||
<url type="homepage">https://github.com/Jeffser/Alpaca</url>
|
||||
<url type="donation">https://github.com/sponsors/Jeffser</url>
|
||||
<releases>
|
||||
<release version="0.9.6" date="2024-06-21">
|
||||
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.9.6</url>
|
||||
<description>
|
||||
<p>Big Update</p>
|
||||
<ul>
|
||||
<li>Added compatibility for PDF</li>
|
||||
<li>Added compatibility for DOCX</li>
|
||||
<li>Merged 'file attachment' menu into one button</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release version="0.9.5" date="2024-06-04">
|
||||
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.9.5</url>
|
||||
<description>
|
||||
<p>Quick Fix</p>
|
||||
<p>There were some errors when transitioning from the old version of chats to the new version. I apologize if this caused any corruption in your chat history. This should be the only time such a transition is needed.</p>
|
||||
</description>
|
||||
</release>
|
||||
<release version="0.9.4" date="2024-06-04">
|
||||
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.9.4</url>
|
||||
<description>
|
||||
<p>Huge Update</p>
|
||||
<ul>
|
||||
<li>Added: Support for plain text files</li>
|
||||
<li>Added: New backend system for storing messages</li>
|
||||
<li>Added: Support for changing Ollama's overrides</li>
|
||||
<li>General Optimization</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release version="0.9.3" date="2024-06-01">
|
||||
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.9.3</url>
|
||||
<description>
|
||||
<p>Big Update</p>
|
||||
<ul>
|
||||
<li>Added: Support for GGUF models (experimental)</li>
|
||||
<li>Added: Support for customization and creation of models</li>
|
||||
<li>Fixed: Icons don't appear on non Gnome systems</li>
|
||||
<li>Update Ollama to v0.1.39</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release version="0.9.2" date="2024-05-30">
|
||||
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.9.2</url>
|
||||
<description>
|
||||
<p>Fix</p>
|
||||
<ul>
|
||||
<li>Fixed: app didn't open if models tweaks wasn't present in the config files</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release version="0.9.1" date="2024-05-29">
|
||||
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.9.1</url>
|
||||
<description>
|
||||
<p>Big Update</p>
|
||||
<ul>
|
||||
<li>Changed multiple icons (paper airplane for the send button)</li>
|
||||
<li>Combined export / import chat buttons into a menu</li>
|
||||
<li>Added 'model tweaks' (temperature, seed, keep_alive)</li>
|
||||
<li>Fixed send / stop button</li>
|
||||
<li>Fixed app not checking if remote connection works when starting</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release version="0.9.0" date="2024-05-29">
|
||||
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.9.0</url>
|
||||
<description>
|
||||
<p>Daily Update</p>
|
||||
<ul>
|
||||
<li>Added text ellipsis to chat name so it doesn't change the button width</li>
|
||||
<li>New shortcut for creating a chat (CTRL+N)</li>
|
||||
<li>New message entry design</li>
|
||||
<li>Fixed: Can't rename the same chat multiple times</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release version="0.8.8" date="2024-05-28">
|
||||
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.8.8</url>
|
||||
<description>
|
||||
<p>The fix</p>
|
||||
<ul>
|
||||
<li>Fixed: Ollama instance keeps running on the background even when it is disabled</li>
|
||||
<li>Fixed: Can't pull models on the integrated instance</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release version="0.8.7" date="2024-05-27">
|
||||
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.8.7</url>
|
||||
<description>
|
||||
<p>Quick tweaks</p>
|
||||
<ul>
|
||||
<li>Added progress bar to models that are being pulled</li>
|
||||
<li>Added size to tags when pulling a model</li>
|
||||
<li>General optimizations on the background</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release version="0.8.6" date="2024-05-26">
|
||||
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.8.6</url>
|
||||
<description>
|
||||
<p>Quick fixes</p>
|
||||
<ul>
|
||||
<li>Fixed: Scroll when message is received</li>
|
||||
<li>Fixed: Content doesn't change when creating a new chat</li>
|
||||
<li>Added 'Featured Models' page on welcome dialog</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<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">
|
||||
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.8.0</url>
|
||||
<description>
|
||||
<p>New Update</p>
|
||||
<ul>
|
||||
<li>Updated model list</li>
|
||||
<li>Added image recognition to more models</li>
|
||||
<li>Added Brazilian Portuguese translation (Thanks Daimaar Stein)</li>
|
||||
<li>Refined the general UI (Thanks Nokse22)</li>
|
||||
<li>Added 'delete message' feature</li>
|
||||
<li>Added metadata so that software distributors know that the app is compatible with mobile</li>
|
||||
<li>Changed 'send' shortcut to just the return/enter key (to add a new line use shift+return)</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release version="0.7.1" date="2024-05-23">
|
||||
<url type="details">https://github.com/Jeffser/Alpaca/releases/tag/0.7.1</url>
|
||||
<description>
|
||||
|
||||
@@ -33,4 +33,24 @@ test('Validate schema file',
|
||||
compile_schemas,
|
||||
args: ['--strict', '--dry-run', meson.current_source_dir()])
|
||||
|
||||
#service_conf = configuration_data()
|
||||
#service_conf.set('appid', application_id)
|
||||
#service_conf.set('libexecdir', join_paths(get_option('prefix'), get_option('bindir')))
|
||||
#configure_file(
|
||||
#input: 'com.jeffser.Alpaca.SearchProvider.service.in',
|
||||
#output: '@0@.SearchProvider.service'.format(application_id),
|
||||
#configuration: service_conf,
|
||||
#install_dir: join_paths(join_paths(get_option('prefix'), get_option('datadir')), 'dbus-1', 'services')
|
||||
#)
|
||||
|
||||
#search_provider_conf = configuration_data()
|
||||
#search_provider_conf.set('appid', application_id)
|
||||
#configure_file(
|
||||
#configuration: search_provider_conf,
|
||||
#input: files('com.jeffser.Alpaca.SearchProvider.ini.in'),
|
||||
#install_dir: join_paths(get_option('datadir'), 'gnome-shell', 'search-providers'),
|
||||
#output: '@0@.SearchProvider.ini'.format(application_id)
|
||||
#)
|
||||
|
||||
|
||||
subdir('icons')
|
||||
@@ -1,11 +1,12 @@
|
||||
project('Alpaca',
|
||||
version: '0.7.1',
|
||||
project('Alpaca', 'c',
|
||||
version: '0.9.6',
|
||||
meson_version: '>= 0.62.0',
|
||||
default_options: [ 'warning_level=2', 'werror=false', ],
|
||||
)
|
||||
|
||||
i18n = import('i18n')
|
||||
gnome = import('gnome')
|
||||
application_id = 'com.jeffser.Alpaca'
|
||||
|
||||
subdir('data')
|
||||
subdir('src')
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
ru
|
||||
es
|
||||
es
|
||||
pt_BR
|
||||
fr
|
||||
1005
po/alpaca.pot
1217
po/pt_BR.po
Normal file
1207
po/pt_BR.po~
Normal file
242
po/ru.po
@@ -2,8 +2,8 @@ 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"
|
||||
"POT-Creation-Date: 2024-05-25 10:21+0800\n"
|
||||
"PO-Revision-Date: 2024-05-25 10:44+0800\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: ru_RU\n"
|
||||
@@ -29,281 +29,297 @@ msgctxt "shortcut window"
|
||||
msgid "Quit"
|
||||
msgstr "Выйти"
|
||||
|
||||
#: window.py:54 window.py:761
|
||||
#: window.py:57 window.py:783
|
||||
msgid "New Chat"
|
||||
msgstr "Новый Чат"
|
||||
|
||||
#: window.py:100
|
||||
#: window.py:102
|
||||
msgid "An error occurred"
|
||||
msgstr "Произошла ошибка"
|
||||
|
||||
#: window.py:101
|
||||
#: window.py:103
|
||||
msgid "Failed to connect to server"
|
||||
msgstr "Не удалось подключиться к серверу"
|
||||
|
||||
#: window.py:102
|
||||
#: window.py:104
|
||||
msgid "Could not list local models"
|
||||
msgstr "Не удалось перечислить локальные модели"
|
||||
|
||||
#: window.py:103
|
||||
#: window.py:105
|
||||
msgid "Could not delete model"
|
||||
msgstr "Не удалось удалить модель"
|
||||
|
||||
#: window.py:104
|
||||
#: window.py:106
|
||||
msgid "Could not pull model"
|
||||
msgstr "Не удалось извлечь модель"
|
||||
|
||||
#: window.py:105
|
||||
#: window.py:107
|
||||
msgid "Cannot open image"
|
||||
msgstr "Не удается открыть изображение"
|
||||
|
||||
#: window.py:106
|
||||
#: window.py:108
|
||||
msgid "Cannot delete chat because it's the only one left"
|
||||
msgstr "Не удается удалить чат, потому что он единственный оставшийся"
|
||||
|
||||
#: window.py:107
|
||||
#: window.py:109
|
||||
msgid "There was an error with the local Ollama instance, so it has been reset"
|
||||
msgstr ""
|
||||
"Произошла ошибка с локальным экземпляром Ollama, поэтому он был сброшен"
|
||||
|
||||
#: window.py:110
|
||||
#: window.py:112
|
||||
msgid "Please select a model before chatting"
|
||||
msgstr "Пожалуйста, выберите модель перед началом общения"
|
||||
|
||||
#: window.py:111
|
||||
#: window.py:113
|
||||
msgid "Chat cannot be cleared while receiving a message"
|
||||
msgstr "Чат не может быть удален при получении сообщения"
|
||||
|
||||
#: window.py:112
|
||||
#: window.py:114
|
||||
msgid "That tag is already being pulled"
|
||||
msgstr "Этот тег уже удален"
|
||||
|
||||
#: window.py:113
|
||||
msgid "That tag has been pulled alreay"
|
||||
#: window.py:115
|
||||
msgid "That tag has been pulled already"
|
||||
msgstr "Этот тег уже был удален"
|
||||
|
||||
#: window.py:116
|
||||
#: window.py:118
|
||||
msgid "Model deleted successfully"
|
||||
msgstr "Модель успешно удалена"
|
||||
|
||||
#: window.py:117
|
||||
#: window.py:119
|
||||
msgid "Model pulled successfully"
|
||||
msgstr "Модель успешно извлечена"
|
||||
|
||||
#: window.py:118
|
||||
#: window.py:120
|
||||
msgid "Chat exported successfully"
|
||||
msgstr "Чат успешно экспортирован"
|
||||
|
||||
#: window.py:119
|
||||
#: window.py:121
|
||||
msgid "Chat imported successfully"
|
||||
msgstr "Чат успешно импортирован"
|
||||
|
||||
#: window.py:451
|
||||
#: window.py:476
|
||||
msgid "Task Complete"
|
||||
msgstr "Задача выполнена"
|
||||
|
||||
#: window.py:451
|
||||
#: window.py:476
|
||||
msgid "Model '{}' pulled successfully."
|
||||
msgstr "Модель '{}' успешно извлечена."
|
||||
|
||||
#: window.py:456
|
||||
#: window.py:481
|
||||
msgid "Pull Model Error"
|
||||
msgstr "Ошибка Извлечения Модели"
|
||||
|
||||
#: window.py:456
|
||||
#: window.py:481
|
||||
msgid "Failed to pull model '{}' due to network error."
|
||||
msgstr "Не удалось извлечь модель '{}' из-за сетевой ошибки."
|
||||
|
||||
#: window.py:472
|
||||
#: window.py:496
|
||||
msgid "Stop Model"
|
||||
msgstr "Остановить Модель"
|
||||
|
||||
#: window.py:473
|
||||
#: window.py:497
|
||||
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
|
||||
#: window.py:500 window.py:543 window.py:566 window.py:638 window.py:711
|
||||
#: window.py:737 window.py:769 window.py:810
|
||||
msgid "Cancel"
|
||||
msgstr "Отмена"
|
||||
|
||||
#: window.py:477
|
||||
#: window.py:501
|
||||
msgid "Stop"
|
||||
msgstr "Стоп"
|
||||
|
||||
#: window.py:515
|
||||
#: window.py:539
|
||||
msgid "Delete Model"
|
||||
msgstr "Удалить Модель"
|
||||
|
||||
#: window.py:516 window.py:712
|
||||
#: window.py:540 window.py:734
|
||||
msgid "Are you sure you want to delete '{}'?"
|
||||
msgstr "Вы уверены, что хотите удалить '{}'?"
|
||||
|
||||
#: window.py:520 window.py:716
|
||||
#: window.py:544 window.py:738
|
||||
msgid "Delete"
|
||||
msgstr "Удалить"
|
||||
|
||||
#: window.py:537
|
||||
#: window.py:561
|
||||
msgid "Pull Model"
|
||||
msgstr "Извлечение модели"
|
||||
|
||||
#: window.py:538
|
||||
#: window.py:562
|
||||
msgid "Please select a tag to pull '{}'"
|
||||
msgstr "Пожалуйста, выберите тег для извлечения '{}'"
|
||||
|
||||
#: window.py:543
|
||||
#: window.py:567
|
||||
msgid "Pull"
|
||||
msgstr "Извлечение"
|
||||
|
||||
#: window.py:611 window.ui:462
|
||||
#: window.py:634 window.ui:446
|
||||
msgid "Clear Chat"
|
||||
msgstr "Очистить Чат"
|
||||
|
||||
#: window.py:612
|
||||
#: window.py:635
|
||||
msgid "Are you sure you want to clear the chat?"
|
||||
msgstr "Вы уверены, что хотите очистить чат?"
|
||||
|
||||
#: window.py:616
|
||||
#: window.py:639
|
||||
msgid "Clear"
|
||||
msgstr "Очистить"
|
||||
|
||||
#: window.py:684
|
||||
#: window.py:707
|
||||
msgid "Remove Image"
|
||||
msgstr "Удалить Изображение"
|
||||
|
||||
#: window.py:685
|
||||
#: window.py:708
|
||||
msgid "Are you sure you want to remove image?"
|
||||
msgstr "Вы уверены, что хотите удалить изображение?"
|
||||
|
||||
#: window.py:689
|
||||
#: window.py:712 window.ui:466
|
||||
msgid "Remove"
|
||||
msgstr "Удалить"
|
||||
|
||||
#: window.py:711
|
||||
#: window.py:733
|
||||
msgid "Delete Chat"
|
||||
msgstr "Удалить Чат"
|
||||
|
||||
#: window.py:742
|
||||
#: window.py:763
|
||||
msgid "Rename Chat"
|
||||
msgstr "Переименовать Чат"
|
||||
|
||||
#: window.py:749
|
||||
#: window.py:770
|
||||
msgid "Rename"
|
||||
msgstr "Переименовать"
|
||||
|
||||
#: window.py:769
|
||||
#: window.py:791
|
||||
msgid "The name '{}' is already in use"
|
||||
msgstr "Имя '{}' уже используется"
|
||||
|
||||
#: window.py:782
|
||||
#: window.py:804
|
||||
msgid "Create Chat"
|
||||
msgstr "Создать Чат"
|
||||
|
||||
#: window.py:789
|
||||
#: window.py:811
|
||||
msgid "Create"
|
||||
msgstr "Создать"
|
||||
|
||||
#: window.ui:46
|
||||
msgid "Chats"
|
||||
msgstr "Чаты"
|
||||
#: window.py:914
|
||||
msgid "Connection Error"
|
||||
msgstr "Ошибка Соединения"
|
||||
|
||||
#: window.ui:56
|
||||
msgid "Import chat"
|
||||
msgstr "Импорт чата"
|
||||
#: window.py:915
|
||||
msgid "The remote instance has disconnected"
|
||||
msgstr "Удаленный экземпляр отключился"
|
||||
|
||||
#: window.ui:69
|
||||
msgid "Export chat"
|
||||
msgstr "Экспорт чата"
|
||||
#: window.py:919
|
||||
msgid "Close Alpaca"
|
||||
msgstr "Закрыть Программу"
|
||||
|
||||
#: window.ui:82
|
||||
#: window.py:920
|
||||
msgid "Use local instance"
|
||||
msgstr "Использовать локальный экземпляр"
|
||||
|
||||
#: window.py:921
|
||||
msgid "Connect"
|
||||
msgstr "Подключить"
|
||||
|
||||
#: window.ui:40
|
||||
msgid "New chat"
|
||||
msgstr "Новый чат"
|
||||
|
||||
#: window.ui:118
|
||||
#: window.ui:49
|
||||
msgid "Import chat"
|
||||
msgstr "Импорт чата"
|
||||
|
||||
#: window.ui:58
|
||||
msgid "Export chat"
|
||||
msgstr "Экспорт чата"
|
||||
|
||||
#: window.ui:90
|
||||
msgid "Toggle Sidebar"
|
||||
msgstr "Переключение боковой панели"
|
||||
|
||||
#: window.ui:139 window.ui:315
|
||||
#: window.ui:111 window.ui:303
|
||||
msgid "Manage models"
|
||||
msgstr "Управление моделями"
|
||||
|
||||
#: window.ui:153
|
||||
#: window.ui:125
|
||||
msgid "Menu"
|
||||
msgstr "Меню"
|
||||
|
||||
#: window.ui:231
|
||||
#: window.ui:216
|
||||
msgid "Send"
|
||||
msgstr "Отправить"
|
||||
|
||||
#: window.ui:240
|
||||
msgid "Requires model 'llava' to be selected"
|
||||
msgstr "Требуется выбрать модель \"llava\""
|
||||
#: window.ui:225
|
||||
msgid "Only available on selected models"
|
||||
msgstr "Доступно только для некоторых моделей"
|
||||
|
||||
#: window.ui:243
|
||||
#: window.ui:228
|
||||
msgid "Image"
|
||||
msgstr "Изображение"
|
||||
|
||||
#: window.ui:266 window.ui:466 window.ui:517
|
||||
#: window.ui:254 window.ui:450 window.ui:508
|
||||
msgid "Preferences"
|
||||
msgstr "Настройки"
|
||||
|
||||
#: window.ui:269 window.ui:501
|
||||
#: window.ui:257 window.ui:492
|
||||
msgid "General"
|
||||
msgstr "Общие"
|
||||
|
||||
#: window.ui:273
|
||||
#: window.ui:261
|
||||
msgid "Remote Connection"
|
||||
msgstr "Удаленное подключение"
|
||||
|
||||
#: window.ui:274
|
||||
#: window.ui:262
|
||||
msgid "Manage a remote connection to Ollama"
|
||||
msgstr "Управление удаленным подключением к Ollama"
|
||||
|
||||
#: window.ui:277
|
||||
#: window.ui:265
|
||||
msgid "Use remote connection"
|
||||
msgstr "Использовать удаленное подключение"
|
||||
|
||||
#: window.ui:282
|
||||
#: window.ui:270
|
||||
msgid "URL of remote instance"
|
||||
msgstr "URL-адрес удаленного экземпляра"
|
||||
|
||||
#: window.ui:290
|
||||
#: window.ui:278
|
||||
msgid "Behavior"
|
||||
msgstr "Поведение"
|
||||
|
||||
#: window.ui:291
|
||||
#: window.ui:279
|
||||
msgid "Manage Alpaca's Behavior"
|
||||
msgstr "Управление поведением Alpaca"
|
||||
|
||||
#: window.ui:294
|
||||
#: window.ui:282
|
||||
msgid "Run in background"
|
||||
msgstr "Запуск в фоновом режиме"
|
||||
|
||||
#: window.ui:385
|
||||
#: window.ui:371
|
||||
msgid "Previous"
|
||||
msgstr "Предыдущий"
|
||||
|
||||
#: window.ui:400
|
||||
#: window.ui:386
|
||||
msgid "Next"
|
||||
msgstr "Следующий"
|
||||
|
||||
#: window.ui:426
|
||||
#: window.ui:412
|
||||
msgid "Welcome to Alpaca"
|
||||
msgstr "Добро пожаловать в Alpaca"
|
||||
|
||||
#: window.ui:427
|
||||
#: window.ui:413
|
||||
msgid "Powered by Ollama"
|
||||
msgstr "При поддержке Ollama"
|
||||
|
||||
#: window.ui:430
|
||||
#: window.ui:416
|
||||
msgid "Ollama Website"
|
||||
msgstr "Веб-сайт Ollama"
|
||||
|
||||
#: window.ui:446
|
||||
#: window.ui:432
|
||||
msgid "Disclaimer"
|
||||
msgstr "Отказ от ответственности"
|
||||
|
||||
#: window.ui:447
|
||||
#: window.ui:433
|
||||
msgid ""
|
||||
"Alpaca and its developers are not liable for any damages to devices or "
|
||||
"software resulting from the execution of code generated by an AI model. "
|
||||
@@ -315,46 +331,92 @@ msgstr ""
|
||||
"Пожалуйста, будьте осторожны и внимательно ознакомьтесь с кодом перед его "
|
||||
"запуском."
|
||||
|
||||
#: window.ui:470
|
||||
#: window.ui:454
|
||||
msgid "Keyboard Shortcuts"
|
||||
msgstr "Комбинации Клавиш"
|
||||
|
||||
#: window.ui:474
|
||||
#: window.ui:458
|
||||
msgid "About Alpaca"
|
||||
msgstr "О Программе"
|
||||
|
||||
#: window.ui:505
|
||||
#: window.ui:496
|
||||
msgid "Close application"
|
||||
msgstr "Закрыть приложение"
|
||||
|
||||
#: window.ui:511
|
||||
#: window.ui:502
|
||||
msgid "Clear chat"
|
||||
msgstr "Очистить чат"
|
||||
|
||||
#: window.ui:523
|
||||
#: window.ui:514
|
||||
msgid "Show shortcuts window"
|
||||
msgstr "Показать окно комбинаций клавиш"
|
||||
|
||||
#: window.ui:530
|
||||
#: window.ui:521
|
||||
msgid "Editor"
|
||||
msgstr "Редактор"
|
||||
|
||||
#: window.ui:534
|
||||
#: window.ui:525
|
||||
msgid "Copy"
|
||||
msgstr "Копировать"
|
||||
|
||||
#: window.ui:540
|
||||
#: window.ui:531
|
||||
msgid "Paste"
|
||||
msgstr "Вставить"
|
||||
|
||||
#: window.ui:546
|
||||
#: window.ui:537
|
||||
msgid "Insert new line"
|
||||
msgstr "Вставить новую строку"
|
||||
|
||||
#: window.ui:543
|
||||
msgid "Send Message"
|
||||
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
|
||||
#~ msgid "Added basic shortcuts"
|
||||
#~ 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"
|
||||
#~ msgstr "Сохранить Изменения"
|
||||
|
||||
|
||||
686
po/ru.po~
@@ -1,686 +0,0 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-05-21 22:07-0600\n"
|
||||
"PO-Revision-Date: 2024-05-20 16:59+0800\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: ru_RU\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 3.4.4\n"
|
||||
"X-Poedit-Basepath: ../src\n"
|
||||
"X-Poedit-SearchPath-0: .\n"
|
||||
|
||||
#: data/com.jeffser.Alpaca.desktop.in:3
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:7
|
||||
msgid "Alpaca"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:8
|
||||
msgid "Chat with multiple AI models"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:10
|
||||
msgid "An Ollama client"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:11
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:209
|
||||
msgid "Features"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:13
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:211
|
||||
msgid "Talk to multiple models in the same conversation"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:14
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:212
|
||||
msgid "Pull and delete models from the app"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:16 src/window.ui:436
|
||||
msgid "Disclaimer"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:17
|
||||
msgid ""
|
||||
"This project is not affiliated at all with Ollama, I'm not responsible for "
|
||||
"any damages to your device or software caused by running code given by any "
|
||||
"models."
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:20
|
||||
msgid "Jeffry Samuel Eduarte Rojas"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:38
|
||||
msgid "Welcome dialog"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:42
|
||||
msgid "A conversation involving multiple models"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:46
|
||||
msgid "Managing models"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:57
|
||||
msgid "Yet Another Daily Update"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:59
|
||||
msgid "Added better UI for 'Manage Models' dialog"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:60
|
||||
msgid "Added better UI for the chat sidebar"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:61
|
||||
msgid ""
|
||||
"Replaced model description with a button to open Ollama's website for the "
|
||||
"model"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:62
|
||||
msgid "Added myself to the credits as the spanish translator"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:63
|
||||
msgid "Using XDG properly to get config folder"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:64
|
||||
msgid "Update for translations"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:66
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:78
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:97
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:118
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:134
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:150
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:164
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:174
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:192
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:214
|
||||
msgid "Please report any errors to the issues page, thank you."
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:74
|
||||
msgid "Quick Fix"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:76
|
||||
msgid "The last update had some mistakes in the description of the update"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:86
|
||||
msgid "Another Daily Update"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:88
|
||||
msgid "Added full Spanish translation"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:89
|
||||
msgid "Added support for background pulling of multiple models"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:90
|
||||
msgid "Added interrupt button"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:91
|
||||
#, fuzzy
|
||||
msgid "Added basic shortcuts"
|
||||
msgstr "Показывать ярлыки"
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:92
|
||||
msgid "Better translation support"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:93
|
||||
msgid ""
|
||||
"User can now leave chat name empty when creating a new one, it will add a "
|
||||
"placeholder name"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:94
|
||||
msgid "Better scalling for different window sizes"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:95
|
||||
msgid "Fixed: Can't close app if first time setup fails"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:105
|
||||
msgid "Really Big Update"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:107
|
||||
msgid "Added multiple chats support!"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:108
|
||||
msgid "Added Pango Markup support (bold, list, title, subtitle, monospace)"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:109
|
||||
msgid "Added autoscroll if the user is at the bottom of the chat"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:110
|
||||
msgid "Added support for multiple tags on a single model"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:111
|
||||
msgid "Added better model management dialog"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:112
|
||||
msgid "Added loading spinner when sending message"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:113
|
||||
msgid "Added notifications if app is not active and a model pull finishes"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:114
|
||||
msgid "Added new symbolic icon"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:115
|
||||
msgid "Added frame to message textview widget"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:116
|
||||
msgid "Fixed \"code blocks shouldn't be editable\""
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:126
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:183
|
||||
msgid "Big Update"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:128
|
||||
msgid "Added code highlighting"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:129
|
||||
msgid "Added image recognition (llava model)"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:130
|
||||
msgid "Added multiline prompt"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:131
|
||||
msgid "Fixed some small bugs"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:132
|
||||
msgid "General optimization"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:142
|
||||
msgid "Fixes and features"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:144
|
||||
msgid "Russian translation (thanks github/alexkdeveloper)"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:145
|
||||
msgid "Fixed: Cannot close app on first setup"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:146
|
||||
msgid "Fixed: Brand colors for Flathub"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:147
|
||||
msgid "Fixed: App description"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:148
|
||||
msgid "Fixed: Only show 'save changes dialog' when you actually change the url"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:158
|
||||
msgid "0.2.2 Bug fixes"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:160
|
||||
msgid "Toast messages appearing behind dialogs"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:161
|
||||
msgid "Local model list not updating when changing servers"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:162
|
||||
msgid "Closing the setup dialog closes the whole app"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:172
|
||||
msgid "0.2.1 Data saving fix"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:173
|
||||
msgid ""
|
||||
"The app didn't save the config files and chat history to the right "
|
||||
"directory, this is now fixed"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:182
|
||||
msgid "0.2.0"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:184
|
||||
msgid "New Features"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:186
|
||||
msgid "Restore chat after closing the app"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:187
|
||||
msgid "A button to clear the chat"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:188
|
||||
msgid "Fixed multiple bugs involving how messages are shown"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:189
|
||||
msgid "Added welcome dialog"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:190
|
||||
msgid "More stability"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:200
|
||||
msgid "0.1.2 Quick fixes"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:201
|
||||
msgid ""
|
||||
"This release fixes some metadata needed to have a proper Flatpak application"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:207
|
||||
msgid "0.1.1 Stable Release"
|
||||
msgstr ""
|
||||
|
||||
#: data/com.jeffser.Alpaca.metainfo.xml.in:208
|
||||
msgid "This is the first public version of Alpaca"
|
||||
msgstr ""
|
||||
|
||||
#: src/window.py:53 src/window.py:753
|
||||
msgid "New Chat"
|
||||
msgstr "Новый Чат"
|
||||
|
||||
#: src/window.py:98
|
||||
msgid "An error occurred"
|
||||
msgstr "Произошла ошибка"
|
||||
|
||||
#: src/window.py:99
|
||||
msgid "Failed to connect to server"
|
||||
msgstr "Не удалось подключиться к серверу"
|
||||
|
||||
#: src/window.py:100
|
||||
msgid "Could not list local models"
|
||||
msgstr "Не удалось перечислить локальные модели"
|
||||
|
||||
#: src/window.py:101
|
||||
msgid "Could not delete model"
|
||||
msgstr "Не удалось удалить модель"
|
||||
|
||||
#: src/window.py:102
|
||||
msgid "Could not pull model"
|
||||
msgstr "Не удалось извлечь модель"
|
||||
|
||||
#: src/window.py:103
|
||||
msgid "Cannot open image"
|
||||
msgstr "Не удается открыть изображение"
|
||||
|
||||
#: src/window.py:104
|
||||
msgid "Cannot delete chat because it's the only one left"
|
||||
msgstr "Не удается удалить чат, потому что он единственный оставшийся"
|
||||
|
||||
#: src/window.py:105
|
||||
msgid "There was an error with the local Ollama instance, so it has been reset"
|
||||
msgstr ""
|
||||
|
||||
#: src/window.py:108
|
||||
msgid "Please select a model before chatting"
|
||||
msgstr "Пожалуйста, выберите модель перед началом общения"
|
||||
|
||||
#: src/window.py:109
|
||||
msgid "Chat cannot be cleared while receiving a message"
|
||||
msgstr "Чат не может быть удален при получении сообщения"
|
||||
|
||||
#: src/window.py:110
|
||||
#, fuzzy
|
||||
msgid "That tag is already being pulled"
|
||||
msgstr "Имя '{}' уже используется"
|
||||
|
||||
#: src/window.py:111
|
||||
msgid "That tag has been pulled alreay"
|
||||
msgstr ""
|
||||
|
||||
#: src/window.py:114
|
||||
msgid "Model deleted successfully"
|
||||
msgstr "Модель успешно удалена"
|
||||
|
||||
#: src/window.py:115
|
||||
msgid "Model pulled successfully"
|
||||
msgstr "Модель успешно извлечена"
|
||||
|
||||
#: src/window.py:116
|
||||
#, fuzzy
|
||||
msgid "Chat exported successfully"
|
||||
msgstr "Модель успешно удалена"
|
||||
|
||||
#: src/window.py:117
|
||||
#, fuzzy
|
||||
msgid "Chat imported successfully"
|
||||
msgstr "Модель успешно извлечена"
|
||||
|
||||
#: src/window.py:443
|
||||
msgid "Task Complete"
|
||||
msgstr "Задача выполнена"
|
||||
|
||||
#: src/window.py:443
|
||||
msgid "Model '{}' pulled successfully."
|
||||
msgstr "Модель '{}' успешно извлечена."
|
||||
|
||||
#: src/window.py:448
|
||||
msgid "Pull Model Error"
|
||||
msgstr "Ошибка Извлечения Модели"
|
||||
|
||||
#: src/window.py:448
|
||||
msgid "Failed to pull model '{}' due to network error."
|
||||
msgstr "Не удалось извлечь модель '{}' из-за сетевой ошибки."
|
||||
|
||||
#: src/window.py:464
|
||||
msgid "Stop Model"
|
||||
msgstr "Остановить Модель"
|
||||
|
||||
#: src/window.py:465
|
||||
msgid "Are you sure you want to stop pulling '{}'?"
|
||||
msgstr "Вы уверены, что хотите прекратить извлечение '{}'?"
|
||||
|
||||
#: src/window.py:468 src/window.py:511 src/window.py:534 src/window.py:607
|
||||
#: src/window.py:680 src/window.py:707 src/window.py:740 src/window.py:780
|
||||
msgid "Cancel"
|
||||
msgstr "Отмена"
|
||||
|
||||
#: src/window.py:469
|
||||
msgid "Stop"
|
||||
msgstr "Стоп"
|
||||
|
||||
#: src/window.py:507
|
||||
msgid "Delete Model"
|
||||
msgstr "Удалить Модель"
|
||||
|
||||
#: src/window.py:508 src/window.py:704
|
||||
msgid "Are you sure you want to delete '{}'?"
|
||||
msgstr "Вы уверены, что хотите удалить '{}'?"
|
||||
|
||||
#: src/window.py:512 src/window.py:708
|
||||
msgid "Delete"
|
||||
msgstr "Удалить"
|
||||
|
||||
#: src/window.py:529
|
||||
msgid "Pull Model"
|
||||
msgstr "Извлечение модели"
|
||||
|
||||
#: src/window.py:530
|
||||
msgid "Please select a tag to pull '{}'"
|
||||
msgstr "Пожалуйста, выберите тег для извлечения '{}'"
|
||||
|
||||
#: src/window.py:535
|
||||
msgid "Pull"
|
||||
msgstr "Извлечение"
|
||||
|
||||
#: src/window.py:603 src/window.ui:452
|
||||
msgid "Clear Chat"
|
||||
msgstr "Очистить Чат"
|
||||
|
||||
#: src/window.py:604
|
||||
msgid "Are you sure you want to clear the chat?"
|
||||
msgstr "Вы уверены, что хотите очистить чат?"
|
||||
|
||||
#: src/window.py:608
|
||||
msgid "Clear"
|
||||
msgstr "Очистить"
|
||||
|
||||
#: src/window.py:676
|
||||
msgid "Remove Image"
|
||||
msgstr "Удалить Изображение"
|
||||
|
||||
#: src/window.py:677
|
||||
msgid "Are you sure you want to remove image?"
|
||||
msgstr "Вы уверены, что хотите удалить изображение?"
|
||||
|
||||
#: src/window.py:681
|
||||
msgid "Remove"
|
||||
msgstr "Удалить"
|
||||
|
||||
#: src/window.py:703
|
||||
msgid "Delete Chat"
|
||||
msgstr "Удалить Чат"
|
||||
|
||||
#: src/window.py:734
|
||||
msgid "Rename Chat"
|
||||
msgstr "Переименовать Чат"
|
||||
|
||||
#: src/window.py:741
|
||||
msgid "Rename"
|
||||
msgstr "Переименовать"
|
||||
|
||||
#: src/window.py:761
|
||||
msgid "The name '{}' is already in use"
|
||||
msgstr "Имя '{}' уже используется"
|
||||
|
||||
#: src/window.py:774
|
||||
msgid "Create Chat"
|
||||
msgstr "Создать Чат"
|
||||
|
||||
#: src/window.py:781
|
||||
msgid "Create"
|
||||
msgstr "Создать"
|
||||
|
||||
#: src/window.ui:46
|
||||
msgid "Chats"
|
||||
msgstr "Чаты"
|
||||
|
||||
#: src/window.ui:56
|
||||
msgid "Import chat"
|
||||
msgstr ""
|
||||
|
||||
#: src/window.ui:69
|
||||
msgid "Export chat"
|
||||
msgstr ""
|
||||
|
||||
#: src/window.ui:82
|
||||
msgid "New chat"
|
||||
msgstr "Новый чат"
|
||||
|
||||
#: src/window.ui:118
|
||||
msgid "Toggle Sidebar"
|
||||
msgstr "Переключение боковой панели"
|
||||
|
||||
#: src/window.ui:139 src/window.ui:305
|
||||
msgid "Manage models"
|
||||
msgstr "Управление моделями"
|
||||
|
||||
#: src/window.ui:153
|
||||
msgid "Menu"
|
||||
msgstr "Меню"
|
||||
|
||||
#: src/window.ui:231
|
||||
msgid "Send"
|
||||
msgstr "Отправить"
|
||||
|
||||
#: src/window.ui:240
|
||||
msgid "Requires model 'llava' to be selected"
|
||||
msgstr "Требуется выбрать модель \"llava\""
|
||||
|
||||
#: src/window.ui:243
|
||||
msgid "Image"
|
||||
msgstr "Изображение"
|
||||
|
||||
#: src/window.ui:267 src/window.ui:456 src/window.ui:507
|
||||
msgid "Preferences"
|
||||
msgstr ""
|
||||
|
||||
#: src/window.ui:270
|
||||
msgid "Connection"
|
||||
msgstr ""
|
||||
|
||||
#: src/window.ui:274
|
||||
msgid "Remote Connection"
|
||||
msgstr ""
|
||||
|
||||
#: src/window.ui:275
|
||||
msgid "Manage a remote connection to Ollama"
|
||||
msgstr ""
|
||||
|
||||
#: src/window.ui:278
|
||||
msgid "Use remote connection"
|
||||
msgstr ""
|
||||
|
||||
#: src/window.ui:283
|
||||
msgid "URL of remote instance"
|
||||
msgstr ""
|
||||
|
||||
#: src/window.ui:375
|
||||
msgid "Previous"
|
||||
msgstr "Предыдущий"
|
||||
|
||||
#: src/window.ui:390
|
||||
msgid "Next"
|
||||
msgstr "Следующий"
|
||||
|
||||
#: src/window.ui:416
|
||||
msgid "Welcome to Alpaca"
|
||||
msgstr "Добро пожаловать в Alpaca"
|
||||
|
||||
#: src/window.ui:417
|
||||
msgid "Powered by Ollama"
|
||||
msgstr ""
|
||||
|
||||
#: src/window.ui:420
|
||||
msgid "Ollama Website"
|
||||
msgstr "Веб-сайт Ollama"
|
||||
|
||||
#: src/window.ui:437
|
||||
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 и ее разработчики не несут ответственности за любой ущерб, "
|
||||
"причиненный устройствам или программному обеспечению в результате выполнения "
|
||||
"кода, сгенерированного с помощью модели искусственного интеллекта. "
|
||||
"Пожалуйста, будьте осторожны и внимательно ознакомьтесь с кодом перед его "
|
||||
"запуском."
|
||||
|
||||
#: src/window.ui:460
|
||||
msgid "Keyboard Shortcuts"
|
||||
msgstr "Комбинации Клавиш"
|
||||
|
||||
#: src/window.ui:464
|
||||
msgid "About Alpaca"
|
||||
msgstr "О Программе"
|
||||
|
||||
#: src/window.ui:491
|
||||
msgid "General"
|
||||
msgstr "Общие"
|
||||
|
||||
#: src/window.ui:495
|
||||
msgid "Close application"
|
||||
msgstr "Закрыть приложение"
|
||||
|
||||
#: src/window.ui:501
|
||||
msgid "Clear chat"
|
||||
msgstr "Очистить чат"
|
||||
|
||||
#: src/window.ui:513
|
||||
msgid "Show shortcuts window"
|
||||
msgstr "Показать окно комбинаций клавиш"
|
||||
|
||||
#: src/window.ui:520
|
||||
msgid "Editor"
|
||||
msgstr "Редактор"
|
||||
|
||||
#: src/window.ui:524
|
||||
msgid "Copy"
|
||||
msgstr "Копировать"
|
||||
|
||||
#: src/window.ui:530
|
||||
msgid "Paste"
|
||||
msgstr "Вставить"
|
||||
|
||||
#: src/window.ui:536
|
||||
msgid "Send Message"
|
||||
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 "Изменить Сервер"
|
||||
|
||||
#~ msgctxt "shortcut window"
|
||||
#~ msgid "General"
|
||||
#~ msgstr "Общие"
|
||||
|
||||
#~ msgctxt "shortcut window"
|
||||
#~ msgid "Show Shortcuts"
|
||||
#~ msgstr "Показывать комбинации клавиш"
|
||||
|
||||
#~ msgctxt "shortcut window"
|
||||
#~ msgid "Quit"
|
||||
#~ msgstr "Выйти"
|
||||
@@ -1,6 +1,29 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<gresources>
|
||||
<gresource prefix="/com/jeffser/Alpaca">
|
||||
<file>style.css</file>
|
||||
<file>style-dark.css</file>
|
||||
<file alias="icons/scalable/status/library-symbolic.svg">icons/library-symbolic.svg</file>
|
||||
<file alias="icons/scalable/status/paper-plane-symbolic.svg">icons/paper-plane-symbolic.svg</file>
|
||||
<file alias="icons/scalable/status/globe-symbolic.svg">icons/globe-symbolic.svg</file>
|
||||
<file alias="icons/scalable/status/chat-message-new-symbolic.svg">icons/chat-message-new-symbolic.svg</file>
|
||||
<file alias="icons/scalable/status/dialog-warning-symbolic.svg">icons/dialog-warning-symbolic.svg</file>
|
||||
<file alias="icons/scalable/status/document-edit-symbolic.svg">icons/document-edit-symbolic.svg</file>
|
||||
<file alias="icons/scalable/status/edit-copy-symbolic.svg">icons/edit-copy-symbolic.svg</file>
|
||||
<file alias="icons/scalable/status/folder-download-symbolic.svg">icons/folder-download-symbolic.svg</file>
|
||||
<file alias="icons/scalable/status/image-x-generic-symbolic.svg">icons/image-x-generic-symbolic.svg</file>
|
||||
<file alias="icons/scalable/status/media-playback-stop-symbolic.svg">icons/media-playback-stop-symbolic.svg</file>
|
||||
<file alias="icons/scalable/status/open-menu-symbolicsvg">icons/open-menu-symbolic.svg</file>
|
||||
<file alias="icons/scalable/status/preferences-other-symbolic.svg">icons/preferences-other-symbolic.svg</file>
|
||||
<file alias="icons/scalable/status/preferences-system-symbolic.svg">icons/preferences-system-symbolic.svg</file>
|
||||
<file alias="icons/scalable/status/sidebar-show-symbolic.svg">icons/sidebar-show-symbolic.svg</file>
|
||||
<file alias="icons/scalable/status/user-trash-symbolic.svg">icons/user-trash-symbolic.svg</file>
|
||||
<file alias="icons/scalable/status/view-more-symbolic.svg">icons/view-more-symbolic.svg</file>
|
||||
<file alias="icons/scalable/status/document-open-symbolic.svg">icons/document-open-symbolic.svg</file>
|
||||
<file alias="icons/scalable/status/list-add-symbolic.svg">icons/list-add-symbolic.svg</file>
|
||||
<file alias="icons/scalable/status/brain-augemnted-symbolic.svg">icons/brain-augemnted-symbolic.svg</file>
|
||||
<file alias="icons/scalable/status/chain-link-loose-symbolic.svg">icons/chain-link-loose-symbolic.svg</file>
|
||||
<file alias="icons/scalable/status/document-text-symbolic.svg">icons/document-text-symbolic.svg</file>
|
||||
<file preprocess="xml-stripblanks">window.ui</file>
|
||||
<file preprocess="xml-stripblanks">gtk/help-overlay.ui</file>
|
||||
</gresource>
|
||||
|
||||
127
src/alpaca_search_provider.in
Normal file
@@ -0,0 +1,127 @@
|
||||
#!@PYTHON@
|
||||
|
||||
import sys
|
||||
from gi.repository import Gio, GLib
|
||||
|
||||
DBUS_NAME = "com.jeffser.Alpaca.SearchProvider"
|
||||
DBUS_OBJECT_PATH = "/com/jeffser/Alpaca/SearchProvider"
|
||||
DBUS_INTERFACE = "org.gnome.Shell.SearchProvider2"
|
||||
|
||||
class SearchProvider:
|
||||
def __init__(self):
|
||||
print("ALPACA __init__")
|
||||
self.connection = Gio.bus_get_sync(Gio.BusType.SESSION, None)
|
||||
if not self.connection:
|
||||
print("ALPACA Failed to get D-Bus connection")
|
||||
return
|
||||
|
||||
print("ALPACA D-Bus connection obtained")
|
||||
interface_info = self.get_interface_info()
|
||||
|
||||
self.registration_id = self.connection.register_object(
|
||||
DBUS_OBJECT_PATH,
|
||||
interface_info,
|
||||
self.handle_method_call,
|
||||
None,
|
||||
None
|
||||
)
|
||||
|
||||
if self.registration_id > 0:
|
||||
print(f"ALPACA Object registered with ID: {self.registration_id}")
|
||||
else:
|
||||
print("ALPACA Failed to register object")
|
||||
|
||||
def get_interface_info(self):
|
||||
print("ALPACA get_interface_info")
|
||||
xml = """
|
||||
<node>
|
||||
<interface name="org.gnome.Shell.SearchProvider2">
|
||||
|
||||
<method name="GetInitialResultSet">
|
||||
<arg type="as" name="terms" direction="in" />
|
||||
<arg type="as" name="results" direction="out" />
|
||||
</method>
|
||||
|
||||
<method name="GetSubsearchResultSet">
|
||||
<arg type="as" name="previous_results" direction="in" />
|
||||
<arg type="as" name="terms" direction="in" />
|
||||
<arg type="as" name="results" direction="out" />
|
||||
</method>
|
||||
|
||||
<method name="GetResultMetas">
|
||||
<arg type="as" name="identifiers" direction="in" />
|
||||
<arg type="aa{sv}" name="metas" direction="out" />
|
||||
</method>
|
||||
|
||||
<method name="ActivateResult">
|
||||
<arg type="s" name="identifier" direction="in" />
|
||||
<arg type="as" name="terms" direction="in" />
|
||||
<arg type="u" name="timestamp" direction="in" />
|
||||
</method>
|
||||
|
||||
<method name="LaunchSearch">
|
||||
<arg type="as" name="terms" direction="in" />
|
||||
<arg type="u" name="timestamp" direction="in" />
|
||||
</method>
|
||||
|
||||
</interface>
|
||||
</node>
|
||||
"""
|
||||
return Gio.DBusNodeInfo.new_for_xml(xml).interfaces[0]
|
||||
|
||||
def handle_method_call(self, connection, sender, object_path, interface_name, method_name, parameters, invocation):
|
||||
print(f"ALPACA handle_method_call: {method_name}")
|
||||
if method_name == "GetInitialResultSet":
|
||||
self.handle_get_initial_result_set(invocation, parameters)
|
||||
elif method_name == "GetSubsearchResultSet":
|
||||
self.handle_get_subsearch_result_set(invocation, parameters)
|
||||
elif method_name == "GetResultMetas":
|
||||
self.handle_get_result_metas(invocation, parameters)
|
||||
elif method_name == "ActivateResult":
|
||||
self.handle_activate_result(invocation, parameters)
|
||||
|
||||
def handle_get_initial_result_set(self, invocation, parameters):
|
||||
print("ALPACA handle_get_initial_result_set")
|
||||
terms = parameters.unpack()[0]
|
||||
print(f"Initial search terms: {terms}")
|
||||
results = ["result1", "result2"]
|
||||
if "Alpaca" in terms:
|
||||
results.append("alpaca_placeholder_result")
|
||||
print(f"Returning results: {results}")
|
||||
invocation.return_value(GLib.Variant("(as)", [results]))
|
||||
|
||||
def handle_get_subsearch_result_set(self, invocation, parameters):
|
||||
print("ALPACA handle_get_subsearch_result_set")
|
||||
previous_results, terms = parameters.unpack()
|
||||
print(f"Subsearch terms: {terms}, previous results: {previous_results}")
|
||||
results = ["result3", "result4"]
|
||||
if "Alpaca" in terms:
|
||||
results.append("sub_alpaca_placeholder_result")
|
||||
print(f"Returning subsearch results: {results}")
|
||||
invocation.return_value(GLib.Variant("(as)", [results]))
|
||||
|
||||
def handle_get_result_metas(self, invocation, parameters):
|
||||
print("ALPACA handle_get_result_metas")
|
||||
identifiers = parameters.unpack()[0]
|
||||
print(f"Result metas for identifiers: {identifiers}")
|
||||
metas = []
|
||||
for identifier in identifiers:
|
||||
meta = {"name": GLib.Variant("s", "Placeholder result for " + identifier)}
|
||||
metas.append(GLib.Variant("a{sv}", meta))
|
||||
print(f"Returning metas: {metas}")
|
||||
invocation.return_value(GLib.Variant("(a{sv})", [metas]))
|
||||
|
||||
def handle_activate_result(self, invocation, parameters):
|
||||
print("ALPACA handle_activate_result")
|
||||
identifier, terms, timestamp = parameters.unpack()
|
||||
print(f"Activated result: {identifier}, terms: {terms}, timestamp: {timestamp}")
|
||||
invocation.return_value(None)
|
||||
|
||||
if __name__ == "__main__":
|
||||
provider = SearchProvider()
|
||||
if provider.registration_id > 0:
|
||||
loop = GLib.MainLoop()
|
||||
print("ALPACA Running main loop")
|
||||
loop.run()
|
||||
else:
|
||||
print("ALPACA Failed to start main loop due to object registration failure")
|
||||
@@ -1,6 +1,8 @@
|
||||
# connectionhandler.py
|
||||
import json, requests
|
||||
|
||||
url = None
|
||||
|
||||
def simple_get(connection_url:str) -> dict:
|
||||
try:
|
||||
response = requests.get(connection_url)
|
||||
@@ -11,6 +13,19 @@ def simple_get(connection_url:str) -> dict:
|
||||
except Exception as e:
|
||||
return {"status": "error", "status_code": 0}
|
||||
|
||||
def simple_post(connection_url:str, data) -> dict:
|
||||
try:
|
||||
headers = {
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
response = requests.post(connection_url, headers=headers, data=data, stream=False)
|
||||
if response.status_code == 200:
|
||||
return {"status": "ok", "text": response.text, "status_code": response.status_code}
|
||||
else:
|
||||
return {"status": "error", "status_code": response.status_code}
|
||||
except Exception as e:
|
||||
return {"status": "error", "status_code": 0}
|
||||
|
||||
def simple_delete(connection_url:str, data) -> dict:
|
||||
try:
|
||||
response = requests.delete(connection_url, json=data)
|
||||
@@ -36,26 +51,3 @@ def stream_post(connection_url:str, data, callback:callable) -> dict:
|
||||
return {"status": "error", "status_code": response.status_code}
|
||||
except Exception as e:
|
||||
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}
|
||||
|
||||
293
src/dialogs.py
Normal file
@@ -0,0 +1,293 @@
|
||||
# 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, label_element):
|
||||
chat_name = label_element.get_parent().get_name()
|
||||
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 | UNUSED REASON: The 'Add Chat' button now creates a chat without a name AKA "New Chat"
|
||||
|
||||
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().split(' | ')[0]}"
|
||||
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(f"{tag[0]} | {tag[1]}")
|
||||
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_attached_file_response(self, dialog, task, button):
|
||||
if dialog.choose_finish(task) == 'remove':
|
||||
self.remove_attached_file(button)
|
||||
|
||||
def remove_attached_file(self, button):
|
||||
dialog = Adw.AlertDialog(
|
||||
heading=_("Remove File"),
|
||||
body=_("Are you sure you want to remove file?"),
|
||||
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, button=button: remove_attached_file_response(self, dialog, task, button)
|
||||
)
|
||||
|
||||
# RECONNECT REMOTE | WORKS
|
||||
|
||||
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, current_url):
|
||||
entry = Gtk.Entry(
|
||||
css_classes = ["error"],
|
||||
text = current_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)
|
||||
)
|
||||
|
||||
# CREATE MODEL | WORKS
|
||||
|
||||
def create_model_from_existing_response(self, dialog, task, dropdown):
|
||||
model = dropdown.get_selected_item().get_string()
|
||||
if dialog.choose_finish(task) == 'accept' and model:
|
||||
self.create_model(model, False)
|
||||
|
||||
def create_model_from_existing(self):
|
||||
string_list = Gtk.StringList()
|
||||
for model in self.local_models:
|
||||
string_list.append(model)
|
||||
|
||||
dropdown = Gtk.DropDown()
|
||||
dropdown.set_model(string_list)
|
||||
dialog = Adw.AlertDialog(
|
||||
heading=_("Select Model"),
|
||||
body=_("This model will be used as the base for the new model"),
|
||||
extra_child=dropdown
|
||||
)
|
||||
dialog.add_response("cancel", _("Cancel"))
|
||||
dialog.add_response("accept", _("Accept"))
|
||||
dialog.set_response_appearance("accept", Adw.ResponseAppearance.SUGGESTED)
|
||||
dialog.choose(
|
||||
parent = self,
|
||||
cancellable = None,
|
||||
callback = lambda dialog, task, dropdown=dropdown: create_model_from_existing_response(self, dialog, task, dropdown)
|
||||
)
|
||||
|
||||
def create_model_from_file_response(self, file_dialog, result):
|
||||
try: file = file_dialog.open_finish(result)
|
||||
except: return
|
||||
try:
|
||||
self.create_model(file.get_path(), True)
|
||||
except Exception as e:
|
||||
self.show_toast("error", 5, self.main_overlay) ##TODO NEW ERROR MESSAGE
|
||||
|
||||
def create_model_from_file(self):
|
||||
file_dialog = Gtk.FileDialog(default_filter=self.file_filter_gguf)
|
||||
file_dialog.open(self, None, lambda file_dialog, result: create_model_from_file_response(self, file_dialog, result))
|
||||
|
||||
# FILE CHOOSER | WORKS
|
||||
|
||||
def attach_file_response(self, file_dialog, result):
|
||||
file_types = {
|
||||
"plain_text": ["txt", "md", "html", "css", "js", "py", "java", "json", "xml"],
|
||||
"image": ["png", "jpeg", "jpg", "webp", "gif"],
|
||||
"pdf": ["pdf"],
|
||||
"docx": ["docx"]
|
||||
}
|
||||
try: file = file_dialog.open_finish(result)
|
||||
except: return
|
||||
extension = file.get_path().split(".")[-1]
|
||||
file_type = next(key for key, value in file_types.items() if extension in value)
|
||||
if not file_type: return
|
||||
if file_type == 'image' and not self.verify_if_image_can_be_used():
|
||||
self.show_toast('error', 8, self.main_overlay)
|
||||
return
|
||||
self.attach_file(file.get_path(), file_type)
|
||||
|
||||
|
||||
def attach_file(self, filter):
|
||||
file_dialog = Gtk.FileDialog(default_filter=filter)
|
||||
file_dialog.open(self, None, lambda file_dialog, result: attach_file_response(self, file_dialog, result))
|
||||
2
src/icons/brain-augemnted-symbolic.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 0 16 16" width="16px"><g fill="#222222"><path d="m 5.976562 2 c 0.546876 0 1 0.453125 1 1 v 10 c 0 0.546875 -0.453124 1 -1 1 h -0.976562 c -1.652344 0 -3 -1.347656 -3 -3 v -6 c 0 -1.652344 1.347656 -3 3 -3 z m -5.976562 3 v 6 c 0 2.765625 2.234375 5 5 5 h 0.976562 c 1.660157 0 3 -1.339844 3 -3 v -10 c 0 -1.660156 -1.339843 -3 -3 -3 h -0.976562 c -2.765625 0 -5 2.234375 -5 5 z m 0 0"/><path d="m 1.488281 8.996094 h 1.511719 c 1.101562 0 1.988281 -0.886719 1.988281 -1.984375 v -0.515625 c 0 -0.273438 -0.222656 -0.5 -0.5 -0.5 c -0.273437 0 -0.5 0.226562 -0.5 0.5 v 0.515625 c 0 0.542969 -0.445312 0.984375 -0.988281 0.984375 h -1.511719 c -0.273437 0 -0.5 0.226562 -0.5 0.5 c 0 0.277344 0.226563 0.5 0.5 0.5 z m 0 0"/><path d="m 7.5 9.992188 h -1.511719 c -1.101562 0 -1.988281 0.886718 -1.988281 1.984374 v 0.515626 c 0 0.273437 0.222656 0.5 0.5 0.5 s 0.5 -0.226563 0.5 -0.5 v -0.515626 c 0 -0.539062 0.445312 -0.984374 0.988281 -0.984374 h 1.511719 c 0.277344 0 0.5 -0.226563 0.5 -0.5 c 0 -0.277344 -0.222656 -0.5 -0.5 -0.5 z m 0 0"/><path d="m 11.015625 14 h -1.035156 c -0.546875 0 -1 -0.453125 -1 -1 v -10 c 0 -0.546875 0.453125 -1 1 -1 h 1.035156 v -2 h -1.035156 c -1.664063 0 -3 1.339844 -3 3 v 10 c 0 1.660156 1.335937 3 3 3 h 1.035156 z m 0 0"/><path d="m 10 5 h 2.242188 l 2.148437 -2.6875 l -0.78125 -0.625 l -2 2.5 l 0.390625 -0.1875 h -2 z m 0 0"/><path d="m 10 11 h 2 l -0.390625 -0.1875 l 2 2.5 l 0.78125 -0.625 l -2.148437 -2.6875 h -2.242188 z m 0 0"/><path d="m 14.488281 1.976562 c -0.265625 0 -0.488281 -0.21875 -0.488281 -0.488281 c 0 -0.265625 0.222656 -0.488281 0.488281 -0.488281 c 0.269531 0 0.488281 0.222656 0.488281 0.488281 c 0 0.269531 -0.21875 0.488281 -0.488281 0.488281 z m 0 -1.976562 c -0.824219 0 -1.488281 0.664062 -1.488281 1.488281 s 0.664062 1.488281 1.488281 1.488281 s 1.488281 -0.664062 1.488281 -1.488281 s -0.664062 -1.488281 -1.488281 -1.488281 z m 0 0"/><path d="m 14.488281 13.976562 c -0.265625 0 -0.488281 -0.21875 -0.488281 -0.488281 c 0 -0.265625 0.222656 -0.488281 0.488281 -0.488281 c 0.269531 0 0.488281 0.222656 0.488281 0.488281 c 0 0.269531 -0.21875 0.488281 -0.488281 0.488281 z m 0 -1.976562 c -0.824219 0 -1.488281 0.664062 -1.488281 1.488281 s 0.664062 1.488281 1.488281 1.488281 s 1.488281 -0.664062 1.488281 -1.488281 s -0.664062 -1.488281 -1.488281 -1.488281 z m 0 0"/><path d="m 14.488281 7.976562 c -0.265625 0 -0.488281 -0.21875 -0.488281 -0.488281 c 0 -0.265625 0.222656 -0.488281 0.488281 -0.488281 c 0.269531 0 0.488281 0.222656 0.488281 0.488281 c 0 0.269531 -0.21875 0.488281 -0.488281 0.488281 z m 0 -1.976562 c -0.824219 0 -1.488281 0.664062 -1.488281 1.488281 s 0.664062 1.488281 1.488281 1.488281 s 1.488281 -0.664062 1.488281 -1.488281 s -0.664062 -1.488281 -1.488281 -1.488281 z m 0 0"/></g><path d="m 10 7.53125 h 4" fill="none" stroke="#222222"/><path d="m 4.5 4 h 3 c 0.277344 0 0.5 0.222656 0.5 0.5 s -0.222656 0.5 -0.5 0.5 h -3 c -0.277344 0 -0.5 -0.222656 -0.5 -0.5 s 0.222656 -0.5 0.5 -0.5 z m 0 0" fill="#222222"/></svg>
|
||||
|
After Width: | Height: | Size: 3.0 KiB |
2
src/icons/chain-link-loose-symbolic.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 0 16 16" width="16px"><g fill="#222222"><path d="m 2.683594 9.777344 c -1.570313 -0.542969 -2.683594 -2.039063 -2.683594 -3.777344 c 0 -2.199219 1.800781 -4 4 -4 h 3 c 2.199219 0 4 1.800781 4 4 c 0 1.640625 -0.992188 3.070312 -2.421875 3.679688 l -0.785156 -1.839844 c 0.710937 -0.304688 1.207031 -1 1.207031 -1.839844 c 0 -1.125 -0.875 -2 -2 -2 h -3 c -1.125 0 -2 0.875 -2 2 c 0 0.890625 0.558594 1.621094 1.339844 1.890625 z m 0 0"/><path d="m 8 14 c -2.199219 0 -4 -1.800781 -4 -4 c 0 -1.621094 0.96875 -3.03125 2.367188 -3.65625 l 0.816406 1.828125 c -0.699219 0.3125 -1.183594 1 -1.183594 1.828125 c 0 1.125 0.875 2 2 2 h 3 c 1.125 0 2 -0.875 2 -2 c 0 -0.867188 -0.53125 -1.582031 -1.277344 -1.867188 l 0.714844 -1.867187 c 1.503906 0.574219 2.5625 2.039063 2.5625 3.734375 c 0 2.199219 -1.800781 4 -4 4 z m 0 0"/></g></svg>
|
||||
|
After Width: | Height: | Size: 934 B |
4
src/icons/chat-message-new-symbolic.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m 3 1 c -1.644531 0 -3 1.355469 -3 3 v 6 c 0 1.644531 1.355469 3 3 3 h 1 v 3 l 3 -3 v -1 c 0 -0.550781 -0.449219 -1 -1 -1 h -3 c -0.570312 0 -1 -0.429688 -1 -1 v -6 c 0 -0.554688 0.445312 -1 1 -1 h 10 c 0.554688 0 1 0.445312 1 1 v 4 c 0 0.550781 0.449219 1 1 1 s 1 -0.449219 1 -1 v -4 c 0 -1.644531 -1.355469 -3 -3 -3 z m 8 7 v 3 h -3 v 2 h 3 v 3 h 2 v -3 h 3 v -2 h -3 v -3 z m 0 0" fill="#2e3436"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 548 B |
4
src/icons/dialog-warning-symbolic.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m 7.90625 0.09375 c -0.527344 -0.0273438 -1.039062 0.28125 -1.4375 0.96875 l -6.25 11.59375 c -0.535156 0.964844 0.046875 2.34375 1.09375 2.34375 h 13.15625 c 0.980469 0 1.902344 -1.160156 1.21875 -2.34375 l -6.3125 -11.53125 c -0.398438 -0.644531 -0.941406 -1.003906 -1.46875 -1.03125 z m 1.09375 3.90625 v 5 c 0.007812 0.527344 -0.472656 1 -1 1 s -1.007812 -0.472656 -1 -1 v -5 z m -1 7 c 0.550781 0 1 0.449219 1 1 s -0.449219 1 -1 1 s -1 -0.449219 -1 -1 s 0.449219 -1 1 -1 z m 0 0" fill="#2e3436"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 649 B |
4
src/icons/document-edit-symbolic.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m 12.277344 0.832031 c -0.578125 0.007813 -1.167969 0.230469 -1.691406 0.753907 l -9 9 c -0.375 0.375 -0.585938 0.882812 -0.585938 1.414062 v 3 h 3 c 0.53125 0 1.039062 -0.210938 1.414062 -0.585938 l 9 -9 c 1.789063 -1.789062 0.082032 -4.390624 -1.890624 -4.570312 c -0.082032 -0.011719 -0.164063 -0.011719 -0.246094 -0.011719 z m -1.777344 3.605469 l 1.0625 1.0625 l -7.0625 7.0625 l -1.0625 -1.0625 z m 0 0" fill="#2e3436"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 574 B |
7
src/icons/document-open-symbolic.svg
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
|
||||
<g fill="#2e3436">
|
||||
<path d="m 3 1 c -1.644531 0 -3 1.355469 -3 3 v 8 c 0 1.644531 1.355469 3 3 3 h 8.882812 c 0.832032 0 1.578126 -0.402344 2.054688 -0.9375 c 0.472656 -0.53125 0.738281 -1.167969 0.910156 -1.800781 l 0.972656 -2.609375 c 0.390626 -1.449219 -0.09375 -2.652344 -0.820312 -3.167969 c -0.484375 -0.34375 -0.714844 -0.292969 -1 -0.324219 v -1.160156 c 0 -0.855469 -0.558594 -1.589844 -1.09375 -1.828125 c -0.53125 -0.238281 -1.011719 -0.167969 -1.011719 -0.167969 l 0.105469 -0.003906 h -3.585938 l -1.707031 -1.707031 c -0.1875 -0.1875 -0.441406 -0.292969 -0.707031 -0.292969 z m 0 2 h 2.585938 l 1.707031 1.707031 c 0.1875 0.1875 0.441406 0.292969 0.707031 0.292969 h 4 c 0.035156 0 0.070312 -0.003906 0.105469 -0.007812 c 0 0 0.019531 0.019531 -0.011719 0.003906 c -0.035156 -0.011719 -0.09375 -0.25 -0.09375 0.003906 v 2 c 0 0.550781 0.449219 1 1 1 c 1 0 1.046875 0.703125 0.886719 1.128906 l -0.972657 2.609375 c -0.117187 0.4375 -0.296874 0.800781 -0.472656 0.996094 c -0.175781 0.199219 -0.285156 0.265625 -0.558594 0.265625 h -8.882812 c -0.570312 0 -1 -0.429688 -1 -1 v -8 c 0 -0.570312 0.46875 -0.792969 1 -1 z m 0 0"/>
|
||||
<path d="m 7 6 l 0.042969 0.003906 c -0.914063 -0.042968 -1.75 0.390625 -2.195313 0.96875 c -0.710937 1.222656 -1.15625 2.277344 -1.800781 3.71875 c -0.171875 0.523438 0.117187 1.089844 0.640625 1.261719 c 0.527344 0.171875 1.09375 -0.117187 1.261719 -0.640625 c 0.488281 -1.011719 0.921875 -1.816406 1.339843 -2.808594 c 0.210938 -0.503906 0.703126 -0.492187 0.898438 -0.503906 h 5.8125 c 0.550781 0 1 -0.449219 1 -1 s -0.449219 -1 -1 -1 z m 0 0"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
2
src/icons/document-text-symbolic.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 0 16 16" width="16px"><g fill="#222222"><path d="m 9 2 v 5 h 4 v -1 z m -4 2 v 1 h 3 v -1 z m 0 2 v 1 h 3 v -1 z m 0 2 v 1 h 6 v -1 z m 0 2 v 1 h 6 v -1 z m 0 2 v 1 h 6 v -1 z m 0 0"/><path d="m 2 13 c 0 1.660156 1.339844 3 3 3 h 6 c 1.660156 0 3 -1.339844 3 -3 v -6 c 0 -0.90625 -0.359375 -1.773438 -1 -2.414062 l -2.585938 -2.585938 c -0.640624 -0.640625 -1.507812 -1 -2.414062 -1 h -3 c -1.660156 0 -3 1.339844 -3 3 z m 3 -10 h 3 c 0.375 0 0.734375 0.148438 1 0.414062 l 2.585938 2.585938 c 0.265624 0.265625 0.414062 0.625 0.414062 1 v 6 c 0 0.546875 -0.453125 1 -1 1 h -6 c -0.546875 0 -1 -0.453125 -1 -1 v -9 c 0 -0.546875 0.453125 -1 1 -1 z m 0 0"/></g></svg>
|
||||
|
After Width: | Height: | Size: 771 B |
4
src/icons/edit-copy-symbolic.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m 0 3 c 0 -1.644531 1.355469 -3 3 -3 h 5 c 1.644531 0 3 1.355469 3 3 c 0 0.550781 -0.449219 1 -1 1 s -1 -0.449219 -1 -1 c 0 -0.570312 -0.429688 -1 -1 -1 h -5 c -0.570312 0 -1 0.429688 -1 1 v 5 c 0 0.570312 0.429688 1 1 1 c 0.550781 0 1 0.449219 1 1 s -0.449219 1 -1 1 c -1.644531 0 -3 -1.355469 -3 -3 z m 5 5 c 0 -1.644531 1.355469 -3 3 -3 h 5 c 1.644531 0 3 1.355469 3 3 v 5 c 0 1.644531 -1.355469 3 -3 3 h -5 c -1.644531 0 -3 -1.355469 -3 -3 z m 2 0 v 5 c 0 0.570312 0.429688 1 1 1 h 5 c 0.570312 0 1 -0.429688 1 -1 v -5 c 0 -0.570312 -0.429688 -1 -1 -1 h -5 c -0.570312 0 -1 0.429688 -1 1 z m 0 0" fill="#2e3436"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 765 B |
4
src/icons/folder-download-symbolic.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m 8 0 c -0.550781 0 -1 0.449219 -1 1 v 8.585938 l -2.292969 -2.292969 c -0.1875 -0.1875 -0.441406 -0.292969 -0.707031 -0.292969 s -0.519531 0.105469 -0.707031 0.292969 c -0.390625 0.390625 -0.390625 1.023437 0 1.414062 l 4 4 c 0.390625 0.390625 1.023437 0.390625 1.414062 0 l 4 -4 c 0.390625 -0.390625 0.390625 -1.023437 0 -1.414062 s -1.023437 -0.390625 -1.414062 0 l -2.292969 2.292969 v -8.585938 c 0 -0.550781 -0.449219 -1 -1 -1 z m -6 14 v 2 h 12 v -2 z m 0 0" fill="#2e3436"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 630 B |
2
src/icons/globe-symbolic.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 0 16 16" width="16px"><path d="m 7.5 0 c -4.128906 0 -7.5 3.371094 -7.5 7.5 s 3.371094 7.5 7.5 7.5 s 7.5 -3.371094 7.5 -7.5 s -3.371094 -7.5 -7.5 -7.5 z m 0 2 c 0.257812 0 0.503906 0.023438 0.75 0.054688 c 0.191406 0.261718 0.382812 0.59375 0.550781 1.027343 c 0.105469 0.277344 0.203125 0.585938 0.289063 0.917969 h -3.179688 c 0.085938 -0.332031 0.183594 -0.640625 0.289063 -0.917969 c 0.167969 -0.433593 0.359375 -0.765625 0.550781 -1.027343 c 0.246094 -0.03125 0.492188 -0.054688 0.75 -0.054688 z m -2.085938 0.40625 c -0.050781 0.109375 -0.105468 0.203125 -0.148437 0.316406 c -0.148437 0.386719 -0.269531 0.820313 -0.378906 1.277344 h -1.617188 c 0.570313 -0.691406 1.296875 -1.246094 2.144531 -1.59375 z m 4.171876 0 c 0.847656 0.347656 1.574218 0.902344 2.144531 1.59375 h -1.617188 c -0.109375 -0.457031 -0.230469 -0.890625 -0.378906 -1.277344 c -0.042969 -0.113281 -0.097656 -0.207031 -0.148437 -0.316406 z m -6.980469 2.59375 h 2.082031 c -0.097656 0.628906 -0.148438 1.300781 -0.167969 2 h -2.480469 c 0.0625 -0.714844 0.253907 -1.390625 0.566407 -2 z m 3.09375 0 h 3.601562 c 0.101563 0.617188 0.15625 1.292969 0.179688 2 h -3.960938 c 0.023438 -0.707031 0.078125 -1.382812 0.179688 -2 z m 4.613281 0 h 2.082031 c 0.3125 0.609375 0.503907 1.285156 0.566407 2 h -2.480469 c -0.019531 -0.699219 -0.070313 -1.371094 -0.167969 -2 z m -8.273438 3 h 2.480469 c 0.019531 0.699219 0.070313 1.375 0.167969 2 h -2.082031 c -0.3125 -0.609375 -0.503907 -1.285156 -0.566407 -2 z m 3.480469 0 h 3.960938 c -0.023438 0.707031 -0.078125 1.382812 -0.179688 2 h -3.601562 c -0.101563 -0.617188 -0.15625 -1.292969 -0.179688 -2 z m 4.960938 0 h 2.480469 c -0.0625 0.714844 -0.253907 1.390625 -0.566407 2 h -2.082031 c 0.097656 -0.625 0.148438 -1.300781 0.167969 -2 z m -7.210938 3 h 1.617188 c 0.109375 0.457031 0.230469 0.890625 0.378906 1.273438 c 0.042969 0.117187 0.097656 0.210937 0.148437 0.320312 c -0.847656 -0.347656 -1.574218 -0.902344 -2.144531 -1.59375 z m 2.640625 0 h 3.179688 c -0.085938 0.332031 -0.183594 0.640625 -0.289063 0.917969 c -0.167969 0.433593 -0.359375 0.765625 -0.550781 1.027343 c -0.246094 0.03125 -0.496094 0.054688 -0.75 0.054688 s -0.503906 -0.023438 -0.75 -0.054688 c -0.191406 -0.261718 -0.382812 -0.59375 -0.550781 -1.027343 c -0.105469 -0.277344 -0.203125 -0.585938 -0.289063 -0.917969 z m 4.203125 0 h 1.617188 c -0.570313 0.691406 -1.296875 1.246094 -2.144531 1.59375 c 0.050781 -0.109375 0.105468 -0.203125 0.148437 -0.320312 c 0.148437 -0.382813 0.269531 -0.816407 0.378906 -1.273438 z m 0 0" fill="#222222"/></svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
7
src/icons/image-x-generic-symbolic.svg
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
|
||||
<g fill="#2e3436">
|
||||
<path d="m 6 5 c -0.550781 0 -1 0.449219 -1 1 s 0.449219 1 1 1 s 1 -0.449219 1 -1 s -0.449219 -1 -1 -1 z m 3.5 3 l -2 2 l -1.5 -1 l -2 2 v 0.5 c 0 0.5 0.5 0.5 0.5 0.5 h 7 s 0.472656 -0.035156 0.5 -0.5 v -1 z m 0 0"/>
|
||||
<path d="m 4 1 c -1.644531 0 -3 1.355469 -3 3 v 8 c 0 1.644531 1.355469 3 3 3 h 8 c 1.644531 0 3 -1.355469 3 -3 v -8 c 0 -1.644531 -1.355469 -3 -3 -3 z m 0 2 h 8 c 0.570312 0 1 0.429688 1 1 v 8 c 0 0.570312 -0.429688 1 -1 1 h -8 c -0.570312 0 -1 -0.429688 -1 -1 v -8 c 0 -0.570312 0.429688 -1 1 -1 z m 0 0"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 708 B |
2
src/icons/library-symbolic.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 0 16 16" width="16px"><g fill="#222222"><path d="m 1.5 2 h 2 c 0.277344 0 0.5 0.222656 0.5 0.5 v 12 c 0 0.277344 -0.222656 0.5 -0.5 0.5 h -2 c -0.277344 0 -0.5 -0.222656 -0.5 -0.5 v -12 c 0 -0.277344 0.222656 -0.5 0.5 -0.5 z m 0 0"/><path d="m 5.5 4 h 1 c 0.277344 0 0.5 0.222656 0.5 0.5 v 10 c 0 0.277344 -0.222656 0.5 -0.5 0.5 h -1 c -0.277344 0 -0.5 -0.222656 -0.5 -0.5 v -10 c 0 -0.277344 0.222656 -0.5 0.5 -0.5 z m 0 0"/><path d="m 8.5 3 h 1 c 0.277344 0 0.5 0.222656 0.5 0.5 v 11 c 0 0.277344 -0.222656 0.5 -0.5 0.5 h -1 c -0.277344 0 -0.5 -0.222656 -0.5 -0.5 v -11 c 0 -0.277344 0.222656 -0.5 0.5 -0.5 z m 0 0"/><path d="m 10.707031 1.460938 l 0.964844 -0.261719 c 0.265625 -0.070313 0.539063 0.089843 0.613281 0.355469 l 3.363282 12.558593 c 0.070312 0.265625 -0.085938 0.539063 -0.351563 0.609375 l -0.96875 0.261719 c -0.265625 0.070313 -0.539063 -0.089844 -0.613281 -0.355469 l -3.363282 -12.554687 c -0.070312 -0.269531 0.085938 -0.542969 0.355469 -0.613281 z m 0 0"/></g></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
4
src/icons/list-add-symbolic.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m 7 1 v 6 h -6 v 2 h 6 v 6 h 2 v -6 h 6 v -2 h -6 v -6 z m 0 0" fill="#2e3436"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 228 B |
4
src/icons/media-playback-stop-symbolic.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m 3.5 2 h 9 c 0.828125 0 1.5 0.671875 1.5 1.5 v 9 c 0 0.828125 -0.671875 1.5 -1.5 1.5 h -9 c -0.828125 0 -1.5 -0.671875 -1.5 -1.5 v -9 c 0 -0.828125 0.671875 -1.5 1.5 -1.5 z m 0 0" fill="#2e3436"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 345 B |
8
src/icons/open-menu-symbolic.svg
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
|
||||
<g fill="#2e3436">
|
||||
<path d="m 1 2 h 14 v 2 h -14 z m 0 0"/>
|
||||
<path d="m 1 7 h 14 v 2 h -14 z m 0 0"/>
|
||||
<path d="m 1 12 h 14 v 2 h -14 z m 0 0"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 314 B |
2
src/icons/paper-plane-symbolic.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 0 16 16" width="16px"><path d="m 15 8 l -14 -7 v 6 l 8 1 l -8 1 v 6 z m 0 0" fill="#222222"/></svg>
|
||||
|
After Width: | Height: | Size: 204 B |
4
src/icons/preferences-other-symbolic.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m 12.5 0.0234375 c -0.292969 -0.0039063 -0.59375 0.0195313 -0.882812 0.0937505 c -1.867188 0.488281 -2.984376 2.382812 -2.496094 4.234374 c 0.101562 0.386719 0.289062 0.742188 0.5 1.054688 c -0.109375 0.015625 -1.625 2.59375 -1.625 2.59375 l 3.410156 0.023438 l 0.800781 -1.117188 c 0.378907 0.03125 0.78125 0.023438 1.171875 -0.078125 c 1.863282 -0.484375 2.980469 -2.382813 2.496094 -4.234375 c -0.105469 -0.386719 -0.292969 -0.738281 -0.503906 -1.054688 l -1.359375 2.304688 c -0.28125 0.476562 -0.882813 0.632812 -1.355469 0.355469 l -0.875 -0.507813 c -0.476562 -0.277344 -0.636719 -0.875 -0.355469 -1.347656 l 1.363281 -2.3085938 c -0.097656 -0.0039062 -0.195312 -0.0117187 -0.289062 -0.0117187 z m -8.875 0.6914065 c -0.011719 0 -0.019531 0 -0.027344 0.003906 c -0.230468 0.046875 -0.445312 0.132812 -0.65625 0.21875 c -0.019531 0.625 0.085938 1.441406 -0.15625 1.65625 c -0.242187 0.210938 -1.039062 0.035156 -1.652344 -0.03125 c -0.132812 0.238281 -0.238281 0.484375 -0.3125 0.75 c 0.476563 0.394531 1.136719 0.839844 1.152344 1.15625 c 0.015625 0.320312 -0.625 0.804688 -1.058594 1.25 c 0.101563 0.257812 0.25 0.492188 0.40625 0.71875 c 0.605469 -0.125 1.359376 -0.375 1.621094 -0.1875 c 0.261719 0.1875 0.261719 1.003906 0.34375 1.625 c 0.246094 0.074219 0.507813 0.105469 0.777344 0.125 c 0.28125 -0.554688 0.566406 -1.320312 0.875 -1.40625 c 0.316406 -0.089844 0.960938 0.457031 1.5 0.78125 c 0.214844 -0.152344 0.410156 -0.335938 0.589844 -0.53125 c -0.253906 -0.574219 -0.71875 -1.292969 -0.589844 -1.59375 c 0.125 -0.300781 0.96875 -0.46875 1.558594 -0.6875 c 0.003906 -0.074219 0.03125 -0.144531 0.03125 -0.21875 c 0 -0.191406 -0.035156 -0.378906 -0.0625 -0.5625 c -0.605469 -0.160156 -1.464844 -0.242188 -1.621094 -0.53125 c -0.160156 -0.289062 0.238281 -1.0625 0.433594 -1.65625 c -0.199219 -0.179688 -0.417969 -0.335938 -0.652344 -0.46875 c -0.503906 0.375 -1.085938 0.996094 -1.40625 0.9375 c -0.316406 -0.054688 -0.660156 -0.820312 -0.996094 -1.34375 c -0.03125 0.003906 -0.066406 0 -0.097656 -0.003906 z m 0.59375 1.878906 c 0.929688 0 1.6875 0.753906 1.6875 1.6875 s -0.757812 1.6875 -1.6875 1.6875 s -1.683594 -0.753906 -1.683594 -1.6875 s 0.753906 -1.6875 1.683594 -1.6875 z m 8.621094 6.332031 c -0.144532 0 -0.273438 0.023438 -0.359375 0.074219 h -9.050781 c -0.246094 -0.105469 -0.746094 -0.046875 -0.964844 0.179688 l -2.160156 2.113281 c -0.191407 0.175781 -0.30078175 0.484375 -0.304688 0.707031 c -0.0546875 0.886719 1 1.320312 1.636719 0.792969 l 1.363281 -1.332031 l 0.003906 3.539062 c 0 0.570312 0.457032 1 0.996094 1 h 7.992188 c 0.523437 0 0.996093 -0.445312 0.996093 -0.9375 l -0.003906 -3.601562 l 1.335937 1.308593 c 0.636719 0.527344 1.6875 0.09375 1.636719 -0.792969 c -0.003906 -0.222656 -0.113281 -0.53125 -0.300781 -0.703124 l -2.164062 -2.117188 c -0.144532 -0.152344 -0.417969 -0.226562 -0.652344 -0.230469 z m 0 0" fill="#2e3436"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.0 KiB |
4
src/icons/preferences-system-symbolic.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m 13.855469 0 l -1.539063 1.4375 c -0.453125 0.421875 -0.53125 1.148438 -0.269531 1.707031 l -5.886719 5.996094 c -0.011718 0 -0.019531 0 -0.03125 0 c -0.257812 -0.128906 -0.550781 -0.183594 -0.839844 -0.148437 c -0.328124 0.046874 -0.632812 0.199218 -0.867187 0.441406 l -3.945313 3.996094 c -0.3906245 0.375 -0.5468745 0.933593 -0.4062495 1.457031 c 0.1406255 0.523437 0.5546875 0.929687 1.0820315 1.058593 c 0.527344 0.132813 1.082031 -0.03125 1.453125 -0.425781 l 3.945312 -3.996093 c 0.472657 -0.453126 0.59375 -1.15625 0.296875 -1.738282 l 5.890625 -5.964844 c 0.558594 0.25 1.273438 0.148438 1.707031 -0.289062 l 1.414063 -1.5625 z m -10.308594 0.0898438 c -0.398437 0 -0.785156 0.0937502 -1.140625 0.2187502 l 1.882812 1.878906 c 0.390626 0.382812 0.390626 1 0 1.386719 l -0.710937 0.707031 c -0.386719 0.386719 -1 0.386719 -1.390625 0 l -1.882812 -1.878906 c -0.125 0.355468 -0.2187505 0.742187 -0.2187505 1.140625 c 0 1.90625 1.5507815 3.453125 3.4609375 3.453125 c 0.402344 0 0.789063 -0.09375 1.144531 -0.21875 l 1.175782 1.171875 h 0.058593 l 2.070313 -2.0625 l -1.203125 -1.203125 c 0.125 -0.359375 0.214843 -0.742188 0.214843 -1.140625 c 0 -1.90625 -1.546874 -3.4531252 -3.460937 -3.4531252 z m 6.550781 7.8906252 l -2.070312 2.066406 c 0.011718 0.027344 0.023437 0.058594 0.03125 0.089844 l 1.144531 1.140625 c -0.125 0.355468 -0.21875 0.742187 -0.21875 1.140625 c 0 1.902343 1.550781 3.449219 3.460937 3.449219 c 0.433594 0 0.855469 -0.101563 1.238282 -0.246094 l -2.007813 -2 c -0.386719 -0.386719 -0.386719 -1.035156 0 -1.417969 l 0.679688 -0.679687 c 0.195312 -0.191407 0.457031 -0.308594 0.710937 -0.308594 s 0.515625 0.117187 0.710938 0.308594 l 1.945312 1.941406 c 0.105469 -0.328125 0.183594 -0.683594 0.183594 -1.046875 c 0 -1.90625 -1.546875 -3.453125 -3.460938 -3.453125 c -0.398437 0 -0.785156 0.09375 -1.140624 0.21875 z m 0 0" fill="#2e3436"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
8
src/icons/sidebar-show-symbolic.svg
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
|
||||
<g fill="#2e3436">
|
||||
<path d="m 6.5 14 v -12 h -5 v 12 z m 0 0" fill-opacity="0.34902"/>
|
||||
<path d="m 3 1 c -1.644531 0 -3 1.355469 -3 3 v 8 c 0 1.644531 1.355469 3 3 3 h 10 c 1.644531 0 3 -1.355469 3 -3 v -8 c 0 -1.644531 -1.355469 -3 -3 -3 z m 0 2 h 10 c 0.570312 0 1 0.429688 1 1 v 8 c 0 0.570312 -0.429688 1 -1 1 h -10 c -0.570312 0 -1 -0.429688 -1 -1 v -8 c 0 -0.570312 0.429688 -1 1 -1 z m 0 0"/>
|
||||
<path d="m 6 2 h 1 v 12 h -1 z m 0 0"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 610 B |
10
src/icons/user-trash-symbolic.svg
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
|
||||
<g fill="#2e3436">
|
||||
<path d="m 1 3 h 14 c 0.550781 0 1 0.449219 1 1 s -0.449219 1 -1 1 h -14 c -0.550781 0 -1 -0.449219 -1 -1 s 0.449219 -1 1 -1 z m 0 0"/>
|
||||
<path d="m 4 4 v -1.5 c 0 -1.386719 1.113281 -2.5 2.5 -2.5 h 2.980469 c 1.382812 0 2.5 1.113281 2.5 2.5 v 1.5 h -2 v -1.5 c 0 -0.269531 -0.230469 -0.5 -0.5 -0.5 h -2.980469 c -0.269531 0 -0.5 0.230469 -0.5 0.5 v 1.5 z m 0 0"/>
|
||||
<path d="m 4 4 v 9 c 0 0.546875 0.453125 1 1 1 h 6 c 0.546875 0 1 -0.453125 1 -1 v -9 h 2 v 9 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -9 z m 0 0"/>
|
||||
<path d="m 7 7 v 5 c 0 0.277344 -0.222656 0.5 -0.5 0.5 s -0.5 -0.222656 -0.5 -0.5 v -5 c 0 -0.277344 0.222656 -0.5 0.5 -0.5 s 0.5 0.222656 0.5 0.5 z m 0 0"/>
|
||||
<path d="m 10 7 v 5 c 0 0.277344 -0.222656 0.5 -0.5 0.5 s -0.5 -0.222656 -0.5 -0.5 v -5 c 0 -0.277344 0.222656 -0.5 0.5 -0.5 s 0.5 0.222656 0.5 0.5 z m 0 0"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
4
src/icons/view-more-symbolic.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m 7.996094 0 c -1.105469 0 -2 0.894531 -2 2 s 0.894531 2 2 2 c 1.101562 0 2 -0.894531 2 -2 s -0.898438 -2 -2 -2 z m 0 6 c -1.105469 0 -2 0.894531 -2 2 s 0.894531 2 2 2 c 1.101562 0 2 -0.894531 2 -2 s -0.898438 -2 -2 -2 z m 0 6 c -1.105469 0 -2 0.894531 -2 2 s 0.894531 2 2 2 c 1.101562 0 2 -0.894531 2 -2 s -0.898438 -2 -2 -2 z m 0 0" fill="#2e3436"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 499 B |
32
src/local_instance.py
Normal file
@@ -0,0 +1,32 @@
|
||||
# local_instance.py
|
||||
import subprocess, os, threading
|
||||
from time import sleep
|
||||
|
||||
instance = None
|
||||
port = 11435
|
||||
data_dir = os.getenv("XDG_DATA_HOME")
|
||||
overrides = {}
|
||||
|
||||
def start():
|
||||
global instance, overrides
|
||||
params = overrides.copy()
|
||||
params["OLLAMA_HOST"] = f"127.0.0.1:{port}" # You can't change this directly sorry :3
|
||||
params["HOME"] = data_dir
|
||||
instance = subprocess.Popen(["/app/bin/ollama", "serve"], env={**os.environ, **params}, stderr=subprocess.PIPE, text=True)
|
||||
print("Starting Alpaca's Ollama instance...")
|
||||
sleep(1)
|
||||
print("Started Alpaca's Ollama instance")
|
||||
|
||||
def stop():
|
||||
global instance
|
||||
if instance:
|
||||
instance.kill()
|
||||
instance.wait()
|
||||
instance = None
|
||||
print("Stopped Alpaca's Ollama instance")
|
||||
|
||||
def reset():
|
||||
stop()
|
||||
sleep(1)
|
||||
start()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# main.py
|
||||
#
|
||||
# Copyright 2024 Unknown
|
||||
# Copyright 2024 Jeffser
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@@ -33,7 +33,6 @@ class AlpacaApplication(Adw.Application):
|
||||
super().__init__(application_id='com.jeffser.Alpaca',
|
||||
flags=Gio.ApplicationFlags.DEFAULT_FLAGS)
|
||||
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('about', self.on_about_action)
|
||||
|
||||
@@ -48,10 +47,10 @@ class AlpacaApplication(Adw.Application):
|
||||
application_name='Alpaca',
|
||||
application_icon='com.jeffser.Alpaca',
|
||||
developer_name='Jeffry Samuel Eduarte Rojas',
|
||||
version='0.7.1',
|
||||
version='0.9.6',
|
||||
developers=['Jeffser https://jeffser.com'],
|
||||
designers=['Jeffser https://jeffser.com'],
|
||||
translator_credits='Alex K (Russian) https://github.com/alexkdeveloper\nJeffser (Spanish) https://jeffser.com',
|
||||
translator_credits='Alex K (Russian) https://github.com/alexkdeveloper\nJeffser (Spanish) https://jeffser.com\nDaimar Stein (Brazilian Portuguese) https://github.com/not-a-dev-stein\nLouis Chauvet-Villaret (French) https://github.com/loulou64490',
|
||||
copyright='© 2024 Jeffser\n© 2024 Ollama',
|
||||
issue_url='https://github.com/Jeffser/Alpaca/issues')
|
||||
about.present(parent=self.props.active_window)
|
||||
|
||||
@@ -26,12 +26,24 @@ configure_file(
|
||||
install_mode: 'r-xr-xr-x'
|
||||
)
|
||||
|
||||
#configure_file(
|
||||
#input: 'alpaca_search_provider.in',
|
||||
#output: 'alpaca_search_provider',
|
||||
#configuration: conf,
|
||||
#install: true,
|
||||
#install_dir: get_option('bindir'),
|
||||
#install_mode: 'r-xr-xr-x'
|
||||
#)
|
||||
|
||||
alpaca_sources = [
|
||||
'__init__.py',
|
||||
'main.py',
|
||||
'window.py',
|
||||
'connection_handler.py',
|
||||
'available_models.py'
|
||||
'available_models.py',
|
||||
'dialogs.py',
|
||||
'local_instance.py',
|
||||
'update_history.py'
|
||||
]
|
||||
|
||||
install_data(alpaca_sources, install_dir: moduledir)
|
||||
|
||||
4
src/style-dark.css
Normal file
@@ -0,0 +1,4 @@
|
||||
.message-input {
|
||||
background-color: #343434;
|
||||
}
|
||||
|
||||
24
src/style.css
Normal file
@@ -0,0 +1,24 @@
|
||||
.message-input {
|
||||
background-color: #EBEBEB;
|
||||
}
|
||||
|
||||
.chat_row box.header {
|
||||
font-size: 14px;
|
||||
}
|
||||
.chat_row box {
|
||||
margin: 0;
|
||||
}
|
||||
.chat_row button {
|
||||
opacity: 0;
|
||||
transition: opacity .05s;
|
||||
}
|
||||
.chat_row:hover button {
|
||||
opacity: 1;
|
||||
}
|
||||
.message .delete-message-button {
|
||||
opacity: 0;
|
||||
transition: opacity .05s;
|
||||
}
|
||||
.message:hover .delete-message-button {
|
||||
opacity: 1;
|
||||
}
|
||||
39
src/update_history.py
Normal file
@@ -0,0 +1,39 @@
|
||||
# update_history.py
|
||||
# This script updates the old chats.json file to the structure needed for the new version
|
||||
import os, json, base64
|
||||
from PIL import Image
|
||||
import io
|
||||
|
||||
|
||||
def update(self):
|
||||
old_data = None
|
||||
new_data = {"chats": {}}
|
||||
with open(os.path.join(self.config_dir, "chats.json"), 'r') as f:
|
||||
old_data = json.load(f)["chats"]
|
||||
for chat_name, content in old_data.items():
|
||||
directory = os.path.join(self.data_dir, "chats", chat_name)
|
||||
if not os.path.exists(directory): os.makedirs(directory)
|
||||
new_messages = {}
|
||||
for message in content['messages']:
|
||||
if message:
|
||||
message_id = self.generate_uuid()
|
||||
if 'images' in message:
|
||||
if not os.path.exists(os.path.join(directory, message_id)): os.makedirs(os.path.join(directory, message_id))
|
||||
new_images = []
|
||||
for image in message['images']:
|
||||
file_name = f"{self.generate_uuid()}.png"
|
||||
decoded = base64.b64decode(image)
|
||||
buffer = io.BytesIO(decoded)
|
||||
im = Image.open(buffer)
|
||||
im.save(os.path.join(directory, message_id, file_name))
|
||||
new_images.append(file_name)
|
||||
message['images'] = new_images
|
||||
new_messages[message_id] = message
|
||||
new_data['chats'][chat_name] = {}
|
||||
new_data['chats'][chat_name]['messages'] = new_messages
|
||||
|
||||
with open(os.path.join(self.data_dir, "chats", "chats.json"), "w+") as f:
|
||||
json.dump(new_data, f, indent=6)
|
||||
|
||||
os.remove(os.path.join(self.config_dir, "chats.json"))
|
||||
|
||||
1470
src/window.py
830
src/window.ui
@@ -6,3 +6,7 @@ echo "Updating Spanish..."
|
||||
msgmerge -U po/es.po po/alpaca.pot
|
||||
#echo "Updating Russian..."
|
||||
#msgmerge -U po/ru.po po/alpaca.pot
|
||||
echo "Updating French"
|
||||
msgmerge -U po/fr.po po/alpaca.pot
|
||||
echo "Updating Brazilian Portuguese"
|
||||
msgmerge -U po/pt_BR.po po/alpaca.pot
|
||||
|
||||