├── .env ├── .github └── FUNDING.yml ├── .gitignore ├── .idea ├── .gitignore ├── inspectionProfiles │ └── Project_Default.xml ├── jsLibraryMappings.xml ├── material_theme_project_new.xml ├── modules.xml ├── sonarlint │ ├── issuestore │ │ ├── 0 │ │ │ ├── 3 │ │ │ │ └── 03b401ed48960060633d9a762924fd031e5ab516 │ │ │ ├── 9 │ │ │ │ └── 0929f195c0d514eb8b39c324b4cc02776c4e229e │ │ │ ├── b │ │ │ │ └── 0b6f01ef508407e7e678df03a61ae4ed7ad8c9e8 │ │ │ └── f │ │ │ │ ├── 0f56df1b46c8f4bc4527f6e6766964f2afd0b8ea │ │ │ │ ├── 0f826e4eb46bdf57a63fad937511623b622da26d │ │ │ │ └── 0fcaf7869310c11f91b60554e2ed9fecf1412cf5 │ │ ├── 1 │ │ │ ├── 2 │ │ │ │ └── 12f548fe0be5185bfe9c5dd51ea08907191e544b │ │ │ ├── 4 │ │ │ │ └── 14ad53cec5ee6fd1c3129a95a116786345357d3d │ │ │ └── 9 │ │ │ │ └── 19ecfab6d977a9fb765295c72df79072c4e6d6c2 │ │ ├── 2 │ │ │ ├── 0 │ │ │ │ └── 208bdeecafbcb9bbda258c0fbf814c2ad46fac34 │ │ │ ├── 2 │ │ │ │ └── 223c66c70cf73088ec078c211a1c5be8d9378184 │ │ │ ├── 4 │ │ │ │ └── 248d2bd9159df7943d8ee2944e0935718a10d4d7 │ │ │ ├── 6 │ │ │ │ └── 260ca0f519fb767c556d2e9ed59ec675f8eaad33 │ │ │ └── f │ │ │ │ ├── 2f275811734f5f1bd821c322783821979e7a8c34 │ │ │ │ └── 2fe7f218c8d47bee56d71bed3b5f461be878d1d6 │ │ ├── 3 │ │ │ ├── 3 │ │ │ │ └── 336d67865e90e40d7b427b812380caf35b87cafb │ │ │ ├── a │ │ │ │ └── 3ad772359ae059fad2a55a148f92431e2fdf782c │ │ │ └── c │ │ │ │ └── 3c84dcdc6bbe3d7817c49dcdc327b926fea1808a │ │ ├── 4 │ │ │ ├── 1 │ │ │ │ └── 4123588cdef112aa874bf52a300e9ed01db3ccd2 │ │ │ ├── 2 │ │ │ │ └── 42e89cd2213b9d5dfae4f63522702c623170d792 │ │ │ ├── 5 │ │ │ │ └── 45dc24aca0fefc4bf49323e1f34823e9e9d09d5f │ │ │ └── e │ │ │ │ └── 4e250f20823a23ba702aa02cb5f031865e6069ca │ │ ├── 5 │ │ │ ├── 2 │ │ │ │ └── 5236ca737319598acab4bcc71e257213b05b8dcb │ │ │ ├── 8 │ │ │ │ └── 583d98cb89ece0bc02e2430af46f338c74427084 │ │ │ ├── 9 │ │ │ │ ├── 590d1367ec41ce84fc635b13a3082602613e7969 │ │ │ │ └── 593009fbea34fd0714d5d28eef259dc5a1478bcd │ │ │ ├── a │ │ │ │ └── 5ae663b583904677397b1fcfc9ae61f0d17a5704 │ │ │ ├── b │ │ │ │ ├── 5b548617b9c23ceb76c3e73b549fb3f72978c46b │ │ │ │ └── 5be3fce0472ebedbb2d8cf0efad2036505d19e80 │ │ │ ├── c │ │ │ │ └── 5caab04ff553d1a7e3d5a466d1c37d7a74ddf08e │ │ │ └── f │ │ │ │ └── 5f3d0e6bf9ebd5e891e4e1ce2ea443eca84ff79a │ │ ├── 6 │ │ │ ├── 0 │ │ │ │ └── 60ef8500715763b81a3f5f894f75c359029fff5b │ │ │ ├── 9 │ │ │ │ └── 698bd84662a95771ee677122b7cb44b2637b89ed │ │ │ ├── a │ │ │ │ └── 6af2cfde9b2cdd9b69d4837ce73725fd3de8e8a4 │ │ │ └── d │ │ │ │ └── 6d3a8cd532ece5b4ddbd4b3b6a678ba686d300bc │ │ ├── 7 │ │ │ ├── 0 │ │ │ │ └── 7030d0b2f71b999ff89a343de08c414af32fc93a │ │ │ ├── 2 │ │ │ │ └── 72521f372286ea1c971dee0ca5054564542edf28 │ │ │ ├── 4 │ │ │ │ └── 74f60d718080ae78793a9d96fbb1704cd0b2cfbb │ │ │ ├── 5 │ │ │ │ └── 75443737da7a7eafa83c734f8fcdc61478138f70 │ │ │ └── 6 │ │ │ │ └── 7670825985bc985dbe54c81fe0a38fa162e383ed │ │ ├── 8 │ │ │ ├── 2 │ │ │ │ └── 82a572ffabc0bd01798a5f51cb81e5a65357eede │ │ │ ├── 3 │ │ │ │ └── 83a32f2b8e442e931ebd6bb40c35f9951b246bbf │ │ │ ├── 8 │ │ │ │ └── 88ca171d89ea06fdb835987a89b6fa764e120efb │ │ │ ├── 9 │ │ │ │ └── 893f45b8b3628f4c675a49f7e56765961dc7f725 │ │ │ ├── b │ │ │ │ └── 8b721e15887ccca844bdc191659604f35ea7333e │ │ │ ├── c │ │ │ │ └── 8c2975b9d506dc38940ee3b79036e3a822f6b597 │ │ │ ├── e │ │ │ │ └── 8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d │ │ │ └── f │ │ │ │ └── 8fe0b561aa0163ca4612c341d8ea044b40c575d5 │ │ ├── 9 │ │ │ ├── 4 │ │ │ │ └── 945798f116a797c89631f64e8c70213b6eabcfae │ │ │ ├── c │ │ │ │ ├── 9c64db4638083fc7373f410222e023536d88939d │ │ │ │ └── 9c740dd30872ad21f1c4e40e6471bc3b9bf74aca │ │ │ └── f │ │ │ │ ├── 9f2246670d6702f4a709136647b5c3327531adc5 │ │ │ │ └── 9fb983f6bfac8bb7e6cc7f49339b25faba8552d7 │ │ ├── a │ │ │ ├── 2 │ │ │ │ └── a23b4928cbf5cea665ab549f6951127275a0a77b │ │ │ ├── 5 │ │ │ │ └── a5cc2925ca8258af241be7e5b0381edf30266302 │ │ │ └── b │ │ │ │ └── ab78ecad692748fc70bf0efd8ff1ab7dcac6f260 │ │ ├── b │ │ │ ├── c │ │ │ │ └── bc3fce27f7f083ef4c110505e36f5f169d86f4fb │ │ │ ├── d │ │ │ │ └── bd40c144576149b3896d7ad77699e28436e72948 │ │ │ └── e │ │ │ │ ├── be7ae2abd27972f72bbf84392d9587967a44e5ae │ │ │ │ └── bee16f814cfb14bb585a481235930c5827ab1a0a │ │ ├── c │ │ │ ├── 0 │ │ │ │ └── c0e9e59a467e1546695bfa22746b302540797a4e │ │ │ └── 5 │ │ │ │ ├── c5d38a62d1faae90a2acaa34b79a7ef365c917e4 │ │ │ │ └── c5f2a4e62196efeb770030f7089b0ddf99658084 │ │ ├── d │ │ │ ├── 8 │ │ │ │ └── d86047b54f4c1d937e1d9145a42a25c73126cd9f │ │ │ ├── 9 │ │ │ │ └── d9eab33dbd0ecfac13039ab2f5b529c0835c5e1a │ │ │ ├── a │ │ │ │ ├── da03a7b4dbbfc52696734eed578fca5c7d1f80f1 │ │ │ │ └── dac799070c2d0c2fa24462b02c1f2dcc3fb3a1e9 │ │ │ └── b │ │ │ │ └── db2ce99e439e22e69017d7e549fe70c7aafde7bd │ │ ├── e │ │ │ ├── 0 │ │ │ │ └── e027c64a51626be3da9a5da3a0c443b80c18d74e │ │ │ ├── 3 │ │ │ │ ├── e35090b773ac8045f534f6515c3934d79dc6c6cb │ │ │ │ └── e37694f5ac87a4890188f706cd969b91d26ebd3e │ │ │ ├── 7 │ │ │ │ ├── e73a4bbbf067e85a823bc09593c249332c978db0 │ │ │ │ └── e7f2bdc0d4b1ede0918ab7c3f1f9abf045a90f90 │ │ │ └── c │ │ │ │ └── ec4b0d72610553a3686c6fe3c1f4431041e7826e │ │ ├── f │ │ │ ├── 2 │ │ │ │ └── f26076c620ad2d0e4a8f4e1d85773fa1acdc4c8e │ │ │ ├── 4 │ │ │ │ └── f43ecdf8d666ee908aacce037b4cd72159e4741b │ │ │ ├── 9 │ │ │ │ └── f900edc44cb929c2267a16100a32851f6d5b477d │ │ │ └── a │ │ │ │ ├── fa20ac7d551abb86658fdb330893c0e44b15f174 │ │ │ │ └── fa288d1472d29beccb489a676f68739ad365fc47 │ │ └── index.pb │ └── securityhotspotstore │ │ ├── 0 │ │ ├── 3 │ │ │ └── 03b401ed48960060633d9a762924fd031e5ab516 │ │ ├── 9 │ │ │ └── 0929f195c0d514eb8b39c324b4cc02776c4e229e │ │ ├── b │ │ │ └── 0b6f01ef508407e7e678df03a61ae4ed7ad8c9e8 │ │ └── f │ │ │ ├── 0f56df1b46c8f4bc4527f6e6766964f2afd0b8ea │ │ │ ├── 0f826e4eb46bdf57a63fad937511623b622da26d │ │ │ └── 0fcaf7869310c11f91b60554e2ed9fecf1412cf5 │ │ ├── 1 │ │ ├── 2 │ │ │ └── 12f548fe0be5185bfe9c5dd51ea08907191e544b │ │ ├── 4 │ │ │ └── 14ad53cec5ee6fd1c3129a95a116786345357d3d │ │ └── 9 │ │ │ └── 19ecfab6d977a9fb765295c72df79072c4e6d6c2 │ │ ├── 2 │ │ ├── 0 │ │ │ └── 208bdeecafbcb9bbda258c0fbf814c2ad46fac34 │ │ ├── 2 │ │ │ └── 223c66c70cf73088ec078c211a1c5be8d9378184 │ │ ├── 4 │ │ │ └── 248d2bd9159df7943d8ee2944e0935718a10d4d7 │ │ ├── 6 │ │ │ └── 260ca0f519fb767c556d2e9ed59ec675f8eaad33 │ │ └── f │ │ │ ├── 2f275811734f5f1bd821c322783821979e7a8c34 │ │ │ └── 2fe7f218c8d47bee56d71bed3b5f461be878d1d6 │ │ ├── 3 │ │ ├── 3 │ │ │ └── 336d67865e90e40d7b427b812380caf35b87cafb │ │ ├── a │ │ │ └── 3ad772359ae059fad2a55a148f92431e2fdf782c │ │ └── c │ │ │ └── 3c84dcdc6bbe3d7817c49dcdc327b926fea1808a │ │ ├── 4 │ │ ├── 1 │ │ │ └── 4123588cdef112aa874bf52a300e9ed01db3ccd2 │ │ ├── 2 │ │ │ └── 42e89cd2213b9d5dfae4f63522702c623170d792 │ │ ├── 5 │ │ │ └── 45dc24aca0fefc4bf49323e1f34823e9e9d09d5f │ │ └── e │ │ │ └── 4e250f20823a23ba702aa02cb5f031865e6069ca │ │ ├── 5 │ │ ├── 2 │ │ │ └── 5236ca737319598acab4bcc71e257213b05b8dcb │ │ ├── 8 │ │ │ └── 583d98cb89ece0bc02e2430af46f338c74427084 │ │ ├── 9 │ │ │ ├── 590d1367ec41ce84fc635b13a3082602613e7969 │ │ │ └── 593009fbea34fd0714d5d28eef259dc5a1478bcd │ │ ├── a │ │ │ └── 5ae663b583904677397b1fcfc9ae61f0d17a5704 │ │ ├── b │ │ │ ├── 5b548617b9c23ceb76c3e73b549fb3f72978c46b │ │ │ └── 5be3fce0472ebedbb2d8cf0efad2036505d19e80 │ │ ├── c │ │ │ └── 5caab04ff553d1a7e3d5a466d1c37d7a74ddf08e │ │ └── f │ │ │ └── 5f3d0e6bf9ebd5e891e4e1ce2ea443eca84ff79a │ │ ├── 6 │ │ ├── 0 │ │ │ └── 60ef8500715763b81a3f5f894f75c359029fff5b │ │ ├── 9 │ │ │ └── 698bd84662a95771ee677122b7cb44b2637b89ed │ │ ├── a │ │ │ └── 6af2cfde9b2cdd9b69d4837ce73725fd3de8e8a4 │ │ └── d │ │ │ └── 6d3a8cd532ece5b4ddbd4b3b6a678ba686d300bc │ │ ├── 7 │ │ ├── 0 │ │ │ └── 7030d0b2f71b999ff89a343de08c414af32fc93a │ │ ├── 2 │ │ │ └── 72521f372286ea1c971dee0ca5054564542edf28 │ │ ├── 4 │ │ │ └── 74f60d718080ae78793a9d96fbb1704cd0b2cfbb │ │ ├── 5 │ │ │ └── 75443737da7a7eafa83c734f8fcdc61478138f70 │ │ └── 6 │ │ │ └── 7670825985bc985dbe54c81fe0a38fa162e383ed │ │ ├── 8 │ │ ├── 2 │ │ │ └── 82a572ffabc0bd01798a5f51cb81e5a65357eede │ │ ├── 3 │ │ │ └── 83a32f2b8e442e931ebd6bb40c35f9951b246bbf │ │ ├── 8 │ │ │ └── 88ca171d89ea06fdb835987a89b6fa764e120efb │ │ ├── 9 │ │ │ └── 893f45b8b3628f4c675a49f7e56765961dc7f725 │ │ ├── b │ │ │ └── 8b721e15887ccca844bdc191659604f35ea7333e │ │ ├── c │ │ │ └── 8c2975b9d506dc38940ee3b79036e3a822f6b597 │ │ ├── e │ │ │ └── 8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d │ │ └── f │ │ │ └── 8fe0b561aa0163ca4612c341d8ea044b40c575d5 │ │ ├── 9 │ │ ├── 4 │ │ │ └── 945798f116a797c89631f64e8c70213b6eabcfae │ │ ├── c │ │ │ ├── 9c64db4638083fc7373f410222e023536d88939d │ │ │ └── 9c740dd30872ad21f1c4e40e6471bc3b9bf74aca │ │ └── f │ │ │ ├── 9f2246670d6702f4a709136647b5c3327531adc5 │ │ │ └── 9fb983f6bfac8bb7e6cc7f49339b25faba8552d7 │ │ ├── a │ │ ├── 2 │ │ │ └── a23b4928cbf5cea665ab549f6951127275a0a77b │ │ ├── 5 │ │ │ └── a5cc2925ca8258af241be7e5b0381edf30266302 │ │ └── b │ │ │ └── ab78ecad692748fc70bf0efd8ff1ab7dcac6f260 │ │ ├── b │ │ ├── c │ │ │ └── bc3fce27f7f083ef4c110505e36f5f169d86f4fb │ │ ├── d │ │ │ └── bd40c144576149b3896d7ad77699e28436e72948 │ │ └── e │ │ │ ├── be7ae2abd27972f72bbf84392d9587967a44e5ae │ │ │ └── bee16f814cfb14bb585a481235930c5827ab1a0a │ │ ├── c │ │ ├── 0 │ │ │ └── c0e9e59a467e1546695bfa22746b302540797a4e │ │ └── 5 │ │ │ ├── c5d38a62d1faae90a2acaa34b79a7ef365c917e4 │ │ │ └── c5f2a4e62196efeb770030f7089b0ddf99658084 │ │ ├── d │ │ ├── 8 │ │ │ └── d86047b54f4c1d937e1d9145a42a25c73126cd9f │ │ ├── 9 │ │ │ └── d9eab33dbd0ecfac13039ab2f5b529c0835c5e1a │ │ ├── a │ │ │ ├── da03a7b4dbbfc52696734eed578fca5c7d1f80f1 │ │ │ └── dac799070c2d0c2fa24462b02c1f2dcc3fb3a1e9 │ │ └── b │ │ │ └── db2ce99e439e22e69017d7e549fe70c7aafde7bd │ │ ├── e │ │ ├── 0 │ │ │ └── e027c64a51626be3da9a5da3a0c443b80c18d74e │ │ ├── 3 │ │ │ ├── e35090b773ac8045f534f6515c3934d79dc6c6cb │ │ │ └── e37694f5ac87a4890188f706cd969b91d26ebd3e │ │ ├── 7 │ │ │ ├── e73a4bbbf067e85a823bc09593c249332c978db0 │ │ │ └── e7f2bdc0d4b1ede0918ab7c3f1f9abf045a90f90 │ │ └── c │ │ │ └── ec4b0d72610553a3686c6fe3c1f4431041e7826e │ │ ├── f │ │ ├── 2 │ │ │ └── f26076c620ad2d0e4a8f4e1d85773fa1acdc4c8e │ │ ├── 4 │ │ │ └── f43ecdf8d666ee908aacce037b4cd72159e4741b │ │ ├── 9 │ │ │ └── f900edc44cb929c2267a16100a32851f6d5b477d │ │ └── a │ │ │ ├── fa20ac7d551abb86658fdb330893c0e44b15f174 │ │ │ └── fa288d1472d29beccb489a676f68739ad365fc47 │ │ └── index.pb ├── speakgpt-web.iml └── vcs.xml ├── Chrome Extension ├── index.html ├── manifest.json ├── menu.js ├── popup.js └── speakgpt.png ├── README.md ├── babel.config.json ├── desktop.ini ├── package-lock.json ├── package.json ├── public ├── SPEAKGPT_BANNER_ANDROID.png ├── SPEAKGPT_BANNER_WEB.png ├── ai_block.svg ├── backdrop.png ├── backdrop2.jpg ├── cancel.svg ├── explore │ ├── claude.webp │ ├── gemini.webp │ ├── gemma.webp │ ├── gpt.png │ ├── meta.png │ ├── mistral.png │ └── perplexity.png ├── favicon.ico ├── index.html ├── logo192.png ├── logo192.webp ├── logo512.png ├── logo64.png ├── manifest.json ├── preload.css ├── prism.css ├── qr.png ├── robots.txt ├── scr1.png ├── scr2.png ├── scr3.png ├── scr4.png ├── scr5.png ├── scr6.png └── sitemap.xml ├── src ├── App.jsx ├── BaseRoutes.jsx ├── Theme.jsx ├── components │ ├── AIPhotoEditor.jsx │ ├── ApiEndpointEditDialog.jsx │ ├── ApiEndpointSelector.jsx │ ├── ApiHostChangeDialog.jsx │ ├── ApiKeyChangeDialog.jsx │ ├── ApiKeyDialog.jsx │ ├── Assistant.jsx │ ├── AssistantDeepLink.jsx │ ├── AssistantEmbedded.jsx │ ├── AssistantMobile.jsx │ ├── Changelog.jsx │ ├── Chat.jsx │ ├── ChatItem.jsx │ ├── ChatList.jsx │ ├── ChatSettings.jsx │ ├── Chats.jsx │ ├── ConfirmChatClear.jsx │ ├── CurrentChat.jsx │ ├── DeleteChatDialog.jsx │ ├── DocPage.jsx │ ├── MaterialDialog.jsx │ ├── MaterialWindow.jsx │ ├── Message.jsx │ ├── NewChatDialog.jsx │ ├── NotFound.jsx │ ├── Placeholder.jsx │ ├── PlaceholderLoading.jsx │ ├── Playground.jsx │ ├── ProTip.jsx │ ├── PromptCard.jsx │ ├── PromptStore.jsx │ ├── PromptView.jsx │ ├── SelectModelDialog.jsx │ ├── SelectResolutionDialog.jsx │ ├── SystemMessageEditDialog.jsx │ ├── Tile.jsx │ ├── Tips.jsx │ └── WelcomePage.jsx ├── documentation │ ├── ApiSafety.jsx │ ├── Contact.jsx │ ├── Debug.jsx │ ├── DeleteData.jsx │ ├── FAQ.jsx │ ├── Optimize.jsx │ ├── Privacy.jsx │ ├── PrivacyLite.jsx │ └── Terms.jsx ├── gpt.svg ├── index.css ├── index.js ├── logo.svg ├── prism.css ├── prism.js ├── theme │ ├── AppWidgetTheme.jsx │ ├── BaseTheme.css │ ├── Theme.jsx │ └── colors.css ├── util │ ├── MarkDownCode.js │ ├── ModelTypeConverter.js │ └── Settings.js └── widgets │ ├── MaterialButton.jsx │ ├── MaterialEditText.jsx │ ├── NavigationBar.jsx │ ├── NavigationBarItem.jsx │ └── NavigationBarMobile.jsx └── windows_folder_icon.ico /.env: -------------------------------------------------------------------------------- 1 | GENERATE_SOURCEMAP=false -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | # github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | # patreon: # Replace with a single Patreon username 5 | # open_collective: # Replace with a single Open Collective username 6 | # ko_fi: # Replace with a single Ko-fi username 7 | # tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | # community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | # liberapay: # Replace with a single Liberapay username 10 | # issuehunt: # Replace with a single IssueHunt username 11 | # lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 12 | # polar: # Replace with a single Polar username 13 | buy_me_a_coffee: andrax_dev 14 | ko_fi: andrax_dev 15 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | /src/LicenseKey.js 25 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Editor-based HTTP Client requests 5 | /httpRequests/ 6 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /.idea/jsLibraryMappings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/material_theme_project_new.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 17 | 18 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/0/3/03b401ed48960060633d9a762924fd031e5ab516: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/0/3/03b401ed48960060633d9a762924fd031e5ab516 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/0/9/0929f195c0d514eb8b39c324b4cc02776c4e229e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/0/9/0929f195c0d514eb8b39c324b4cc02776c4e229e -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/0/b/0b6f01ef508407e7e678df03a61ae4ed7ad8c9e8: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/0/b/0b6f01ef508407e7e678df03a61ae4ed7ad8c9e8 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/0/f/0f56df1b46c8f4bc4527f6e6766964f2afd0b8ea: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/0/f/0f56df1b46c8f4bc4527f6e6766964f2afd0b8ea -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/0/f/0f826e4eb46bdf57a63fad937511623b622da26d: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/0/f/0f826e4eb46bdf57a63fad937511623b622da26d -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/0/f/0fcaf7869310c11f91b60554e2ed9fecf1412cf5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/0/f/0fcaf7869310c11f91b60554e2ed9fecf1412cf5 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/1/2/12f548fe0be5185bfe9c5dd51ea08907191e544b: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/1/2/12f548fe0be5185bfe9c5dd51ea08907191e544b -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/1/4/14ad53cec5ee6fd1c3129a95a116786345357d3d: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/1/4/14ad53cec5ee6fd1c3129a95a116786345357d3d -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/1/9/19ecfab6d977a9fb765295c72df79072c4e6d6c2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/1/9/19ecfab6d977a9fb765295c72df79072c4e6d6c2 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/2/0/208bdeecafbcb9bbda258c0fbf814c2ad46fac34: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/2/0/208bdeecafbcb9bbda258c0fbf814c2ad46fac34 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/2/2/223c66c70cf73088ec078c211a1c5be8d9378184: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/2/2/223c66c70cf73088ec078c211a1c5be8d9378184 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/2/4/248d2bd9159df7943d8ee2944e0935718a10d4d7: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/2/4/248d2bd9159df7943d8ee2944e0935718a10d4d7 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/2/6/260ca0f519fb767c556d2e9ed59ec675f8eaad33: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/2/6/260ca0f519fb767c556d2e9ed59ec675f8eaad33 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/2/f/2f275811734f5f1bd821c322783821979e7a8c34: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/2/f/2f275811734f5f1bd821c322783821979e7a8c34 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/2/f/2fe7f218c8d47bee56d71bed3b5f461be878d1d6: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/2/f/2fe7f218c8d47bee56d71bed3b5f461be878d1d6 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/3/3/336d67865e90e40d7b427b812380caf35b87cafb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/3/3/336d67865e90e40d7b427b812380caf35b87cafb -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/3/a/3ad772359ae059fad2a55a148f92431e2fdf782c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/3/a/3ad772359ae059fad2a55a148f92431e2fdf782c -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/3/c/3c84dcdc6bbe3d7817c49dcdc327b926fea1808a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/3/c/3c84dcdc6bbe3d7817c49dcdc327b926fea1808a -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/4/1/4123588cdef112aa874bf52a300e9ed01db3ccd2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/4/1/4123588cdef112aa874bf52a300e9ed01db3ccd2 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/4/2/42e89cd2213b9d5dfae4f63522702c623170d792: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/4/2/42e89cd2213b9d5dfae4f63522702c623170d792 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/4/5/45dc24aca0fefc4bf49323e1f34823e9e9d09d5f: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/4/5/45dc24aca0fefc4bf49323e1f34823e9e9d09d5f -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/4/e/4e250f20823a23ba702aa02cb5f031865e6069ca: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/4/e/4e250f20823a23ba702aa02cb5f031865e6069ca -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/5/2/5236ca737319598acab4bcc71e257213b05b8dcb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/5/2/5236ca737319598acab4bcc71e257213b05b8dcb -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/5/8/583d98cb89ece0bc02e2430af46f338c74427084: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/5/8/583d98cb89ece0bc02e2430af46f338c74427084 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/5/9/590d1367ec41ce84fc635b13a3082602613e7969: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/5/9/590d1367ec41ce84fc635b13a3082602613e7969 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/5/9/593009fbea34fd0714d5d28eef259dc5a1478bcd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/5/9/593009fbea34fd0714d5d28eef259dc5a1478bcd -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/5/a/5ae663b583904677397b1fcfc9ae61f0d17a5704: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/5/a/5ae663b583904677397b1fcfc9ae61f0d17a5704 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/5/b/5b548617b9c23ceb76c3e73b549fb3f72978c46b: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/5/b/5b548617b9c23ceb76c3e73b549fb3f72978c46b -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/5/b/5be3fce0472ebedbb2d8cf0efad2036505d19e80: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/5/b/5be3fce0472ebedbb2d8cf0efad2036505d19e80 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/5/c/5caab04ff553d1a7e3d5a466d1c37d7a74ddf08e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/5/c/5caab04ff553d1a7e3d5a466d1c37d7a74ddf08e -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/5/f/5f3d0e6bf9ebd5e891e4e1ce2ea443eca84ff79a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/5/f/5f3d0e6bf9ebd5e891e4e1ce2ea443eca84ff79a -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/6/0/60ef8500715763b81a3f5f894f75c359029fff5b: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/6/0/60ef8500715763b81a3f5f894f75c359029fff5b -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/6/9/698bd84662a95771ee677122b7cb44b2637b89ed: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/6/9/698bd84662a95771ee677122b7cb44b2637b89ed -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/6/a/6af2cfde9b2cdd9b69d4837ce73725fd3de8e8a4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/6/a/6af2cfde9b2cdd9b69d4837ce73725fd3de8e8a4 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/6/d/6d3a8cd532ece5b4ddbd4b3b6a678ba686d300bc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/6/d/6d3a8cd532ece5b4ddbd4b3b6a678ba686d300bc -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/7/0/7030d0b2f71b999ff89a343de08c414af32fc93a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/7/0/7030d0b2f71b999ff89a343de08c414af32fc93a -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/7/2/72521f372286ea1c971dee0ca5054564542edf28: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/7/2/72521f372286ea1c971dee0ca5054564542edf28 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/7/4/74f60d718080ae78793a9d96fbb1704cd0b2cfbb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/7/4/74f60d718080ae78793a9d96fbb1704cd0b2cfbb -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/7/5/75443737da7a7eafa83c734f8fcdc61478138f70: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/7/5/75443737da7a7eafa83c734f8fcdc61478138f70 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/7/6/7670825985bc985dbe54c81fe0a38fa162e383ed: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/7/6/7670825985bc985dbe54c81fe0a38fa162e383ed -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/8/2/82a572ffabc0bd01798a5f51cb81e5a65357eede: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/8/2/82a572ffabc0bd01798a5f51cb81e5a65357eede -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/8/3/83a32f2b8e442e931ebd6bb40c35f9951b246bbf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/8/3/83a32f2b8e442e931ebd6bb40c35f9951b246bbf -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/8/8/88ca171d89ea06fdb835987a89b6fa764e120efb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/8/8/88ca171d89ea06fdb835987a89b6fa764e120efb -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/8/9/893f45b8b3628f4c675a49f7e56765961dc7f725: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/8/9/893f45b8b3628f4c675a49f7e56765961dc7f725 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/8/b/8b721e15887ccca844bdc191659604f35ea7333e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/8/b/8b721e15887ccca844bdc191659604f35ea7333e -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/8/c/8c2975b9d506dc38940ee3b79036e3a822f6b597: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/8/c/8c2975b9d506dc38940ee3b79036e3a822f6b597 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/8/f/8fe0b561aa0163ca4612c341d8ea044b40c575d5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/8/f/8fe0b561aa0163ca4612c341d8ea044b40c575d5 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/9/4/945798f116a797c89631f64e8c70213b6eabcfae: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/9/4/945798f116a797c89631f64e8c70213b6eabcfae -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/9/c/9c64db4638083fc7373f410222e023536d88939d: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/9/c/9c64db4638083fc7373f410222e023536d88939d -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/9/c/9c740dd30872ad21f1c4e40e6471bc3b9bf74aca: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/9/c/9c740dd30872ad21f1c4e40e6471bc3b9bf74aca -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/9/f/9f2246670d6702f4a709136647b5c3327531adc5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/9/f/9f2246670d6702f4a709136647b5c3327531adc5 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/9/f/9fb983f6bfac8bb7e6cc7f49339b25faba8552d7: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/9/f/9fb983f6bfac8bb7e6cc7f49339b25faba8552d7 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/a/2/a23b4928cbf5cea665ab549f6951127275a0a77b: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/a/2/a23b4928cbf5cea665ab549f6951127275a0a77b -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/a/5/a5cc2925ca8258af241be7e5b0381edf30266302: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/a/5/a5cc2925ca8258af241be7e5b0381edf30266302 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/a/b/ab78ecad692748fc70bf0efd8ff1ab7dcac6f260: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/a/b/ab78ecad692748fc70bf0efd8ff1ab7dcac6f260 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/b/c/bc3fce27f7f083ef4c110505e36f5f169d86f4fb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/b/c/bc3fce27f7f083ef4c110505e36f5f169d86f4fb -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/b/d/bd40c144576149b3896d7ad77699e28436e72948: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/b/d/bd40c144576149b3896d7ad77699e28436e72948 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/b/e/be7ae2abd27972f72bbf84392d9587967a44e5ae: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/b/e/be7ae2abd27972f72bbf84392d9587967a44e5ae -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/b/e/bee16f814cfb14bb585a481235930c5827ab1a0a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/b/e/bee16f814cfb14bb585a481235930c5827ab1a0a -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/c/0/c0e9e59a467e1546695bfa22746b302540797a4e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/c/0/c0e9e59a467e1546695bfa22746b302540797a4e -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/c/5/c5d38a62d1faae90a2acaa34b79a7ef365c917e4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/c/5/c5d38a62d1faae90a2acaa34b79a7ef365c917e4 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/c/5/c5f2a4e62196efeb770030f7089b0ddf99658084: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/c/5/c5f2a4e62196efeb770030f7089b0ddf99658084 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/d/8/d86047b54f4c1d937e1d9145a42a25c73126cd9f: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/d/8/d86047b54f4c1d937e1d9145a42a25c73126cd9f -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/d/9/d9eab33dbd0ecfac13039ab2f5b529c0835c5e1a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/d/9/d9eab33dbd0ecfac13039ab2f5b529c0835c5e1a -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/d/a/da03a7b4dbbfc52696734eed578fca5c7d1f80f1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/d/a/da03a7b4dbbfc52696734eed578fca5c7d1f80f1 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/d/a/dac799070c2d0c2fa24462b02c1f2dcc3fb3a1e9: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/d/a/dac799070c2d0c2fa24462b02c1f2dcc3fb3a1e9 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/d/b/db2ce99e439e22e69017d7e549fe70c7aafde7bd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/d/b/db2ce99e439e22e69017d7e549fe70c7aafde7bd -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/e/0/e027c64a51626be3da9a5da3a0c443b80c18d74e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/e/0/e027c64a51626be3da9a5da3a0c443b80c18d74e -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/e/3/e35090b773ac8045f534f6515c3934d79dc6c6cb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/e/3/e35090b773ac8045f534f6515c3934d79dc6c6cb -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/e/3/e37694f5ac87a4890188f706cd969b91d26ebd3e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/e/3/e37694f5ac87a4890188f706cd969b91d26ebd3e -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/e/7/e73a4bbbf067e85a823bc09593c249332c978db0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/e/7/e73a4bbbf067e85a823bc09593c249332c978db0 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/e/7/e7f2bdc0d4b1ede0918ab7c3f1f9abf045a90f90: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/e/7/e7f2bdc0d4b1ede0918ab7c3f1f9abf045a90f90 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/e/c/ec4b0d72610553a3686c6fe3c1f4431041e7826e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/e/c/ec4b0d72610553a3686c6fe3c1f4431041e7826e -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/f/2/f26076c620ad2d0e4a8f4e1d85773fa1acdc4c8e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/f/2/f26076c620ad2d0e4a8f4e1d85773fa1acdc4c8e -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/f/4/f43ecdf8d666ee908aacce037b4cd72159e4741b: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/f/4/f43ecdf8d666ee908aacce037b4cd72159e4741b -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/f/9/f900edc44cb929c2267a16100a32851f6d5b477d: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/f/9/f900edc44cb929c2267a16100a32851f6d5b477d -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/f/a/fa20ac7d551abb86658fdb330893c0e44b15f174: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/f/a/fa20ac7d551abb86658fdb330893c0e44b15f174 -------------------------------------------------------------------------------- /.idea/sonarlint/issuestore/f/a/fa288d1472d29beccb489a676f68739ad365fc47: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/issuestore/f/a/fa288d1472d29beccb489a676f68739ad365fc47 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/0/3/03b401ed48960060633d9a762924fd031e5ab516: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/0/3/03b401ed48960060633d9a762924fd031e5ab516 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/0/9/0929f195c0d514eb8b39c324b4cc02776c4e229e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/0/9/0929f195c0d514eb8b39c324b4cc02776c4e229e -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/0/b/0b6f01ef508407e7e678df03a61ae4ed7ad8c9e8: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/0/b/0b6f01ef508407e7e678df03a61ae4ed7ad8c9e8 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/0/f/0f56df1b46c8f4bc4527f6e6766964f2afd0b8ea: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/0/f/0f56df1b46c8f4bc4527f6e6766964f2afd0b8ea -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/0/f/0f826e4eb46bdf57a63fad937511623b622da26d: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/0/f/0f826e4eb46bdf57a63fad937511623b622da26d -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/0/f/0fcaf7869310c11f91b60554e2ed9fecf1412cf5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/0/f/0fcaf7869310c11f91b60554e2ed9fecf1412cf5 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/1/2/12f548fe0be5185bfe9c5dd51ea08907191e544b: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/1/2/12f548fe0be5185bfe9c5dd51ea08907191e544b -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/1/4/14ad53cec5ee6fd1c3129a95a116786345357d3d: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/1/4/14ad53cec5ee6fd1c3129a95a116786345357d3d -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/1/9/19ecfab6d977a9fb765295c72df79072c4e6d6c2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/1/9/19ecfab6d977a9fb765295c72df79072c4e6d6c2 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/2/0/208bdeecafbcb9bbda258c0fbf814c2ad46fac34: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/2/0/208bdeecafbcb9bbda258c0fbf814c2ad46fac34 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/2/2/223c66c70cf73088ec078c211a1c5be8d9378184: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/2/2/223c66c70cf73088ec078c211a1c5be8d9378184 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/2/4/248d2bd9159df7943d8ee2944e0935718a10d4d7: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/2/4/248d2bd9159df7943d8ee2944e0935718a10d4d7 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/2/6/260ca0f519fb767c556d2e9ed59ec675f8eaad33: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/2/6/260ca0f519fb767c556d2e9ed59ec675f8eaad33 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/2/f/2f275811734f5f1bd821c322783821979e7a8c34: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/2/f/2f275811734f5f1bd821c322783821979e7a8c34 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/2/f/2fe7f218c8d47bee56d71bed3b5f461be878d1d6: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/2/f/2fe7f218c8d47bee56d71bed3b5f461be878d1d6 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/3/3/336d67865e90e40d7b427b812380caf35b87cafb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/3/3/336d67865e90e40d7b427b812380caf35b87cafb -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/3/a/3ad772359ae059fad2a55a148f92431e2fdf782c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/3/a/3ad772359ae059fad2a55a148f92431e2fdf782c -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/3/c/3c84dcdc6bbe3d7817c49dcdc327b926fea1808a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/3/c/3c84dcdc6bbe3d7817c49dcdc327b926fea1808a -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/4/1/4123588cdef112aa874bf52a300e9ed01db3ccd2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/4/1/4123588cdef112aa874bf52a300e9ed01db3ccd2 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/4/2/42e89cd2213b9d5dfae4f63522702c623170d792: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/4/2/42e89cd2213b9d5dfae4f63522702c623170d792 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/4/5/45dc24aca0fefc4bf49323e1f34823e9e9d09d5f: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/4/5/45dc24aca0fefc4bf49323e1f34823e9e9d09d5f -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/4/e/4e250f20823a23ba702aa02cb5f031865e6069ca: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/4/e/4e250f20823a23ba702aa02cb5f031865e6069ca -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/5/2/5236ca737319598acab4bcc71e257213b05b8dcb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/5/2/5236ca737319598acab4bcc71e257213b05b8dcb -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/5/8/583d98cb89ece0bc02e2430af46f338c74427084: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/5/8/583d98cb89ece0bc02e2430af46f338c74427084 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/5/9/590d1367ec41ce84fc635b13a3082602613e7969: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/5/9/590d1367ec41ce84fc635b13a3082602613e7969 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/5/9/593009fbea34fd0714d5d28eef259dc5a1478bcd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/5/9/593009fbea34fd0714d5d28eef259dc5a1478bcd -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/5/a/5ae663b583904677397b1fcfc9ae61f0d17a5704: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/5/a/5ae663b583904677397b1fcfc9ae61f0d17a5704 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/5/b/5b548617b9c23ceb76c3e73b549fb3f72978c46b: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/5/b/5b548617b9c23ceb76c3e73b549fb3f72978c46b -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/5/b/5be3fce0472ebedbb2d8cf0efad2036505d19e80: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/5/b/5be3fce0472ebedbb2d8cf0efad2036505d19e80 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/5/c/5caab04ff553d1a7e3d5a466d1c37d7a74ddf08e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/5/c/5caab04ff553d1a7e3d5a466d1c37d7a74ddf08e -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/5/f/5f3d0e6bf9ebd5e891e4e1ce2ea443eca84ff79a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/5/f/5f3d0e6bf9ebd5e891e4e1ce2ea443eca84ff79a -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/6/0/60ef8500715763b81a3f5f894f75c359029fff5b: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/6/0/60ef8500715763b81a3f5f894f75c359029fff5b -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/6/9/698bd84662a95771ee677122b7cb44b2637b89ed: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/6/9/698bd84662a95771ee677122b7cb44b2637b89ed -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/6/a/6af2cfde9b2cdd9b69d4837ce73725fd3de8e8a4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/6/a/6af2cfde9b2cdd9b69d4837ce73725fd3de8e8a4 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/6/d/6d3a8cd532ece5b4ddbd4b3b6a678ba686d300bc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/6/d/6d3a8cd532ece5b4ddbd4b3b6a678ba686d300bc -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/7/0/7030d0b2f71b999ff89a343de08c414af32fc93a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/7/0/7030d0b2f71b999ff89a343de08c414af32fc93a -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/7/2/72521f372286ea1c971dee0ca5054564542edf28: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/7/2/72521f372286ea1c971dee0ca5054564542edf28 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/7/4/74f60d718080ae78793a9d96fbb1704cd0b2cfbb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/7/4/74f60d718080ae78793a9d96fbb1704cd0b2cfbb -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/7/5/75443737da7a7eafa83c734f8fcdc61478138f70: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/7/5/75443737da7a7eafa83c734f8fcdc61478138f70 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/7/6/7670825985bc985dbe54c81fe0a38fa162e383ed: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/7/6/7670825985bc985dbe54c81fe0a38fa162e383ed -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/8/2/82a572ffabc0bd01798a5f51cb81e5a65357eede: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/8/2/82a572ffabc0bd01798a5f51cb81e5a65357eede -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/8/3/83a32f2b8e442e931ebd6bb40c35f9951b246bbf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/8/3/83a32f2b8e442e931ebd6bb40c35f9951b246bbf -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/8/8/88ca171d89ea06fdb835987a89b6fa764e120efb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/8/8/88ca171d89ea06fdb835987a89b6fa764e120efb -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/8/9/893f45b8b3628f4c675a49f7e56765961dc7f725: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/8/9/893f45b8b3628f4c675a49f7e56765961dc7f725 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/8/b/8b721e15887ccca844bdc191659604f35ea7333e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/8/b/8b721e15887ccca844bdc191659604f35ea7333e -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/8/c/8c2975b9d506dc38940ee3b79036e3a822f6b597: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/8/c/8c2975b9d506dc38940ee3b79036e3a822f6b597 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/8/f/8fe0b561aa0163ca4612c341d8ea044b40c575d5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/8/f/8fe0b561aa0163ca4612c341d8ea044b40c575d5 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/9/4/945798f116a797c89631f64e8c70213b6eabcfae: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/9/4/945798f116a797c89631f64e8c70213b6eabcfae -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/9/c/9c64db4638083fc7373f410222e023536d88939d: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/9/c/9c64db4638083fc7373f410222e023536d88939d -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/9/c/9c740dd30872ad21f1c4e40e6471bc3b9bf74aca: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/9/c/9c740dd30872ad21f1c4e40e6471bc3b9bf74aca -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/9/f/9f2246670d6702f4a709136647b5c3327531adc5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/9/f/9f2246670d6702f4a709136647b5c3327531adc5 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/9/f/9fb983f6bfac8bb7e6cc7f49339b25faba8552d7: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/9/f/9fb983f6bfac8bb7e6cc7f49339b25faba8552d7 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/a/2/a23b4928cbf5cea665ab549f6951127275a0a77b: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/a/2/a23b4928cbf5cea665ab549f6951127275a0a77b -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/a/5/a5cc2925ca8258af241be7e5b0381edf30266302: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/a/5/a5cc2925ca8258af241be7e5b0381edf30266302 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/a/b/ab78ecad692748fc70bf0efd8ff1ab7dcac6f260: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/a/b/ab78ecad692748fc70bf0efd8ff1ab7dcac6f260 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/b/c/bc3fce27f7f083ef4c110505e36f5f169d86f4fb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/b/c/bc3fce27f7f083ef4c110505e36f5f169d86f4fb -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/b/d/bd40c144576149b3896d7ad77699e28436e72948: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/b/d/bd40c144576149b3896d7ad77699e28436e72948 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/b/e/be7ae2abd27972f72bbf84392d9587967a44e5ae: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/b/e/be7ae2abd27972f72bbf84392d9587967a44e5ae -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/b/e/bee16f814cfb14bb585a481235930c5827ab1a0a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/b/e/bee16f814cfb14bb585a481235930c5827ab1a0a -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/c/0/c0e9e59a467e1546695bfa22746b302540797a4e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/c/0/c0e9e59a467e1546695bfa22746b302540797a4e -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/c/5/c5d38a62d1faae90a2acaa34b79a7ef365c917e4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/c/5/c5d38a62d1faae90a2acaa34b79a7ef365c917e4 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/c/5/c5f2a4e62196efeb770030f7089b0ddf99658084: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/c/5/c5f2a4e62196efeb770030f7089b0ddf99658084 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/d/8/d86047b54f4c1d937e1d9145a42a25c73126cd9f: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/d/8/d86047b54f4c1d937e1d9145a42a25c73126cd9f -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/d/9/d9eab33dbd0ecfac13039ab2f5b529c0835c5e1a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/d/9/d9eab33dbd0ecfac13039ab2f5b529c0835c5e1a -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/d/a/da03a7b4dbbfc52696734eed578fca5c7d1f80f1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/d/a/da03a7b4dbbfc52696734eed578fca5c7d1f80f1 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/d/a/dac799070c2d0c2fa24462b02c1f2dcc3fb3a1e9: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/d/a/dac799070c2d0c2fa24462b02c1f2dcc3fb3a1e9 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/d/b/db2ce99e439e22e69017d7e549fe70c7aafde7bd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/d/b/db2ce99e439e22e69017d7e549fe70c7aafde7bd -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/e/0/e027c64a51626be3da9a5da3a0c443b80c18d74e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/e/0/e027c64a51626be3da9a5da3a0c443b80c18d74e -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/e/3/e35090b773ac8045f534f6515c3934d79dc6c6cb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/e/3/e35090b773ac8045f534f6515c3934d79dc6c6cb -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/e/3/e37694f5ac87a4890188f706cd969b91d26ebd3e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/e/3/e37694f5ac87a4890188f706cd969b91d26ebd3e -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/e/7/e73a4bbbf067e85a823bc09593c249332c978db0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/e/7/e73a4bbbf067e85a823bc09593c249332c978db0 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/e/7/e7f2bdc0d4b1ede0918ab7c3f1f9abf045a90f90: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/e/7/e7f2bdc0d4b1ede0918ab7c3f1f9abf045a90f90 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/e/c/ec4b0d72610553a3686c6fe3c1f4431041e7826e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/e/c/ec4b0d72610553a3686c6fe3c1f4431041e7826e -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/f/2/f26076c620ad2d0e4a8f4e1d85773fa1acdc4c8e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/f/2/f26076c620ad2d0e4a8f4e1d85773fa1acdc4c8e -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/f/4/f43ecdf8d666ee908aacce037b4cd72159e4741b: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/f/4/f43ecdf8d666ee908aacce037b4cd72159e4741b -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/f/9/f900edc44cb929c2267a16100a32851f6d5b477d: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/f/9/f900edc44cb929c2267a16100a32851f6d5b477d -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/f/a/fa20ac7d551abb86658fdb330893c0e44b15f174: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/f/a/fa20ac7d551abb86658fdb330893c0e44b15f174 -------------------------------------------------------------------------------- /.idea/sonarlint/securityhotspotstore/f/a/fa288d1472d29beccb489a676f68739ad365fc47: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/.idea/sonarlint/securityhotspotstore/f/a/fa288d1472d29beccb489a676f68739ad365fc47 -------------------------------------------------------------------------------- /.idea/speakgpt-web.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Chrome Extension/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Chrome Extension 6 | 7 | 30 | 31 | 32 |
33 | 34 |
35 | 36 | -------------------------------------------------------------------------------- /Chrome Extension/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SpeakGPT", 3 | "description": "SpeakGPT extension allow you to switch between Chrome and SpeakGPT with a single click.", 4 | "version": "1.0", 5 | "manifest_version": 3, 6 | "action": { 7 | "default_popup": "index.html", 8 | "default_icon": "speakgpt.png" 9 | }, 10 | "permissions": [ 11 | "contextMenus", 12 | "storage", 13 | "nativeMessaging", 14 | "tabs" 15 | ], 16 | "host_permissions": ["https://*.teslasoft.org/"], 17 | "content_security_policy": { 18 | "extension_pages": "script-src 'self'; object-src 'self'; frame-src https://*.teslasoft.org;" 19 | }, 20 | "icons": { 21 | "16": "speakgpt.png", 22 | "48": "speakgpt.png", 23 | "128": "speakgpt.png" 24 | }, 25 | "background": { 26 | "service_worker": "menu.js" 27 | }, 28 | "commands": { 29 | "_execute_action": { 30 | "suggested_key": { 31 | "default": "Ctrl+Shift+L", 32 | "mac": "MacCtrl+Command+L" 33 | } 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /Chrome Extension/menu.js: -------------------------------------------------------------------------------- 1 | // chrome.contextMenus.create( 2 | // { 3 | // title: "SpeakGPT (With params)", 4 | // contexts: ["selection"], 5 | // id: "SpeakGPT", 6 | // } 7 | // ); 8 | // 9 | // chrome.contextMenus.create( 10 | // { 11 | // title: "SpeakGPT (No params)", 12 | // contexts: ["selection"], 13 | // id: "SpeakGPTNoParams", 14 | // } 15 | // ); 16 | // 17 | // chrome.contextMenus.onClicked.addListener((info, tab) => { 18 | // if (info.menuItemId === "SpeakGPT") { 19 | // let selectedText = info.selectionText; 20 | // 21 | // run(selectedText, "1") 22 | // } else if (info.menuItemId === "SpeakGPTNoParams") { 23 | // let selectedText = info.selectionText; 24 | // 25 | // run(selectedText, "0") 26 | // } 27 | // }); 28 | // 29 | // function run(selectedText, paramsEnabled) { 30 | // let port = chrome.runtime.connectNative('org.teslasoft.assistant'); 31 | // 32 | // port.postMessage({ text: 'run_batch', arg1: selectedText, arg2: paramsEnabled }); 33 | // 34 | // port.onMessage.addListener((response) => { 35 | // console.log("Received from Native Messaging Host: " + JSON.stringify(response)); 36 | // }); 37 | // 38 | // port.onDisconnect.addListener(() => { 39 | // console.log("Disconnected from Native Messaging Host"); 40 | // }); 41 | // } -------------------------------------------------------------------------------- /Chrome Extension/popup.js: -------------------------------------------------------------------------------- 1 | // function quickPrompt() { 2 | // let selectedText = document.getElementById("prompt").value; 3 | // 4 | // document.getElementById("prompt").value = ""; 5 | // 6 | // let port = chrome.runtime.connectNative('org.teslasoft.assistant'); 7 | // 8 | // port.postMessage({ text: 'run_batch', arg1: selectedText, arg2: '0' }); 9 | // 10 | // port.onMessage.addListener((response) => { 11 | // console.log("Received from Native Messaging Host: " + JSON.stringify(response)); 12 | // }); 13 | // 14 | // port.onDisconnect.addListener(() => { 15 | // console.log("Disconnected from Native Messaging Host"); 16 | // }); 17 | // } 18 | // 19 | // function launch() { 20 | // let port = chrome.runtime.connectNative('org.teslasoft.assistant'); 21 | // 22 | // port.postMessage({ text: 'launch'}); 23 | // 24 | // port.onMessage.addListener((response) => { 25 | // console.log("Received from Native Messaging Host: " + JSON.stringify(response)); 26 | // }); 27 | // 28 | // port.onDisconnect.addListener(() => { 29 | // console.log("Disconnected from Native Messaging Host"); 30 | // }); 31 | // } 32 | // 33 | // 34 | // document.getElementById("quickPrompt").addEventListener("click", (e) => { 35 | // e.preventDefault(); 36 | // quickPrompt(); 37 | // }); 38 | -------------------------------------------------------------------------------- /Chrome Extension/speakgpt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/Chrome Extension/speakgpt.png -------------------------------------------------------------------------------- /babel.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": [ "@babel/plugin-proposal-logical-assignment-operators" ], 3 | "presets": [ 4 | "@babel/preset-env", 5 | "@babel/preset-react" 6 | ] 7 | } -------------------------------------------------------------------------------- /desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | IconResource=D:\Github\speakgpt-web\windows_folder_icon.ico,0 3 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "speakgpt-web", 3 | "version": "1.7.7", 4 | "private": true, 5 | "dependencies": { 6 | "@babel/plugin-proposal-logical-assignment-operators": "^7.20.7", 7 | "@emotion/react": "^11.11.4", 8 | "@emotion/styled": "^11.11.5", 9 | "@mui/material": "^5.15.15", 10 | "@testing-library/jest-dom": "^5.17.0", 11 | "@testing-library/react": "^13.4.0", 12 | "@testing-library/user-event": "^13.5.0", 13 | "babel-preset-gatsby": "^3.13.1", 14 | "fs": "^0.0.1-security", 15 | "http-proxy-middleware": ">=2.0.9", 16 | "jimp": "^0.22.12", 17 | "js-sha256": "^0.11.0", 18 | "nth-check": ">=2.0.1", 19 | "openai": "^4.33.0", 20 | "postcss": ">=8.4.31", 21 | "prismjs": "1.30.0", 22 | "react": "^18.2.0", 23 | "react-device-detect": "^2.2.3", 24 | "react-dom": "^18.2.0", 25 | "react-lazy-hydration": "^0.1.0", 26 | "react-lazy-load-image-component": "^1.6.0", 27 | "react-markdown": "^9.0.1", 28 | "react-router-dom": "^6.22.3", 29 | "react-scripts": "^5.0.1", 30 | "react-syntax-highlighter": "^15.6.1", 31 | "remark-gfm": "^4.0.0", 32 | "web-vitals": "^2.1.4" 33 | }, 34 | "scripts": { 35 | "start": "react-scripts start", 36 | "build": "react-scripts build", 37 | "test": "react-scripts test", 38 | "eject": "react-scripts eject" 39 | }, 40 | "eslintConfig": { 41 | "extends": [ 42 | "react-app", 43 | "react-app/jest" 44 | ] 45 | }, 46 | "babel": { 47 | "presets": [ 48 | "@babel/react", 49 | "@babel/env" 50 | ], 51 | "plugins": [ 52 | "@babel/proposal-class-properties", 53 | "@babel/plugin-transform-runtime" 54 | ] 55 | }, 56 | "browserslist": { 57 | "production": [ 58 | ">0.2%", 59 | "not dead", 60 | "not op_mini all" 61 | ], 62 | "development": [ 63 | "last 1 chrome version", 64 | "last 1 firefox version", 65 | "last 1 safari version" 66 | ] 67 | }, 68 | "devDependencies": { 69 | "@babel/preset-react": "^7.24.1", 70 | "eslint": "^8.57.0", 71 | "eslint-plugin-regexp": "^2.5.0", 72 | "http-proxy-middleware": ">=2.0.9", 73 | "nth-check": ">=2.0.1", 74 | "postcss": ">=8.4.31" 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /public/SPEAKGPT_BANNER_ANDROID.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/public/SPEAKGPT_BANNER_ANDROID.png -------------------------------------------------------------------------------- /public/SPEAKGPT_BANNER_WEB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/public/SPEAKGPT_BANNER_WEB.png -------------------------------------------------------------------------------- /public/ai_block.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Created with Fabric.js 5.3.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /public/backdrop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/public/backdrop.png -------------------------------------------------------------------------------- /public/backdrop2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/public/backdrop2.jpg -------------------------------------------------------------------------------- /public/cancel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/explore/claude.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/public/explore/claude.webp -------------------------------------------------------------------------------- /public/explore/gemini.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/public/explore/gemini.webp -------------------------------------------------------------------------------- /public/explore/gemma.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/public/explore/gemma.webp -------------------------------------------------------------------------------- /public/explore/gpt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/public/explore/gpt.png -------------------------------------------------------------------------------- /public/explore/meta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/public/explore/meta.png -------------------------------------------------------------------------------- /public/explore/mistral.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/public/explore/mistral.png -------------------------------------------------------------------------------- /public/explore/perplexity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/public/explore/perplexity.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/public/favicon.ico -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | SpeakGPT 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 18 | 19 | 20 | 21 | 22 | 23 | 30 | 31 | 32 | 39 |
40 |
41 | SpeakGPT 42 |

