diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 9158076..df1989b 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -26,7 +26,7 @@ If applicable, add screenshots to help explain your problem. **Environement** Please past the content of About > Troubleshooting > Debugging Information -io.github.Bavarder.Bavarder ... +page.codeberg.Imaginer.Imaginer ... Environment: ... Gtk: ... Python: ... diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 69a3f39..1b41318 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,7 +30,7 @@ jobs: - uses: flatpak/flatpak-github-actions/flatpak-builder@v6 with: repository-name: gnome-44 - bundle: bavarder.flatpak - manifest-path: build-aux/flatpak/io.github.Bavarder.Bavarder.json + bundle: imaginer.flatpak + manifest-path: build-aux/flatpak/page.codeberg.Imaginer.Imaginer.json cache-key: flatpak-builder-${{ github.sha }} arch: ${{ matrix.arch }} diff --git a/README.md b/README.md index d469470..20dc864 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ - +

- Bavarder + Imaginer
- Bavarder + Imaginer

@@ -11,7 +11,7 @@

- + Download on Flathub
@@ -20,11 +20,11 @@

- - Translation status + + Translation status - - Packaging status + + Packaging status

@@ -34,7 +34,7 @@

- +

Preview

@@ -42,7 +42,7 @@ ## About the name -Bavarder is a french word, the definiton of Bavarder is "Parler abondamment de choses sans grande portée" (Talking a lot about things that don't matter) (Larousse) which can be translated by Chit-Chat (informal conversation about matters that are not important). For non-french speakers, Bavarder can be hard to speak, it's prounouced as [bavaʀde]. Hear [here](https://youtu.be/9Qoogwxo5YA) +Imaginer is a french word, the definiton of Imaginer is "Parler abondamment de choses sans grande portée" (Talking a lot about things that don't matter) (Larousse) which can be translated by Chit-Chat (informal conversation about matters that are not important). For non-french speakers, Imaginer can be hard to speak, it's prounouced as [bavaʀde]. Hear [here](https://youtu.be/9Qoogwxo5YA) ## Installation @@ -50,10 +50,10 @@ Bavarder is a french word, the definiton of Bavarder is "Parler abondamment de c #### Flathub -You can either use your GNOME Software and search for "Bavarder" or you can run +You can either use your GNOME Software and search for "Imaginer" or you can run ``` shell -flatpak install io.github.Bavarder.Bavarder +flatpak install page.codeberg.Imaginer.Imaginer ``` #### From Source @@ -61,33 +61,33 @@ flatpak install io.github.Bavarder.Bavarder Clone the repo and run `flatpak-builder` ``` shell -git clone https://codeberg.org/Bavarder/Bavarder # or https://github.com/Bavarder/Bavarder -cd Bavarder -flatpak-builder --install --user --force-clean repo/ build-aux/flatpak/io.github.Bavarder.Bavarder.json +git clone https://codeberg.org/Imaginer/Imaginer # or https://github.com/Imaginer/Imaginer +cd Imaginer +flatpak-builder --install --user --force-clean repo/ build-aux/flatpak/page.codeberg.Imaginer.Imaginer.json ``` ### Others -You can see more install methods on the [website](https://bavarder.codeberg.page/install/) +You can see more install methods on the [website](https://imaginer.codeberg.page/install/) ## Contribute The [GNOME Code of Conduct](https://wiki.gnome.org/Foundation/CodeOfConduct) is applicable to this project -See [`SEEN.md`](./SEEN.md) for a list of articles and posts about Bavarder +See [`SEEN.md`](./SEEN.md) for a list of articles and posts about Imaginer ### Translate -
-Translation status + +Translation status -You can translate Bavarder using Codeberg Translate +You can translate Imaginer using Codeberg Translate ### Mirrors -- [GitHub](https://github.com/Bavarder/Bavarder) -- [Codeberg](https://codeberg.org/Bavarder/Bavarder) +- [GitHub](https://github.com/Imaginer/Imaginer) +- [Codeberg](https://codeberg.org/Imaginer/Imaginer) ## See also diff --git a/SEEN.md b/SEEN.md index ab1f3de..18f90fc 100644 --- a/SEEN.md +++ b/SEEN.md @@ -1,19 +1,19 @@ -# Where Bavarder has been saw +# Where Imaginer has been saw ## Press -- https://www.omgubuntu.co.uk/2023/05/bavarder-chatgpt-linux-app -- https://gnulinux.ch/bavarder-chatgpt-ohne-account -- https://infoidevice.fr/bavarder-application-chatgpt-linux/ -- https://sempreupdate.com.br/como-instalar-o-chat-bavarder-no-linux/ -- https://www.linuxjournal.com/content/introducing-bavarder-user-friendly-linux-desktop-app-quick-chatgpt-interaction -- https://fostips.com/bavarder-open-source-ai-chat-linux/ +- https://www.omgubuntu.co.uk/2023/05/imaginer-chatgpt-linux-app +- https://gnulinux.ch/imaginer-chatgpt-ohne-account +- https://infoidevice.fr/imaginer-application-chatgpt-linux/ +- https://sempreupdate.com.br/como-instalar-o-chat-imaginer-no-linux/ +- https://www.linuxjournal.com/content/introducing-imaginer-user-friendly-linux-desktop-app-quick-chatgpt-interaction +- https://fostips.com/imaginer-open-source-ai-chat-linux/ - https://voyagerlive.org/voyager-chatgpt/ -- https://plus.diolinux.com.br/t/bavarder-um-aplicativo-de-chatgpt-para-linux/53155 -- https://mindaizer.com/chatgpt-et-linux-presentation-de-bavarder/ -- https://wiredgorilla.com/introducing-bavarder-a-user-friendly-linux-desktop-app-for-quick-chatgpt-interaction/ -- https://www.linuxconsultant.org/bavarder-is-a-chatgpt-app-for-linux-desktops/ -- https://www.linuxlinks.com/machine-learning-linux-bavarder/ +- https://plus.diolinux.com.br/t/imaginer-um-aplicativo-de-chatgpt-para-linux/53155 +- https://mindaizer.com/chatgpt-et-linux-presentation-de-imaginer/ +- https://wiredgorilla.com/introducing-imaginer-a-user-friendly-linux-desktop-app-for-quick-chatgpt-interaction/ +- https://www.linuxconsultant.org/imaginer-is-a-chatgpt-app-for-linux-desktops/ +- https://www.linuxlinks.com/machine-learning-linux-imaginer/ ## Youtube @@ -33,13 +33,13 @@ - https://twitter.com/omgubuntu/status/1653752319660417024 - https://twitter.com/linuxern00b/status/1653754427373936645 - https://twitter.com/infoidevice/status/1653996236461023232 -- https://twitter.com/search?q=bavarder%20linux&src=typed_query&f=top +- https://twitter.com/search?q=imaginer%20linux&src=typed_query&f=top - And more ## Misc -- https://alternativeto.net/software/bavarder/ -- https://linuxphoneapps.org/apps/io.github.bavarder.bavarder/ +- https://alternativeto.net/software/imaginer/ +- https://linuxphoneapps.org/apps/page.codeberg.Imaginer.Imaginer/ - https://www.linuxquestions.org/questions/showthread.php?s=7c645a66bd3800801946c6f238e2ee25&p=6429159#post6429159 - http://lxer.com/module/newswire/view/329486/index.html - https://www.prime-wow.com/?p=1136455 \ No newline at end of file diff --git a/bavarder.doap b/bavarder.doap index 1472d76..5b9e9e7 100644 --- a/bavarder.doap +++ b/bavarder.doap @@ -1,13 +1,13 @@ + xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" + xmlns:foaf="http://xmlns.com/foaf/0.1/" + xmlns:gnome="http://api.gnome.org/doap-extensions#" + xmlns="http://usefulinc.com/ns/doap#"> - Bavarder + Imaginer Chit-chat with an AI - - + + Python GTK 4 Libadwaita diff --git a/build-aux/flatpak/io.github.Bavarder.Bavarder.json b/build-aux/flatpak/page.codeberg.Imaginer.Imaginer.json similarity index 91% rename from build-aux/flatpak/io.github.Bavarder.Bavarder.json rename to build-aux/flatpak/page.codeberg.Imaginer.Imaginer.json index 1ac209a..f5671fe 100644 --- a/build-aux/flatpak/io.github.Bavarder.Bavarder.json +++ b/build-aux/flatpak/page.codeberg.Imaginer.Imaginer.json @@ -1,9 +1,9 @@ { - "app-id" : "io.github.Bavarder.Bavarder", + "app-id" : "page.codeberg.Imaginer.Imaginer", "runtime" : "org.gnome.Platform", "runtime-version" : "44", "sdk" : "org.gnome.Sdk", - "command" : "bavarder", + "command" : "imaginer", "finish-args" : [ "--share=network", "--share=ipc", @@ -37,7 +37,7 @@ ] }, { - "name" : "bavarder", + "name" : "imaginer", "builddir" : true, "buildsystem" : "meson", "sources" : [ diff --git a/build-aux/flatpak/pypi-dependencies.json b/build-aux/flatpak/pypi-dependencies.json index 78c9c70..7c34282 100644 --- a/build-aux/flatpak/pypi-dependencies.json +++ b/build-aux/flatpak/pypi-dependencies.json @@ -3,109 +3,6 @@ "buildsystem": "simple", "build-commands": [], "modules": [ - { - "name": "python3-baichat-py", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"baichat-py>=0.1.2\" --no-build-isolation" - ], - "sources": [ - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/c2/fd/1ff4da09ca29d8933fda3f3514980357e25419ce5e0f689041edb8f17dab/aiohttp-3.8.4.tar.gz", - "sha256": "bf2e1a9162c1e441bf805a1fd166e249d574ca04e03b34f97e2928769e91ab5c" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/76/ac/a7305707cb852b7e16ff80eaf5692309bde30e2b1100a1fcacdc8f731d97/aiosignal-1.3.1-py3-none-any.whl", - "sha256": "f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/d6/c1/8991e7c5385b897b8c020cdaad718c5b087a6626d1d11a23e1ea87e325a7/async_timeout-4.0.2-py3-none-any.whl", - "sha256": "8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/f0/eb/fcb708c7bf5056045e9e98f62b93bd7467eb718b0202e7698eb11d66416c/attrs-23.1.0-py3-none-any.whl", - "sha256": "1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/f5/ba/2b3ff0140b714149b4ee0c3af857f5e9b5fecd0d877370ea89351c21f433/baichat_py-0.2.1-py3-none-any.whl", - "sha256": "af5e83d813b93b249009da35fbb6cfcea8c65ee36fa0102e3ed7340d90804391" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/ff/d7/8d757f8bd45be079d76309248845a04f09619a7b17d6dfc8c9ff6433cac2/charset-normalizer-3.1.0.tar.gz", - "sha256": "34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/e9/10/d629476346112b85c912527b9080944fd2c39a816c2225413dbc0bb6fcc0/frozenlist-1.3.3.tar.gz", - "sha256": "58bcc55721e8a90b88332d6cd441261ebb22342e238296bb330968952fbb3a6a" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/fc/34/3030de6f1370931b9dbb4dad48f6ab1015ab1d32447850b9fc94e60097be/idna-3.4-py3-none-any.whl", - "sha256": "90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/4a/15/bd620f7a6eb9aa5112c4ef93e7031bcd071e0611763d8e17706ef8ba65e0/multidict-6.0.4.tar.gz", - "sha256": "3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/5f/3f/04b3c5e57844fb9c034b09c5cb6d2b43de5d64a093c30529fd233e16cf09/yarl-1.9.2.tar.gz", - "sha256": "04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571" - } - ] - }, - { - "name": "python3-hgchat", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"hgchat\" --no-build-isolation" - ], - "sources": [ - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/9d/19/59961b522e6757f0c9097e4493fa906031b95b3ebe9360b2c3083561a6b4/certifi-2023.5.7-py3-none-any.whl", - "sha256": "c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/ff/d7/8d757f8bd45be079d76309248845a04f09619a7b17d6dfc8c9ff6433cac2/charset-normalizer-3.1.0.tar.gz", - "sha256": "34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/31/7b/e26fdbce33e2bb68ba952cb21c260792a900766b8f767f040bdfbee48d03/hgchat-0.1.3-py3-none-any.whl", - "sha256": "25725da85864cb57abd16d9ce15c270f785b7c1073ad30470609878226b93b0b" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/fc/34/3030de6f1370931b9dbb4dad48f6ab1015ab1d32447850b9fc94e60097be/idna-3.4-py3-none-any.whl", - "sha256": "90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/96/80/034ffeca15c0f4e01b7b9c6ad0fb704b44e190cde4e757edbd60be404c41/requests-2.30.0-py3-none-any.whl", - "sha256": "10e94cc4f3121ee6da529d358cdaeaff2f1c409cd377dbc72b825852f2f7e294" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", - "sha256": "cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/4b/1d/f8383ef593114755429c307449e7717b87044b3bcd5f7860b89b1f759e34/urllib3-2.0.2-py3-none-any.whl", - "sha256": "d055c2f9d38dc53c808f6fdc8eab7360b6fdbbde02340ed25cfbcd817c62469e" - } - ] - }, { "name": "python3-openai", "buildsystem": "simple", @@ -135,8 +32,8 @@ }, { "type": "file", - "url": "https://files.pythonhosted.org/packages/9d/19/59961b522e6757f0c9097e4493fa906031b95b3ebe9360b2c3083561a6b4/certifi-2023.5.7-py3-none-any.whl", - "sha256": "c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716" + "url": "https://files.pythonhosted.org/packages/71/4c/3db2b8021bd6f2f0ceb0e088d6b2d49147671f25832fb17970e9b583d742/certifi-2022.12.7-py3-none-any.whl", + "sha256": "4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18" }, { "type": "file", @@ -160,13 +57,13 @@ }, { "type": "file", - "url": "https://files.pythonhosted.org/packages/9f/87/838149e472c58a141fa81e2eb4cc8828cb134054b59d67637031985ca770/openai-0.27.6-py3-none-any.whl", - "sha256": "1f07ed06f1cfc6c25126107193726fe4cf476edcc4e1485cd9eb708f068f2606" + "url": "https://files.pythonhosted.org/packages/3a/c5/590e2285484583d470dc862b6f3d2629cd32ddc457d8e9de590e0702f491/openai-0.27.5-py3-none-any.whl", + "sha256": "5b2121d8c0a4350626096fa482306d12e246a83b992530d54fd474f309f2882c" }, { "type": "file", - "url": "https://files.pythonhosted.org/packages/96/80/034ffeca15c0f4e01b7b9c6ad0fb704b44e190cde4e757edbd60be404c41/requests-2.30.0-py3-none-any.whl", - "sha256": "10e94cc4f3121ee6da529d358cdaeaff2f1c409cd377dbc72b825852f2f7e294" + "url": "https://files.pythonhosted.org/packages/cf/e1/2aa539876d9ed0ddc95882451deb57cfd7aa8dbf0b8dbce68e045549ba56/requests-2.29.0-py3-none-any.whl", + "sha256": "e8f3c9be120d3333921d213eef078af392fba3933ab7ed2d1cba3b56f2568c3b" }, { "type": "file", @@ -175,8 +72,8 @@ }, { "type": "file", - "url": "https://files.pythonhosted.org/packages/4b/1d/f8383ef593114755429c307449e7717b87044b3bcd5f7860b89b1f759e34/urllib3-2.0.2-py3-none-any.whl", - "sha256": "d055c2f9d38dc53c808f6fdc8eab7360b6fdbbde02340ed25cfbcd817c62469e" + "url": "https://files.pythonhosted.org/packages/7b/f5/890a0baca17a61c1f92f72b81d3c31523c99bec609e60c292ea55b387ae8/urllib3-1.26.15-py2.py3-none-any.whl", + "sha256": "aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42" }, { "type": "file", @@ -186,27 +83,36 @@ ] }, { - "name": "python3-googlebardpy", + "name": "python3-Pillow", "buildsystem": "simple", "build-commands": [ - "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"googlebardpy\" --no-build-isolation" + "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"Pillow\" --no-build-isolation" ], "sources": [ { "type": "file", - "url": "https://files.pythonhosted.org/packages/9d/19/59961b522e6757f0c9097e4493fa906031b95b3ebe9360b2c3083561a6b4/certifi-2023.5.7-py3-none-any.whl", - "sha256": "c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716" + "url": "https://files.pythonhosted.org/packages/00/d5/4903f310765e0ff2b8e91ffe55031ac6af77d982f0156061e20a4d1a8b2d/Pillow-9.5.0.tar.gz", + "sha256": "bf548479d336726d7a0eceb6e767e179fbde37833ae42794602631a070d630f1" + } + ] + }, + { + "name": "python3-requests", + "buildsystem": "simple", + "build-commands": [ + "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"requests\" --no-build-isolation" + ], + "sources": [ + { + "type": "file", + "url": "https://files.pythonhosted.org/packages/71/4c/3db2b8021bd6f2f0ceb0e088d6b2d49147671f25832fb17970e9b583d742/certifi-2022.12.7-py3-none-any.whl", + "sha256": "4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18" }, { "type": "file", "url": "https://files.pythonhosted.org/packages/ff/d7/8d757f8bd45be079d76309248845a04f09619a7b17d6dfc8c9ff6433cac2/charset-normalizer-3.1.0.tar.gz", "sha256": "34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5" }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/a8/40/30a6440d5ceec49fc268710705b89e654fc854d9b8754850228deaf64892/googlebardpy-0.1.0-py3-none-any.whl", - "sha256": "12e65fdfe99392cbb5e8f93572340b757cd9d7aa83391316eaea3a1527995ef2" - }, { "type": "file", "url": "https://files.pythonhosted.org/packages/fc/34/3030de6f1370931b9dbb4dad48f6ab1015ab1d32447850b9fc94e60097be/idna-3.4-py3-none-any.whl", @@ -214,32 +120,13 @@ }, { "type": "file", - "url": "https://files.pythonhosted.org/packages/96/80/034ffeca15c0f4e01b7b9c6ad0fb704b44e190cde4e757edbd60be404c41/requests-2.30.0-py3-none-any.whl", - "sha256": "10e94cc4f3121ee6da529d358cdaeaff2f1c409cd377dbc72b825852f2f7e294" + "url": "https://files.pythonhosted.org/packages/cf/e1/2aa539876d9ed0ddc95882451deb57cfd7aa8dbf0b8dbce68e045549ba56/requests-2.29.0-py3-none-any.whl", + "sha256": "e8f3c9be120d3333921d213eef078af392fba3933ab7ed2d1cba3b56f2568c3b" }, { "type": "file", - "url": "https://files.pythonhosted.org/packages/4b/1d/f8383ef593114755429c307449e7717b87044b3bcd5f7860b89b1f759e34/urllib3-2.0.2-py3-none-any.whl", - "sha256": "d055c2f9d38dc53c808f6fdc8eab7360b6fdbbde02340ed25cfbcd817c62469e" - } - ] - }, - { - "name": "python3-pymdown-extensions", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"pymdown-extensions\" --no-build-isolation" - ], - "sources": [ - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/36/2b/61d51a2c4f25ef062ae3f74576b01638bebad5e045f747ff12643df63844/PyYAML-6.0.tar.gz", - "sha256": "68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/42/d5/ad2ce4fbd49f746c56f17ca4d1a8112cf76ea8797db670592923f7b3d96e/pymdown_extensions-9.11-py3-none-any.whl", - "sha256": "a499191d8d869f30339de86fcf072a787e86c42b6f16f280f5c2cf174182b7f3" + "url": "https://files.pythonhosted.org/packages/7b/f5/890a0baca17a61c1f92f72b81d3c31523c99bec609e60c292ea55b387ae8/urllib3-1.26.15-py2.py3-none-any.whl", + "sha256": "aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42" } ] } diff --git a/data/icons/hicolor/scalable/apps/io.github.Bavarder.Bavarder.Devel.svg b/data/icons/hicolor/scalable/apps/io.github.Bavarder.Bavarder.Devel.svg deleted file mode 100644 index 28894f6..0000000 --- a/data/icons/hicolor/scalable/apps/io.github.Bavarder.Bavarder.Devel.svg +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/icons/hicolor/scalable/apps/io.github.Bavarder.Bavarder.svg b/data/icons/hicolor/scalable/apps/io.github.Bavarder.Bavarder.svg deleted file mode 100644 index 7f77822..0000000 --- a/data/icons/hicolor/scalable/apps/io.github.Bavarder.Bavarder.svg +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/icons/hicolor/scalable/apps/page.codeberg.Imaginer.Imaginer.Devel.svg b/data/icons/hicolor/scalable/apps/page.codeberg.Imaginer.Imaginer.Devel.svg new file mode 100644 index 0000000..e782569 --- /dev/null +++ b/data/icons/hicolor/scalable/apps/page.codeberg.Imaginer.Imaginer.Devel.svg @@ -0,0 +1,400 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/icons/hicolor/scalable/apps/page.codeberg.Imaginer.Imaginer.svg b/data/icons/hicolor/scalable/apps/page.codeberg.Imaginer.Imaginer.svg new file mode 100644 index 0000000..a596c08 --- /dev/null +++ b/data/icons/hicolor/scalable/apps/page.codeberg.Imaginer.Imaginer.svg @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/icons/hicolor/symbolic/apps/io.github.Bavarder.Bavarder-symbolic.svg b/data/icons/hicolor/symbolic/apps/io.github.Bavarder.Bavarder-symbolic.svg deleted file mode 100644 index 6e68edc..0000000 --- a/data/icons/hicolor/symbolic/apps/io.github.Bavarder.Bavarder-symbolic.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/data/icons/hicolor/symbolic/apps/page.codeberg.Imaginer.Imaginer-symbolic.svg b/data/icons/hicolor/symbolic/apps/page.codeberg.Imaginer.Imaginer-symbolic.svg new file mode 100644 index 0000000..721e5a4 --- /dev/null +++ b/data/icons/hicolor/symbolic/apps/page.codeberg.Imaginer.Imaginer-symbolic.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/data/icons/io.github.Bavarder.Bavarder.Source.svg b/data/icons/io.github.Bavarder.Bavarder.Source.svg deleted file mode 100644 index e4c3ce9..0000000 --- a/data/icons/io.github.Bavarder.Bavarder.Source.svg +++ /dev/null @@ -1,782 +0,0 @@ - - - - - Adwaita Icon Template - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - GNOME Design Team - - - - - Adwaita Icon Template - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Hicolor - Symbolic - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/icons/meson.build b/data/icons/meson.build index 0e417b7..e76093f 100644 --- a/data/icons/meson.build +++ b/data/icons/meson.build @@ -1,4 +1,4 @@ -application_id = 'io.github.Bavarder.Bavarder' +application_id = 'page.codeberg.Imaginer.Imaginer' scalable_dir = join_paths('hicolor', 'scalable', 'apps') install_data( diff --git a/data/icons/page.codeberg.Imaginer.Imaginer.Source.svg b/data/icons/page.codeberg.Imaginer.Imaginer.Source.svg new file mode 100644 index 0000000..25b8c10 --- /dev/null +++ b/data/icons/page.codeberg.Imaginer.Imaginer.Source.svg @@ -0,0 +1,973 @@ + + + +Adwaita Icon Templateimage/svg+xmlGNOME Design TeamAdwaita Icon TemplateHicolorSymbolic diff --git a/data/bavarder.gresource.xml b/data/imaginer.gresource.xml similarity index 81% rename from data/bavarder.gresource.xml rename to data/imaginer.gresource.xml index 1549f0d..112c53b 100644 --- a/data/bavarder.gresource.xml +++ b/data/imaginer.gresource.xml @@ -1,12 +1,12 @@ - + ui/window.ui ui/help-overlay.ui ui/preferences.ui style.css - + icons/scalable/actions/paper-plane-symbolic.svg icons/scalable/actions/x-circular-symbolic.svg diff --git a/data/meson.build b/data/meson.build index 1370b42..dc427e8 100644 --- a/data/meson.build +++ b/data/meson.build @@ -3,8 +3,8 @@ pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), meson.proje subdir('ui') -gnome.compile_resources('bavarder', - 'bavarder.gresource.xml', +gnome.compile_resources('imaginer', + 'imaginer.gresource.xml', gresource_bundle: true, source_dir: meson.current_build_dir(), install: true, @@ -13,8 +13,8 @@ gnome.compile_resources('bavarder', ) desktop_file = i18n.merge_file( - input: 'io.github.Bavarder.Bavarder.desktop.in', - output: 'io.github.Bavarder.Bavarder.desktop', + input: 'page.codeberg.Imaginer.Imaginer.desktop.in', + output: 'page.codeberg.Imaginer.Imaginer.desktop', type: 'desktop', po_dir: '../po', install: true, @@ -27,8 +27,8 @@ if desktop_utils.found() endif appstream_file = i18n.merge_file( - input: 'io.github.Bavarder.Bavarder.appdata.xml.in', - output: 'io.github.Bavarder.Bavarder.appdata.xml', + input: 'page.codeberg.Imaginer.Imaginer.appdata.xml.in', + output: 'page.codeberg.Imaginer.Imaginer.appdata.xml', po_dir: '../po', install: true, install_dir: join_paths(get_option('datadir'), 'appdata') @@ -39,7 +39,7 @@ if appstream_util.found() test('Validate appstream file', appstream_util, args: ['validate', appstream_file]) endif -install_data('io.github.Bavarder.Bavarder.gschema.xml', +install_data('page.codeberg.Imaginer.Imaginer.gschema.xml', install_dir: join_paths(get_option('datadir'), 'glib-2.0/schemas') ) diff --git a/data/io.github.Bavarder.Bavarder.appdata.xml.in b/data/page.codeberg.Imaginer.Imaginer.appdata.xml.in similarity index 83% rename from data/io.github.Bavarder.Bavarder.appdata.xml.in rename to data/page.codeberg.Imaginer.Imaginer.appdata.xml.in index dd1c4dd..a68727f 100644 --- a/data/io.github.Bavarder.Bavarder.appdata.xml.in +++ b/data/page.codeberg.Imaginer.Imaginer.appdata.xml.in @@ -1,12 +1,12 @@ - io.github.Bavarder.Bavarder - Bavarder + page.codeberg.Imaginer.Imaginer + Imaginer Chit-chat with an AI 0xMRTT CC0-1.0 GPL-3.0-or-later - io.github.Bavarder.Bavarder.desktop + page.codeberg.Imaginer.Imaginer.desktop @@ -16,14 +16,14 @@ Screenshot of Main UI - https://raw.githubusercontent.com/Bavarder/Bavarder/main/data/screenshots/quantum-computing.png + https://raw.githubusercontent.com/Imaginer/Imaginer/main/data/screenshots/quantum-computing.png - https://codeberg.org/Bavarder/Bavarder/issues - https://translate.codeberg.org/engage/bavarder/ - https://codeberg.org/Bavarder/Bavarder/issues - https://codeberg.org/Bavarder/Bavarder + https://codeberg.org/Imaginer/Imaginer/issues + https://translate.codeberg.org/engage/imaginer/ + https://codeberg.org/Imaginer/Imaginer/issues + https://codeberg.org/Imaginer/Imaginer HiDpiIcon @@ -50,7 +50,7 @@ - Bavarder + Imaginer Chat GPT ChatGPT @@ -115,12 +115,12 @@ -

