abstra 3.24.0__py3-none-any.whl → 3.24.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- abstra/cli.py +8 -2
- {abstra-3.24.0.dist-info → abstra-3.24.1.dist-info}/METADATA +1 -2
- {abstra-3.24.0.dist-info → abstra-3.24.1.dist-info}/RECORD +178 -178
- abstra_internals/cloud_api/__init__.py +17 -8
- abstra_internals/contracts_generated.py +463 -453
- abstra_internals/controllers/ai.py +89 -1
- abstra_internals/controllers/git.py +2 -0
- abstra_internals/interface/cli/editor.py +2 -2
- abstra_internals/repositories/git/__init__.py +1 -14
- abstra_internals/repositories/git/git_test.py +4 -1214
- abstra_internals/repositories/git/native.py +2 -2
- abstra_internals/repositories/git/types.py +6 -0
- abstra_statics/dist/assets/AbstraButton.vue_vue_type_script_setup_true_lang.aefce2d3.js +2 -0
- abstra_statics/dist/assets/AbstraLogo.vue_vue_type_script_setup_true_lang.28bc9fc9.js +2 -0
- abstra_statics/dist/assets/ApiKeys.3c1e70dc.js +2 -0
- abstra_statics/dist/assets/App.9d8bd2aa.js +2 -0
- abstra_statics/dist/assets/App.vue_vue_type_style_index_0_lang.a64c7cee.js +2 -0
- abstra_statics/dist/assets/BaseLayout.72a6c8f2.js +2 -0
- abstra_statics/dist/assets/{Billing.60adc9fa.js → Billing.6b07f282.js} +2 -2
- abstra_statics/dist/assets/{Breadcrumb.26dec5f7.js → Breadcrumb.5c786c09.js} +2 -2
- abstra_statics/dist/assets/{Builds.f86210bc.js → Builds.d8c5c61b.js} +2 -2
- abstra_statics/dist/assets/{Card.6cfffb80.js → Card.fc77085c.js} +2 -2
- abstra_statics/dist/assets/{CircularLoading.a13d6a76.js → CircularLoading.998b223a.js} +2 -2
- abstra_statics/dist/assets/{CloseCircleOutlined.30bc25a8.js → CloseCircleOutlined.9ff269cc.js} +2 -2
- abstra_statics/dist/assets/{ConnectorsView.eb4c769f.js → ConnectorsView.e670738b.js} +2 -2
- abstra_statics/dist/assets/ConsoleOmniChat.vue_vue_type_script_setup_true_lang.3ca66327.js +2 -0
- abstra_statics/dist/assets/ContentLayout.0db8d7fb.js +2 -0
- abstra_statics/dist/assets/{CrudView.c0824225.js → CrudView.cc6aeaf0.js} +2 -2
- abstra_statics/dist/assets/DocsButton.vue_vue_type_script_setup_true_lang.689d8ce7.js +2 -0
- abstra_statics/dist/assets/{EditorLogin.46db248f.js → EditorLogin.691452b4.js} +2 -2
- abstra_statics/dist/assets/{EditorsView.e72621fa.js → EditorsView.fcdf0186.js} +2 -2
- abstra_statics/dist/assets/EnvVars.5519b4ce.js +2 -0
- abstra_statics/dist/assets/{Error.864f05b3.js → Error.11fd1f21.js} +2 -2
- abstra_statics/dist/assets/ExclamationCircleOutlined.d0aa47da.js +2 -0
- abstra_statics/dist/assets/Files.6ea18d46.js +2 -0
- abstra_statics/dist/assets/{Form.556d0de2.js → Form.09de384c.js} +2 -2
- abstra_statics/dist/assets/{FormRunner.7f56a8c6.js → FormRunner.15be6fa0.js} +2 -2
- abstra_statics/dist/assets/Home.782c5702.js +2 -0
- abstra_statics/dist/assets/Home.7c495aa9.js +2 -0
- abstra_statics/dist/assets/{Live.50bacfea.js → Live.48c10605.js} +2 -2
- abstra_statics/dist/assets/LoadingContainer.82ac3d44.js +2 -0
- abstra_statics/dist/assets/LoadingOutlined.66639b08.js +2 -0
- abstra_statics/dist/assets/Login.4a05f5c5.js +2 -0
- abstra_statics/dist/assets/{Login.536a3067.js → Login.4e852955.js} +2 -2
- abstra_statics/dist/assets/{Login.vue_vue_type_script_setup_true_lang.1c3f108d.js → Login.vue_vue_type_script_setup_true_lang.5161f328.js} +2 -2
- abstra_statics/dist/assets/Logo.65e0b37c.js +2 -0
- abstra_statics/dist/assets/{Logs.f6135084.js → Logs.7d1acf32.js} +2 -2
- abstra_statics/dist/assets/{LogsController.6b666816.js → LogsController.0eb2eb30.js} +2 -2
- abstra_statics/dist/assets/Main.0313f4fc.js +2 -0
- abstra_statics/dist/assets/{MockForm.deda9355.js → MockForm.0b819a52.js} +2 -2
- abstra_statics/dist/assets/Navbar.ef64aa09.js +2 -0
- abstra_statics/dist/assets/{NewEditor.5f84de86.css → NewEditor.b9c410fe.css} +1 -1
- abstra_statics/dist/assets/NewEditor.c928dbe9.js +8 -0
- abstra_statics/dist/assets/OidcLoginCallback.42a7c4f9.js +2 -0
- abstra_statics/dist/assets/OidcLogoutCallback.35931a68.js +2 -0
- abstra_statics/dist/assets/OmniChat.73d9f6bb.js +6 -0
- abstra_statics/dist/assets/OmniChat.a21fec40.css +1 -0
- abstra_statics/dist/assets/{OnboardingView.9413ee50.js → OnboardingView.25042384.js} +2 -2
- abstra_statics/dist/assets/{Organization.7203cc0b.js → Organization.66f64939.js} +2 -2
- abstra_statics/dist/assets/Organizations.47868beb.js +2 -0
- abstra_statics/dist/assets/{PhArrowCounterClockwise.vue.8090d021.js → PhArrowCounterClockwise.vue.78877a50.js} +2 -2
- abstra_statics/dist/assets/{PhArrowSquareOut.vue.26582195.js → PhArrowSquareOut.vue.2ddfc219.js} +2 -2
- abstra_statics/dist/assets/{PhBookBookmark.vue.5b7ab079.js → PhBookBookmark.vue.41108214.js} +2 -2
- abstra_statics/dist/assets/{PhChats.vue.b5df7174.js → PhChats.vue.71e5cb89.js} +2 -2
- abstra_statics/dist/assets/{PhClockCounterClockwise.vue.812311ad.js → PhClockCounterClockwise.vue.854c3cb5.js} +2 -2
- abstra_statics/dist/assets/{PhCopy.vue.59b0f1b4.js → PhCopy.vue.d116ddfb.js} +2 -2
- abstra_statics/dist/assets/PhCopySimple.vue.5d0f839d.js +2 -0
- abstra_statics/dist/assets/{PhCube.vue.63ae7d32.js → PhCube.vue.abf4a034.js} +2 -2
- abstra_statics/dist/assets/{PhDatabase.vue.edfcb96b.js → PhDatabase.vue.a94d95f6.js} +2 -2
- abstra_statics/dist/assets/{PhDotsThreeVertical.vue.ab4580a5.js → PhDotsThreeVertical.vue.5e8ae2a9.js} +2 -2
- abstra_statics/dist/assets/PhDownloadSimple.vue.e88f64f1.js +2 -0
- abstra_statics/dist/assets/{PhFolderPlus.vue.05ba4a5c.js → PhFolderPlus.vue.21d377a3.js} +2 -2
- abstra_statics/dist/assets/{PhGear.vue.0e4a6135.js → PhGear.vue.363dd83c.js} +2 -2
- abstra_statics/dist/assets/{PhKey.vue.b2c184d1.js → PhKey.vue.23f3a465.js} +2 -2
- abstra_statics/dist/assets/{PhPencil.vue.2f2fe576.js → PhPencil.vue.feb383e2.js} +2 -2
- abstra_statics/dist/assets/{PhPencilSimple.vue.cc8620ae.js → PhPencilSimple.vue.ec0eebb4.js} +2 -2
- abstra_statics/dist/assets/{PhRocket.vue.e397203c.js → PhRocket.vue.261a42b2.js} +2 -2
- abstra_statics/dist/assets/{PhSignOut.vue.a271f14b.js → PhSignOut.vue.d1d6498f.js} +2 -2
- abstra_statics/dist/assets/{PhSparkle.vue.726defa2.js → PhSparkle.vue.b6712d34.js} +2 -2
- abstra_statics/dist/assets/{PhUserList.vue.6a29f16d.js → PhUserList.vue.e0b8c21b.js} +2 -2
- abstra_statics/dist/assets/{PhUsersThree.vue.275d13ab.js → PhUsersThree.vue.8889f957.js} +2 -2
- abstra_statics/dist/assets/{PhWarningCircle.vue.3b1aca1b.js → PhWarningCircle.vue.2087be7d.js} +2 -2
- abstra_statics/dist/assets/{PhWebhooksLogo.vue.5e772aac.js → PhWebhooksLogo.vue.d164db1e.js} +2 -2
- abstra_statics/dist/assets/{PlayerConfigProvider.e90a2b41.js → PlayerConfigProvider.28e29025.js} +2 -2
- abstra_statics/dist/assets/{PlayerNavbar.11ec1844.js → PlayerNavbar.aaad1dfd.js} +2 -2
- abstra_statics/dist/assets/Project.2de506d7.js +2 -0
- abstra_statics/dist/assets/ProjectLogin.22c8b093.js +2 -0
- abstra_statics/dist/assets/{ProjectSettings.52c19693.js → ProjectSettings.d065c292.js} +2 -2
- abstra_statics/dist/assets/{ProjectsView.22fa7a8e.js → ProjectsView.cbd118ac.js} +2 -2
- abstra_statics/dist/assets/{SaveButton.719393d2.js → SaveButton.428227de.js} +2 -2
- abstra_statics/dist/assets/ScrollArea.vue_vue_type_script_setup_true_lang.6d724b05.js +2 -0
- abstra_statics/dist/assets/{Sidebar.5cb8e04e.js → Sidebar.41173d8e.js} +2 -2
- abstra_statics/dist/assets/{Sql.23d80bad.js → Sql.c070dd2c.js} +4 -4
- abstra_statics/dist/assets/Steps.dd51a108.js +2 -0
- abstra_statics/dist/assets/TableCard.c9a1cf41.js +2 -0
- abstra_statics/dist/assets/TableEditor.1bc47a95.js +2 -0
- abstra_statics/dist/assets/{Tables.44d953f7.js → Tables.eff119eb.js} +2 -2
- abstra_statics/dist/assets/{TablesDiagram.8e47383c.js → TablesDiagram.d633acaf.js} +3 -3
- abstra_statics/dist/assets/TablesTabs.vue_vue_type_script_setup_true_lang.cf7e34c5.js +2 -0
- abstra_statics/dist/assets/{Tasks.09551b19.js → Tasks.c311b05f.js} +2 -2
- abstra_statics/dist/assets/{UploadOutlined.eab75eb0.js → UploadOutlined.9aa845de.js} +2 -2
- abstra_statics/dist/assets/{View.5fd7ddf0.js → View.dd7ba25a.js} +2 -2
- abstra_statics/dist/assets/{View.vue_vue_type_script_setup_true_lang.a904f400.js → View.vue_vue_type_script_setup_true_lang.e6563207.js} +2 -2
- abstra_statics/dist/assets/{Watermark.ab3d818f.js → Watermark.9c9358e3.js} +2 -2
- abstra_statics/dist/assets/{WebEditor.d6ec6392.js → WebEditor.83f2a960.js} +2 -2
- abstra_statics/dist/assets/WidgetPreview.7c6a231c.js +2 -0
- abstra_statics/dist/assets/ant-design.42419021.js +2 -0
- abstra_statics/dist/assets/{apiKey.72f497ca.js → apiKey.403049eb.js} +2 -2
- abstra_statics/dist/assets/{asyncComputed.cf5282fc.js → asyncComputed.47aec2b5.js} +2 -2
- abstra_statics/dist/assets/{build.df2d55cc.js → build.45b511b6.js} +2 -2
- abstra_statics/dist/assets/colorHelpers.50ced1e9.js +2 -0
- abstra_statics/dist/assets/{console.2bf7f04d.js → console.f0f09e6f.js} +2 -2
- abstra_statics/dist/assets/constants.d569f33d.js +2 -0
- abstra_statics/dist/assets/{contracts.generated.590b1102.js → contracts.generated.aefe8d0a.js} +2 -2
- abstra_statics/dist/assets/{cssMode.7133c7cb.js → cssMode.23271d4a.js} +2 -2
- abstra_statics/dist/assets/datetime.82608dfb.js +2 -0
- abstra_statics/dist/assets/dayjs.7f71c60a.js +2 -0
- abstra_statics/dist/assets/editor.02184ced.js +2 -0
- abstra_statics/dist/assets/editor.main.0f931e87.js +2 -0
- abstra_statics/dist/assets/fetch.1b3d01a0.js +2 -0
- abstra_statics/dist/assets/files.8b58ee7e.js +2 -0
- abstra_statics/dist/assets/{folder.d8e23009.js → folder.13d3acac.js} +2 -2
- abstra_statics/dist/assets/{freemarker2.6698d1ea.js → freemarker2.f79b510b.js} +2 -2
- abstra_statics/dist/assets/{handlebars.a6c42dc0.js → handlebars.07d5febe.js} +2 -2
- abstra_statics/dist/assets/{html.493a5410.js → html.7d6a59b4.js} +2 -2
- abstra_statics/dist/assets/{htmlMode.a28b2fca.js → htmlMode.7779ff94.js} +2 -2
- abstra_statics/dist/assets/{index.5d6b1e62.js → index.482df04a.js} +2 -2
- abstra_statics/dist/assets/{index.79ce3bf1.js → index.581e2edd.js} +2 -2
- abstra_statics/dist/assets/{index.fb182bd1.js → index.966ac1b9.js} +2 -2
- abstra_statics/dist/assets/{index.4176fe88.js → index.c7a996a6.js} +2 -2
- abstra_statics/dist/assets/{index.c34a405a.js → index.c8a56795.js} +2 -2
- abstra_statics/dist/assets/{index.fb49354b.js → index.d31da2c3.js} +2 -2
- abstra_statics/dist/assets/{index.2af3391c.js → index.d53182ed.js} +2 -2
- abstra_statics/dist/assets/{index.4d20c159.js → index.e71a5f84.js} +2 -2
- abstra_statics/dist/assets/{javascript.3a36cf17.js → javascript.4c528c2c.js} +3 -3
- abstra_statics/dist/assets/{jsonMode.bead6ac8.js → jsonMode.d6441e9d.js} +2 -2
- abstra_statics/dist/assets/{jwt-decode.esm.d4517a10.js → jwt-decode.esm.54a1ea22.js} +8 -8
- abstra_statics/dist/assets/{linters.2f3141cb.js → linters.a0f2aa84.js} +2 -2
- abstra_statics/dist/assets/{liquid.0c337fae.js → liquid.0c441ad2.js} +3 -3
- abstra_statics/dist/assets/member.2260c37e.js +2 -0
- abstra_statics/dist/assets/{metadata.c3aed6e1.js → metadata.0098e20c.js} +2 -2
- abstra_statics/dist/assets/omniChatStore.dd7a1c46.js +8 -0
- abstra_statics/dist/assets/{organization.928c9bef.js → organization.668d1b58.js} +2 -2
- abstra_statics/dist/assets/player.4ab4aed5.js +2 -0
- abstra_statics/dist/assets/{plotly.min.7225d3a0.js → plotly.min.2a87d7e2.js} +2 -2
- abstra_statics/dist/assets/polling.b5a32c22.js +2 -0
- abstra_statics/dist/assets/{project.619b7244.js → project.1b8374f4.js} +2 -2
- abstra_statics/dist/assets/{python.05764499.js → python.7ac27a56.js} +3 -3
- abstra_statics/dist/assets/{razor.81a45581.js → razor.860a0279.js} +3 -3
- abstra_statics/dist/assets/record.e83a2eb2.js +2 -0
- abstra_statics/dist/assets/{redirect.f028a879.js → redirect.586749f4.js} +2 -2
- abstra_statics/dist/assets/repository.3a331f0f.js +2 -0
- abstra_statics/dist/assets/repository.66c7567c.js +2 -0
- abstra_statics/dist/assets/router.06ee2b9d.js +2 -0
- abstra_statics/dist/assets/{router.424f7da9.js → router.4dfadf5d.js} +3 -3
- abstra_statics/dist/assets/string.61e11a30.js +2 -0
- abstra_statics/dist/assets/{tables.1f68ec62.js → tables.1bcb1140.js} +2 -2
- abstra_statics/dist/assets/{tasksController.371896de.js → tasksController.f3adf725.js} +2 -2
- abstra_statics/dist/assets/{toggleHighContrast.0d0e5662.js → toggleHighContrast.9535bf54.js} +7 -7
- abstra_statics/dist/assets/{tsMode.6eadbf06.js → tsMode.c0f9fe1a.js} +2 -2
- abstra_statics/dist/assets/{typescript.1670e287.js → typescript.310eae6d.js} +3 -3
- abstra_statics/dist/assets/url.f5664225.js +2 -0
- abstra_statics/dist/assets/{useCodebaseEvents.53dec1f2.js → useCodebaseEvents.276cc8f0.js} +2 -2
- abstra_statics/dist/assets/{useTables.4f034cf8.js → useTables.18fc3efd.js} +2 -2
- abstra_statics/dist/assets/userStore.6ab1e5ac.js +2 -0
- abstra_statics/dist/assets/uuid.5b8ba8af.js +2 -0
- abstra_statics/dist/assets/{vue-flow-background.818c7852.js → vue-flow-background.af096866.js} +2 -2
- abstra_statics/dist/assets/{vue-flow-core.1180ec83.js → vue-flow-core.6cb99d32.js} +3 -3
- abstra_statics/dist/assets/{vue-quill.esm-bundler.c4f04985.js → vue-quill.esm-bundler.e3d34d0e.js} +2 -2
- abstra_statics/dist/assets/{workspaceStore.6244d03d.js → workspaceStore.fac1e9a9.js} +2 -2
- abstra_statics/dist/assets/{xml.f2867af8.js → xml.04864db4.js} +3 -3
- abstra_statics/dist/assets/{yaml.5427bb1b.js → yaml.f30375fe.js} +3 -3
- abstra_statics/dist/console.html +14 -14
- abstra_statics/dist/editor.html +13 -13
- abstra_statics/dist/player.html +9 -9
- abstra_internals/repositories/git/dulwich.py +0 -1353
- abstra_statics/dist/assets/AbstraButton.vue_vue_type_script_setup_true_lang.eb8ccb64.js +0 -2
- abstra_statics/dist/assets/AbstraLogo.vue_vue_type_script_setup_true_lang.9f98292e.js +0 -2
- abstra_statics/dist/assets/ApiKeys.e975c4f3.js +0 -2
- abstra_statics/dist/assets/App.f62faff6.js +0 -2
- abstra_statics/dist/assets/App.vue_vue_type_style_index_0_lang.5aa45ac1.js +0 -2
- abstra_statics/dist/assets/BaseLayout.1ec2c96d.js +0 -2
- abstra_statics/dist/assets/ConsoleOmniChat.vue_vue_type_script_setup_true_lang.8d2e4672.js +0 -2
- abstra_statics/dist/assets/ContentLayout.d03fee5b.js +0 -2
- abstra_statics/dist/assets/DocsButton.vue_vue_type_script_setup_true_lang.3668aee4.js +0 -2
- abstra_statics/dist/assets/EnvVars.f9f9d61f.js +0 -2
- abstra_statics/dist/assets/ExclamationCircleOutlined.a489b996.js +0 -2
- abstra_statics/dist/assets/Files.afe615e1.js +0 -2
- abstra_statics/dist/assets/Home.287d17f8.js +0 -2
- abstra_statics/dist/assets/Home.5b7e9c23.js +0 -2
- abstra_statics/dist/assets/LoadingContainer.ebace8de.js +0 -2
- abstra_statics/dist/assets/LoadingOutlined.9e949112.js +0 -2
- abstra_statics/dist/assets/Login.bec408c9.js +0 -2
- abstra_statics/dist/assets/Logo.82d6ab70.js +0 -2
- abstra_statics/dist/assets/Main.77b115f8.js +0 -2
- abstra_statics/dist/assets/Navbar.4a6f2b09.js +0 -2
- abstra_statics/dist/assets/NewEditor.e558e47d.js +0 -8
- abstra_statics/dist/assets/OidcLoginCallback.7f514b45.js +0 -2
- abstra_statics/dist/assets/OidcLogoutCallback.038813a1.js +0 -2
- abstra_statics/dist/assets/OmniChat.05ba8d8a.css +0 -1
- abstra_statics/dist/assets/OmniChat.60d98deb.js +0 -6
- abstra_statics/dist/assets/Organizations.91220ca0.js +0 -2
- abstra_statics/dist/assets/PhCopySimple.vue.d41d9160.js +0 -2
- abstra_statics/dist/assets/PhDownloadSimple.vue.c2eaaad1.js +0 -2
- abstra_statics/dist/assets/Project.c16740fb.js +0 -2
- abstra_statics/dist/assets/ProjectLogin.e7a6f444.js +0 -2
- abstra_statics/dist/assets/ScrollArea.vue_vue_type_script_setup_true_lang.d4028954.js +0 -2
- abstra_statics/dist/assets/Steps.8e5d201a.js +0 -2
- abstra_statics/dist/assets/TableCard.59f95f8f.js +0 -2
- abstra_statics/dist/assets/TableEditor.8539f984.js +0 -2
- abstra_statics/dist/assets/TablesTabs.vue_vue_type_script_setup_true_lang.6866fb32.js +0 -2
- abstra_statics/dist/assets/WidgetPreview.86b31dec.js +0 -2
- abstra_statics/dist/assets/ant-design.a865486e.js +0 -2
- abstra_statics/dist/assets/colorHelpers.37d9932b.js +0 -2
- abstra_statics/dist/assets/constants.7d38ec8b.js +0 -2
- abstra_statics/dist/assets/datetime.8de2ff28.js +0 -2
- abstra_statics/dist/assets/dayjs.f18bbbca.js +0 -2
- abstra_statics/dist/assets/editor.3a4714e3.js +0 -2
- abstra_statics/dist/assets/editor.main.9c635b9a.js +0 -2
- abstra_statics/dist/assets/fetch.89fd5b7b.js +0 -2
- abstra_statics/dist/assets/member.48d6f2cd.js +0 -2
- abstra_statics/dist/assets/omniChatStore.c53bcca2.js +0 -8
- abstra_statics/dist/assets/player.d3aeafc5.js +0 -2
- abstra_statics/dist/assets/polling.82ee6b45.js +0 -2
- abstra_statics/dist/assets/record.7f43486c.js +0 -2
- abstra_statics/dist/assets/repository.9534db4b.js +0 -2
- abstra_statics/dist/assets/repository.c15239ce.js +0 -2
- abstra_statics/dist/assets/router.262190ec.js +0 -2
- abstra_statics/dist/assets/string.0acf5572.js +0 -2
- abstra_statics/dist/assets/url.e8732f77.js +0 -2
- abstra_statics/dist/assets/userStore.31024da3.js +0 -2
- abstra_statics/dist/assets/uuid.bde15ce7.js +0 -2
- {abstra-3.24.0.dist-info → abstra-3.24.1.dist-info}/WHEEL +0 -0
- {abstra-3.24.0.dist-info → abstra-3.24.1.dist-info}/entry_points.txt +0 -0
- {abstra-3.24.0.dist-info → abstra-3.24.1.dist-info}/top_level.txt +0 -0
|
@@ -1,10 +1,17 @@
|
|
|
1
|
+
import base64
|
|
2
|
+
import io
|
|
1
3
|
from dataclasses import dataclass
|
|
2
4
|
from typing import Any, Dict, List
|
|
3
5
|
|
|
6
|
+
import pypdfium2 as pdfium
|
|
7
|
+
|
|
4
8
|
from abstra_internals.cloud_api import get_session_path, get_tunnel_secret_key
|
|
5
9
|
from abstra_internals.contracts_generated import (
|
|
6
10
|
AbstraLibApiAiStreamRequest,
|
|
7
11
|
CloudApiCliAiV2StreamRequest,
|
|
12
|
+
CloudApiCliAiV2StreamRequestContentItem,
|
|
13
|
+
CloudApiCliAiV2StreamRequestContentItemAssistantFileInput,
|
|
14
|
+
CloudApiCliAiV2StreamRequestContentItemAssistantTextInput,
|
|
8
15
|
)
|
|
9
16
|
from abstra_internals.controllers.main import MainController
|
|
10
17
|
from abstra_internals.credentials import resolve_headers
|
|
@@ -71,15 +78,96 @@ class AiController:
|
|
|
71
78
|
self.controller = controller
|
|
72
79
|
self.repos = controller.repositories
|
|
73
80
|
|
|
81
|
+
def _extract_pdf_images(self, pdf_bytes: bytes) -> List[bytes]:
|
|
82
|
+
images = []
|
|
83
|
+
pdf_io = io.BytesIO(pdf_bytes)
|
|
84
|
+
for page in pdfium.PdfDocument(pdf_io):
|
|
85
|
+
bitmap = page.render(
|
|
86
|
+
scale=4, # 288 dpi
|
|
87
|
+
rotation=0,
|
|
88
|
+
)
|
|
89
|
+
pil_image = bitmap.to_pil()
|
|
90
|
+
image_io = io.BytesIO()
|
|
91
|
+
pil_image.save(image_io, format="png")
|
|
92
|
+
image_io.seek(0)
|
|
93
|
+
images.append(image_io.read())
|
|
94
|
+
return images
|
|
95
|
+
|
|
96
|
+
def _process_pdf_content(
|
|
97
|
+
self, pdf_file: CloudApiCliAiV2StreamRequestContentItemAssistantFileInput
|
|
98
|
+
) -> List[CloudApiCliAiV2StreamRequestContentItem]:
|
|
99
|
+
processed_items = []
|
|
100
|
+
try:
|
|
101
|
+
pdf_bytes = base64.b64decode(pdf_file.file_content)
|
|
102
|
+
images = self._extract_pdf_images(pdf_bytes)
|
|
103
|
+
|
|
104
|
+
processed_items.append(
|
|
105
|
+
CloudApiCliAiV2StreamRequestContentItemAssistantTextInput(
|
|
106
|
+
type="text",
|
|
107
|
+
text=f"[PDF Document: {pdf_file.file_name} - {len(images)} page(s)]",
|
|
108
|
+
)
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
for idx, image_bytes in enumerate(images, 1):
|
|
112
|
+
image_base64 = base64.b64encode(image_bytes).decode("utf-8")
|
|
113
|
+
processed_items.append(
|
|
114
|
+
CloudApiCliAiV2StreamRequestContentItemAssistantFileInput(
|
|
115
|
+
type="file",
|
|
116
|
+
file_name=f"{pdf_file.file_name}_page_{idx}.png",
|
|
117
|
+
file_content=image_base64,
|
|
118
|
+
)
|
|
119
|
+
)
|
|
120
|
+
except Exception as e:
|
|
121
|
+
print(f"Error extracting PDF images: {e}")
|
|
122
|
+
processed_items.append(
|
|
123
|
+
CloudApiCliAiV2StreamRequestContentItemAssistantTextInput(
|
|
124
|
+
type="text",
|
|
125
|
+
text=f"[PDF Document: {pdf_file.file_name}]\nNote: Could not extract images from this PDF.",
|
|
126
|
+
)
|
|
127
|
+
)
|
|
128
|
+
return processed_items
|
|
129
|
+
|
|
130
|
+
def _process_content(
|
|
131
|
+
self, content: List[CloudApiCliAiV2StreamRequestContentItem]
|
|
132
|
+
) -> List[CloudApiCliAiV2StreamRequestContentItem]:
|
|
133
|
+
processed_content = []
|
|
134
|
+
|
|
135
|
+
for item in content:
|
|
136
|
+
if isinstance(
|
|
137
|
+
item, CloudApiCliAiV2StreamRequestContentItemAssistantTextInput
|
|
138
|
+
):
|
|
139
|
+
processed_content.append(item)
|
|
140
|
+
continue
|
|
141
|
+
|
|
142
|
+
if not item.file_name.lower().endswith(".pdf"):
|
|
143
|
+
processed_content.append(item)
|
|
144
|
+
continue
|
|
145
|
+
|
|
146
|
+
try:
|
|
147
|
+
processed_pdf_items = self._process_pdf_content(item)
|
|
148
|
+
processed_content.extend(processed_pdf_items)
|
|
149
|
+
except Exception as e:
|
|
150
|
+
print(f"Error extracting PDF images: {e}")
|
|
151
|
+
processed_content.append(
|
|
152
|
+
CloudApiCliAiV2StreamRequestContentItemAssistantTextInput(
|
|
153
|
+
type="text",
|
|
154
|
+
text=f"[PDF Document: {item.file_name}]\nNote: Could not extract images from this PDF.",
|
|
155
|
+
)
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
return processed_content
|
|
159
|
+
|
|
74
160
|
def send_ai_message(
|
|
75
161
|
self,
|
|
76
162
|
body: AbstraLibApiAiStreamRequest,
|
|
77
163
|
):
|
|
78
164
|
try:
|
|
165
|
+
processed_content = self._process_content(body.content)
|
|
166
|
+
|
|
79
167
|
yield from self.repos.ai.get_ai_messages(
|
|
80
168
|
CloudApiCliAiV2StreamRequest(
|
|
81
169
|
conversation_id=body.conversation_id,
|
|
82
|
-
content=
|
|
170
|
+
content=processed_content,
|
|
83
171
|
context={
|
|
84
172
|
**body.context,
|
|
85
173
|
"libVersion": str(get_local_package_version()),
|
|
@@ -165,6 +165,8 @@ class GitController:
|
|
|
165
165
|
|
|
166
166
|
status_response = GitStatusResponse(
|
|
167
167
|
available=status.available,
|
|
168
|
+
git_installed=status.git_installed,
|
|
169
|
+
is_monorepo=status.is_monorepo,
|
|
168
170
|
branch=status.branch,
|
|
169
171
|
branches=status.branches,
|
|
170
172
|
last_commit=status.last_commit,
|
|
@@ -80,7 +80,7 @@ def ensure_certificates():
|
|
|
80
80
|
print(f"Failed to restore certificates: {update_e}")
|
|
81
81
|
|
|
82
82
|
|
|
83
|
-
def editor(headless: bool):
|
|
83
|
+
def editor(headless: bool, verbose: bool = False):
|
|
84
84
|
ensure_certificates()
|
|
85
85
|
|
|
86
86
|
load_dotenv(Settings.root_path / ".env")
|
|
@@ -119,6 +119,6 @@ def editor(headless: bool):
|
|
|
119
119
|
if not headless:
|
|
120
120
|
background_open_editor()
|
|
121
121
|
|
|
122
|
-
connect_tunnel()
|
|
122
|
+
connect_tunnel(verbose=verbose)
|
|
123
123
|
|
|
124
124
|
server.serve_forever()
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
import shutil
|
|
2
|
-
|
|
3
|
-
from abstra_internals.environment import FORCE_GIT_CLIENT
|
|
4
|
-
|
|
5
|
-
from .dulwich import DulwichGitRepository
|
|
6
1
|
from .native import NativeGitRepository
|
|
7
2
|
from .types import (
|
|
8
3
|
AheadBehindInfo,
|
|
@@ -15,14 +10,7 @@ from .types import (
|
|
|
15
10
|
|
|
16
11
|
|
|
17
12
|
def create_git_repository(working_directory) -> GitRepositoryInterface:
|
|
18
|
-
|
|
19
|
-
return NativeGitRepository(working_directory)
|
|
20
|
-
elif FORCE_GIT_CLIENT == "dulwich":
|
|
21
|
-
return DulwichGitRepository(working_directory)
|
|
22
|
-
elif shutil.which("git") is not None:
|
|
23
|
-
return NativeGitRepository(working_directory)
|
|
24
|
-
else:
|
|
25
|
-
return DulwichGitRepository(working_directory)
|
|
13
|
+
return NativeGitRepository(working_directory)
|
|
26
14
|
|
|
27
15
|
|
|
28
16
|
__all__ = [
|
|
@@ -32,7 +20,6 @@ __all__ = [
|
|
|
32
20
|
"GitStatusResponse",
|
|
33
21
|
"GitRepositoryInterface",
|
|
34
22
|
"NativeGitRepository",
|
|
35
|
-
"DulwichGitRepository",
|
|
36
23
|
"create_git_repository",
|
|
37
24
|
"AheadBehindInfo",
|
|
38
25
|
]
|