SpeakGPT

43 | 44 |
45 |
46 | 47 | 48 | -------------------------------------------------------------------------------- /public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/public/logo192.png -------------------------------------------------------------------------------- /public/logo192.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/public/logo192.webp -------------------------------------------------------------------------------- /public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/public/logo512.png -------------------------------------------------------------------------------- /public/logo64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/public/logo64.png -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "SpeakGPT", 3 | "name": "SpeakGPT", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#000000" 25 | } 26 | -------------------------------------------------------------------------------- /public/preload.css: -------------------------------------------------------------------------------- 1 | .loader { 2 | padding: 0; 3 | margin: 0; 4 | position: fixed; 5 | width: 100vw; 6 | height: 100vh; 7 | top: 0; 8 | left: 0; 9 | background-color: #060606; 10 | display: flex; 11 | flex-direction: column; 12 | justify-content: center; 13 | align-items: center; 14 | z-index: 2147483647; 15 | transition: opacity 0.3s; 16 | font-family: 'Roboto', sans-serif; 17 | } 18 | 19 | .app-logo-preload { 20 | width: 180px; 21 | height: 180px; 22 | border-radius: 24px; 23 | } 24 | 25 | .app-title-preload { 26 | font-size: 24px; 27 | color: #bbd3ff; 28 | margin-top: 24px; 29 | margin-bottom: 24px; 30 | } 31 | 32 | .app-text { 33 | font-size: 16px; 34 | color: #d6e3ff; 35 | margin-top: 8px; 36 | } 37 | 38 | .pure-material-progress-linear { 39 | -webkit-appearance: none; 40 | -moz-appearance: none; 41 | appearance: none; 42 | border: none; 43 | height: 0.25em; 44 | color: #bbd3ff; 45 | background-color: rgba(169, 199, 255, 0.12); 46 | font-size: 16px; 47 | border-radius: 0.125em; 48 | } 49 | 50 | .pure-material-progress-linear::-webkit-progress-bar { 51 | background-color: transparent; 52 | } 53 | 54 | /* Determinate */ 55 | .pure-material-progress-linear::-webkit-progress-value { 56 | background-color: currentColor; 57 | transition: all 0.2s; 58 | } 59 | 60 | .pure-material-progress-linear::-moz-progress-bar { 61 | background-color: currentColor; 62 | transition: all 0.2s; 63 | } 64 | 65 | .pure-material-progress-linear::-ms-fill { 66 | border: none; 67 | background-color: currentColor; 68 | transition: all 0.2s; 69 | } 70 | 71 | /* Indeterminate */ 72 | .pure-material-progress-linear:indeterminate { 73 | background-size: 200% 100%; 74 | background-image: linear-gradient(to right, transparent 50%, currentColor 50%, currentColor 60%, transparent 60%, transparent 71.5%, currentColor 71.5%, currentColor 84%, transparent 84%); 75 | animation: pure-material-progress-linear 2s infinite linear; 76 | } 77 | 78 | .pure-material-progress-linear:indeterminate::-moz-progress-bar { 79 | background-color: transparent; 80 | } 81 | 82 | .pure-material-progress-linear:indeterminate::-ms-fill { 83 | animation-name: none; 84 | } 85 | 86 | @keyframes pure-material-progress-linear { 87 | 0% { 88 | background-size: 200% 100%; 89 | background-position: left -31.25% top 0; 90 | } 91 | 50% { 92 | background-size: 800% 100%; 93 | background-position: left -49% top 0; 94 | } 95 | 100% { 96 | background-size: 400% 100%; 97 | background-position: left -102% top 0; 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /public/prism.css: -------------------------------------------------------------------------------- 1 | /* PrismJS 1.30.0 2 | https://prismjs.com/download#themes=prism-okaidia&languages=markup+css+clike+javascript+abap+abnf+actionscript+ada+agda+al+antlr4+apacheconf+apex+apl+applescript+aql+arduino+arff+armasm+arturo+asciidoc+aspnet+asm6502+asmatmel+autohotkey+autoit+avisynth+avro-idl+awk+bash+basic+batch+bbcode+bbj+bicep+birb+bison+bnf+bqn+brainfuck+brightscript+bro+bsl+c+csharp+cpp+cfscript+chaiscript+cil+cilkc+cilkcpp+clojure+cmake+cobol+coffeescript+concurnas+csp+cooklang+coq+crystal+css-extras+csv+cue+cypher+d+dart+dataweave+dax+dhall+diff+django+dns-zone-file+docker+dot+ebnf+editorconfig+eiffel+ejs+elixir+elm+etlua+erb+erlang+excel-formula+fsharp+factor+false+firestore-security-rules+flow+fortran+ftl+gml+gap+gcode+gdscript+gedcom+gettext+gherkin+git+glsl+gn+linker-script+go+go-module+gradle+graphql+groovy+haml+handlebars+haskell+haxe+hcl+hlsl+hoon+http+hpkp+hsts+ichigojam+icon+icu-message-format+idris+ignore+inform7+ini+io+j+java+javadoc+javadoclike+javastacktrace+jexl+jolie+jq+jsdoc+js-extras+json+json5+jsonp+jsstacktrace+js-templates+julia+keepalived+keyman+kotlin+kumir+kusto+latex+latte+less+lilypond+liquid+lisp+livescript+llvm+log+lolcode+lua+magma+makefile+markdown+markup-templating+mata+matlab+maxscript+mel+mermaid+metafont+mizar+mongodb+monkey+moonscript+n1ql+n4js+nand2tetris-hdl+naniscript+nasm+neon+nevod+nginx+nim+nix+nsis+objectivec+ocaml+odin+opencl+openqasm+oz+parigp+parser+pascal+pascaligo+psl+pcaxis+peoplecode+perl+php+phpdoc+php-extras+plant-uml+plsql+powerquery+powershell+processing+prolog+promql+properties+protobuf+pug+puppet+pure+purebasic+purescript+python+qsharp+q+qml+qore+r+racket+cshtml+jsx+tsx+reason+regex+rego+renpy+rescript+rest+rip+roboconf+robotframework+ruby+rust+sas+sass+scss+scala+scheme+shell-session+smali+smalltalk+smarty+sml+solidity+solution-file+soy+sparql+splunk-spl+sqf+sql+squirrel+stan+stata+iecst+stylus+supercollider+swift+systemd+t4-templating+t4-cs+t4-vb+tap+tcl+tt2+textile+toml+tremor+turtle+twig+typescript+typoscript+unrealscript+uorazor+uri+v+vala+vbnet+velocity+verilog+vhdl+vim+visual-basic+warpscript+wasm+web-idl+wgsl+wiki+wolfram+wren+xeora+xml-doc+xojo+xquery+yaml+yang+zig */ 3 | code[class*=language-],pre[class*=language-]{color:#f8f8f2;background:0 0;text-shadow:0 1px rgba(0,0,0,.3);font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}:not(pre)>code[class*=language-],pre[class*=language-]{background:#272822}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#8292a2}.token.punctuation{color:#f8f8f2}.token.namespace{opacity:.7}.token.constant,.token.deleted,.token.property,.token.symbol,.token.tag{color:#f92672}.token.boolean,.token.number{color:#ae81ff}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#a6e22e}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url,.token.variable{color:#f8f8f2}.token.atrule,.token.attr-value,.token.class-name,.token.function{color:#e6db74}.token.keyword{color:#66d9ef}.token.important,.token.regex{color:#fd971f}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help} 4 | -------------------------------------------------------------------------------- /public/qr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/public/qr.png -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Allow: / 3 | Disallow: /debug 4 | -------------------------------------------------------------------------------- /public/scr1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/public/scr1.png -------------------------------------------------------------------------------- /public/scr2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/public/scr2.png -------------------------------------------------------------------------------- /public/scr3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/public/scr3.png -------------------------------------------------------------------------------- /public/scr4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/public/scr4.png -------------------------------------------------------------------------------- /public/scr5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/public/scr5.png -------------------------------------------------------------------------------- /public/scr6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/public/scr6.png -------------------------------------------------------------------------------- /public/sitemap.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | https://assistant.teslasoft.org 6 | 7 | 2024-09-18 8 | always 9 | 1 10 | 11 | 12 | https://assistant.teslasoft.org/logo192.webp 13 | 14 | 15 | SpeakGPT 16 | 17 | 18 | SpeakGPT logo 19 | 20 | 21 | 22 | 23 | https://assistant.teslasoft.org 24 | 2024-09-18 25 | always 26 | 1 27 | 28 | 29 | https://assistant.teslasoft.org/chat 30 | 2024-09-18 31 | always 32 | 1 33 | 34 | 35 | https://assistant.teslasoft.org/prompts 36 | 2024-09-18 37 | always 38 | 0.9 39 | 40 | 41 | https://assistant.teslasoft.org/assistant/mobile 42 | 2024-09-18 43 | always 44 | 0.8 45 | 46 | 47 | https://assistant.teslasoft.org/tips 48 | 2024-09-18 49 | always 50 | 0.6 51 | 52 | 53 | https://assistant.teslasoft.org/terms 54 | 2024-09-18 55 | always 56 | 0.5 57 | 58 | 59 | https://assistant.teslasoft.org/privacy 60 | 2024-09-18 61 | always 62 | 0.5 63 | 64 | 65 | https://assistant.teslasoft.org/api/safety 66 | 2024-09-18 67 | always 68 | 0.5 69 | 70 | 71 | https://assistant.teslasoft.org/data/delete 72 | 2024-09-18 73 | always 74 | 0.5 75 | 76 | 77 | https://assistant.teslasoft.org/contact 78 | 2024-09-18 79 | always 80 | 0.5 81 | 82 | 83 | https://assistant.teslasoft.org/changelog 84 | 2024-09-18 85 | always 86 | 0.4 87 | 88 | 89 | -------------------------------------------------------------------------------- /src/App.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import { BrowserRouter as Router } from "react-router-dom"; 18 | import BaseRoutes from "./BaseRoutes"; 19 | import {createTheme, ThemeProvider} from "@mui/material"; 20 | import {BaseTheme} from "./Theme"; 21 | import {useEffect} from "react"; 22 | import {migrateFromLegacyAPIs} from "./util/Settings"; 23 | 24 | function App() { 25 | const baseTheme = createTheme(BaseTheme); 26 | 27 | useEffect(() => { 28 | migrateFromLegacyAPIs() 29 | }, []); 30 | 31 | return ( 32 | 33 | 34 | 35 | 36 | 37 | ); 38 | } 39 | 40 | export default App; 41 | -------------------------------------------------------------------------------- /src/Theme.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | export const BaseTheme = { 18 | palette: { 19 | mode: 'dark', 20 | primary: { 21 | main: '#3786ff', 22 | }, 23 | secondary: { 24 | main: '#00ffff', 25 | }, 26 | error: { 27 | main: '#db4437', 28 | }, 29 | warning: { 30 | main: '#ff3d00', 31 | }, 32 | success: { 33 | main: '#2e8b57', 34 | }, 35 | }, 36 | 37 | components: { 38 | MuiButton: { 39 | styleOverrides: { 40 | root: { 41 | borderRadius: '50pc', 42 | }, 43 | }, 44 | }, 45 | MuiPaper: { 46 | styleOverrides: { 47 | root: { 48 | borderRadius: '8px', 49 | minWidth: 320, 50 | }, 51 | 52 | }, 53 | }, 54 | MuiDialogContentText: { 55 | styleOverrides: { 56 | root: { 57 | overflowWrap: "anywhere", 58 | userSelect: "text", 59 | }, 60 | }, 61 | } 62 | }, 63 | } 64 | -------------------------------------------------------------------------------- /src/components/ApiEndpointEditDialog.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import {MaterialEditText} from "../widgets/MaterialEditText"; 19 | import {MaterialButton24, MaterialButtonError, MaterialButtonOutlined24} from "../widgets/MaterialButton"; 20 | import {deleteEndpoint, getApiEndpointById, renameEndpoint, setApiEndpointById} from "../util/Settings"; 21 | import {MaterialDialog} from "./MaterialDialog"; 22 | 23 | function ApiEndpointEditDialog({endpointId, isOpened, setIsOpened, ...props}) { 24 | const [label, setLabel] = React.useState(endpointId === "" ? "" : getApiEndpointById(endpointId).label); 25 | const [url, setUrl] = React.useState(endpointId === "" ? "" : getApiEndpointById(endpointId).url); 26 | const [key, setKey] = React.useState(""); 27 | const previousKey = endpointId === "" ? "" : getApiEndpointById(endpointId).key; 28 | 29 | const setApiEndpoint = () => { 30 | if (label !== getApiEndpointById(endpointId).label) { 31 | renameEndpoint(endpointId, label) 32 | } else { 33 | setApiEndpointById(label, url, key === "" ? previousKey : key); 34 | } 35 | setIsOpened(false); 36 | } 37 | 38 | return ( 39 |
{ 40 | e.stopPropagation(); 41 | setIsOpened(false); 42 | }}> 43 | 44 |
{ 45 | e.stopPropagation(); 46 | }}> 47 |