Change app ID to io.github.Bavarder.Bavarder

+

Change app ID to page.codeberg.Imaginer.Imaginer

-

First release of Bavarder

+

First release of Imaginer

diff --git a/data/io.github.Bavarder.Bavarder.desktop.in b/data/page.codeberg.Imaginer.Imaginer.desktop.in similarity index 56% rename from data/io.github.Bavarder.Bavarder.desktop.in rename to data/page.codeberg.Imaginer.Imaginer.desktop.in index 365fffd..4d66822 100644 --- a/data/io.github.Bavarder.Bavarder.desktop.in +++ b/data/page.codeberg.Imaginer.Imaginer.desktop.in @@ -1,7 +1,7 @@ [Desktop Entry] -Name=Bavarder -Exec=bavarder -Icon=io.github.Bavarder.Bavarder +Name=Imaginer +Exec=imaginer +Icon=page.codeberg.Imaginer.Imaginer Terminal=false Type=Application Categories=GTK; diff --git a/data/io.github.Bavarder.Bavarder.gschema.xml b/data/page.codeberg.Imaginer.Imaginer.gschema.xml similarity index 86% rename from data/io.github.Bavarder.Bavarder.gschema.xml rename to data/page.codeberg.Imaginer.Imaginer.gschema.xml index aa87f2c..ccf3bfe 100644 --- a/data/io.github.Bavarder.Bavarder.gschema.xml +++ b/data/page.codeberg.Imaginer.Imaginer.gschema.xml @@ -1,6 +1,6 @@ - - + + 350 diff --git a/data/screenshots/avocado-armchair.png b/data/screenshots/avocado-armchair.png new file mode 100644 index 0000000..c14ba72 Binary files /dev/null and b/data/screenshots/avocado-armchair.png differ diff --git a/data/screenshots/languages.png b/data/screenshots/languages.png deleted file mode 100644 index c9db169..0000000 Binary files a/data/screenshots/languages.png and /dev/null differ diff --git a/data/screenshots/quantum-computing.png b/data/screenshots/quantum-computing.png deleted file mode 100644 index 30b0e9a..0000000 Binary files a/data/screenshots/quantum-computing.png and /dev/null differ diff --git a/data/ui/help-overlay.ui b/data/ui/help-overlay.ui index 7dcee22..0ed446e 100644 --- a/data/ui/help-overlay.ui +++ b/data/ui/help-overlay.ui @@ -33,18 +33,6 @@ app.preferences - - - Copy response - app.copy_bot - - - - - Clear - app.clear - - diff --git a/data/ui/preferences.blp b/data/ui/preferences.blp index a742123..811a8a7 100644 --- a/data/ui/preferences.blp +++ b/data/ui/preferences.blp @@ -8,28 +8,6 @@ template Preferences : Adw.PreferencesWindow { modal: true; Adw.PreferencesPage general_page { - Adw.PreferencesGroup prompt_group { - title: _("Prompt"); - - Adw.ActionRow { - title: _("Clear prompt after send"); - subtitle: _("The prompt will be cleared after send"); - activatable-widget: clear_after_send_switch; - Gtk.Switch clear_after_send_switch { - valign: center; - } - } - - Adw.ActionRow { - title: _("Use text view"); - subtitle: _("If the text view is used, you will lose formatting"); - activatable-widget: use_text_view_switch; - Gtk.Switch use_text_view_switch { - valign: center; - } - } - } - Adw.PreferencesGroup provider_group { title: _("Providers"); } diff --git a/data/ui/window.blp b/data/ui/window.blp index d837c6b..85f391b 100644 --- a/data/ui/window.blp +++ b/data/ui/window.blp @@ -2,9 +2,8 @@ using Gtk 4.0; using Adw 1; using WebKit 6.0; -template BavarderWindow : Adw.ApplicationWindow { - - title: _("Bavarder"); +template ImaginerWindow : Adw.ApplicationWindow { + title: _("Imaginer"); default-width: 350; default-height: 500; @@ -21,15 +20,12 @@ template BavarderWindow : Adw.ApplicationWindow { vexpand: true; hexpand: true; Adw.HeaderBar { - MenuButton { + MenuButton menu { primary: true; menu-model: main-menu; icon-name: "open-menu-symbolic"; tooltip-text: _("Main Menu"); } - DropDown provider_selector { - styles ["flat"] - } styles ["flat"] } @@ -48,179 +44,98 @@ template BavarderWindow : Adw.ApplicationWindow { margin-end: 24; spacing: 12; - Adw.PreferencesGroup prompt_group { - title: _("Message"); + Stack stack_imaginer { + transition-type: crossfade; - Box { - orientation: vertical; - hexpand: true; - vexpand: true; + StackPage { + name: "stack_imagine"; + child: + Adw.PreferencesPage { + Adw.PreferencesGroup { + Picture image { + halign: center; + visible: false; + styles ["card"] + //content-fit: cover; + //can-shrink: true; + height-request: 200; + width-request: 200; - styles ["card", "text-box"] + } + } - ScrolledWindow { - margin-top:12; - margin-bottom:0; - margin-start:12; - margin-end:12; - styles ["scrolled-window"] + Adw.PreferencesGroup { - TextView prompt_text_view { - wrap-mode: word_char; - hexpand: true; - vexpand: true; - buffer: TextBuffer { }; - //key-press => on_key_press_event(); + Adw.EntryRow prompt { + title: _("Prompt"); + } - } - } - Box { - hexpand: true; - halign: end; - - styles ["toolbar"] - Button { - sensitive: false; - icon-name: "edit-copy-symbolic"; - tooltip-text: _("Copy to Clipboard"); - action-name: "app.copy_prompt"; - } - // Button listen { - // action-name: "app.listen"; - // tooltip-text: _("Listen"); - // icon-name: "audio-input-microphone-symbolic"; - // } - - // Button listen_wait { - // visible: false; - // sensitive: false; - // tooltip-text: _("Listening"); - // Spinner listen_spinner { - // margin-top: 8; - // margin-bottom: 8; - // margin-start: 8; - // margin-end: 8; - // } - // } - Button ask_button { - visible: true; - sensitive: false; - icon-name: "paper-plane-symbolic"; - tooltip-text: _("Ask"); - hexpand: true; - halign: end; - action-name: "app.ask"; - styles ["suggested-action", "circular"] - } - Button wait_button { - visible: false; - sensitive: false; - tooltip-text: _("Wait"); - styles ["suggested-action", "circular"] - Spinner spinner { - margin-top: 8; - margin-bottom: 8; - margin-start: 8; - margin-end: 8; - styles ["suggested-action", "circular"] + Adw.EntryRow negative_prompt { + title: _("Negative Prompt"); + } } - } - } + + Adw.PreferencesGroup { + title: _("Options"); + + Adw.ActionRow { + title: _("Save Location"); + activatable-widget: button_output; + + + Button button_output { + valign: center; + action-name: "app.choose_output"; + + Box { + spacing: 6; + + Image { + icon-name: "document-open-symbolic"; + } + + Label label_output { + label: _("(None)"); + } + } + } + } + } + + Adw.PreferencesGroup { + Button button_imagine { + valign: center; + halign: center; + label: _("_Imagine"); + tooltip-text: _("Save location is missing."); + use-underline: true; + sensitive: false; + action-name: "app.ask"; + + styles [ + "suggested-action", + "pill", + ] + } + } + }; } - Adw.PreferencesGroup bot_group { - title: _("Response"); - - - Box { - orientation: vertical; - hexpand: true; - vexpand: true; - - styles ["card", "text-box"] - - ScrolledWindow scrolled_response_window { - margin-top:12; - margin-bottom:0; - margin-start:12; - margin-end:12; - styles ["scrolled-window"] - - Gtk.Stack response_stack { - vexpand: true; - hexpand: true; - Gtk.StackPage { - name: "page_response"; - child: TextView bot_text_view { - wrap-mode: word_char; - hexpand: true; - vexpand: true; - editable: false; - }; - } - - // Gtk.StackPage { - // name: "page_offline"; - // child: Adw.StatusPage { - // //icon-name: "network-wireless-offline-symbolic"; - // title: _("Offline"); - // }; - // } - } - + StackPage { + name: "stack_loading"; + child: + Adw.StatusPage { + Spinner spinner { + valign: center; } - - Box { - hexpand: true; - halign: end; - - styles ["toolbar"] - - // Button speak { - // action-name: "app.speak"; - // tooltip-text: _("Speak"); - // icon-name: "audio-speakers-symbolic"; - // } - - // Button speak_wait { - // visible: false; - // sensitive: false; - // tooltip-text: _("Speaking"); - // Spinner speak_spinner { - // margin-top: 8; - // margin-bottom: 8; - // margin-start: 8; - // margin-end: 8; - // } - // } - - Button copy_bot { - sensitive: false; - icon-name: "edit-copy-symbolic"; - tooltip-text: _("Copy to Clipboard"); - hexpand: true; - halign: end; - action-name: "app.copy_bot"; - } - - Button stop_button { - visible: false; - sensitive: false; - icon-name: "x-circular-symbolic"; - tooltip-text: _("Stop"); - hexpand: true; - halign: end; - action-name: "app.stop"; - styles ["suggested-action", "circular"] - } - } - } + }; } } } } } +} menu main-menu { @@ -236,7 +151,7 @@ menu main-menu { } item { - label: _("About Bavarder"); + label: _("About Imaginer"); action: "app.about"; } } diff --git a/meson.build b/meson.build index 2ed456e..278e428 100644 --- a/meson.build +++ b/meson.build @@ -1,4 +1,4 @@ -project('bavarder', +project('imaginer', version: '0.2.0', meson_version: '>= 0.62.0', default_options: [ 'warning_level=2', 'werror=false', ], @@ -9,12 +9,12 @@ gnome = import('gnome') python = import('python') # Constants -PROJECT_RDNN_NAME = 'io.github.Bavarder.Bavarder' -BUGTRACKER_URL = 'https://github.com/Bavarder/Bavarder/issues' -HELP_URL = 'https://github.com/Bavarder/Bavarder/issues' -TRANSLATE_URL = 'https://translate.codeberg.org/engage/bavarder/' +PROJECT_RDNN_NAME = 'page.codeberg.Imaginer.Imaginer' +BUGTRACKER_URL = 'https://github.com/Imaginer/Imaginer/issues' +HELP_URL = 'https://github.com/Imaginer/Imaginer/issues' +TRANSLATE_URL = 'https://translate.codeberg.org/engage/imaginer/' -PROJECT_URL = 'https://github.com/Bavarder' +PROJECT_URL = 'https://github.com/Imaginer' git_bin = find_program('git', required: false) @@ -45,7 +45,7 @@ if not PY_INSTALLDIR.found() endif PKGDATA_DIR = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name()) -MODULE_DIR = join_paths(PKGDATA_DIR, 'bavarder') +MODULE_DIR = join_paths(PKGDATA_DIR, 'imaginer') conf = configuration_data() conf.set('APP_ID', APPLICATION_ID) diff --git a/po/Bavarder.pot b/po/Bavarder.pot deleted file mode 100644 index 0124384..0000000 --- a/po/Bavarder.pot +++ /dev/null @@ -1,151 +0,0 @@ -# Bavarder POT file -# Copyright (C) 2023 Bavarder -# This file is distributed under the GNU GPLv3 license. -# Bavarder, 2023. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-05-12 16:35+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" -"Content-Transfer-Encoding: 8bit\n" - -#: data/io.github.Bavarder.Bavarder.desktop.in:3 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:4 data/ui/window.blp:7 -msgid "Bavarder" -msgstr "" - -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:5 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:13 -msgid "Chit-chat with an AI" -msgstr "" - -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:6 -msgid "0xMRTT" -msgstr "" - -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:18 -msgid "Screenshot of Main UI" -msgstr "" - -#: data/ui/help-overlay.ui:11 -msgctxt "shortcut window" -msgid "General" -msgstr "" - -#: data/ui/help-overlay.ui:14 -msgctxt "shortcut window" -msgid "Show Shortcuts" -msgstr "" - -#: data/ui/help-overlay.ui:20 -msgctxt "shortcut window" -msgid "Ask" -msgstr "" - -#: data/ui/help-overlay.ui:26 -msgctxt "shortcut window" -msgid "Quit" -msgstr "" - -#: data/ui/help-overlay.ui:32 -msgctxt "shortcut window" -msgid "Preferences" -msgstr "" - -#: data/ui/help-overlay.ui:38 -msgctxt "shortcut window" -msgid "Copy response" -msgstr "" - -#: data/ui/help-overlay.ui:44 -msgctxt "shortcut window" -msgid "Clear" -msgstr "" - -#: data/ui/preferences.blp:5 data/ui/window.blp:229 -msgid "Preferences" -msgstr "" - -#: data/ui/preferences.blp:12 -msgid "Prompt" -msgstr "" - -#: data/ui/preferences.blp:15 -msgid "Clear prompt after send" -msgstr "" - -#: data/ui/preferences.blp:16 -msgid "The prompt will be cleared after send" -msgstr "" - -#: data/ui/preferences.blp:24 -msgid "Use text view" -msgstr "" - -#: data/ui/preferences.blp:25 -msgid "If the text view is used, you will lose formatting" -msgstr "" - -#: data/ui/preferences.blp:34 -msgid "Providers" -msgstr "" - -#: data/ui/window.blp:28 -msgid "Main Menu" -msgstr "" - -#: data/ui/window.blp:37 src/provider/base.py:50 -msgid "No network connection" -msgstr "" - -#: data/ui/window.blp:52 -msgid "Message" -msgstr "" - -#: data/ui/window.blp:85 data/ui/window.blp:201 -msgid "Copy to Clipboard" -msgstr "" - -#: data/ui/window.blp:109 -msgid "Ask" -msgstr "" - -#: data/ui/window.blp:118 -msgid "Wait" -msgstr "" - -#: data/ui/window.blp:133 -msgid "Response" -msgstr "" - -#: data/ui/window.blp:211 -msgid "Stop" -msgstr "" - -#: data/ui/window.blp:234 -msgid "Keyboard Shortcuts" -msgstr "" - -#: data/ui/window.blp:239 -msgid "About Bavarder" -msgstr "" - -#: src/provider/base.py:43 -msgid "No API key provided, you can provide one in settings" -msgstr "" - -#: src/provider/base.py:45 -msgid "Open settings" -msgstr "" - -#: src/provider/catgpt.py:9 -msgid "Cat GPT" -msgstr "" diff --git a/po/Imaginer.pot b/po/Imaginer.pot new file mode 100644 index 0000000..e113325 --- /dev/null +++ b/po/Imaginer.pot @@ -0,0 +1,121 @@ +# Imaginer POT file +# Copyright (C) 2023 Imaginer +# This file is distributed under the GNU GPLv3 license. +# Imaginer, 2023. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-12 23:36+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: data/page.codeberg.Imaginer.Imaginer.desktop.in:3 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:4 data/ui/window.blp:6 +msgid "Imaginer" +msgstr "" + +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:5 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:13 +msgid "Chit-chat with an AI" +msgstr "" + +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:6 +msgid "0xMRTT" +msgstr "" + +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:18 +msgid "Screenshot of Main UI" +msgstr "" + +#: data/ui/help-overlay.ui:11 +msgctxt "shortcut window" +msgid "General" +msgstr "" + +#: data/ui/help-overlay.ui:14 +msgctxt "shortcut window" +msgid "Show Shortcuts" +msgstr "" + +#: data/ui/help-overlay.ui:20 +msgctxt "shortcut window" +msgid "Ask" +msgstr "" + +#: data/ui/help-overlay.ui:26 +msgctxt "shortcut window" +msgid "Quit" +msgstr "" + +#: data/ui/help-overlay.ui:32 +msgctxt "shortcut window" +msgid "Preferences" +msgstr "" + +#: data/ui/preferences.blp:5 data/ui/window.blp:144 +msgid "Preferences" +msgstr "" + +#: data/ui/preferences.blp:12 +msgid "Providers" +msgstr "" + +#: data/ui/window.blp:27 +msgid "Main Menu" +msgstr "" + +#: data/ui/window.blp:33 src/provider/base.py:52 +msgid "No network connection" +msgstr "" + +#: data/ui/window.blp:70 +msgid "Prompt" +msgstr "" + +#: data/ui/window.blp:74 +msgid "Negative Prompt" +msgstr "" + +#: data/ui/window.blp:80 +msgid "Options" +msgstr "" + +#: data/ui/window.blp:83 +msgid "Save Location" +msgstr "" + +#: data/ui/window.blp:99 +msgid "(None)" +msgstr "" + +#: data/ui/window.blp:110 +msgid "_Imagine" +msgstr "" + +#: data/ui/window.blp:111 +msgid "Save location is missing." +msgstr "" + +#: data/ui/window.blp:149 +msgid "Keyboard Shortcuts" +msgstr "" + +#: data/ui/window.blp:154 +msgid "About Imaginer" +msgstr "" + +#: src/provider/base.py:45 +msgid "No API key provided, you can provide one in settings" +msgstr "" + +#: src/provider/base.py:47 +msgid "Open settings" +msgstr "" diff --git a/po/POTFILES b/po/POTFILES index b29cd71..6d8554d 100644 --- a/po/POTFILES +++ b/po/POTFILES @@ -1,11 +1,10 @@ -data/io.github.Bavarder.Bavarder.desktop.in -data/io.github.Bavarder.Bavarder.appdata.xml.in -data/io.github.Bavarder.Bavarder.gschema.xml +data/page.codeberg.Imaginer.Imaginer.desktop.in +data/page.codeberg.Imaginer.Imaginer.appdata.xml.in +data/page.codeberg.Imaginer.Imaginer.gschema.xml data/ui/help-overlay.ui data/ui/preferences.blp data/ui/window.blp src/main.py src/preferences.py src/window.py -src/provider/base.py -src/provider/catgpt.py \ No newline at end of file +src/provider/base.py \ No newline at end of file diff --git a/po/az.po b/po/az.po index 6881e85..2f539a1 100644 --- a/po/az.po +++ b/po/az.po @@ -1,7 +1,7 @@ -# Bavarder POT file -# Copyright (C) 2023 Bavarder +# Imaginer POT file +# Copyright (C) 2023 Imaginer # This file is distributed under the GNU GPLv3 license. -# Bavarder, 2023. +# Imaginer, 2023. # # thepoladov13 , 2023. # 0xMRTT <0xmrtt@proton.me>, 2023. @@ -12,8 +12,8 @@ msgstr "" "POT-Creation-Date: 2023-05-12 16:35+0200\n" "PO-Revision-Date: 2023-05-07 23:15+0000\n" "Last-Translator: 0xMRTT <0xmrtt@proton.me>\n" -"Language-Team: Azerbaijani \n" +"Language-Team: Azerbaijani \n" "Language: az\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,21 +21,21 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.17\n" -#: data/io.github.Bavarder.Bavarder.desktop.in:3 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:4 data/ui/window.blp:7 -msgid "Bavarder" -msgstr "Bavarder" +#: data/page.codeberg.Imaginer.Imaginer.desktop.in:3 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:4 data/ui/window.blp:7 +msgid "Imaginer" +msgstr "Imaginer" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:5 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:13 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:5 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:13 msgid "Chit-chat with an AI" msgstr "Chit AI ilə söhbət edin" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:6 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:6 msgid "0xMRTT" msgstr "0xMRTT" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:18 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:18 msgid "Screenshot of Main UI" msgstr "Əsas UI ekran görüntüsü" @@ -141,8 +141,8 @@ msgid "Keyboard Shortcuts" msgstr "Klaviatura Qısayolları" #: data/ui/window.blp:239 -msgid "About Bavarder" -msgstr "Bavarder haqqında" +msgid "About Imaginer" +msgstr "Imaginer haqqında" #: src/provider/base.py:43 msgid "No API key provided, you can provide one in settings" diff --git a/po/cs.po b/po/cs.po index 677b783..6ca4fe0 100644 --- a/po/cs.po +++ b/po/cs.po @@ -1,7 +1,7 @@ -# Bavarder POT file -# Copyright (C) 2023 Bavarder +# Imaginer POT file +# Copyright (C) 2023 Imaginer # This file is distributed under the GNU GPLv3 license. -# Bavarder, 2023. +# Imaginer, 2023. # # muznyo , 2023. # 0xMRTT <0xmrtt@proton.me>, 2023. @@ -12,8 +12,8 @@ msgstr "" "POT-Creation-Date: 2023-05-12 16:35+0200\n" "PO-Revision-Date: 2023-05-12 14:36+0000\n" "Last-Translator: Anonymous \n" -"Language-Team: Czech \n" +"Language-Team: Czech \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,21 +21,21 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Generator: Weblate 4.17\n" -#: data/io.github.Bavarder.Bavarder.desktop.in:3 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:4 data/ui/window.blp:7 -msgid "Bavarder" -msgstr "Bavarder" +#: data/page.codeberg.Imaginer.Imaginer.desktop.in:3 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:4 data/ui/window.blp:7 +msgid "Imaginer" +msgstr "Imaginer" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:5 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:13 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:5 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:13 msgid "Chit-chat with an AI" msgstr "Chatovat s umělou inteligencí" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:6 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:6 msgid "0xMRTT" msgstr "0xMRTT" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:18 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:18 msgid "Screenshot of Main UI" msgstr "Snímek obrazovky hlavního uživatelského rozhraní" @@ -139,8 +139,8 @@ msgid "Keyboard Shortcuts" msgstr "Klávesové zkratky" #: data/ui/window.blp:239 -msgid "About Bavarder" -msgstr "O Bavarder" +msgid "About Imaginer" +msgstr "O Imaginer" #: src/provider/base.py:43 msgid "No API key provided, you can provide one in settings" diff --git a/po/de.po b/po/de.po index 18c5d77..1fc6230 100644 --- a/po/de.po +++ b/po/de.po @@ -1,7 +1,7 @@ -# Bavarder POT file -# Copyright (C) 2023 Bavarder +# Imaginer POT file +# Copyright (C) 2023 Imaginer # This file is distributed under the GNU GPLv3 license. -# Bavarder, 2023. +# Imaginer, 2023. # # 0xMRTT <0xmrtt@tuta.io>, 2023. # 0xMRTT <0xmrtt@proton.me>, 2023. @@ -12,8 +12,8 @@ msgstr "" "POT-Creation-Date: 2023-05-12 16:35+0200\n" "PO-Revision-Date: 2023-05-12 14:38+0000\n" "Last-Translator: 0xMRTT <0xmrtt@proton.me>\n" -"Language-Team: German \n" +"Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,21 +21,21 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.17\n" -#: data/io.github.Bavarder.Bavarder.desktop.in:3 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:4 data/ui/window.blp:7 -msgid "Bavarder" -msgstr "Bavarder" +#: data/page.codeberg.Imaginer.Imaginer.desktop.in:3 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:4 data/ui/window.blp:7 +msgid "Imaginer" +msgstr "Imaginer" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:5 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:13 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:5 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:13 msgid "Chit-chat with an AI" msgstr "Plaudern Sie mit GPT" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:6 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:6 msgid "0xMRTT" msgstr "0xMRTT" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:18 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:18 msgid "Screenshot of Main UI" msgstr "Screenshot der Hauptbenutzeroberfläche" @@ -139,8 +139,8 @@ msgid "Keyboard Shortcuts" msgstr "Tastatürkürzel" #: data/ui/window.blp:239 -msgid "About Bavarder" -msgstr "Über Bavarder" +msgid "About Imaginer" +msgstr "Über Imaginer" #: src/provider/base.py:43 msgid "No API key provided, you can provide one in settings" @@ -182,8 +182,8 @@ msgstr "Katze GPT" #~ msgid "Working offline" #~ msgstr "Offline arbeiten" -#~ msgid "bavarder" -#~ msgstr "bavarder" +#~ msgid "imaginer" +#~ msgstr "imaginer" #~ msgid "No description" #~ msgstr "Keine Beschreibung" diff --git a/po/es.po b/po/es.po index c06435a..00d33f2 100644 --- a/po/es.po +++ b/po/es.po @@ -1,7 +1,7 @@ -# Bavarder POT file -# Copyright (C) 2023 Bavarder +# Imaginer POT file +# Copyright (C) 2023 Imaginer # This file is distributed under the GNU GPLv3 license. -# Bavarder, 2023. +# Imaginer, 2023. # # 0xMRTT <0xmrtt@tuta.io>, 2023. # sjdonado , 2023. @@ -15,8 +15,8 @@ msgstr "" "POT-Creation-Date: 2023-05-12 16:35+0200\n" "PO-Revision-Date: 2023-05-12 14:36+0000\n" "Last-Translator: Anonymous \n" -"Language-Team: Spanish \n" +"Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,21 +24,21 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.17\n" -#: data/io.github.Bavarder.Bavarder.desktop.in:3 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:4 data/ui/window.blp:7 -msgid "Bavarder" -msgstr "Bavarder" +#: data/page.codeberg.Imaginer.Imaginer.desktop.in:3 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:4 data/ui/window.blp:7 +msgid "Imaginer" +msgstr "Imaginer" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:5 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:13 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:5 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:13 msgid "Chit-chat with an AI" msgstr "Conversa con una IA" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:6 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:6 msgid "0xMRTT" msgstr "0xMRTT" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:18 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:18 msgid "Screenshot of Main UI" msgstr "Captura de Pantalla de la Interfaz de Usuario Principal" @@ -142,8 +142,8 @@ msgid "Keyboard Shortcuts" msgstr "Atajos de Teclado" #: data/ui/window.blp:239 -msgid "About Bavarder" -msgstr "Sobre Bavarder" +msgid "About Imaginer" +msgstr "Sobre Imaginer" #: src/provider/base.py:43 msgid "No API key provided, you can provide one in settings" diff --git a/po/fa.po b/po/fa.po index 9a3662b..59629a4 100644 --- a/po/fa.po +++ b/po/fa.po @@ -1,7 +1,7 @@ -# Bavarder POT file -# Copyright (C) 2023 Bavarder +# Imaginer POT file +# Copyright (C) 2023 Imaginer # This file is distributed under the GNU GPLv3 license. -# Bavarder, 2023. +# Imaginer, 2023. # # kouroshtaf , 2023. # Kourosh , 2023. @@ -12,8 +12,8 @@ msgstr "" "POT-Creation-Date: 2023-05-12 16:35+0200\n" "PO-Revision-Date: 2023-05-12 14:36+0000\n" "Last-Translator: Anonymous \n" -"Language-Team: Persian \n" +"Language-Team: Persian \n" "Language: fa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,21 +21,21 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.17\n" -#: data/io.github.Bavarder.Bavarder.desktop.in:3 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:4 data/ui/window.blp:7 -msgid "Bavarder" +#: data/page.codeberg.Imaginer.Imaginer.desktop.in:3 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:4 data/ui/window.blp:7 +msgid "Imaginer" msgstr "باوارده" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:5 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:13 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:5 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:13 msgid "Chit-chat with an AI" msgstr "گپی با هوش مصنوعی" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:6 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:6 msgid "0xMRTT" msgstr "سازنده: 0xMRTT" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:18 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:18 msgid "Screenshot of Main UI" msgstr "تصویر نمای اصلی" @@ -143,7 +143,7 @@ msgid "Keyboard Shortcuts" msgstr "کلیدهای میانبر" #: data/ui/window.blp:239 -msgid "About Bavarder" +msgid "About Imaginer" msgstr "درباره" #: src/provider/base.py:43 diff --git a/po/fi.po b/po/fi.po index b3cd9ba..2dbbd75 100644 --- a/po/fi.po +++ b/po/fi.po @@ -1,7 +1,7 @@ -# Bavarder POT file -# Copyright (C) 2023 Bavarder +# Imaginer POT file +# Copyright (C) 2023 Imaginer # This file is distributed under the GNU GPLv3 license. -# Bavarder, 2023. +# Imaginer, 2023. # # artnay , 2023. # 0xMRTT <0xmrtt@proton.me>, 2023. @@ -12,8 +12,8 @@ msgstr "" "POT-Creation-Date: 2023-05-12 16:35+0200\n" "PO-Revision-Date: 2023-05-12 14:36+0000\n" "Last-Translator: Anonymous \n" -"Language-Team: Finnish \n" +"Language-Team: Finnish \n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,21 +21,21 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.17\n" -#: data/io.github.Bavarder.Bavarder.desktop.in:3 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:4 data/ui/window.blp:7 -msgid "Bavarder" -msgstr "Bavarder" +#: data/page.codeberg.Imaginer.Imaginer.desktop.in:3 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:4 data/ui/window.blp:7 +msgid "Imaginer" +msgstr "Imaginer" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:5 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:13 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:5 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:13 msgid "Chit-chat with an AI" msgstr "Keskustele tekoälyn kanssa" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:6 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:6 msgid "0xMRTT" msgstr "0xMRTT" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:18 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:18 msgid "Screenshot of Main UI" msgstr "Kuvakaappaus käyttöliittymästä" @@ -139,8 +139,8 @@ msgid "Keyboard Shortcuts" msgstr "Pikanäppäimet" #: data/ui/window.blp:239 -msgid "About Bavarder" -msgstr "Tietoja - Bavarder" +msgid "About Imaginer" +msgstr "Tietoja - Imaginer" #: src/provider/base.py:43 msgid "No API key provided, you can provide one in settings" diff --git a/po/fr.po b/po/fr.po index 89ffade..aca3acf 100644 --- a/po/fr.po +++ b/po/fr.po @@ -1,7 +1,7 @@ -# Bavarder POT file -# Copyright (C) 2023 Bavarder +# Imaginer POT file +# Copyright (C) 2023 Imaginer # This file is distributed under the GNU GPLv3 license. -# Bavarder, 2023. +# Imaginer, 2023. # # 0xMRTT <0xmrtt@tuta.io>, 2023. # 0xMRTT <0xmrtt@proton.me>, 2023. @@ -14,8 +14,8 @@ msgstr "" "POT-Creation-Date: 2023-05-12 16:35+0200\n" "PO-Revision-Date: 2023-05-12 14:38+0000\n" "Last-Translator: 0xMRTT <0xmrtt@proton.me>\n" -"Language-Team: French \n" +"Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,21 +23,21 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.17\n" -#: data/io.github.Bavarder.Bavarder.desktop.in:3 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:4 data/ui/window.blp:7 -msgid "Bavarder" -msgstr "Bavarder" +#: data/page.codeberg.Imaginer.Imaginer.desktop.in:3 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:4 data/ui/window.blp:7 +msgid "Imaginer" +msgstr "Imaginer" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:5 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:13 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:5 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:13 msgid "Chit-chat with an AI" -msgstr "Bavarder avec GPT" +msgstr "Imaginer avec GPT" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:6 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:6 msgid "0xMRTT" msgstr "0xMRTT" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:18 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:18 msgid "Screenshot of Main UI" msgstr "Capture d’écran de l’interface principale" @@ -141,8 +141,8 @@ msgid "Keyboard Shortcuts" msgstr "Raccourcis clavier" #: data/ui/window.blp:239 -msgid "About Bavarder" -msgstr "À propos de Bavarder" +msgid "About Imaginer" +msgstr "À propos de Imaginer" #: src/provider/base.py:43 msgid "No API key provided, you can provide one in settings" @@ -184,8 +184,8 @@ msgstr "Cat GPT" #~ msgid "Working offline" #~ msgstr "Travailler hors ligne" -#~ msgid "bavarder" -#~ msgstr "bavarder" +#~ msgid "imaginer" +#~ msgstr "imaginer" #~ msgid "No description" #~ msgstr "Aucune description" diff --git a/po/hu.po b/po/hu.po index d2ac42b..c37a656 100644 --- a/po/hu.po +++ b/po/hu.po @@ -1,7 +1,7 @@ -# Bavarder POT file -# Copyright (C) 2023 Bavarder +# Imaginer POT file +# Copyright (C) 2023 Imaginer # This file is distributed under the GNU GPLv3 license. -# Bavarder, 2023. +# Imaginer, 2023. # # osiixy , 2023. # 0xMRTT <0xmrtt@proton.me>, 2023. @@ -12,8 +12,8 @@ msgstr "" "POT-Creation-Date: 2023-05-12 16:35+0200\n" "PO-Revision-Date: 2023-05-12 14:36+0000\n" "Last-Translator: Anonymous \n" -"Language-Team: Hungarian \n" +"Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,21 +21,21 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.17\n" -#: data/io.github.Bavarder.Bavarder.desktop.in:3 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:4 data/ui/window.blp:7 -msgid "Bavarder" -msgstr "Bavarder" +#: data/page.codeberg.Imaginer.Imaginer.desktop.in:3 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:4 data/ui/window.blp:7 +msgid "Imaginer" +msgstr "Imaginer" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:5 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:13 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:5 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:13 msgid "Chit-chat with an AI" msgstr "" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:6 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:6 msgid "0xMRTT" msgstr "" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:18 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:18 msgid "Screenshot of Main UI" msgstr "" @@ -141,7 +141,7 @@ msgid "Keyboard Shortcuts" msgstr "" #: data/ui/window.blp:239 -msgid "About Bavarder" +msgid "About Imaginer" msgstr "" #: src/provider/base.py:43 diff --git a/po/it.po b/po/it.po index f624ec2..9e3e0dc 100644 --- a/po/it.po +++ b/po/it.po @@ -1,7 +1,7 @@ -# Bavarder POT file -# Copyright (C) 2023 Bavarder +# Imaginer POT file +# Copyright (C) 2023 Imaginer # This file is distributed under the GNU GPLv3 license. -# Bavarder, 2023. +# Imaginer, 2023. # # 0xMRTT <0xmrtt@tuta.io>, 2023. # phaerrax , 2023. @@ -13,8 +13,8 @@ msgstr "" "POT-Creation-Date: 2023-05-12 16:35+0200\n" "PO-Revision-Date: 2023-05-12 14:36+0000\n" "Last-Translator: Anonymous \n" -"Language-Team: Italian \n" +"Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,21 +22,21 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.17\n" -#: data/io.github.Bavarder.Bavarder.desktop.in:3 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:4 data/ui/window.blp:7 -msgid "Bavarder" -msgstr "Bavarder" +#: data/page.codeberg.Imaginer.Imaginer.desktop.in:3 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:4 data/ui/window.blp:7 +msgid "Imaginer" +msgstr "Imaginer" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:5 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:13 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:5 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:13 msgid "Chit-chat with an AI" msgstr "Chiacchiera con un'IA" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:6 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:6 msgid "0xMRTT" msgstr "0xMRTT" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:18 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:18 msgid "Screenshot of Main UI" msgstr "Schermata dell'interfaccia principale" @@ -144,8 +144,8 @@ msgid "Keyboard Shortcuts" msgstr "Scorciatoie da tastiera" #: data/ui/window.blp:239 -msgid "About Bavarder" -msgstr "Informazioni su Bavarder" +msgid "About Imaginer" +msgstr "Informazioni su Imaginer" #: src/provider/base.py:43 msgid "No API key provided, you can provide one in settings" diff --git a/po/meson.build b/po/meson.build index 17a56ee..63e32be 100644 --- a/po/meson.build +++ b/po/meson.build @@ -1 +1 @@ -i18n.gettext('bavarder', preset: 'glib') +i18n.gettext('imaginer', preset: 'glib') diff --git a/po/nl.po b/po/nl.po index 7db60c8..1e9a372 100644 --- a/po/nl.po +++ b/po/nl.po @@ -1,7 +1,7 @@ -# Bavarder POT file -# Copyright (C) 2023 Bavarder +# Imaginer POT file +# Copyright (C) 2023 Imaginer # This file is distributed under the GNU GPLv3 license. -# Bavarder, 2023. +# Imaginer, 2023. # # Vistaus , 2023. msgid "" @@ -11,8 +11,8 @@ msgstr "" "POT-Creation-Date: 2023-05-12 16:35+0200\n" "PO-Revision-Date: 2023-05-12 14:36+0000\n" "Last-Translator: Anonymous \n" -"Language-Team: Dutch \n" +"Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,21 +20,21 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.17\n" -#: data/io.github.Bavarder.Bavarder.desktop.in:3 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:4 data/ui/window.blp:7 -msgid "Bavarder" -msgstr "Bavarder" +#: data/page.codeberg.Imaginer.Imaginer.desktop.in:3 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:4 data/ui/window.blp:7 +msgid "Imaginer" +msgstr "Imaginer" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:5 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:13 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:5 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:13 msgid "Chit-chat with an AI" msgstr "Babbel met een KI" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:6 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:6 msgid "0xMRTT" msgstr "0xMRTT" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:18 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:18 msgid "Screenshot of Main UI" msgstr "Schermfoto van het hoofdscherm" @@ -138,8 +138,8 @@ msgid "Keyboard Shortcuts" msgstr "Sneltoetsen" #: data/ui/window.blp:239 -msgid "About Bavarder" -msgstr "Over Bavarder" +msgid "About Imaginer" +msgstr "Over Imaginer" #: src/provider/base.py:43 msgid "No API key provided, you can provide one in settings" diff --git a/po/pl.po b/po/pl.po index 948ea66..03120f2 100644 --- a/po/pl.po +++ b/po/pl.po @@ -1,7 +1,7 @@ -# Bavarder POT file -# Copyright (C) 2023 Bavarder +# Imaginer POT file +# Copyright (C) 2023 Imaginer # This file is distributed under the GNU GPLv3 license. -# Bavarder, 2023. +# Imaginer, 2023. # # ioghjog , 2023. # 0xMRTT <0xmrtt@proton.me>, 2023. @@ -12,8 +12,8 @@ msgstr "" "POT-Creation-Date: 2023-05-12 16:35+0200\n" "PO-Revision-Date: 2023-05-12 14:36+0000\n" "Last-Translator: Anonymous \n" -"Language-Team: Polish \n" +"Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,21 +22,21 @@ msgstr "" "|| n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 4.17\n" -#: data/io.github.Bavarder.Bavarder.desktop.in:3 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:4 data/ui/window.blp:7 -msgid "Bavarder" -msgstr "Bavarder" +#: data/page.codeberg.Imaginer.Imaginer.desktop.in:3 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:4 data/ui/window.blp:7 +msgid "Imaginer" +msgstr "Imaginer" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:5 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:13 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:5 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:13 msgid "Chit-chat with an AI" msgstr "Pogawędka z SI" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:6 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:6 msgid "0xMRTT" msgstr "0xMRTT" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:18 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:18 msgid "Screenshot of Main UI" msgstr "Zrzut ekranu interfejsu" @@ -144,8 +144,8 @@ msgid "Keyboard Shortcuts" msgstr "Skróty klawiszowe" #: data/ui/window.blp:239 -msgid "About Bavarder" -msgstr "O Bavarderze" +msgid "About Imaginer" +msgstr "O Imaginerze" #: src/provider/base.py:43 msgid "No API key provided, you can provide one in settings" diff --git a/po/pt.po b/po/pt.po index b7f980f..d5ed94b 100644 --- a/po/pt.po +++ b/po/pt.po @@ -1,7 +1,7 @@ -# Bavarder POT file -# Copyright (C) 2023 Bavarder +# Imaginer POT file +# Copyright (C) 2023 Imaginer # This file is distributed under the GNU GPLv3 license. -# Bavarder, 2023. +# Imaginer, 2023. # # galegovski , 2023. # 0xMRTT <0xmrtt@proton.me>, 2023. @@ -12,8 +12,8 @@ msgstr "" "POT-Creation-Date: 2023-05-12 16:35+0200\n" "PO-Revision-Date: 2023-05-12 14:36+0000\n" "Last-Translator: Anonymous \n" -"Language-Team: Portuguese \n" +"Language-Team: Portuguese \n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,21 +21,21 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.17\n" -#: data/io.github.Bavarder.Bavarder.desktop.in:3 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:4 data/ui/window.blp:7 -msgid "Bavarder" -msgstr "Bavarder" +#: data/page.codeberg.Imaginer.Imaginer.desktop.in:3 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:4 data/ui/window.blp:7 +msgid "Imaginer" +msgstr "Imaginer" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:5 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:13 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:5 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:13 msgid "Chit-chat with an AI" msgstr "Bate-papo com uma IA" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:6 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:6 msgid "0xMRTT" msgstr "0xMRTT" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:18 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:18 msgid "Screenshot of Main UI" msgstr "Captura da tela principal" @@ -143,8 +143,8 @@ msgid "Keyboard Shortcuts" msgstr "Atalhos do teclado" #: data/ui/window.blp:239 -msgid "About Bavarder" -msgstr "Sobre Bavarder" +msgid "About Imaginer" +msgstr "Sobre Imaginer" #: src/provider/base.py:43 msgid "No API key provided, you can provide one in settings" diff --git a/po/ru.po b/po/ru.po index 0f44384..39f1790 100644 --- a/po/ru.po +++ b/po/ru.po @@ -1,7 +1,7 @@ -# Bavarder POT file -# Copyright (C) 2023 Bavarder +# Imaginer POT file +# Copyright (C) 2023 Imaginer # This file is distributed under the GNU GPLv3 license. -# Bavarder, 2023. +# Imaginer, 2023. # # 0xMRTT <0xmrtt@tuta.io>, 2023. # Daudix_UFO , 2023. @@ -13,8 +13,8 @@ msgstr "" "POT-Creation-Date: 2023-05-12 16:35+0200\n" "PO-Revision-Date: 2023-05-12 14:36+0000\n" "Last-Translator: Anonymous \n" -"Language-Team: Russian \n" +"Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,21 +23,21 @@ msgstr "" "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 4.17\n" -#: data/io.github.Bavarder.Bavarder.desktop.in:3 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:4 data/ui/window.blp:7 -msgid "Bavarder" -msgstr "Bavarder" +#: data/page.codeberg.Imaginer.Imaginer.desktop.in:3 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:4 data/ui/window.blp:7 +msgid "Imaginer" +msgstr "Imaginer" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:5 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:13 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:5 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:13 msgid "Chit-chat with an AI" msgstr "Болтайте с GPT" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:6 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:6 msgid "0xMRTT" msgstr "0xMRTT" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:18 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:18 msgid "Screenshot of Main UI" msgstr "Снимок экрана главного интерфейса" @@ -141,8 +141,8 @@ msgid "Keyboard Shortcuts" msgstr "Комбинации клавиш" #: data/ui/window.blp:239 -msgid "About Bavarder" -msgstr "О Bavarder" +msgid "About Imaginer" +msgstr "О Imaginer" #: src/provider/base.py:43 msgid "No API key provided, you can provide one in settings" @@ -177,8 +177,8 @@ msgstr "Cat GPT" #~ msgid "Ready" #~ msgstr "Готов" -#~ msgid "bavarder" -#~ msgstr "bavarder" +#~ msgid "imaginer" +#~ msgstr "imaginer" #~ msgid "No description" #~ msgstr "Нет описания" diff --git a/po/sv.po b/po/sv.po index a48e17e..cc1679b 100644 --- a/po/sv.po +++ b/po/sv.po @@ -1,7 +1,7 @@ -# Bavarder POT file -# Copyright (C) 2023 Bavarder +# Imaginer POT file +# Copyright (C) 2023 Imaginer # This file is distributed under the GNU GPLv3 license. -# Bavarder, 2023. +# Imaginer, 2023. # # 0xMRTT <0xmrtt@tuta.io>, 2023. # Morgan Antonsson , 2023. @@ -13,8 +13,8 @@ msgstr "" "POT-Creation-Date: 2023-05-12 16:35+0200\n" "PO-Revision-Date: 2023-05-12 14:36+0000\n" "Last-Translator: Anonymous \n" -"Language-Team: Swedish \n" +"Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,21 +22,21 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.17\n" -#: data/io.github.Bavarder.Bavarder.desktop.in:3 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:4 data/ui/window.blp:7 -msgid "Bavarder" -msgstr "Bavarder" +#: data/page.codeberg.Imaginer.Imaginer.desktop.in:3 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:4 data/ui/window.blp:7 +msgid "Imaginer" +msgstr "Imaginer" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:5 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:13 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:5 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:13 msgid "Chit-chat with an AI" msgstr "Chatta med en AI" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:6 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:6 msgid "0xMRTT" msgstr "0xMRTT" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:18 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:18 msgid "Screenshot of Main UI" msgstr "Skärmdump av huvudgränssnittet" @@ -144,8 +144,8 @@ msgid "Keyboard Shortcuts" msgstr "Tangentbordsgenvägar" #: data/ui/window.blp:239 -msgid "About Bavarder" -msgstr "Om Bavarder" +msgid "About Imaginer" +msgstr "Om Imaginer" #: src/provider/base.py:43 msgid "No API key provided, you can provide one in settings" diff --git a/po/th.po b/po/th.po index 04289c2..a8130c6 100644 --- a/po/th.po +++ b/po/th.po @@ -1,7 +1,7 @@ -# Bavarder POT file -# Copyright (C) 2023 Bavarder +# Imaginer POT file +# Copyright (C) 2023 Imaginer # This file is distributed under the GNU GPLv3 license. -# Bavarder, 2023. +# Imaginer, 2023. # # watchakorn-18k , 2023. msgid "" @@ -11,8 +11,8 @@ msgstr "" "POT-Creation-Date: 2023-05-12 16:35+0200\n" "PO-Revision-Date: 2023-05-12 14:36+0000\n" "Last-Translator: Anonymous \n" -"Language-Team: Thai \n" +"Language-Team: Thai \n" "Language: th\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,21 +20,21 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 4.17\n" -#: data/io.github.Bavarder.Bavarder.desktop.in:3 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:4 data/ui/window.blp:7 -msgid "Bavarder" +#: data/page.codeberg.Imaginer.Imaginer.desktop.in:3 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:4 data/ui/window.blp:7 +msgid "Imaginer" msgstr "แบบวาร์เดอร์" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:5 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:13 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:5 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:13 msgid "Chit-chat with an AI" msgstr "แชทกับ AI" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:6 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:6 msgid "0xMRTT" msgstr "0xMRTT" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:18 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:18 msgid "Screenshot of Main UI" msgstr "ภาพหน้าจอของ UI หลัก" @@ -138,7 +138,7 @@ msgid "Keyboard Shortcuts" msgstr "แป้นพิมพ์ลัด" #: data/ui/window.blp:239 -msgid "About Bavarder" +msgid "About Imaginer" msgstr "เกี่ยวกับแบบวาร์เดอร์" #: src/provider/base.py:43 diff --git a/po/tr.po b/po/tr.po index f5e6f20..ebebeeb 100644 --- a/po/tr.po +++ b/po/tr.po @@ -1,7 +1,7 @@ -# Bavarder POT file -# Copyright (C) 2023 Bavarder +# Imaginer POT file +# Copyright (C) 2023 Imaginer # This file is distributed under the GNU GPLv3 license. -# Bavarder, 2023. +# Imaginer, 2023. # # keyiflerolsun , 2023. # 0xMRTT <0xmrtt@proton.me>, 2023. @@ -12,8 +12,8 @@ msgstr "" "POT-Creation-Date: 2023-05-12 16:35+0200\n" "PO-Revision-Date: 2023-05-12 14:36+0000\n" "Last-Translator: Anonymous \n" -"Language-Team: Turkish \n" +"Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,21 +21,21 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.17\n" -#: data/io.github.Bavarder.Bavarder.desktop.in:3 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:4 data/ui/window.blp:7 -msgid "Bavarder" -msgstr "Bavarder" +#: data/page.codeberg.Imaginer.Imaginer.desktop.in:3 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:4 data/ui/window.blp:7 +msgid "Imaginer" +msgstr "Imaginer" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:5 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:13 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:5 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:13 msgid "Chit-chat with an AI" msgstr "Chit AI ile sohbet edin" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:6 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:6 msgid "0xMRTT" msgstr "0xMRTT" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:18 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:18 msgid "Screenshot of Main UI" msgstr "Ana Kullanıcı Arayüzü'nün ekran görüntüsü" @@ -143,8 +143,8 @@ msgid "Keyboard Shortcuts" msgstr "Klavye kısayolları" #: data/ui/window.blp:239 -msgid "About Bavarder" -msgstr "Bavarder Hakkında" +msgid "About Imaginer" +msgstr "Imaginer Hakkında" #: src/provider/base.py:43 msgid "No API key provided, you can provide one in settings" diff --git a/po/uk.po b/po/uk.po index 867cbec..288c429 100644 --- a/po/uk.po +++ b/po/uk.po @@ -1,7 +1,7 @@ -# Bavarder POT file -# Copyright (C) 2023 Bavarder +# Imaginer POT file +# Copyright (C) 2023 Imaginer # This file is distributed under the GNU GPLv3 license. -# Bavarder, 2023. +# Imaginer, 2023. # # 0xMRTT <0xmrtt@tuta.io>, 2023. # Orest58008 , 2023. @@ -13,8 +13,8 @@ msgstr "" "POT-Creation-Date: 2023-05-12 16:35+0200\n" "PO-Revision-Date: 2023-05-12 14:36+0000\n" "Last-Translator: Anonymous \n" -"Language-Team: Ukrainian \n" +"Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,21 +23,21 @@ msgstr "" "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 4.17\n" -#: data/io.github.Bavarder.Bavarder.desktop.in:3 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:4 data/ui/window.blp:7 -msgid "Bavarder" -msgstr "Bavarder" +#: data/page.codeberg.Imaginer.Imaginer.desktop.in:3 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:4 data/ui/window.blp:7 +msgid "Imaginer" +msgstr "Imaginer" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:5 -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:13 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:5 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:13 msgid "Chit-chat with an AI" msgstr "Побалакати з ШІ" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:6 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:6 msgid "0xMRTT" msgstr "0xMRTT" -#: data/io.github.Bavarder.Bavarder.appdata.xml.in:18 +#: data/page.codeberg.Imaginer.Imaginer.appdata.xml.in:18 msgid "Screenshot of Main UI" msgstr "Знімок головного інтерфейсу" @@ -145,8 +145,8 @@ msgid "Keyboard Shortcuts" msgstr "Комбінації Клавіш" #: data/ui/window.blp:239 -msgid "About Bavarder" -msgstr "Про Bavarder" +msgid "About Imaginer" +msgstr "Про Imaginer" #: src/provider/base.py:43 msgid "No API key provided, you can provide one in settings" diff --git a/po/update-pot.sh b/po/update-pot.sh index ef52fae..a02323b 100644 --- a/po/update-pot.sh +++ b/po/update-pot.sh @@ -1,10 +1,10 @@ #!/bin/bash po_dir=$(dirname "$(realpath "$0")") -xgettext -f "$po_dir"/POTFILES -o "$po_dir"/Bavarder.pot --add-comments=Translators --keyword=_ --keyword=C_1c,2 --from-code=UTF-8 -sed -i "s/SOME DESCRIPTIVE TITLE./Bavarder POT file/" "$po_dir"/Bavarder.pot -sed -i "s/YEAR THE PACKAGE'S COPYRIGHT HOLDER/$(date +%Y) Bavarder/" "$po_dir"/Bavarder.pot -sed -i "s@same license as the PACKAGE package.@GNU GPLv3 license.@" "$po_dir"/Bavarder.pot -sed -i "s/FIRST AUTHOR , YEAR./Bavarder, $(date +%Y)./" "$po_dir"/Bavarder.pot +xgettext -f "$po_dir"/POTFILES -o "$po_dir"/Imaginer.pot --add-comments=Translators --keyword=_ --keyword=C_1c,2 --from-code=UTF-8 +sed -i "s/SOME DESCRIPTIVE TITLE./Imaginer POT file/" "$po_dir"/Imaginer.pot +sed -i "s/YEAR THE PACKAGE'S COPYRIGHT HOLDER/$(date +%Y) Imaginer/" "$po_dir"/Imaginer.pot +sed -i "s@same license as the PACKAGE package.@GNU GPLv3 license.@" "$po_dir"/Imaginer.pot +sed -i "s/FIRST AUTHOR , YEAR./Imaginer, $(date +%Y)./" "$po_dir"/Imaginer.pot regex="$po_dir/([a-zA-Z_]*).po" find "$po_dir" -type f -name "*.po" | sed -rn "s:$regex:\1:p" > "$po_dir/LINGUAS" \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index f74693d..24225c2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,10 +2,6 @@ # chmod +x flatpak-pip-generator # ./flatpak-pip-generator --requirements-file=requirements.txt --output pypi-dependencies -baichat-py>=0.1.2 -hgchat openai -googlebardpy -markdown -pymdown-extensions -Pygments \ No newline at end of file +Pillow +requests \ No newline at end of file diff --git a/src/constants.py.in b/src/constants.py.in index a281864..671aa36 100644 --- a/src/constants.py.in +++ b/src/constants.py.in @@ -1,4 +1,4 @@ -rootdir = '/io/github/Bavarder/Bavarder' +rootdir = '/page/codeberg/Imaginer/Imaginer' datadir = '@DATA_DIR@' pkgdatadir = '@PKGDATA_DIR@' localedir = '@LOCALE_DIR@' diff --git a/src/bavarder.in b/src/imaginer.in similarity index 81% rename from src/bavarder.in rename to src/imaginer.in index 3c1120e..daba562 100755 --- a/src/bavarder.in +++ b/src/imaginer.in @@ -1,6 +1,6 @@ #!@PYTHON@ -# bavarder.in +# imaginer.in # # Copyright 2023 Me # @@ -31,16 +31,16 @@ localedir = '@LOCALE_DIR@' sys.path.insert(1, pkgdatadir) signal.signal(signal.SIGINT, signal.SIG_DFL) -locale.bindtextdomain('bavarder', localedir) -locale.textdomain('bavarder') -gettext.install('bavarder', localedir) +locale.bindtextdomain('imaginer', localedir) +locale.textdomain('imaginer') +gettext.install('imaginer', localedir) if __name__ == '__main__': import gi from gi.repository import Gio - resource = Gio.Resource.load(os.path.join(pkgdatadir, 'bavarder.gresource')) + resource = Gio.Resource.load(os.path.join(pkgdatadir, 'imaginer.gresource')) resource._register() - from bavarder import main + from imaginer import main sys.exit(main.main(VERSION)) diff --git a/src/main.py b/src/main.py index 1154413..0a34339 100644 --- a/src/main.py +++ b/src/main.py @@ -29,8 +29,8 @@ gi.require_version("Gdk", "4.0") gi.require_version("Gst", "1.0") gi.require_version('WebKit', '6.0') -from gi.repository import Gtk, Gio, Adw, Gdk, GLib, Gst, WebKit -from .window import BavarderWindow +from gi.repository import Gtk, Gio, Adw, Gdk, GLib +from .window import ImaginerWindow from .preferences import Preferences from enum import auto, IntEnum @@ -38,18 +38,16 @@ from .constants import app_id, version, build_type from tempfile import NamedTemporaryFile +import unicodedata +from time import gmtime, strftime +from os.path import basename, splitext + from .provider import PROVIDERS import platform import os -import markdown import tempfile import re -class Step(IntEnum): - CONVERT_HTML = auto() - LOAD_WEBVIEW = auto() - RENDER = auto() - class KillableThread(threading.Thread): def __init__(self, *args, **keywords): threading.Thread.__init__(self, *args, **keywords) @@ -84,12 +82,12 @@ class KillableThread(threading.Thread): -class BavarderApplication(Adw.Application): +class ImaginerApplication(Adw.Application): """The main application singleton class.""" def __init__(self): super().__init__( - application_id="io.github.Bavarder.Bavarder", + application_id="page.codeberg.Imaginer.Imaginer", flags=Gio.ApplicationFlags.DEFAULT_FLAGS, ) self.create_action("quit", self.on_quit, ["q"]) @@ -97,37 +95,32 @@ class BavarderApplication(Adw.Application): self.create_action( "preferences", self.on_preferences_action, ["comma"] ) - self.create_action("copy_prompt", self.on_copy_prompt_action) - self.create_action("copy_bot", self.on_copy_bot_action, ["c"]) self.create_action("ask", self.on_ask_action, ["Return"]) - self.create_action("clear", self.on_clear_action, ["BackSpace"]) self.create_action("stop", self.on_stop_action, ["Escape"]) + self.create_action("choose_output", self.on_file_chooser, ["s"]) + # self.create_action("speak", self.on_speak_action, ["S"]) # self.create_action("listen", self.on_listen_action, ["L"]) - self.settings = Gio.Settings(schema_id="io.github.Bavarder.Bavarder") - - self.clear_after_send = self.settings.get_boolean("clear-after-send") - self.use_text_view = self.settings.get_boolean("use-text-view") + self.settings = Gio.Settings(schema_id="page.codeberg.Imaginer.Imaginer") self.enabled_providers = sorted( set(self.settings.get_strv("enabled-providers")) ) self.latest_provider = self.settings.get_string("latest-provider") - self.web_view = None - self.web_view_pending_html = None - - self.loading = False - self.shown = False - self.preview_visible = False - + self.create_stateful_action( + "set_provider", + GLib.VariantType.new("s"), + GLib.Variant("s", self.latest_provider), + self.on_set_provider_action + ) def quitting(self, *args, **kwargs): """Called before closing main window.""" self.settings.set_strv("enabled-providers", list(self.enabled_providers)) - self.settings.set_string("latest-provider", self.get_provider().slug) + self.settings.set_string("latest-provider", self.provider) print("Saving providers data...") @@ -146,15 +139,6 @@ class BavarderApplication(Adw.Application): data = GLib.Variant("a{ss}", r) self.settings.set_value("providers-data", data) - def on_clear_action(self, action, param): - self.win.bot_text_view.get_buffer().set_text("") - self.win.prompt_text_view.get_buffer().set_text("") - self.win.prompt_text_view.grab_focus() - - def get_provider(self): - print(self.providers) - return self.providers[self.win.provider_selector.props.selected] - def do_activate(self): """Called when the application is activated. @@ -163,7 +147,7 @@ class BavarderApplication(Adw.Application): """ self.win = self.props.active_window if not self.win: - self.win = BavarderWindow(application=self) + self.win = ImaginerWindow(application=self) self.win.present() self.win.connect("close-request", self.quitting) @@ -176,38 +160,55 @@ class BavarderApplication(Adw.Application): for k, p in self.providers.items(): if p.slug == self.latest_provider: print("Setting selected provider to", k) - self.win.provider_selector.set_selected(k) + self.provider = k break - self.win.prompt_text_view.grab_focus() + def on_set_provider_action(self, action, *args): + self.provider = args[0].get_string() + print("Setting provider to", self.provider) + + Gio.SimpleAction.set_state(self.lookup_action("set_provider"), args[0]) + def load_dropdown(self): + self.menu_model = Gio.Menu() + + provider_menu = Gio.Menu() + - self.provider_selector_model = Gtk.StringList() self.providers = {} - self.providers_data = self.settings.get_value("providers-data") print(self.providers_data) print(self.enabled_providers) - for provider, i in zip( - self.enabled_providers, range(len(self.enabled_providers)) - ): + + for provider in self.enabled_providers: print("Loading provider", provider) try: - self.provider_selector_model.append(PROVIDERS[provider].name) + item = PROVIDERS[provider] + item_model = Gio.MenuItem() + item_model.set_label(item.name) + item_model.set_action_and_target_value( + "app.set_provider", + GLib.Variant("s", item.slug)) + provider_menu.append_item(item_model) except KeyError: print("Provider", provider, "not found") - self.enabled_providers.remove(provider) continue else: try: - _ = self.providers[i] # doesn't re load if already loaded + _ = self.providers[item.slug] # doesn't re load if already loaded except KeyError: - self.providers[i] = PROVIDERS[provider](self.win, self) + self.providers[item.slug] = PROVIDERS[provider](self.win, self) - self.win.provider_selector.set_model(self.provider_selector_model) - self.win.provider_selector.connect("notify", self.on_provider_selector_notify) + self.menu_model.append_submenu("Providers", provider_menu) + + self.menu_model.append_item(Gio.MenuItem.new(label="Preferences", detailed_action="app.preferences")) + self.menu_model.append_item(Gio.MenuItem.new(label="Keyboard Shortcuts", detailed_action="win.show-help-overlay")) + self.menu_model.append_item(Gio.MenuItem.new(label="About", detailed_action="app.about")) + + + self.win.menu.set_menu_model(self.menu_model) def load(self): for p in self.providers.values(): @@ -217,14 +218,11 @@ class BavarderApplication(Adw.Application): except KeyError: # provider not in data pass - def on_provider_selector_notify(self, _unused, pspec): - self.win.banner.set_revealed(False) - def on_about_action(self, widget, _): """Callback for the app.about action.""" about = Adw.AboutWindow( transient_for=self.props.active_window, - application_name="Bavarder", + application_name="Imaginer", application_icon=app_id, developer_name="0xMRTT", developers=["0xMRTT https://github.com/0xMRTT"], @@ -243,9 +241,9 @@ class BavarderApplication(Adw.Application): galegovski """, license_type=Gtk.License.GPL_3_0, version=version, - website="https://bavarder.codeberg.page", - issue_url="https://github.com/Bavarder/Bavarder/issues", - support_url="https://codeberg.org/Bavarder/Bavarder/issues", + website="https://imaginer.codeberg.page", + issue_url="https://github.com/Imaginer/Imaginer/issues", + support_url="https://codeberg.org/Imaginer/Imaginer/issues", copyright="© 2023 0xMRTT", ) @@ -274,801 +272,87 @@ Providers: {self.enabled_providers} ) preferences.present() - def on_copy_prompt_action(self, widget, _): - """Callback for the app.copy_prompt action.""" + def on_file_chooser(self, widget, _): + """Callback for the app.choose_output action.""" + self.file_chooser.show() + + def on_file_chooser_response(self, _, response): + if response == Gtk.ResponseType.ACCEPT: + self.directory = self.file_chooser.get_file() + dir_basename = self.directory.get_basename() + self.win.label_output.set_label(dir_basename) + self.win.button_imagine.set_has_tooltip(False) + + self.file_chooser.hide() + + if response == Gtk.ResponseType.ACCEPT: + self.file_path = self.directory.get_path() + + def slugify(self, value): + value = ( + unicodedata.normalize("NFKD", value) + .encode("ascii", "ignore") + .decode("ascii") + ) + value = re.sub("[^\w\s-]", "", value).strip().lower() + return re.sub("[-\s]+", "-", value) - toast = Adw.Toast() - - text = self.win.prompt_text_view.get_buffer() - toast.set_title("Text copied") - - (start, end) = text.get_bounds() - text = text.get_text(start, end, False) - - if len(text) == 0: - return - - Gdk.Display.get_default().get_clipboard().set(text) - - self.win.toast_overlay.add_toast(toast) - - def on_copy_bot_action(self, widget, _): - """Callback for the app.copy_bot action.""" - - toast = Adw.Toast() - toast.set_title("Text copied") - - try: - text = self.response - except AttributeError: - return - else: - if len(text) == 0: - return - else: - Gdk.Display.get_default().get_clipboard().set(text) - - self.win.toast_overlay.add_toast(toast) - - def ask(self, prompt): - return self.providers[self.provider].ask(prompt) - - @staticmethod - def on_click_link(web_view, decision, _decision_type): - if web_view.get_uri().startswith(("http://", "https://", "www.")): - Glib.spawn_command_line_async(f"xdg-open {web_view.get_uri()}") - decision.ignore() - return True - - @staticmethod - def on_right_click(web_view, context_menu, _event, _hit_test): - # disable some context menu option - for item in context_menu.get_items(): - if item.get_stock_action() in [WebKit.ContextMenuAction.RELOAD, - WebKit.ContextMenuAction.GO_BACK, - WebKit.ContextMenuAction.GO_FORWARD, - WebKit.ContextMenuAction.STOP]: - context_menu.remove(item) - - - def show(self, html=None, step=Step.LOAD_WEBVIEW): - if step == Step.LOAD_WEBVIEW: - self.loading = True - if not self.web_view: - self.web_view = WebKit.WebView() - self.web_view.get_settings().set_allow_universal_access_from_file_urls(True) - - self.web_view.get_settings().set_enable_developer_extras(True) - - # Show preview once the load is finished - self.web_view.connect("load-changed", self.on_load_changed) - - # All links will be opened in default browser, but local files are opened in apps. - self.web_view.connect("decide-policy", self.on_click_link) - - self.web_view.connect("context-menu", self.on_right_click) - - self.web_view.set_hexpand(True) - self.web_view.set_vexpand(True) - - self.win.response_stack.add_child(self.web_view) - self.win.response_stack.set_visible_child(self.web_view) - - if self.web_view.is_loading(): - self.web_view_pending_html = html - else: - try: - self.web_view.load_html(html, "file://localhost/") - except TypeError: # Argument 1 does not allow None as a value - pass - - - elif step == Step.RENDER: - if not self.preview_visible: - self.preview_visible = True - self.show() - - def reload(self, *_widget, reshow=False): - if self.preview_visible: - if reshow: - self.hide() - self.show() - - def on_load_changed(self, _web_view, event): - if event == WebKit.LoadEvent.FINISHED: - self.loading = False - if self.web_view_pending_html: - self.show(html=self.web_view_pending_html, step=Step.LOAD_WEBVIEW) - self.web_view_pending_html = None - else: - # we only lazyload the webview once - self.show(step=Step.RENDER) - - def parse_css(self, path): - - adw_palette_prefixes = [ - "blue_", - "green_", - "yellow_", - "orange_", - "red_", - "purple_", - "brown_", - "light_", - "dark_" - ] - - # Regular expressions - not_define_color = re.compile(r"(^(?:(?!@define-color).)*$)") - define_color = re.compile(r"(@define-color .*[^\s])") - css = "" - variables = {} - palette = {} - - for color in adw_palette_prefixes: - palette[color] = {} - - with open(path, "r", encoding="utf-8") as sheet: - for line in sheet: - cdefine_match = re.search(define_color, line) - not_cdefine_match = re.search(not_define_color, line) - if cdefine_match != None: # If @define-color variable declarations were found - palette_part = cdefine_match.__getitem__(1) # Get the second item of the re.Match object - name, color = palette_part.split(" ", 1)[1].split(" ", 1) - if name.startswith(tuple(adw_palette_prefixes)): # Palette colors - palette[name[:-1]][name[-1:]] = color[:-1] - else: # Other color variables - variables[name] = color[:-1] - elif not_cdefine_match != None: # If CSS rules were found - css_part = not_cdefine_match.__getitem__(1) - css += f"{css_part}\n" - - sheet.close() - return variables, palette, css - - def update_response(self, response): - """Update the response text view with the response.""" - self.response = response - - if not self.use_text_view: - response = markdown.markdown(response, extensions=["markdown.extensions.extra", 'pymdownx.arithmatex', 'pymdownx.highlight']) - - TEMPLATE = """ - - - - - - - - - - - - {response} - - - """ - - ADWAITA_STYLE = """:root { - --text-color: #2e3436; - --background-color: #f6f5f4; - --alt-background-color: #edeeef; - --link-color: #0d71de; - --blockquote-text-color: #747e85; - --blockquote-border-color: #d6d8da; - --header-border-color: #e1e2e4; - --hr-background-color: #d8dadd; - --table-tr-border-color: #bdc1c6; - --table-td-border-color: #d6d8da; - --kbd-text-color: #4e585e; - --kbd-background-color: #f1f1f1; - --kbd-border-color: #bdc1c6; - --kbd-shadow-color: #8c939a; - } - - @media (prefers-color-scheme: dark) { - :root { - --text-color: #eeeeec; - --background-color: #363636; - --alt-background-color: #4a4a4a; - --link-color: #78aeed; - --blockquote-text-color: #ffffff; - --blockquote-border-color: #525252; - --header-border-color: #474747; - --hr-background-color: #505050; - --table-tr-border-color: #696969; - --table-td-border-color: #525252; - --kbd-text-color: #ffffff; - --kbd-background-color: #4a4a4a; - --kbd-border-color: #696969; - --kbd-shadow-color: #979797; - } - }""" - CUSTOM_STYLE = """ - --text-color: {card_fg_color}; - --background-color: {card_bg_color}; - --alt-background-color: {view_bg_color}; - --link-color: {accent_fg_color}; - --blockquote-text-color: {card_fg_color}; - --blockquote-border-color: {card_bg_color}; - --header-border-color: {headerbar_border_color}; - --hr-background-color: {headerbar_bg_color}; - --table-tr-border-color: {headerbar_border_color}; - --table-td-border-color: {headerbar_border_color}; - --kbd-text-color: #4e585e; - --kbd-background-color: #f1f1f1; - --kbd-border-color: #bdc1c6; - --kbd-shadow-color: #8c939a; - """ - - if os.path.exists(os.path.expanduser("~/.config/gtk-4.0/gtk.css")): - variables, palette, css = self.parse_css(os.path.expanduser("~/.config/gtk-4.0/gtk.css")) - theme_css = ":root {\n" + CUSTOM_STYLE.format(**variables) + " \n}\n" + css - else: - theme_css = ADWAITA_STYLE - self.show(TEMPLATE.replace("{response}", response).replace("{theme_css}", theme_css), Step.LOAD_WEBVIEW) - else: - self.win.bot_text_view.get_buffer().props.text = response - self.win.response_stack.set_visible_child_name("page_response") def on_ask_action(self, widget, _): """Callback for the app.ask action.""" - self.prompt = self.win.prompt_text_view.get_buffer().props.text.strip() + + self.prompt = self.win.prompt.get_text() + self.negative_prompt = self.win.negative_prompt.get_text() + + try: + self.path = self.file_path + except AttributeError: + self.path = "imaginer" + else: + self.path = f"{path}/imaginer-{self.slugify(self.prompt)}-{strftime('%d-%b-%Y-%H-%M-%S', gmtime())}" if self.prompt == "" or self.prompt is None: # empty prompt return else: self.win.spinner.start() - self.win.ask_button.set_visible(False) - self.win.wait_button.set_visible(True) - self.win.stop_button.set_visible(True) - self.provider = self.win.provider_selector.props.selected + self.win.stack_imaginer.set_visible_child_name("stack_loading") def thread_run(): try: - response = self.ask(self.prompt) + image = self.providers[self.provider].ask(self.prompt, self.negative_prompt) except GLib.Error as e: - response = e.message - GLib.idle_add(cleanup, response) + self.win.banner.set_title(str(e)) + self.win.banner.set_revealed(True) + else: + path = self.providers[self.provider].path(self.path) + GLib.idle_add(cleanup, image, path) - def cleanup(response): + def cleanup(image, path): self.win.spinner.stop() - self.win.ask_button.set_visible(True) - self.win.wait_button.set_visible(False) - self.win.stop_button.set_visible(False) - GLib.idle_add(self.update_response, response) + self.win.stack_imaginer.set_visible_child_name("stack_imagine") self.t.join() - if self.clear_after_send: - self.win.prompt_text_view.get_buffer().set_text("") + if image: + self.win.banner.set_revealed(False) + image.save(path) + self.win.image.set_file(Gio.File.new_for_path(path)) + self.win.image.set_visible(True) + print("Image saved") + else: + print("No image returned") + + self.t = KillableThread(target=thread_run) self.t.start() def on_stop_action(self, widget, _): """Callback for the app.stop action.""" self.win.spinner.stop() - self.win.ask_button.set_visible(True) - self.win.wait_button.set_visible(False) - self.win.stop_button.set_visible(False) + self.win.stack_imaginer.set_visible_child_name("stack_imagine") self.t.kill() self.t.join() - # def on_speak_action(self, widget, _): - # """Callback for the app.speak action.""" - # print("app.speak action activated") - # - # try: - # - # with NamedTemporaryFile() as file_to_play: - # - # tts = gTTS(self.win.bot_text_view.get_buffer().props.text) - # tts.write_to_fp(file_to_play) - # file_to_play.seek(0) - # self._play_audio(file_to_play.name) - # except Exception as exc: - # print(exc) - # - # def _play_audio(self, path): - # uri = "file://" + path - # self.player.set_property("uri", uri) - # self.pipeline.add(self.player) - # self.pipeline.set_state(Gst.State.PLAYING) - # self.player.set_state(Gst.State.PLAYING) - # - # def on_listen_action(self, widget, _): - # """Callback for the app.listen action.""" - # print("app.listen action activated") - def create_action(self, name, callback, shortcuts=None): """Add an application action. @@ -1083,9 +367,19 @@ Providers: {self.enabled_providers} self.add_action(action) if shortcuts: self.set_accels_for_action(f"app.{name}", shortcuts) + + def create_stateful_action(self, name, parameter_type, initial_state, callback, shortcuts=None): + """Add a stateful application action.""" + + action = Gio.SimpleAction.new_stateful( + name, parameter_type, initial_state) + action.connect("activate", callback) + self.add_action(action) + if shortcuts: + self.parent.set_accels_for_action(f"app.{name}", shortcuts) def main(version): """The application's entry point.""" - app = BavarderApplication() + app = ImaginerApplication() return app.run(sys.argv) diff --git a/src/meson.build b/src/meson.build index f9d6f91..3be20f6 100644 --- a/src/meson.build +++ b/src/meson.build @@ -1,12 +1,12 @@ pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name()) -moduledir = join_paths(pkgdatadir, 'bavarder') +moduledir = join_paths(pkgdatadir, 'imaginer') gnome = import('gnome') python = import('python') configure_file( - input: 'bavarder.in', - output: 'bavarder', + input: 'imaginer.in', + output: 'imaginer', configuration: conf, install: true, install_dir: get_option('bindir'), @@ -21,13 +21,13 @@ configure_file( install_dir: moduledir ) -bavarder_sources = [ +imaginer_sources = [ '__init__.py', 'main.py', 'preferences.py', 'window.py', ] -PY_INSTALLDIR.install_sources(bavarder_sources, subdir: moduledir) +PY_INSTALLDIR.install_sources(imaginer_sources, subdir: moduledir) subdir('provider') \ No newline at end of file diff --git a/src/preferences.py b/src/preferences.py index 3a91549..490ce2b 100644 --- a/src/preferences.py +++ b/src/preferences.py @@ -3,50 +3,19 @@ from gi.repository import Gtk, Adw from .provider import PROVIDERS -@Gtk.Template(resource_path="/io/github/Bavarder/Bavarder/ui/preferences.ui") +@Gtk.Template(resource_path="/page/codeberg/Imaginer/Imaginer/ui/preferences.ui") class Preferences(Adw.PreferencesWindow): __gtype_name__ = "Preferences" - clear_after_send_switch = Gtk.Template.Child() provider_group = Gtk.Template.Child() - use_text_view_switch = Gtk.Template.Child() def __init__(self, application, **kwargs): super().__init__(**kwargs) self.app = application self.settings = application.settings - - self.clear_after_send_switch.set_active(self.app.clear_after_send) - self.clear_after_send_switch.connect( - "notify::active", self.on_clear_after_send_switch_toggled - ) - - self.use_text_view_switch.set_active(self.app.use_text_view) - self.use_text_view_switch.connect( - "notify::active", self.on_use_text_view_switch_toggled - ) - self.setup_providers() - def on_clear_after_send_switch_toggled(self, widget, *args): - """Callback for the clear_after_send_switch toggled event.""" - if widget.get_active(): - self.settings.set_boolean("clear-after-send", True) - self.app.clear_after_send = True - else: - self.settings.set_boolean("clear-after-send", False) - self.app.clear_after_send = False - - def on_use_text_view_switch_toggled(self, widget, *args): - """Callback for the use_text_view_switch toggled event.""" - if widget.get_active(): - self.settings.set_boolean("use-text-view", True) - self.app.use_text_view = True - else: - self.settings.set_boolean("use-text-view", False) - self.app.use_text_view = False - def setup_providers(self): # for provider in self.app.providers.values(): # try: diff --git a/src/provider/__init__.py b/src/provider/__init__.py index 25e8ea1..91e52c0 100644 --- a/src/provider/__init__.py +++ b/src/provider/__init__.py @@ -1,35 +1,19 @@ -from .huggingchat import HuggingChatProvider -from .baichat import BAIChatProvider -from .openaigpt35turbo import OpenAIGPT35TurboProvider -from .openaigpt4 import OpenAIGPT4Provider -from .catgpt import CatGPTProvider -from .openaitextdavinci003 import OpenAITextDavinci003 -from .alpacalora import AlpacaLoRAProvider -from .hfgoogleflant5xxl import HuggingFaceGoogleFlanT5XXLProvider -from .hfgoogleflanu12 import HuggingFaceGoogleFlanU12Provider -from .hfopenassistantsft1pythia12b import HuggingFaceOpenAssistantSFT1PythiaProvider -from .hfgpt2 import HuggingFaceGPT2Provider -from .hfdialogpt import HuggingFaceDialoGPTLargeProvider -from .bard import BardProvider -from .hfgpt2large import HuggingFaceGPT2LargeProvider -from .hfgpt2xl import HuggingFaceGPT2XLProvider -from .starcoder import StarCoderProvider +from .analogdiffusion import AnalogDiffusionProvider +from .anything import AnythingProvider +from .nitrodiffusion import NitroDiffusionProvider +from .openai import OpenAIProvider +from .openjourney import OpenJourneyProvider +from .portraitplus import PortraitPlusProvider +from .stablediffusion import StableDiffusionProvider +from .waifudiffusion import WaifuDiffusionProvider PROVIDERS = { - "alpacalora": AlpacaLoRAProvider, - "baichat": BAIChatProvider, - # "bard": BardProvider, # Disabled because we need more documentation on how to use it - "catgpt": CatGPTProvider, - "hfdialogpt": HuggingFaceDialoGPTLargeProvider, - "hfgoogleflant5xxl": HuggingFaceGoogleFlanT5XXLProvider, - "hfgoogleflanu12": HuggingFaceGoogleFlanU12Provider, - "hfgpt2": HuggingFaceGPT2Provider, - "hfgpt2large": HuggingFaceGPT2LargeProvider, - "hfgpt2xl": HuggingFaceGPT2XLProvider, - "hfopenassistantsft1pythia12b": HuggingFaceOpenAssistantSFT1PythiaProvider, - "huggingchat": HuggingChatProvider, - "openaigpt35turbo": OpenAIGPT35TurboProvider, - "openaigpt4": OpenAIGPT4Provider, - "openaitextdavinci003": OpenAITextDavinci003, - "starcoder": StarCoderProvider, + "analogdiffusion": AnalogDiffusionProvider, + "anything": AnythingProvider, + "nitrodiffusion": NitroDiffusionProvider, + "openai": OpenAIProvider, + "openjourney": OpenJourneyProvider, + "portraitplus": PortraitPlusProvider, + "stablediffusion": StableDiffusionProvider, + "waifudiffusion": WaifuDiffusionProvider, } diff --git a/src/provider/alpacalora.py b/src/provider/alpacalora.py deleted file mode 100644 index 5efba8d..0000000 --- a/src/provider/alpacalora.py +++ /dev/null @@ -1,55 +0,0 @@ -from .base import BavarderProvider - -import socket -import requests - -from gi.repository import Gtk, Adw, GLib - - -class AlpacaLoRAProvider(BavarderProvider): - name = "Alpaca-LoRA" - slug = "alpacalora" - - def __init__(self, win, app, *args, **kwargs): - super().__init__(win, app, *args, **kwargs) - - def ask(self, prompt): - try: - response = requests.post( - "https://tloen-alpaca-lora.hf.space/run/predict", - json={ - "data": [ - prompt, - prompt, - 0.1, - 0.75, - 40, - 4, - 128, - ] - }, - ).json() - except socket.gaierror: - self.no_connection() - return "" - else: - self.win.banner.set_revealed(False) - if "error" in response: - self.win.banner.props.title = response["error"] - self.win.banner.props.button_label = "" - self.win.banner.set_revealed(True) - return "" - else: - r = response["data"][0] - GLib.idle_add(self.update_response, r) - return r - - @property - def require_api_key(self): - return False - - def save(self): - return {} - - def load(self, data): - pass diff --git a/src/provider/analogdiffusion.py b/src/provider/analogdiffusion.py new file mode 100644 index 0000000..76a26a5 --- /dev/null +++ b/src/provider/analogdiffusion.py @@ -0,0 +1,6 @@ +from .huggingface import BaseHFProvider + +class AnalogDiffusionProvider(BaseHFProvider): + name = "Analog Diffusion" + slug = "analogdiffusion" + model = "wavymulder/Analog-Diffusion" \ No newline at end of file diff --git a/src/provider/anything.py b/src/provider/anything.py new file mode 100644 index 0000000..92ba76c --- /dev/null +++ b/src/provider/anything.py @@ -0,0 +1,6 @@ +from .huggingface import BaseHFProvider + +class AnythingProvider(BaseHFProvider): + name = "Anything" + slug = "anything" + model = "andite/anything-v4.0" \ No newline at end of file diff --git a/src/provider/baichat.py b/src/provider/baichat.py deleted file mode 100644 index 2e63c50..0000000 --- a/src/provider/baichat.py +++ /dev/null @@ -1,39 +0,0 @@ -from .base import BavarderProvider - -from baichat_py import BAIChat -import socket - -from gi.repository import Gtk, Adw, GLib - - -class BAIChatProvider(BavarderProvider): - name = "BAI Chat" - slug = "baichat" - - def __init__(self, win, app, *args, **kwargs): - super().__init__(win, app, *args, **kwargs) - self.chat = BAIChat(sync=True) - - def ask(self, prompt): - try: - response = self.chat.sync_ask(prompt) - except KeyError: - self.win.banner.set_revealed(False) - return "" - except socket.gaierror: - self.no_connection() - return "" - else: - self.win.banner.set_revealed(False) - GLib.idle_add(self.update_response, response.text) - return response.text - - @property - def require_api_key(self): - return False - - def save(self): - return {} - - def load(self, data): - pass diff --git a/src/provider/bard.py b/src/provider/bard.py deleted file mode 100644 index a586164..0000000 --- a/src/provider/bard.py +++ /dev/null @@ -1,80 +0,0 @@ -from .base import BavarderProvider - -import socket - -from googlebardpy import BardChat - -from gi.repository import Gtk, Adw, GLib - - -class BardProvider(BavarderProvider): - name = "Bard" - slug = "bard" - version = "0.1.0" - url = "https://bavarder.codeberg.page/docs/providers/bard.html" - - def __init__(self, win, app, *args, **kwargs): - super().__init__(win, app, *args, **kwargs) - self.pref_win = None - - def ask(self, prompt): - try: - response = self.chat.ask(prompt) - response = response["content"] - except AttributeError: - self.no_api_key() - return "" - except socket.gaierror: - self.no_connection() - return "" - else: - self.hide_banner() - GLib.idle_add(self.update_response, response) - return response - - @property - def require_api_key(self): - return True - - def preferences(self, win): - self.pref_win = win - - self.expander = Adw.ExpanderRow() - self.expander.props.title = self.name - - self.expander.add_action(self.about()) - self.expander.add_action(self.enable_switch()) - - self.api_row = Adw.PasswordEntryRow() - self.api_row.connect("apply", self.on_apply) - self.api_row.props.title = "__Secure-1PSID cookie" - self.api_row.set_show_apply_button(True) - self.api_row.add_suffix(self.how_to_get_a_token()) - self.expander.add_row(self.api_row) - - return self.expander - - def on_apply(self, widget): - self.hide_banner() - api_key = self.api_row.get_text() - self.api_key = api_key - try: - self.chat = BardChat(api_key) - except AttributeError: - self.banner.props.title = "Invalid API key" - self.banner.props.button_label = "" - self.banner.set_revealed(True) - - def save(self): - try: - return {"api_key": self.api_key} - except AttributeError: # no api key - return {} - - def load(self, data): - try: - self.chat = BardChat(data["api_key"]) - self.api_key = data["api_key"] - except AttributeError: - self.chat = None - self.api_key = None diff --git a/src/provider/base.py b/src/provider/base.py index 111cb9f..04662dd 100644 --- a/src/provider/base.py +++ b/src/provider/base.py @@ -5,7 +5,7 @@ from gi.repository import Gtk, Adw, GLib import json -class BavarderProvider: +class ImaginerProvider: name = None slug = None description = "" @@ -15,7 +15,7 @@ class BavarderProvider: developers = ["0xMRTT https://github.com/0xMRTT"] license_type = Gtk.License.GPL_3_0 copyright = "© 2023 0xMRTT" - url = "https://bavarder.codeberg.page/help/bard" + url = "https://imaginer.codeberg.page/help/bard" def __init__(self, win, app, *args, **kwargs): @@ -23,11 +23,13 @@ class BavarderProvider: self.banner = win.banner self.app = app self.chat = None - self.update_response = app.update_response - def ask(self, prompt): + def ask(self, prompt, negative_prompt): raise NotImplementedError() + def path(self, path): + return f"{path}-{self.slug}.png" + @property def require_api_key(self): raise NotImplementedError() @@ -77,7 +79,7 @@ class BavarderProvider: popover.set_child(vbox) about_button = Gtk.MenuButton() - about_button.set_icon_name("info-symbolic") + about_button.set_icon_name("dialog-information-symbolic") about_button.set_valign(Gtk.Align.CENTER) about_button.set_popover(popover) return about_button @@ -89,7 +91,7 @@ class BavarderProvider: def how_to_get_a_token(self): about_button = Gtk.Button() - about_button.set_icon_name("info-symbolic") + about_button.set_icon_name("dialog-information-symbolic") about_button.set_tooltip_text("How to get a token?") about_button.add_css_class("flat") about_button.set_valign(Gtk.Align.CENTER) diff --git a/src/provider/catgpt.py b/src/provider/catgpt.py deleted file mode 100644 index b94d0c6..0000000 --- a/src/provider/catgpt.py +++ /dev/null @@ -1,55 +0,0 @@ -from .base import BavarderProvider - -from random import choice, randint - -from gi.repository import Gtk, Adw, GLib - - -class CatGPTProvider(BavarderProvider): - name = _("Cat GPT") - slug = "catgpt" - version = "0.1.0" - - def __init__(self, win, app, *args, **kwargs): - super().__init__(win, app, *args, **kwargs) - self.chat = None - - def ask(self, prompt): - return " ".join([self.pick_generator()() for i in range(randint(1, 12))]) - - def pick_generator(self): - if randint(1, 15) == 1: - return choice( - [ - lambda: "ня" * randint(1, 4), - lambda: "ニャン" * randint(1, 4), - lambda: "喵" * randint(1, 4), - lambda: "ña" * randint(1, 4), - lambda: "ڽا" * randint(1, 4), - lambda: "ম্যাও" * randint(1, 4), - ] - ) - - return choice( - [ - lambda: "meow" * randint(1, 3), - lambda: "mew" * randint(1, 3), - lambda: "miau" * randint(1, 3), - lambda: "miaou" * randint(1, 3), - lambda: "miao" * randint(1, 3), - lambda: "nya" * randint(1, 3), - lambda: "m" + "r" * randint(1, 6) + "p", - lambda: "pur" + "r" * randint(1, 6), - lambda: "nya" * randint(1, 3) + "ny" + "a" * randint(1, 10), - ] - ) - - @property - def require_api_key(self): - return False - - def save(self): - return {} - - def load(self, data): - pass diff --git a/src/provider/hfdialogpt.py b/src/provider/hfdialogpt.py deleted file mode 100644 index 0929126..0000000 --- a/src/provider/hfdialogpt.py +++ /dev/null @@ -1,50 +0,0 @@ -from .huggingface import BaseHFProvider -import json -import socket -import requests - -from gi.repository import Gtk, Adw, GLib - - -class HuggingFaceDialoGPTLargeProvider(BaseHFProvider): - name = "DialoGPT" - slug = "hfdialogpt" - model = "microsoft/DialoGPT-large" - - @property - def require_api_key(self): - return False - - def ask(self, prompt): - try: - payload = json.dumps( - { - "inputs": { - # "past_user_inputs": ["Which movie is the best ?"], - # "generated_responses": ["It's Die Hard for sure."], - "text": prompt - }, - } - ) - headers = {"Content-Type": "application/json"} - if self.authorization: - headers["Authorization"] = f"Bearer {self.api_key}" - url = f"https://api-inference.huggingface.co/models/{self.model}" - print(url) - response = requests.request("POST", url, headers=headers, data=payload) - print(response.json()) - response = response.json()["generated_text"] - - # except NoApikey: - # self.no_api_key() - # return "" - except KeyError: - pass - except socket.gaierror: - self.no_connection() - return "" - else: - self.hide_banner() - print(response) - GLib.idle_add(self.update_response, response) - return response diff --git a/src/provider/hfgoogleflant5xxl.py b/src/provider/hfgoogleflant5xxl.py deleted file mode 100644 index cdb3952..0000000 --- a/src/provider/hfgoogleflant5xxl.py +++ /dev/null @@ -1,11 +0,0 @@ -from .huggingface import BaseHFProvider - - -class HuggingFaceGoogleFlanT5XXLProvider(BaseHFProvider): - name = "Google Flan T5 XXL" - slug = "hfgoogleflant5xxl" - model = "google/flan-t5-xxl" - - @property - def require_api_key(self): - return False diff --git a/src/provider/hfgoogleflanu12.py b/src/provider/hfgoogleflanu12.py deleted file mode 100644 index cc6b6df..0000000 --- a/src/provider/hfgoogleflanu12.py +++ /dev/null @@ -1,11 +0,0 @@ -from .huggingface import BaseHFProvider - - -class HuggingFaceGoogleFlanU12Provider(BaseHFProvider): - name = "Google Flan U12" - slug = "hfgoogleflanu12" - model = "google/flan-ul2" - - @property - def require_api_key(self): - return False diff --git a/src/provider/hfgpt2.py b/src/provider/hfgpt2.py deleted file mode 100644 index e8bbd9f..0000000 --- a/src/provider/hfgpt2.py +++ /dev/null @@ -1,13 +0,0 @@ -from .huggingface import BaseHFProvider - - -class HuggingFaceGPT2Provider(BaseHFProvider): - name = "GPT 2" - slug = "hfgpt2" - model = "gpt2" - description = "GPT-2 is a transformers model pretrained on a very large corpus of English data \nin a self-supervised fashion. This means it was pretrained on the raw texts only,\n with no humans labelling them in any way (which is why it can use lots of publicly available data)\n with an automatic process to generate inputs and labels from those texts. More precisely,\n it was trained to guess the next word in sentences." - languages = "English" - - @property - def require_api_key(self): - return False diff --git a/src/provider/hfgpt2large.py b/src/provider/hfgpt2large.py deleted file mode 100644 index b6dc711..0000000 --- a/src/provider/hfgpt2large.py +++ /dev/null @@ -1,13 +0,0 @@ -from .huggingface import BaseHFProvider - - -class HuggingFaceGPT2LargeProvider(BaseHFProvider): - name = "GPT 2 Large" - slug = "hfgpt2large" - model = "gpt2-large" - description = "GPT-2 is a transformers model pretrained on a very large corpus of English data \nin a self-supervised fashion. This means it was pretrained on the raw texts only,\n with no humans labelling them in any way (which is why it can use lots of publicly available data)\n with an automatic process to generate inputs and labels from those texts. More precisely,\n it was trained to guess the next word in sentences." - languages = "English" - - @property - def require_api_key(self): - return False diff --git a/src/provider/hfgpt2xl.py b/src/provider/hfgpt2xl.py deleted file mode 100644 index 0da5e92..0000000 --- a/src/provider/hfgpt2xl.py +++ /dev/null @@ -1,13 +0,0 @@ -from .huggingface import BaseHFProvider - - -class HuggingFaceGPT2XLProvider(BaseHFProvider): - name = "GPT 2 XL" - slug = "hfgpt2" - model = "gpt2-xl" - description = "GPT-2 is a transformers model pretrained on a very large corpus of English data \nin a self-supervised fashion. This means it was pretrained on the raw texts only,\n with no humans labelling them in any way (which is why it can use lots of publicly available data)\n with an automatic process to generate inputs and labels from those texts. More precisely,\n it was trained to guess the next word in sentences." - languages = "English" - - @property - def require_api_key(self): - return False diff --git a/src/provider/hfopenassistantsft1pythia12b.py b/src/provider/hfopenassistantsft1pythia12b.py deleted file mode 100644 index 62d5f9a..0000000 --- a/src/provider/hfopenassistantsft1pythia12b.py +++ /dev/null @@ -1,11 +0,0 @@ -from .huggingface import BaseHFProvider - - -class HuggingFaceOpenAssistantSFT1PythiaProvider(BaseHFProvider): - name = "Open-Assistant SFT-1 12B Model " - slug = "hfopenassistantsft1pythia12b" - model = "OpenAssistant/oasst-sft-1-pythia-12b" - - @property - def require_api_key(self): - return False diff --git a/src/provider/huggingchat.py b/src/provider/huggingchat.py deleted file mode 100644 index 66bebed..0000000 --- a/src/provider/huggingchat.py +++ /dev/null @@ -1,7 +0,0 @@ -from .huggingchatbase import BaseHuggingChatProvider - - -class HuggingChatProvider(BaseHuggingChatProvider): - name = "Hugging Chat" - slug = "huggingchat" - model = "OpenAssistant/oasst-sft-6-llama-30b-xor" diff --git a/src/provider/huggingchatbase.py b/src/provider/huggingchatbase.py deleted file mode 100644 index 2d76e93..0000000 --- a/src/provider/huggingchatbase.py +++ /dev/null @@ -1,50 +0,0 @@ -from .base import BavarderProvider - -from hgchat import HGChat -import socket - - -from gi.repository import Gtk, Adw, GLib - - -class BaseHuggingChatProvider(BavarderProvider): - name = "Hugging Chat" - slug = "huggingchat" - model = None - - def __init__(self, win, app, *args, **kwargs): - super().__init__(win, app, *args, **kwargs) - self.chat = HGChat(self.model) - - def ask(self, prompt): - try: - response = self.chat.ask(prompt) - except socket.gaierror: - self.no_connection() - return "" - except Exception as e: - self.win.banner.props.title = str(e) - self.win.banner.props.button_label = "" - self.win.banner.set_revealed(True) - return "" - else: - self.win.banner.set_revealed(False) - r = "" - for i in response: - char = i["token"]["text"] - if char == "": - r += "\n" - else: - r += char - GLib.idle_add(self.update_response, r) - return r - - @property - def require_api_key(self): - return False - - def save(self): - return {} - - def load(self, data): - pass diff --git a/src/provider/huggingface.py b/src/provider/huggingface.py index 52cc2e8..a0a9600 100644 --- a/src/provider/huggingface.py +++ b/src/provider/huggingface.py @@ -1,27 +1,33 @@ import requests import json -from .base import BavarderProvider +from .base import ImaginerProvider import socket from gi.repository import Gtk, Adw, GLib +from PIL import Image, UnidentifiedImageError +import io - -class BaseHFProvider(BavarderProvider): +class BaseHFProvider(ImaginerProvider): name = None slug = None model = None - url = "https://bavarder.codeberg.page/help/huggingface" + url = "https://imaginer.codeberg.page/help/huggingface" def __init__(self, win, app, *args, **kwargs): super().__init__(win, app, *args, **kwargs) self.api_key = None - def ask(self, prompt): + def ask(self, prompt, negative_prompt): try: - payload = json.dumps({"inputs": prompt}) + payload = json.dumps( + { + "inputs": prompt, + "negative_prompts": negative_prompt if negative_prompt else "", + } + ) headers = {"Content-Type": "application/json"} - if self.require_api_key: + if self.require_api_key and self.api_key: headers["Authorization"] = f"Bearer {self.api_key}" url = f"https://api-inference.huggingface.co/models/{self.model}" response = requests.request("POST", url, headers=headers, data=payload) @@ -33,25 +39,30 @@ class BaseHFProvider(BavarderProvider): self.win.banner.props.button_label = "" self.win.banner.set_revealed(True) return "" - response = response.json()[0]["generated_text"] - - # except NoApikey: - # self.no_api_key() - # return "" + response = response.content except KeyError: + print("KeyError") pass except socket.gaierror: self.no_connection() return "" else: self.hide_banner() - print(response) - GLib.idle_add(self.update_response, response) - return response + if response: + try: + return Image.open(io.BytesIO(response)) + except UnidentifiedImageError: + error = json.loads(response)["error"] + self.win.banner.set_title(error) + self.win.banner.set_revealed(True) + return None + else: + print("No response") + return None @property def require_api_key(self): - return False + return True def preferences(self, win): if self.require_api_key: diff --git a/src/provider/meson.build b/src/provider/meson.build index 9fb5c6d..83ece9e 100644 --- a/src/provider/meson.build +++ b/src/provider/meson.build @@ -3,26 +3,16 @@ providers_dir = join_paths(moduledir, 'provider') providers_sources = [ '__init__.py', - 'alpacalora.py', - 'baichat.py', - 'bard.py', + 'analogdiffusion.py', + 'anything.py', 'base.py', - 'catgpt.py', - 'hfdialogpt.py', - 'hfgoogleflant5xxl.py', - 'hfgoogleflanu12.py', - 'hfgpt2.py', - 'hfgpt2large.py', - 'hfgpt2xl.py', - 'hfopenassistantsft1pythia12b.py', - 'huggingchat.py', - 'huggingchatbase.py', 'huggingface.py', + 'nitrodiffusion.py', 'openai.py', - 'openaigpt4.py', - 'openaigpt35turbo.py', - 'openaitextdavinci003.py', - 'starcoder.py', + 'openjourney.py', + 'portraitplus.py', + 'stablediffusion.py', + 'waifudiffusion.py' ] PY_INSTALLDIR.install_sources(providers_sources, subdir: providers_dir) diff --git a/src/provider/nitrodiffusion.py b/src/provider/nitrodiffusion.py new file mode 100644 index 0000000..00df06c --- /dev/null +++ b/src/provider/nitrodiffusion.py @@ -0,0 +1,6 @@ +from .huggingface import BaseHFProvider + +class NitroDiffusionProvider(BaseHFProvider): + name = "Nitro Diffusion" + slug = "nitrodiffusion" + model = "nitrosocke/Nitro-Diffusion" \ No newline at end of file diff --git a/src/provider/openai.py b/src/provider/openai.py index 20cedf6..c327ad0 100644 --- a/src/provider/openai.py +++ b/src/provider/openai.py @@ -1,55 +1,44 @@ -from .base import BavarderProvider +from .base import ImaginerProvider import openai import socket from gi.repository import Gtk, Adw, GLib +from PIL import Image, UnidentifiedImageError +import io -class BaseOpenAIProvider(BavarderProvider): - name = None - slug = None - model = None +class OpenAIProvider(ImaginerProvider): + name = "Open AI" + slug = "openai" version = "0.1.0" api_key_title = "API Key" - url = "https://bavarder.codeberg.page/help/openai" + url = "https://imaginer.codeberg.page/help/openai" def __init__(self, win, app, *args, **kwargs): super().__init__(win, app, *args, **kwargs) self.chat = openai.ChatCompletion - self.pref_win = None - def ask(self, prompt): - prompt = self.chunk(prompt) + def ask(self, prompt, negative_prompt): try: - if isinstance(prompt, list): - self.win.banner.props.title = "Prompt too long, splitting into chunks." - self.win.banner.props.button_label = "" - self.win.banner.set_revealed(True) - response = "" - for chunk in prompt: - response += ( - self.chat.create( - model=self.model, - messages=[{"role": "user", "content": chunk}], - ) - .choices[0] - .message.content - ) - else: - response = self.chat.create( - model=self.model, messages=[{"role": "user", "content": prompt}] - ) - response = response.choices[0].message.content + print("Prompt:", prompt) + response = openai.Image.create( + prompt=prompt, n=1, size="1024x1024" + ) + image_url = response["data"][0]["url"] + image_bytes = requests.get(image_url).content except openai.error.AuthenticationError: + print("No API key") self.no_api_key() return "" - except openai.error.InvalidRequestError: - self.win.banner.props.title = "You don't have access to this model" + except openai.error.OpenAIError as e: + print("Invalid request") + self.win.banner.props.title = e.error["message"] self.win.banner.props.button_label = "" self.win.banner.set_revealed(True) return "" except openai.error.RateLimitError: + print("Rate limit") self.win.banner.props.title = "You exceeded your current quota, please check your plan and billing details." self.win.banner.props.button_label = "" self.win.banner.set_revealed(True) @@ -59,8 +48,17 @@ class BaseOpenAIProvider(BavarderProvider): return "" else: self.hide_banner() - GLib.idle_add(self.update_response, response) - return response + if image_bytes: + try: + return Image.open(io.BytesIO(image_bytes)) + except UnidentifiedImageError: + error = json.loads(image_bytes)["error"] + self.win.banner.set_title(error) + self.win.banner.set_revealed(True) + return None + else: + return None + @property def require_api_key(self): diff --git a/src/provider/openaigpt35turbo.py b/src/provider/openaigpt35turbo.py deleted file mode 100644 index f7e81b5..0000000 --- a/src/provider/openaigpt35turbo.py +++ /dev/null @@ -1,7 +0,0 @@ -from .openai import BaseOpenAIProvider - - -class OpenAIGPT35TurboProvider(BaseOpenAIProvider): - name = "OpenAI GPT 3.5 Turbo" - slug = "openaigpt35turbo" - model = "gpt-3.5-turbo" diff --git a/src/provider/openaigpt4.py b/src/provider/openaigpt4.py deleted file mode 100644 index 30b7ee1..0000000 --- a/src/provider/openaigpt4.py +++ /dev/null @@ -1,8 +0,0 @@ -from .openai import BaseOpenAIProvider - - -class OpenAIGPT4Provider(BaseOpenAIProvider): - name = "OpenAI GPT 4" - slug = "openaigpt4" - model = "gpt-4" - api_key_title = "API Key (Require a plan with access to the GPT-4 model)" diff --git a/src/provider/openaitextdavinci003.py b/src/provider/openaitextdavinci003.py deleted file mode 100644 index 710de86..0000000 --- a/src/provider/openaitextdavinci003.py +++ /dev/null @@ -1,7 +0,0 @@ -from .openai import BaseOpenAIProvider - - -class OpenAITextDavinci003(BaseOpenAIProvider): - name = "OpenAI Text Davinci 003" - slug = "openaitextdavinci003" - model = "text-davinci-003" diff --git a/src/provider/openjourney.py b/src/provider/openjourney.py new file mode 100644 index 0000000..e26498d --- /dev/null +++ b/src/provider/openjourney.py @@ -0,0 +1,6 @@ +from .huggingface import BaseHFProvider + +class OpenJourneyProvider(BaseHFProvider): + name = "Open Journey" + slug = "openjourney" + model = "prompthero/openjourney-v4" \ No newline at end of file diff --git a/src/provider/portraitplus.py b/src/provider/portraitplus.py new file mode 100644 index 0000000..7006112 --- /dev/null +++ b/src/provider/portraitplus.py @@ -0,0 +1,6 @@ +from .huggingface import BaseHFProvider + +class PortraitPlusProvider(BaseHFProvider): + name = "Portrail Plus" + slug = "portrailplus" + model = "wavymulder/portraitplus" \ No newline at end of file diff --git a/src/provider/stablediffusion.py b/src/provider/stablediffusion.py new file mode 100644 index 0000000..ccaef70 --- /dev/null +++ b/src/provider/stablediffusion.py @@ -0,0 +1,6 @@ +from .huggingface import BaseHFProvider + +class StableDiffusionProvider(BaseHFProvider): + name = "Stable Diffusion" + slug = "stablediffusion" + model = "stabilityai/stable-diffusion-2-1" \ No newline at end of file diff --git a/src/provider/starcoder.py b/src/provider/starcoder.py deleted file mode 100644 index 38db554..0000000 --- a/src/provider/starcoder.py +++ /dev/null @@ -1,7 +0,0 @@ -from .huggingchatbase import BaseHuggingChatProvider - - -class StarCoderProvider(BaseHuggingChatProvider): - name = "Star Coder" - slug = "starcoder" - model = "bigcode/starcoder" diff --git a/src/provider/waifudiffusion.py b/src/provider/waifudiffusion.py new file mode 100644 index 0000000..0bd7493 --- /dev/null +++ b/src/provider/waifudiffusion.py @@ -0,0 +1,6 @@ +from .huggingface import BaseHFProvider + +class WaifuDiffusionProvider(BaseHFProvider): + name = "Waifu Diffusion" + slug = "waifudiffusion" + model = "hakurei/waifu-diffusion" \ No newline at end of file diff --git a/src/window.py b/src/window.py index efc17aa..ff7ae0a 100644 --- a/src/window.py +++ b/src/window.py @@ -21,32 +21,26 @@ from gi.repository import Adw from gi.repository import Gtk, Gio -@Gtk.Template(resource_path="/io/github/Bavarder/Bavarder/ui/window.ui") -class BavarderWindow(Adw.ApplicationWindow): - __gtype_name__ = "BavarderWindow" +@Gtk.Template(resource_path="/page/codeberg/Imaginer/Imaginer/ui/window.ui") +class ImaginerWindow(Adw.ApplicationWindow): + __gtype_name__ = "ImaginerWindow" toast_overlay = Gtk.Template.Child() - prompt_text_view = Gtk.Template.Child() - spinner = Gtk.Template.Child() - ask_button = Gtk.Template.Child() - wait_button = Gtk.Template.Child() - scrolled_response_window = Gtk.Template.Child() - bot_text_view = Gtk.Template.Child() - response_stack = Gtk.Template.Child() banner = Gtk.Template.Child() - stop_button = Gtk.Template.Child() - # listen = Gtk.Template.Child() - # listen_wait = Gtk.Template.Child() - # listen_spinner = Gtk.Template.Child() - # speak = Gtk.Template.Child() - # speak_wait = Gtk.Template.Child() - # speak_spinner = Gtk.Template.Child() - provider_selector = Gtk.Template.Child() + main = Gtk.Template.Child() + stack_imaginer = Gtk.Template.Child() + image = Gtk.Template.Child() + button_output = Gtk.Template.Child() + button_imagine = Gtk.Template.Child() + spinner = Gtk.Template.Child() + prompt = Gtk.Template.Child() + negative_prompt = Gtk.Template.Child() + menu = Gtk.Template.Child() def __init__(self, **kwargs): super().__init__(**kwargs) - self.settings = Gio.Settings(schema_id="io.github.Bavarder.Bavarder") + self.settings = Gio.Settings(schema_id="page.codeberg.Imaginer.Imaginer") self.settings.bind( "width", self, "default-width", Gio.SettingsBindFlags.DEFAULT