Set API endpoint

48 |
49 |

Let's begin with setup your favorite API endpoint. Since SpeakGPT Web 1.5 you 53 | can add multiple API endpoints and use SpeakGPT to access GPR, Gemini, Claude, etc. If you're 54 | using local or unknown API and receiving CORS error (see console) make sure CORS headers are 55 | present in your API endpoint.

56 |

Enter the key only if you are using this app at 57 | https://assistant.teslasoft.org/. Other links may be insecure and phishing.

58 | { 60 | setLabel(e.target.value) 61 | }}/> 62 |

63 | { 65 | setUrl(e.target.value) 66 | }}/> 67 |

68 | { 70 | setKey(e.target.value) 71 | }}/> 72 | 73 |
74 |
75 | { 76 | setIsOpened(false); 77 | }}>Cancel 78 |      79 | { 80 | endpointId !== "" ? <> 81 | { 82 | deleteEndpoint(endpointId); 83 | setIsOpened(false); 84 | }}>Delete 85 |      86 | : null 87 | } 88 | { 89 | setApiEndpoint(); 90 | }}>Save 91 |
92 |
93 |
94 |
95 | ); 96 | } 97 | 98 | export default ApiEndpointEditDialog; -------------------------------------------------------------------------------- /src/components/ApiHostChangeDialog.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import {MaterialButton24} from "../widgets/MaterialButton"; 19 | import {MaterialEditText} from "../widgets/MaterialEditText"; 20 | import {getApiHost, setApiHost} from "../util/Settings"; 21 | import {MaterialDialog} from "./MaterialDialog"; 22 | 23 | function ApiHostChangeDialog({chatId, setOpen, setApiHostD}) { 24 | const [apiHostX, setApiHostX] = React.useState(getApiHost(chatId)); 25 | 26 | return ( 27 |
{ 28 | e.stopPropagation(); 29 | setOpen(false) 30 | }}> 31 | 32 |
e.stopPropagation()}> 33 |

API Host

34 |
35 |

Change API host if you are using custom OpenAI API endpoint.

36 | setApiHostX(e.target.value)} /> 37 |
38 |
39 | { 40 | setApiHost(chatId, apiHostX); 41 | if (setApiHostD !== undefined) setApiHostD(apiHostX); 42 | setOpen(false); 43 | }}>Save 44 |
45 |
46 |
47 |
48 | ); 49 | } 50 | 51 | export default ApiHostChangeDialog; -------------------------------------------------------------------------------- /src/components/ApiKeyChangeDialog.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import {MaterialEditText} from "../widgets/MaterialEditText"; 19 | import {MaterialButton24, MaterialButtonError, MaterialButtonOutlined24} from "../widgets/MaterialButton"; 20 | import {MaterialDialog} from "./MaterialDialog"; 21 | 22 | function ApiKeyChangeDialog(props) { 23 | const [apiKey, setApiKey] = React.useState(""); 24 | 25 | const saveApiKey = () => { 26 | if (apiKey !== "") { 27 | localStorage.removeItem('skipApiKeyCheck'); 28 | localStorage.setItem('apiKey', apiKey); 29 | props.setIsOpen(false); 30 | } 31 | } 32 | 33 | return ( 34 |
{ 35 | props.setIsOpen(false); 36 | }}> 37 | 38 |
{ 39 | e.stopPropagation() 40 | }}> 41 |

Change API Key

42 |
43 | setApiKey(e.target.value)}/> 44 |

You can revoke API key here and unset it. When you unset an API key your chats will not be removed.

45 |
46 |
47 | { 48 | props.setIsOpen(false); 49 | }}>Cancel 50 |      51 | { 52 | localStorage.removeItem('apiKey'); 53 | window.location.reload(); 54 | }}>Unset API key 55 |      56 | Save 57 |
58 |
59 |
60 |
61 | ); 62 | } 63 | 64 | export default ApiKeyChangeDialog; -------------------------------------------------------------------------------- /src/components/ApiKeyDialog.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React, {useEffect} from 'react'; 18 | import {MaterialEditText} from "../widgets/MaterialEditText"; 19 | import {MaterialButton24, MaterialButtonOutlined24} from "../widgets/MaterialButton"; 20 | import {MaterialDialog} from "./MaterialDialog"; 21 | 22 | /* 23 | * @deprecated This component is deprecated and will be removed in the future versions. Use ApiEndpointEditDialog instead. 24 | * */ 25 | function ApiKeyDialog(props) { 26 | const [apiKey, setApiKey] = React.useState(""); 27 | 28 | const saveApiKey = () => { 29 | if (apiKey !== "") { 30 | localStorage.setItem('apiKey', apiKey); 31 | window.location.reload(); 32 | } 33 | } 34 | 35 | useEffect(() => { 36 | console.warn("ApiKeyDialog is deprecated and will be removed in the future versions. Use ApiEndpointEditDialog instead."); 37 | }, []); 38 | 39 | return ( 40 | <> 41 | { 42 | (localStorage.getItem('apiKey') === null || localStorage.getItem('apiKey') === undefined || localStorage.getItem('apiKey') === "") && localStorage.getItem("skipApiKeyCheck") !== "true" ? 43 |
44 | 45 |
46 |

Setup

47 |
48 |

To use this software you need to provide your OpenAI API 49 | key. SpeakGPT uses paid OpenAI models. API usage is significantly cheaper than fixed 50 | subscription. API-key authentication is safer than username/password authentication. 51 | App can access only API but not account info. You can revoke API key anytime without 52 | losing your account. API key is stored only on your device.

53 | setApiKey(e.target.value)}/> 55 |

Enter the key only if you are using this app at 56 | https://assistant.teslasoft.org/. Other links may be insecure and phishing.

57 |

You can skip API key setup and use app features that do not require API access like access conversations or prompts store. If you want to use full functionality you need to set an API key. You can do it in chat settings. To access chat settings create or open a chat.

58 |
59 |
60 | { 61 | localStorage.setItem('skipApiKeyCheck', 'true'); 62 | window.location.reload(); 63 | }}>Skip 64 |      65 | Save 66 |
67 |
68 |
69 |
70 | : null 71 | } 72 | 73 | ); 74 | } 75 | 76 | export default ApiKeyDialog; -------------------------------------------------------------------------------- /src/components/AssistantDeepLink.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import {BrowserView, MobileView} from "react-device-detect"; 19 | import Placeholder from "./Placeholder"; 20 | import {MaterialButton24, MaterialButtonOutlined24} from "../widgets/MaterialButton"; 21 | import {Link} from "react-router-dom"; 22 | 23 | function AssistantDeepLink() { 24 | return ( 25 | <> 26 | 27 | 28 |

This feature is only available on mobile devices.

29 | Go to home 30 |
31 |
32 | 33 | 34 |

You need to install SpeakGPT version 3.23 or above and allow it open external links to use this feature.

35 |
41 | Launch SpeakGPT for Android 42 |     43 | Go to home 44 |
45 |
46 |
47 | 48 | ); 49 | } 50 | 51 | export default AssistantDeepLink; -------------------------------------------------------------------------------- /src/components/AssistantMobile.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | /* DEPRECATED > SUPERSEDED WITH SpeakGPT Mobile PWA */ 18 | import React from 'react'; 19 | import AssistantEmbedded from "./AssistantEmbedded"; 20 | 21 | function setFullHeight() { 22 | const vh = window.innerHeight * 0.01; 23 | document.documentElement.style.setProperty('--vh', `${vh}px`); 24 | } 25 | 26 | // Set the height initially 27 | setFullHeight(); 28 | 29 | // Re-calculate on resize or orientation change 30 | window.addEventListener('resize', setFullHeight); 31 | window.addEventListener('orientationchange', setFullHeight); 32 | 33 | function AssistantMobile() { 34 | return ( 35 |
39 |
43 | 44 |
45 |
46 | ); 47 | } 48 | 49 | export default AssistantMobile; -------------------------------------------------------------------------------- /src/components/Changelog.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import DocPage from "./DocPage"; 19 | 20 | const pageContent = ` 21 | > This version of SpeakGPT is currently experimental. You can try it before official release. Be careful as some rough edges may appear. 22 | 23 | ## 1.5.6 24 | - Fixed model list 25 | 26 | ## 1.5.5 27 | - MISSING DESCRIPTION 28 | 29 | ## 1.5.4 30 | - GPT 4o is now default model for image recognition 31 | 32 | ## 1.5.3 33 | - Extended FAQ page 34 | 35 | ## 1.5.2 36 | - Added FAQ page 37 | 38 | ## 1.5.1 39 | - Added GPT 4o as a default model in models list, removed gpt 4 32k as it's not available for anyone 40 | 41 | ## 1.5.0 42 | - Added API endpoint selector 43 | 44 | ## 1.4.1 45 | - Fixed chat creation 46 | 47 | ## 1.4.0 48 | - Added AI photo editor 49 | 50 | ## 1.3.0 51 | - Added AI playground 52 | 53 | ## 1.2.0 54 | - Fixed /imagine command 55 | 56 | ## 1.1.0 57 | - Updated features list 58 | 59 | ## 1.0.0-rc6 60 | - Added documentation and legal pages 61 | - Now you will no longer see API key dialog on the main screen. API key dialog will be shown only when you need to enter API key to perform API-restricted actions. 62 | - Fixed Markdown lists appearance 63 | 64 | ## 1.0.0-rc5 65 | - Added support for app and deep links 66 | 67 | ## 1.0.0-rc4 68 | - Added first message in chat list 69 | 70 | ## 1.0.0-rc3 71 | - Improved mobile UI 72 | 73 | ## 1.0.0-rc2 74 | - Bugfix 75 | 76 | ## 1.0.0-rc1 77 | - Mobile version 78 | 79 | ## 0.9.0-beta09 80 | - Personalize embedded assistants with icon and description 81 | 82 | 83 | ## 0.8.0-beta08 84 | - Customize embedded assistants with payload 85 | 86 | ## 0.7.0-beta07 87 | - Embedded assistant chats are now saved 88 | 89 | ## 0.6.0-beta06 90 | - Assistant message bar autofocus 91 | 92 | ## 0.5.0-beta05 93 | - Small fixes 94 | 95 | ## 0.4.0-beta04 96 | - Added mobile assistant 97 | 98 | ## 0.3.0-beta03 99 | - Minor fixes 100 | 101 | ## 0.2.0-beta02 102 | - Added embedded assistant 103 | 104 | ## 0.1.1-beta01 105 | - Minor fixes 106 | 107 | ## 0.1.0-beta01 108 | - First public beta release. 109 | - Improved images upload. 110 | 111 | ## 0.0.14-alpha14 112 | - Finished Prompts Store. 113 | - Added Quick Assistant. 114 | 115 | ## 0.0.13-alpha13 116 | - UI improvements. 117 | 118 | ## 0.0.12-alpha12 119 | - Added code highlighting form more programming languages. 120 | 121 | ## 0.0.11-alpha11 122 | - Now you can unset your API key and skip API key setup. 123 | - Added full list of available models 124 | 125 | ## 0.0.10-alpha10 126 | - Search chat added 127 | - Tips page added 128 | 129 | ## 0.0.9-alpha9 130 | - Minor bugs fixed 131 | 132 | ## 0.0.8-alpha8 133 | - Implemented GPT 4 Vision 134 | - Chats settings are now take effect 135 | 136 | ## 0.0.7-alpha7 137 | - Added chat settings 138 | 139 | ## 0.0.6-alpha6 140 | - Added ability to clear chats 141 | - Bugs fixed 142 | 143 | ## 0.0.5-alpha5 144 | - Minor bugs fixed 145 | 146 | ## 0.0.4-alpha4 147 | - Added code highlighting 148 | - Minor improvements 149 | 150 | ## 0.0.3-alpha3 151 | - Added image generation. 152 | - Fixed minor bugs. 153 | 154 | ## 0.0.2-alpha2 155 | - Changed chats location. Chats are now located in the indexed DB. We're preparing for image generation and chats import/export. You might also noticed that you chats has gone. Open Developers Tools > Console and put command localStorage.chatId, where chatId is a sha256 hash of the chat name to recover a chat. You can load chat as JSON in SpeakGPT mobile app now. Web version will receive this feature soon. 156 | - Added autoscroll in chats. 157 | 158 | ## 0.0.1-alpha1 159 | - Initial release. 160 | - You can create multiple chats. 161 | - You can select different AI models. 162 | 163 | `; 164 | 165 | function WelcomePage() { 166 | return ( 167 | 168 | {pageContent} 169 | 170 | ); 171 | } 172 | 173 | export default WelcomePage; 174 | -------------------------------------------------------------------------------- /src/components/Chat.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import Placeholder from "./Placeholder"; 19 | import Chats from "./Chats"; 20 | 21 | function Chat(props) { 22 | return ( 23 |
24 |
25 |

SpeakGPT

26 | 27 |
28 |
29 | 30 |
31 |
32 | ); 33 | } 34 | 35 | export default Chat; 36 | -------------------------------------------------------------------------------- /src/components/ChatItem.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React, {useEffect} from 'react'; 18 | import gpt from "./../gpt.svg"; 19 | import {Link} from "react-router-dom"; 20 | import {isMobile} from "react-device-detect"; 21 | 22 | function ChatItem({name, id, model, type, firstMessage, isActive, setDeleteChat, setEditChat, setIsDelete, setIsEdit, ...props}) { 23 | 24 | const [intType, setIntType] = React.useState(0); 25 | 26 | useEffect(() => { 27 | if (type === "GPT 3.5") { 28 | setIntType(1); 29 | } else if (type === "GPT 4 Turbo") { 30 | setIntType(2); 31 | } else if (type === "GPT 4") { 32 | setIntType(3); 33 | } else if (type === "FT") { 34 | setIntType(4); 35 | } else if (type === "GPT 3.5 (0125)") { 36 | setIntType(5); 37 | } else if (type === "O1") { 38 | setIntType(5); 39 | } 40 | }, [type]); 41 | 42 | return ( 43 | 47 |
48 |
51 | {"GPT"}/ 52 |
53 |
54 |

{name}

55 |

{firstMessage}

56 | {/*

{model}

*/} 57 |
58 |
{ 59 | e.preventDefault() 60 | e.stopPropagation() 61 | setIsEdit(true) 62 | setEditChat(name) 63 | setDeleteChat("") 64 | }} style={isMobile ? { 65 | fontSize: "20px", 66 | } : { 67 | fontSize: "14px" 68 | }} className={(isMobile ? "action-mob" : "action") + " material-symbols-outlined"}>edit  { 69 | e.preventDefault() 70 | e.stopPropagation() 71 | setIsDelete(true) 72 | setDeleteChat(name) 73 | setEditChat("") 74 | }} style={isMobile ? { 75 | fontSize: "20px", 76 | } : { 77 | fontSize: "14px" 78 | }} className={(isMobile ? "action-dangerous-mob" : "action-dangerous") + " material-symbols-outlined"}>cancel
79 |
80 | 81 | ); 82 | } 83 | 84 | export default ChatItem; 85 | -------------------------------------------------------------------------------- /src/components/Chats.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React, {useEffect} from 'react'; 18 | import ChatItem from "./ChatItem"; 19 | import {sha256} from "js-sha256"; 20 | 21 | function Chats({selectedChat, id, chats, setSelectedChatForDeletion, setSelectedChatForEdit, ...props}) { 22 | 23 | const [stateSelectedChat, setStateSelectedChat] = React.useState(selectedChat); 24 | const [selectedChatForDeletionTemp, setSelectedChatForDeletionTemp] = React.useState(""); 25 | const [selectedChatForEditTemp, setSelectedChatForEditTemp] = React.useState(""); 26 | const [isEditTemp, setIsEditTemp] = React.useState(false); 27 | const [isDeleteTemp, setIsDeleteTemp] = React.useState(false); 28 | 29 | useEffect(() => { 30 | if (chats === null) return; 31 | 32 | chats.forEach((e) => { 33 | if (sha256(e.title) === id) { 34 | setStateSelectedChat(e.title); 35 | } 36 | }); 37 | 38 | if (id === undefined) { 39 | setStateSelectedChat(""); 40 | } 41 | }, [chats, id, selectedChat, stateSelectedChat]); 42 | 43 | useEffect(() => { 44 | if (isDeleteTemp) { 45 | setIsDeleteTemp(false); 46 | setSelectedChatForDeletion(selectedChatForDeletionTemp); 47 | } 48 | 49 | if (isEditTemp) { 50 | setIsEditTemp(false); 51 | setSelectedChatForEdit(selectedChatForEditTemp); 52 | } 53 | }, [isEditTemp, isDeleteTemp, setSelectedChatForDeletion, selectedChatForDeletionTemp, setSelectedChatForEdit, selectedChatForEditTemp]); 54 | 55 | return ( 56 |
57 | { 58 | chats !== null ? 59 | chats.map((e) => { 60 | return ( 61 |
{ 62 | props.setSelected(e.title); 63 | }}> 64 | 65 |
66 | ) 67 | }) : null 68 | } 69 |
72 |
73 | ); 74 | } 75 | 76 | export default Chats; -------------------------------------------------------------------------------- /src/components/ConfirmChatClear.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import {MaterialButton24, MaterialButtonOutlined24} from "../widgets/MaterialButton"; 19 | import {MaterialDialog} from "./MaterialDialog"; 20 | 21 | function ConfirmChatClear({setOpenState, confirm, isAssistant}) { 22 | return ( 23 |
{ 24 | confirm(false); 25 | setOpenState(false); 26 | }}> 27 | 28 |
{ 29 | e.stopPropagation(); 30 | }}> 31 |

Clear chat

32 |

Are you sure you want to clear this chat?

33 |
34 | { 35 | confirm(false); 36 | setOpenState(false); 37 | }}>Cancel 38 |      39 | { 40 | confirm(true); 41 | setOpenState(false); 42 | }}>Delete 43 |
44 |
45 |
46 |
47 | ); 48 | } 49 | 50 | export default ConfirmChatClear; -------------------------------------------------------------------------------- /src/components/DeleteChatDialog.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import {MaterialButton24, MaterialButtonOutlined24} from "../widgets/MaterialButton"; 19 | import {MaterialDialog} from "./MaterialDialog"; 20 | 21 | function DeleteChatDialog({setOpenState, chatName, setChatName, ...props}) { 22 | return ( 23 |
{ 24 | setChatName(""); 25 | setOpenState(false); 26 | }}> 27 | 28 |
{ 29 | e.stopPropagation(); 30 | }}> 31 |

Confirm deletion

32 |

Are you sure you want to delete this chat?

33 |
34 | { 35 | setChatName(""); 36 | setOpenState(false); 37 | }}>Cancel 38 |     39 | { 40 | setChatName(chatName); 41 | setOpenState(false); 42 | }}>Delete 43 |
44 |
45 |
46 |
47 | ); 48 | } 49 | 50 | export default DeleteChatDialog; -------------------------------------------------------------------------------- /src/components/DocPage.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import {isMobile} from "react-device-detect"; 19 | import {Link} from "react-router-dom"; 20 | import Prism from "../prism"; 21 | import {highlightCode, linesNumbers} from "../util/MarkDownCode"; 22 | import remarkGfm from "remark-gfm"; 23 | import Markdown from "react-markdown"; 24 | 25 | function setFullHeight() { 26 | const vh = window.innerHeight * 0.01; 27 | document.documentElement.style.setProperty('--vh', `${vh}px`); 28 | } 29 | 30 | // Set the height initially 31 | setFullHeight(); 32 | 33 | // Re-calculate on resize or orientation change 34 | window.addEventListener('resize', setFullHeight); 35 | window.addEventListener('orientationchange', setFullHeight); 36 | 37 | function DocPage({children, title}) { 38 | return ( 39 |
48 |
49 | arrow_back 50 |      51 |

{title}

52 |
53 |
54 |
55 | 79 | { 80 | highlightCode(children, language, className) !== null ? 81 | <> 82 |
84 |
85 | 86 | : null 87 | } 88 | 89 |
90 |
91 | ) : ( 92 | 93 | {children} 94 | 95 | ) 96 | } 97 | }} 98 | remarkPlugins={[remarkGfm]} 99 | className={"message-content"}>{children} 100 |
101 |
102 | ); 103 | } 104 | 105 | export default DocPage; -------------------------------------------------------------------------------- /src/components/MaterialDialog.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | import {styled} from "@mui/material/styles"; 17 | import {Dialog} from "@mui/material"; 18 | 19 | export const MaterialDialog = styled(Dialog)(({ theme }) => ({ 20 | '&:MuiPaper-root': { 21 | borderRadius: "24px", 22 | } 23 | })); -------------------------------------------------------------------------------- /src/components/MaterialWindow.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import NavigationBar from "../widgets/NavigationBar"; 19 | import Assistant from "./Assistant"; 20 | import {BrowserView, MobileView, isMobile} from "react-device-detect"; 21 | import NavigationBarMobile from "../widgets/NavigationBarMobile"; 22 | 23 | function setFullHeight() { 24 | const vh = window.innerHeight * 0.01; 25 | document.documentElement.style.setProperty('--vh', `${vh}px`); 26 | } 27 | 28 | // Set the height initially 29 | setFullHeight(); 30 | 31 | // Re-calculate on resize or orientation change 32 | window.addEventListener('resize', setFullHeight); 33 | window.addEventListener('orientationchange', setFullHeight); 34 | 35 | function MaterialWindow({children, page, ...props}) { 36 | 37 | const [assistantOpened, setAssistantOpened] = React.useState(false); 38 | 39 | return ( 40 |
44 |
47 | { 48 | assistantOpened ? 49 |
50 | 51 |
: null 52 | } 53 | 54 | { 55 | setAssistantOpened(true); 56 | }}/> 57 | 58 | 59 | { 60 | setAssistantOpened(true); 61 | }}/> 62 | 63 |
66 | {children} 67 |
68 |
69 |
70 | ); 71 | } 72 | 73 | export default MaterialWindow; -------------------------------------------------------------------------------- /src/components/NewChatDialog.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React, {useEffect} from 'react'; 18 | import {MaterialEditText} from "../widgets/MaterialEditText"; 19 | import {MaterialButton24, MaterialButtonOutlined24} from "../widgets/MaterialButton"; 20 | import {MaterialDialog} from "./MaterialDialog"; 21 | 22 | function NewChatDialog({chatName, setChatName, invalidState, invalidMessage, setChatDialogOpen, isEdit, chatModel, setIsEditing, ...props}) { 23 | const [tempChatName, setTempChatName] = React.useState(""); 24 | 25 | useEffect(() => { 26 | setTempChatName(chatName); 27 | }, [chatName]); 28 | 29 | return ( 30 |
{ 31 | setChatDialogOpen(false); 32 | }}> 33 | 34 |
{ 35 | e.stopPropagation(); 36 | }}> 37 |

{isEdit ? "Edit chat" : "New chat"}

38 | { 39 | setTempChatName(e.target.value); 40 | }}/> 41 |
42 | { 43 | setChatDialogOpen(false); 44 | }}>Cancel 45 |      46 | { 47 | setIsEditing(isEdit); 48 | setChatName(tempChatName); 49 | }}>{isEdit ? "Save" : "Create"} 50 |
51 |
52 |
53 |
54 | ); 55 | } 56 | 57 | export default NewChatDialog; 58 | -------------------------------------------------------------------------------- /src/components/NotFound.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import Placeholder from "./Placeholder"; 19 | import {MaterialButton24} from "../widgets/MaterialButton"; 20 | import {Link} from "react-router-dom"; 21 | 22 | function NotFound() { 23 | return ( 24 | 25 |

The page you are looking for does not exist.

26 | Go to home 27 |
28 | ); 29 | } 30 | 31 | export default NotFound; -------------------------------------------------------------------------------- /src/components/Placeholder.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | 19 | function Placeholder({children, icon, message}) { 20 | return ( 21 |
22 | {icon} 25 | { message === undefined || message === null ? children :

{message}

} 26 |
27 | ); 28 | } 29 | 30 | export default Placeholder; -------------------------------------------------------------------------------- /src/components/PlaceholderLoading.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import {CircularProgress} from "@mui/material"; 19 | import {isMobile} from "react-device-detect"; 20 | 21 | function setFullHeight() { 22 | const vh = window.innerHeight * 0.01; 23 | document.documentElement.style.setProperty('--vh', `${vh}px`); 24 | } 25 | 26 | // Set the height initially 27 | setFullHeight(); 28 | 29 | // Re-calculate on resize or orientation change 30 | window.addEventListener('resize', setFullHeight); 31 | window.addEventListener('orientationchange', setFullHeight); 32 | 33 | function Placeholder() { 34 | return ( 35 |
38 | 43 |
44 | ); 45 | } 46 | 47 | export default Placeholder; -------------------------------------------------------------------------------- /src/components/ProTip.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | 19 | import {isMobile} from "react-device-detect"; 20 | 21 | function ProTip({text}) { 22 | return ( 23 |
24 |

{text}

27 |
28 | ); 29 | } 30 | 31 | export default ProTip; -------------------------------------------------------------------------------- /src/components/PromptCard.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | 19 | import {isMobile} from "react-device-detect"; 20 | 21 | function PromptCard({prompt, onPromptClick}) { 22 | return ( 23 |
{ 24 | onPromptClick(); 25 | }}> 26 |

{prompt.name}

27 |

{prompt.desc}

28 |

{prompt.author}

{prompt.likes}  thumb_up
32 |
33 |
34 | ); 35 | } 36 | 37 | export default PromptCard; -------------------------------------------------------------------------------- /src/components/SelectResolutionDialog.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import {MaterialButton24, MaterialButtonOutlined24} from "../widgets/MaterialButton"; 19 | import {MaterialDialog} from "./MaterialDialog"; 20 | 21 | function SelectResolutionDialog({setIsOpen, setResolution, resolution, isAssistant}) { 22 | const availableResolutions = [ 23 | "256x256", 24 | "512x512", 25 | "1024x1024", 26 | ] 27 | 28 | const [selectedResolution, setSelectedResolution] = React.useState(resolution); 29 | return ( 30 |
{ 31 | setIsOpen(false); 32 | }}> 33 | 34 |
{ 35 | e.stopPropagation() 36 | }}> 37 |

Select images resolution

38 |
39 | { 40 | availableResolutions.map((res, index) => { 41 | return ( 42 |
{ 43 | setSelectedResolution(res); 44 | }}>{res}
45 | ) 46 | }) 47 | } 48 |

DALL-e 3 supports 1024x1024 only.

52 |
53 |
54 | { 55 | setIsOpen(false); 56 | }}>Cancel 57 |      58 | { 59 | setResolution(selectedResolution) 60 | setIsOpen(false); 61 | }}>Save 62 |
63 |
64 |
65 |
66 | ); 67 | } 68 | 69 | export default SelectResolutionDialog; -------------------------------------------------------------------------------- /src/components/SystemMessageEditDialog.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import {MaterialEditText} from "../widgets/MaterialEditText"; 19 | import {MaterialButton24, MaterialButtonOutlined24} from "../widgets/MaterialButton"; 20 | import {MaterialDialog} from "./MaterialDialog"; 21 | 22 | function SystemMessageEditDialog({setIsOpen, message, setMessage, isAssistant}) { 23 | 24 | const [currentMessage, setCurrentMessage] = React.useState(message); 25 | 26 | return ( 27 |
{ 28 | setIsOpen(false); 29 | }}> 30 | 31 |
{ 32 | e.stopPropagation() 33 | }}> 34 |

Edit system message

35 | { 36 | setCurrentMessage(e.target.value); 37 | }}/> 38 |
39 | { 40 | setIsOpen(false); 41 | }}>Cancel 42 |      43 | { 44 | setMessage(currentMessage) 45 | setIsOpen(false); 46 | }}>Save 47 |
48 |
49 |
50 |
51 | ); 52 | } 53 | 54 | export default SystemMessageEditDialog; -------------------------------------------------------------------------------- /src/components/Tile.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | 19 | import {isMobile} from "react-device-detect"; 20 | 21 | function Tile({clickAction, icon, title, subtitle, description, checkable, checked, setChecked}) { 22 | const [checkedState, setCheckedState] = React.useState(checked); 23 | 24 | return ( 25 |
{ 26 | if (checkable) { 27 | setCheckedState(!checkedState); 28 | setChecked(!checkedState); 29 | } 30 | 31 | if (clickAction !== undefined) clickAction(); 32 | }} className={checkedState ? "tile-bg-active" : "tile-bg"}> 33 |
34 | {icon} 35 |
36 |
37 |

{title}

38 |

{subtitle}

39 |
40 |
41 | ); 42 | } 43 | 44 | export default Tile; -------------------------------------------------------------------------------- /src/components/Tips.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import ProTip from "./ProTip"; 19 | import {isMobile, MobileView} from "react-device-detect"; 20 | 21 | const tips = [ 22 | "Start your message with /imagine to generate an image.", 23 | "Search tricks:\n\nUse \"author:\" " + 24 | "prefix to search by author.\nUse \"title:\" " + 25 | "prefix to search by title.\nUse \"id:\" " + 26 | "prefix to search by id.\nUse \"cat:\" " + 27 | "prefix to search y category.\nUse \"type:\" " + 28 | "prefix to search by type.", 29 | "ChatGPT is stuffy? Try out other models. Sometimes you may get very interesting results.", 30 | "Only GPT models can remember previous messages. Other models are not optimized for it.", 31 | "Sometimes some weird or useless features may appear. It because this app is in beta test.", 32 | "SpeakGPT is too slow? Try to reduce max tokens per output.", 33 | "Getting the same picture in the photo editor as you sent? Don't forget to draw a mask.", 34 | "Getting generation errors after updating to SpeakGPT 1.5.0? Add or change API endpoint. Usually it will be done automatically, but if not you can do it manually." 35 | ] 36 | 37 | function setFullHeight() { 38 | const vh = window.innerHeight * 0.01; 39 | document.documentElement.style.setProperty('--vh', `${vh}px`); 40 | } 41 | 42 | // Set the height initially 43 | setFullHeight(); 44 | 45 | // Re-calculate on resize or orientation change 46 | window.addEventListener('resize', setFullHeight); 47 | window.addEventListener('orientationchange', setFullHeight); 48 | 49 | function Tips() { 50 | return ( 51 |
55 |

Tips

56 | 57 |
58 | {tips.map((tip, index) => { 59 | return ( 60 | 61 | ); 62 | })} 63 | 64 | 65 |
69 | 70 |
71 |
72 | ); 73 | } 74 | 75 | export default Tips; -------------------------------------------------------------------------------- /src/documentation/ApiSafety.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import DocPage from "../components/DocPage"; 19 | 20 | const pageContent = ` 21 | SpeakGPT uses OpenAI API to provide you with the best experience. Using API-keys is more secure than using your username/password. Your personal info can't be obtained using API key. OpenAI provides cheap API access to their services. Your API key is stored locally on your device and is not shared with anyone. SpeakGPT does not collect any personal data. SpeakGPT is open-source and you can check the code yourself. Each release of SpeakGPT is checked on VirusTotal. 22 | If you have any concerns you can secure either [revoke your API key](https://platform.openai.com/account/api-keys) or use a separate API key for SpeakGPT. 23 | 24 | To secure your API key perform the following steps: 25 | 26 | 1. Make sure you have separate API key for SpeakGPT 27 | 2. Set up billing limit 28 | 3. Enable usage monitoring, so you can see how much resources SpeakGPT uses and how much it costs 29 | 4. If you have any concerns you can revoke your API key 30 | 31 | > Why we obfuscate our code in production releases? 32 | > 33 | > Obfuscation and resources shrinking allows us to optimize app size, it performance and secure it against reverse engineering or tamper and make sure your credentials like API keys in a safe place. You can request an unobfuscated build or compile it by self to make sure our app is safe. 34 | 35 | 36 | > Developer identity 37 | > 38 | > Developer name: Dmytro Ostapenko (AndraxDev)\\ 39 | > Contact: dostapenko82@gmail.com, +421951829517\\ 40 | > Legal address: Južná trieda 4B, 04001 Košice, Slovakia 04001\\ 41 | > Legal entity ID: 55545386 42 | `; 43 | 44 | function ApiSafety() { 45 | return ( 46 | 47 | {pageContent} 48 | 49 | ); 50 | } 51 | 52 | export default ApiSafety; -------------------------------------------------------------------------------- /src/documentation/Contact.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import DocPage from "../components/DocPage"; 19 | 20 | const pageContent = ` 21 | > Name: Dmytro Ostapenko (AndraxDev) 22 | > 23 | > Email: dostapenko82@gmail.com 24 | > 25 | > Phone: +421951829517 26 | > 27 | > Legal address: Južná trieda 4B, 04001 Košice, Slovakia 04001 28 | > 29 | > Legal entity ID: 55545386 30 | > 31 | > Site: [andrax.dev](https://andrax.dev) 32 | > 33 | > GitHub: [github.com/AndraxDev](https://github.com/AndraxDev) 34 | `; 35 | 36 | function Contact() { 37 | return ( 38 | 39 | {pageContent} 40 | 41 | ); 42 | } 43 | 44 | export default Contact; -------------------------------------------------------------------------------- /src/documentation/Debug.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import DocPage from "../components/DocPage"; 19 | 20 | const pageContent = ` 21 | Supported app links: 22 | 23 | [https://assistant.teslasoft.org/chat](https://assistant.teslasoft.org/chat) 24 | 25 | [https://assistant.teslasoft.org/prompts/vswPyF3848](https://assistant.teslasoft.org/prompts/vswPyF3848) 26 | 27 | [https://assistant.teslasoft.org/assistant](https://assistant.teslasoft.org/assistant) 28 | 29 | > If these links are pointing you to a web pages instead of app or you have 404 error, please make sure you have installed SpeakGPT version 3.21 or newer and opening supported links is permitted for this app. 30 | `; 31 | 32 | function Debug() { 33 | return ( 34 | 35 | {pageContent} 36 | 37 | ); 38 | } 39 | 40 | export default Debug; 41 | -------------------------------------------------------------------------------- /src/documentation/DeleteData.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import DocPage from "../components/DocPage"; 19 | 20 | const pageContent = ` 21 | ## To delete your data from mobile app SpeakGPT, please follow these steps: 22 | 23 | 1. Go to Device settings > Apps > SpeakGPT > Clear data 24 | 2. To disable analytics open app settings and search for "Usage and diagnostics" option 25 | 3. To disable all data collecting open app settings and search for "Revoke authorization" option 26 | 4. To delete analytics data, please contact us via admin@teslasoft.org 27 | 28 | ## To delete data from web app SpeakGPT, please follow these steps: 29 | 30 | 1. Go to your browser settings > Browsing data > Select "assistant.teslasoft.org" > Clear all data 31 | 32 | > SpeakGPT Lite does not collect any personal data. To delete all local data, go to Device settings > Apps > SpeakGPT > Clear data 33 | 34 | ## To delete your account from API Provider (Like OpenAI), refer to it's Privacy Policy. Here are some account close links for popular API providers: 35 | - [OpenAI](https://help.openai.com/en/articles/6378407-how-to-delete-your-account) 36 | - [OpenRouter](https://openrouter.ai/docs/faq#how-can-i-delete-my-account) 37 | 38 | Read Privacy Policy here: [Privacy Policy for regular SpeakGPT mobile/web app](/privacy) and [Privacy Policy for SpeakGPT Lite](/privacy_lite) 39 | `; 40 | 41 | function DeleteData() { 42 | return ( 43 | 44 | {pageContent} 45 | 46 | ); 47 | } 48 | 49 | export default DeleteData; -------------------------------------------------------------------------------- /src/documentation/FAQ.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import DocPage from "../components/DocPage"; 19 | 20 | const pageContent = ` 21 | ## What is it? 22 | 23 | > SpeakGPT is a chatbot that uses external API to provide you access to GPT, Gemini, Claude, Perplexity and other powerful LLMs. 24 | 25 | ## What is LLM? 26 | 27 | > LLM stands for Large Language Model. It's a model that can generate human-like text based on the input it receives. 28 | 29 | ## Is SpeakGPT free? 30 | 31 | > SpeakGPT is only client app that you can access for free and without registration, but some models (like GPT 4, Gemini) are paid and require API key to use. 32 | 33 | ## Why should I download Android app? 34 | 35 | > Android app has more features than web version. It includes offline access, chat import/export, mobile assistant, context menu, quick access, advanced model params, customization and more. 36 | 37 | ## Where can I find Android app? 38 | 39 | > Download it from [Google Play](https://play.google.com/store/apps/details?id=org.teslasoft.assistant) or [GitHub](https://github.com/AndraxDev/speak-gpt). 40 | 41 | ## Why this app requires API key? 42 | 43 | > This app provides you access to different AI models and API providers. API usage is cheaper and most of API providers have pay-as-you-go pricing model. Learn more about how we use API key in our [Privacy Policy](/privacy) and [API key safety](/api/safety). 44 | 45 | ## How can I get API key? 46 | 47 | > You can visit API provider page. Here are some of them: [OpenAI](https://openai.com/), [OpenRouter](https://openrouter.ai/). 48 | 49 | ## How can I report bugs? 50 | 51 | > Here are 2 GitHub repositories where you can report bugs: [For web version click here](https://github.com/AndraxDev/speak-gpt-web), [for mobile version click here](https://github.com/AndraxDev/speak-gpt). Just open issues and describe your problem but pay attention for duplicates. Duplicated issues will be closed without prior notice. 52 | 53 | ## How can I contribute? 54 | 55 | > You can donate us at [Buy me a coffee](https://buymeacoffee.com/andrax_dev) or [Ko-fi](https://ko-fi.com/andrax_dev). 56 | 57 | ## How can I set an API key? 58 | 59 | > For desktop version follow these instructions: 60 | > 1. Launch quick assistant (click on square icon with a circle inside on the top left corner) 61 | > 2. Click on "Settings" button 62 | > 3. Click on "API endpoint" button 63 | > 4. Click edit button on the right side of the default API endpoint 64 | > 5. Enter your API key and click "Save" button 65 | > 6. Change base url (optional, if you want to use another API provider like OpenRouter) 66 | 67 | ## How can I access Gemini or Claude, I see only GPT? 68 | 69 | > You need to setup OpenRouter API endpoint and select it for the current chat. 70 | > OpenRouter base url is: https://openrouter.ai/api/v1/ 71 | 72 | ## I don't see GPT 4 model in the list 73 | 74 | > To use GPT 4 you need to have paid OpenAI account (Not GPT Plus). View more info at [OpenAI rate limits](https://platform.openai.com/docs/guides/rate-limits). 75 | 76 | ## I'm getting quota error when using GPT 4 model 77 | 78 | > See previous answer. 79 | 80 | ## Which limits are applied to me? 81 | 82 | > It depends on the API provider, model, usage and your spending. You can view more info at [OpenAI rate limits](https://platform.openai.com/docs/guides/rate-limits). 83 | 84 | ## Is it expensive to use this app? 85 | 86 | > It depends on efficient usage of app, model and API provider. 87 | > For more info about OpenAI pricing visit [OpenAI pricing](https://openai.com/api/pricing/) 88 | > For more info about OpenRouter pricing visit [OpenRouter pricing](https://openrouter.ai/docs#models) 89 | 90 | ## I had a very large chat and now I received a high bill? 91 | 92 | > It's possible because when you are sending a message to the AI model, the whole conversation will be passed to the model input. 93 | > Here are some tricks to avoid high bills: 94 | > - Optimize messages size 95 | > - Don't use multiple topics in a single chat (as previous context will become unuseful and you will be charged for it) 96 | > - Play with prompts, system messages and formulate your tasks exactly 97 | > - For routine tasks like code generating, text translation or summarization use playground. Here you can find additional model params that can help improve models response. Playground is not a chat so only your prompt will me sent to the model. 98 | 99 | ## Didn't find answer to your question? 100 | 101 | > Contact us at [dostapenko82@gmail.com](mailto:dostapenko82@gmail.com) 102 | `; 103 | 104 | function Faq() { 105 | return ( 106 | 107 | {pageContent} 108 | 109 | ); 110 | } 111 | 112 | export default Faq; -------------------------------------------------------------------------------- /src/documentation/Optimize.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import DocPage from "../components/DocPage"; 19 | 20 | const pageContent = ` 21 | This page describes some tricks how you can optimize your costs when using SpeakGPT. 22 | 23 | ## How chat models are billed? 24 | 25 | Let's assume the following example chat: 26 | 27 | > [System] > System message 28 | > 29 | > [User] > Message 1 30 | > 31 | > [Assistant] > Message 2 32 | > 33 | > [User] > Message 3 34 | > 35 | > [Assistant] > Message 4 36 | > 37 | > [User] > Message 5 38 | > 39 | > [Assistant] > Message 6 40 | 41 | When you use chat models, then you will be billed for th entire chat, because chat history becomes input context. So you will be billed for system message and first 2 messages (User + Bot messages) 3 times because you perform 3 server requests and each time, system and first 2 messages are included in the user input. 42 | Respectfully, you will be billed for the third and fourth messages 2 times, because it included in 2 server requests. This is the underwater stone in the API billing system. 43 | 44 | To avoid this we created Playground mode that can be used for bulk actions like generating translations or config files. 45 | Playground does not remember your messages so you wil be billed only once for each message. 46 | 47 | ## When to use right features? 48 | 49 | ### Chat 50 | 51 | > You can use chats for non-bulk actions like asking questions, generating text, performing iterative code generation, etc. Don't use single chat for multiple topics. It will confuse AI model and incur additional charges. Create a new chat for each topics and you will see how much money you would save. 52 | 53 | ### Playground 54 | 55 | > You can use Playground for bulk actions like generating translations, config files, etc. 56 | 57 | ## Use right model! 58 | 59 | > Some of models are expensive, but not all of the are suited for performing actions. For easy tasks it is not necessary to use expensive and powerful models. 60 | 61 | > Interesting fact: GPT 3.5 is less capable than gpt 4o, but it 10 times more expensive. This is because OpenAI rarely changes prices for existing models and pushing developers to use better models. 62 | 63 | ## Set budget limits and alerts 64 | 65 | > Check if your API provider allows to set soft and hard budget limits. This will help you to avoid unexpected costs. Please note, that hitting hard limit will stop your API key and you will not be able to use it until you remove the limit. Soft limit will just notify you about exceeding the limit, but will not stop your API key. 66 | `; 67 | 68 | function Optimize(props) { 69 | return ( 70 | 71 | {pageContent} 72 | 73 | ); 74 | } 75 | 76 | export default Optimize; -------------------------------------------------------------------------------- /src/documentation/Privacy.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import DocPage from "../components/DocPage"; 19 | 20 | const pageContent = ` 21 | > This page describes which data we use and why. 22 | 23 | ## Data we do not collect 24 | 25 | - Chats list 26 | - Conversations content 27 | - Audio samples of your voice 28 | - API keys 29 | 30 | > This info is securely stored on your device, but it might be sent to OpenAI (or other API providers selected by you) to provide basic functionality. We don't store this info on our servers. To learn more about how your data is used, refer to the Privacy Policy of the API provider you are using. 31 | 32 | --- 33 | 34 | ## Optional data we may collect 35 | 36 | - Installation ID* 37 | - Crash logs 38 | - Advertising ID 39 | - Device info (mode, OS version, etc) 40 | 41 | > This info is used for analytical purposes only. We do not share this info with third-party organizations. This info is collected only when "Usage and diagnostics" feature is enabled. You can also send this info manually. You are able to delete this info from our servers, reset or/and delete installation ID. You can also revoke authorization to use this data without losing access to the app. 42 | 43 | --- 44 | 45 | ## Required data we collect 46 | 47 | - Name 48 | - User-generated content** 49 | 50 | > This data is required for function "Prompts store". We do not collect this data unless you published a prompt. You can still delete this data by reporting a prompt or contacting us via admin@teslasoft.org. This data is stored permanently unless you request your data to be deleted. This data can be accessed by other users. 51 | 52 | --- 53 | 54 | > *. When you install this app an installation ID will be created. This id is a random UUID string and it does not belong to Android id or any of hardware IDs. You can either reset or delete installation ID. In this case we will stop to collect data associated with installation ID. 55 | 56 | > **. User-generated content is all content created and published by users using this app. We may review public content for violations and remove inappropriate content. We don't have access to private content (like chats list, conversations, etc). User-generated content term doesn't include your chat list, chat content or app preferences. 57 | 58 | Learn how to delete your data here: [Delete my data](/data/delete) 59 | `; 60 | 61 | function Privacy() { 62 | return ( 63 | 64 | {pageContent} 65 | 66 | ); 67 | } 68 | 69 | export default Privacy; -------------------------------------------------------------------------------- /src/documentation/PrivacyLite.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import DocPage from "../components/DocPage"; 19 | 20 | const pageContent = ` 21 | > This page describes which data we use and why. 22 | 23 | ## Data we DO NOT collect 24 | 25 | - Chats list 26 | - Conversations content 27 | - Audio samples of your voice 28 | - API keys 29 | 30 | > This info is securely stored on your device and encrypted with a military-grade encryption (AES-256-GCM), but it might be sent to OpenAI (or other API providers selected by you) to provide basic functionality. We don't store this info on our servers. To learn more about how your data is used, refer to the Privacy Policy of the API provider you are using. 31 | 32 | --- 33 | 34 | ## Optional data we may collect 35 | 36 | > No optional data is collected. SpeakGPT Lite does not contain any proprietary services, online features or analytics. 37 | 38 | --- 39 | 40 | ## Required data we collect 41 | 42 | > No required data is collected. SpeakGPT Lite does not contain any proprietary services, online features or analytics. SpeakGPT Lite does not contain Prompt Library so you cannot interact with it through this app. 43 | 44 | --- 45 | 46 | Learn how to delete your data here: [Delete my data](/data/delete) 47 | `; 48 | 49 | function Privacy() { 50 | return ( 51 | 52 | {pageContent} 53 | 54 | ); 55 | } 56 | 57 | export default Privacy; -------------------------------------------------------------------------------- /src/gpt.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import ReactDOM from 'react-dom/client'; 19 | import './index.css'; 20 | import App from './App'; 21 | 22 | import {setMaxSettings, setMinSettings} from "./util/Settings"; 23 | 24 | function loadStylesheet(path) { 25 | let link = document.createElement('link'); 26 | link.rel = 'stylesheet'; 27 | link.type = 'text/css'; 28 | link.href = path; 29 | link.media = 'all'; 30 | 31 | document.head.appendChild(link); 32 | } 33 | 34 | const root = ReactDOM.createRoot(document.getElementById('root')); 35 | root.render( 36 | 37 | ); 38 | 39 | loadStylesheet('/prism.css'); 40 | loadStylesheet('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap'); 41 | loadStylesheet('https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200'); 42 | 43 | /* Set max global settings */ 44 | window._debug_setMaxSettings = () => { 45 | setMaxSettings(); 46 | window.location.reload(); 47 | } 48 | 49 | /* Set min global settings */ 50 | window._debug_setMinSettings = () => { 51 | setMinSettings(); 52 | window.location.reload(); 53 | } 54 | 55 | 56 | window.debug_setExperiment = (experiment) => { 57 | window.localStorage.setItem('experiment-' + experiment, "true") 58 | window.location.reload(); 59 | } 60 | 61 | window.debug_unsetExperiment = (experiment) => { 62 | window.localStorage.removeItem('experiment-' + experiment); 63 | window.location.reload(); 64 | } -------------------------------------------------------------------------------- /src/logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/prism.css: -------------------------------------------------------------------------------- 1 | /* PrismJS 1.29.0 2 | https://prismjs.com/download.html#themes=prism-dark&languages=markup+css+clike+javascript+abap+abnf+actionscript+ada+agda+al+antlr4+apacheconf+apex+apl+applescript+aql+arduino+arff+armasm+arturo+asciidoc+aspnet+asm6502+asmatmel+autohotkey+autoit+avisynth+avro-idl+awk+bash+basic+batch+bbcode+bbj+bicep+birb+bison+bnf+bqn+brainfuck+brightscript+bro+bsl+c+csharp+cpp+cfscript+chaiscript+cil+cilkc+cilkcpp+clojure+cmake+cobol+coffeescript+concurnas+csp+cooklang+coq+crystal+css-extras+csv+cue+cypher+d+dart+dataweave+dax+dhall+diff+django+dns-zone-file+docker+dot+ebnf+editorconfig+eiffel+ejs+elixir+elm+etlua+erb+erlang+excel-formula+fsharp+factor+false+firestore-security-rules+flow+fortran+ftl+gml+gap+gcode+gdscript+gedcom+gettext+gherkin+git+glsl+gn+linker-script+go+go-module+gradle+graphql+groovy+haml+handlebars+haskell+haxe+hcl+hlsl+hoon+http+hpkp+hsts+ichigojam+icon+icu-message-format+idris+ignore+inform7+ini+io+j+java+javadoc+javadoclike+javastacktrace+jexl+jolie+jq+jsdoc+js-extras+json+json5+jsonp+jsstacktrace+js-templates+julia+keepalived+keyman+kotlin+kumir+kusto+latex+latte+less+lilypond+liquid+lisp+livescript+llvm+log+lolcode+lua+magma+makefile+markdown+markup-templating+mata+matlab+maxscript+mel+mermaid+metafont+mizar+mongodb+monkey+moonscript+n1ql+n4js+nand2tetris-hdl+naniscript+nasm+neon+nevod+nginx+nim+nix+nsis+objectivec+ocaml+odin+opencl+openqasm+oz+parigp+parser+pascal+pascaligo+psl+pcaxis+peoplecode+perl+php+phpdoc+php-extras+plant-uml+plsql+powerquery+powershell+processing+prolog+promql+properties+protobuf+pug+puppet+pure+purebasic+purescript+python+qsharp+q+qml+qore+r+racket+cshtml+jsx+tsx+reason+regex+rego+renpy+rescript+rest+rip+roboconf+robotframework+ruby+rust+sas+sass+scss+scala+scheme+shell-session+smali+smalltalk+smarty+sml+solidity+solution-file+soy+sparql+splunk-spl+sqf+sql+squirrel+stan+stata+iecst+stylus+supercollider+swift+systemd+t4-templating+t4-cs+t4-vb+tap+tcl+tt2+textile+toml+tremor+turtle+twig+typescript+typoscript+unrealscript+uorazor+uri+v+vala+vbnet+velocity+verilog+vhdl+vim+visual-basic+warpscript+wasm+web-idl+wgsl+wiki+wolfram+wren+xeora+xml-doc+xojo+xquery+yaml+yang+zig */ 3 | /** 4 | * prism.js Dark theme for JavaScript, CSS and HTML 5 | * Based on the slides of the talk “/Reg(exp){2}lained/” 6 | * @author Lea Verou 7 | */ 8 | 9 | code[class*="language-"], 10 | pre[class*="language-"] { 11 | color: white; 12 | background: none; 13 | text-shadow: 0 -.1em .2em black; 14 | font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; 15 | font-size: 1em; 16 | text-align: left; 17 | white-space: pre; 18 | word-spacing: normal; 19 | word-break: normal; 20 | word-wrap: normal; 21 | line-height: 1.5; 22 | 23 | -moz-tab-size: 4; 24 | -o-tab-size: 4; 25 | tab-size: 4; 26 | 27 | -webkit-hyphens: none; 28 | -moz-hyphens: none; 29 | -ms-hyphens: none; 30 | hyphens: none; 31 | } 32 | 33 | @media print { 34 | code[class*="language-"], 35 | pre[class*="language-"] { 36 | text-shadow: none; 37 | } 38 | } 39 | 40 | pre[class*="language-"], 41 | :not(pre) > code[class*="language-"] { 42 | background: hsl(30, 20%, 25%); 43 | } 44 | 45 | /* Code blocks */ 46 | pre[class*="language-"] { 47 | padding: 1em; 48 | margin: .5em 0; 49 | overflow: auto; 50 | border: .3em solid hsl(30, 20%, 40%); 51 | border-radius: .5em; 52 | box-shadow: 1px 1px .5em black inset; 53 | } 54 | 55 | /* Inline code */ 56 | :not(pre) > code[class*="language-"] { 57 | padding: .15em .2em .05em; 58 | border-radius: .3em; 59 | border: .13em solid hsl(30, 20%, 40%); 60 | box-shadow: 1px 1px .3em -.1em black inset; 61 | white-space: normal; 62 | } 63 | 64 | .token.comment, 65 | .token.prolog, 66 | .token.doctype, 67 | .token.cdata { 68 | color: hsl(30, 20%, 50%); 69 | } 70 | 71 | .token.punctuation { 72 | opacity: .7; 73 | } 74 | 75 | .token.namespace { 76 | opacity: .7; 77 | } 78 | 79 | .token.property, 80 | .token.tag, 81 | .token.boolean, 82 | .token.number, 83 | .token.constant, 84 | .token.symbol { 85 | color: hsl(350, 40%, 70%); 86 | } 87 | 88 | .token.selector, 89 | .token.attr-name, 90 | .token.string, 91 | .token.char, 92 | .token.builtin, 93 | .token.inserted { 94 | color: hsl(75, 70%, 60%); 95 | } 96 | 97 | .token.operator, 98 | .token.entity, 99 | .token.url, 100 | .language-css .token.string, 101 | .style .token.string, 102 | .token.variable { 103 | color: hsl(40, 90%, 60%); 104 | } 105 | 106 | .token.atrule, 107 | .token.attr-value, 108 | .token.keyword { 109 | color: hsl(350, 40%, 70%); 110 | } 111 | 112 | .token.regex, 113 | .token.important { 114 | color: #e90; 115 | } 116 | 117 | .token.important, 118 | .token.bold { 119 | font-weight: bold; 120 | } 121 | .token.italic { 122 | font-style: italic; 123 | } 124 | 125 | .token.entity { 126 | cursor: help; 127 | } 128 | 129 | .token.deleted { 130 | color: red; 131 | } 132 | 133 | -------------------------------------------------------------------------------- /src/theme/AppWidgetTheme.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | export const AppWidgetTheme = { 18 | components: { 19 | MuiButton: { 20 | styleOverrides: { 21 | root: { 22 | borderRadius: '16px', 23 | width: 260, 24 | height: 260, 25 | }, 26 | }, 27 | } 28 | }, 29 | } 30 | -------------------------------------------------------------------------------- /src/theme/BaseTheme.css: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | @import "colors.css"; 18 | 19 | * { 20 | color-scheme: dark; 21 | } 22 | 23 | html, body { 24 | background-color: var(--color-accent-200); 25 | } 26 | 27 | html { 28 | overflow-y: scroll; 29 | } 30 | 31 | .ui { 32 | margin-top: 56px; 33 | width: 100%; 34 | display: flex; 35 | flex-direction: column; 36 | align-items: center; 37 | background-color: var(--color-accent-0); 38 | min-height: calc(100vh - 56px); 39 | } 40 | 41 | .ui__dialog { 42 | margin-top: 48px; 43 | min-width: 300px; 44 | /*min-height: 180px;*/ 45 | padding: 16px; 46 | border-radius: 24px; 47 | display: flex; 48 | align-items: center; 49 | flex-direction: column; 50 | color: var(--color-secondary-light); 51 | background-color: var(--color-accent-50); 52 | } 53 | 54 | .ui__dialog__title { 55 | padding: 0; 56 | margin: 4px; 57 | color: var(--color-accent-800); 58 | font-size: 18pt; 59 | } 60 | 61 | .ui__disclaimer { 62 | margin-top: 48px; 63 | color: var(--color-disclaimer); 64 | text-align: center; 65 | width: 720px; 66 | font-size: 12pt; 67 | } 68 | 69 | @media only screen and (max-width: 721px) { 70 | .ui__disclaimer { 71 | width: 360px; 72 | } 73 | } 74 | 75 | .app_logo { 76 | margin-top: 64px; 77 | width: 120px; 78 | height: 120px; 79 | background-color: var(--color-accent-200); 80 | border-radius: 50%; 81 | animation: logo 30s linear infinite; 82 | } 83 | 84 | @keyframes logo { 85 | 0% { 86 | transform: rotate(0deg); 87 | background-color: var(--color-dark-red); 88 | } 89 | 90 | 33% { 91 | transform: rotate(360deg); 92 | background-color: var(--color-dark-green); 93 | } 94 | 95 | 67% { 96 | transform: rotate(720deg); 97 | background-color: var(--color-dark-blue); 98 | } 99 | 100 | 100% { 101 | transform: rotate(1080deg); 102 | background-color: var(--color-dark-red); 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /src/theme/Theme.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | export const BaseTheme = { 18 | palette: { 19 | mode: 'dark', 20 | primary: { 21 | main: '#3786ff', 22 | }, 23 | secondary: { 24 | main: '#00ffff', 25 | }, 26 | error: { 27 | main: '#db4437', 28 | }, 29 | warning: { 30 | main: '#ff3d00', 31 | }, 32 | success: { 33 | main: '#2e8b57', 34 | }, 35 | }, 36 | 37 | components: { 38 | MuiButton: { 39 | styleOverrides: { 40 | root: { 41 | borderRadius: '50pc', 42 | }, 43 | }, 44 | }, 45 | MuiPaper: { 46 | styleOverrides: { 47 | root: { 48 | borderRadius: '8px', 49 | minWidth: 320, 50 | }, 51 | 52 | }, 53 | }, 54 | MuiDialogContentText: { 55 | styleOverrides: { 56 | root: { 57 | overflowWrap: "anywhere", 58 | userSelect: "text", 59 | }, 60 | }, 61 | } 62 | }, 63 | } 64 | -------------------------------------------------------------------------------- /src/theme/colors.css: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | :root { 18 | --color-primary-light: #ffffff; 19 | --color-secondary-light: rgba(255, 255, 255, 0.8); 20 | --color-tretinary-light: rgba(255, 255, 255, 0.7); 21 | /*--color-accent-overlay: rgba(24, 29, 26, 0.8);*/ 22 | /*--color-accent-0: #181d1a;*/ 23 | /*--color-accent-50: #141715;*/ 24 | /*--color-accent-100: #181d1a;*/ 25 | /*--color-accent-200: #29342c;*/ 26 | /*--color-accent-300: #354e3d;*/ 27 | /*--color-accent-400: #4c6754;*/ 28 | /*--color-accent-800: #99ffbb;*/ 29 | /*--color-accent-900: #d2ffdf;*/ 30 | 31 | --color-accent-overlay: rgba(25, 25, 25, 0.8); 32 | --color-accent-0: #0e0e0e; 33 | --color-accent-50: #0f0f0f; 34 | --color-accent-100: #181818; 35 | --color-accent-200: #1f1f1f; 36 | --color-accent-300: #2a2d35; 37 | --color-accent-400: #383c43; 38 | --color-accent-800: #bbd3ff; 39 | --color-accent-900: #d6e3ff; 40 | 41 | /*--color-accent-overlay: rgba(26, 29, 35, 0.8);*/ 42 | /*--color-accent-0: #181b22;*/ 43 | /*--color-accent-50: #121417;*/ 44 | /*--color-accent-100: #181c22;*/ 45 | /*--color-accent-200: #20252e;*/ 46 | /*--color-accent-300: #272f39;*/ 47 | /*--color-accent-400: #374355;*/ 48 | /*--color-accent-800: #bbd3ff;*/ 49 | /*--color-accent-900: #d6e3ff;*/ 50 | 51 | /*--color-accent-overlay: rgba(43, 32, 32, 0.8);*/ 52 | /*--color-accent-0: #2b2020;*/ 53 | /*--color-accent-50: #201919;*/ 54 | /*--color-accent-100: #2b2020;*/ 55 | /*--color-accent-200: #3e2c2c;*/ 56 | /*--color-accent-300: #583e3e;*/ 57 | /*--color-accent-400: #715555;*/ 58 | /*--color-accent-800: #ffa9a9;*/ 59 | /*--color-accent-900: #ffd6d6;*/ 60 | 61 | --color-accent-1000: #ffffff; 62 | 63 | --color-primary-accent-transparent: rgba(255, 255, 255, 0.07); 64 | --color-secondary-accent: #00ffff; 65 | --color-disclaimer: #ffff00; 66 | --color-dark-red: #422121; 67 | --color-dark-green: #214221; 68 | --color-dark-blue: #212142; 69 | --color-autofill: #181d1a; 70 | --color-warn: #ffe6e4; 71 | --color-warn-transparent: rgba(155, 75, 66, 0.2); 72 | --color-warn-transparent-hover: rgba(219, 68, 55, 0.5); 73 | } 74 | -------------------------------------------------------------------------------- /src/util/MarkDownCode.js: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import Prism from "../prism"; 18 | 19 | export const linesNumbers = (str) => { 20 | let lines = str.split("\n").length - 1; 21 | 22 | let l = []; 23 | 24 | for (let i = 0; i < lines; i++) { 25 | l.push("" + (i+1) + ""); 26 | } 27 | 28 | return l.join("\n"); 29 | } 30 | 31 | export const highlightCode = (code, lang, l) => { 32 | try { 33 | return Prism.highlight(code, lang, l); 34 | } catch (e) { 35 | return null; 36 | } 37 | } -------------------------------------------------------------------------------- /src/util/ModelTypeConverter.js: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | export const modelToType = (modelName) => { 18 | if (modelName === "gpt-3.5-turbo-0125") { 19 | return "GPT 3.5 (0125)" 20 | } else if (modelName.includes("gpt-3.5-turbo")) { 21 | return "GPT 3.5" 22 | } else if (modelName.includes("gpt-4-turbo")) { 23 | return "GPT 4 Turbo" 24 | } else if (modelName.includes("gpt-4")) { 25 | return "GPT 4" 26 | } else if (modelName.includes("o1")) { 27 | return "O1" 28 | } else { 29 | return "FT" 30 | } 31 | } 32 | 33 | export const supportedFileTypes = ["image/png", "image/jpeg", "image/jpg", "image/gif", "image/webp"]; 34 | -------------------------------------------------------------------------------- /src/widgets/MaterialEditText.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import { styled } from '@mui/material/styles'; 18 | import './../theme/colors.css' 19 | import {TextField} from "@mui/material"; 20 | 21 | export const MaterialEditText = styled(TextField)(({ theme }) => ({ 22 | '&': { 23 | width: "100%" 24 | }, 25 | '& label': { 26 | color: 'var(--color-accent-900)', 27 | }, 28 | '& label.Mui-focused': { 29 | color: 'var(--color-accent-900)', 30 | }, 31 | '& .MuiInput-underline:after': { 32 | borderBottomColor: 'var(--color-accent-900)', 33 | }, 34 | '& .MuiOutlinedInput-root': { 35 | '&.Mui-focused fieldset': { 36 | borderColor: 'var(--color-accent-900)', 37 | color: 'var(--color-accent-900)', 38 | }, 39 | }, 40 | })); -------------------------------------------------------------------------------- /src/widgets/NavigationBar.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import NavigationBarItem from "./NavigationBarItem"; 19 | import {MaterialButtonTonal16, MaterialButtonTonal16V2} from "./MaterialButton"; 20 | import {Tooltip} from "@mui/material"; 21 | import {Link} from "react-router-dom"; 22 | 23 | function NavigationBar({page, openAssistant}) { 24 | return ( 25 |
26 | 27 | { 32 | openAssistant(); 33 | }}>{"Launch 40 | 41 |
42 | 43 | 44 | 45 | 46 | 47 |
48 | 49 | 50 | { 56 | openAssistant(); 57 | }}>logout 58 | 59 | 60 |
61 | ); 62 | } 63 | 64 | export default NavigationBar; 65 | -------------------------------------------------------------------------------- /src/widgets/NavigationBarItem.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import {Link} from "react-router-dom"; 19 | import {BrowserView, MobileView} from "react-device-detect"; 20 | 21 | function NavigationBarItem({name, icon, isActive, page}) { 22 | return ( 23 | <> 24 | 25 | 26 |
27 |
28 | {icon} 31 |
32 |
33 |

{name}

34 | 35 |
36 | 37 | 38 |
39 |
40 | {icon} 43 |
44 |
45 |

{name}

46 | 47 |
48 | 49 | ); 50 | } 51 | 52 | export default NavigationBarItem; -------------------------------------------------------------------------------- /src/widgets/NavigationBarMobile.jsx: -------------------------------------------------------------------------------- 1 | /**************************************************************** 2 | * Copyright (c) 2023-2025 Dmytro Ostapenko. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *****************************************************************/ 16 | 17 | import React from 'react'; 18 | import NavigationBarItem from "./NavigationBarItem"; 19 | 20 | function NavigationBar({page, openAssistant}) { 21 | return ( 22 |
23 | 24 | 25 | 26 |
27 | ); 28 | } 29 | 30 | export default NavigationBar; 31 | -------------------------------------------------------------------------------- /windows_folder_icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndraxDev/speak-gpt-web/0214ef854b19161d7089995e5026c682ad16e6cf/windows_folder_icon.ico --------------------------------------------------------------------------------