@kedem/okdb 1.0.0
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.
- package/LICENSE +57 -0
- package/README.md +344 -0
- package/banner.jpg +0 -0
- package/bin/okdb.js +2 -0
- package/docs/OKDB-ARCHITECTURE.md +1036 -0
- package/docs/auth-and-sync.md +558 -0
- package/docs/auth-permissions.md +143 -0
- package/docs/change-log.md +169 -0
- package/docs/data-model.md +174 -0
- package/docs/embeddings.md +338 -0
- package/docs/files.md +131 -0
- package/docs/fts.md +139 -0
- package/docs/functions.md +514 -0
- package/docs/getting-started.md +233 -0
- package/docs/http-api.md +705 -0
- package/docs/index.md +115 -0
- package/docs/indexes.md +207 -0
- package/docs/logging.md +116 -0
- package/docs/manifest.json +38 -0
- package/docs/migration.md +154 -0
- package/docs/pipelines.md +598 -0
- package/docs/plugins.md +144 -0
- package/docs/querying.md +204 -0
- package/docs/queue.md +637 -0
- package/docs/sync.md +156 -0
- package/docs/transactions.md +140 -0
- package/docs/ttl.md +375 -0
- package/okdb.js +1 -0
- package/package.json +26 -0
- package/public/admin-app.js +1 -0
- package/public/android-chrome-192x192.png +0 -0
- package/public/android-chrome-512x512.png +0 -0
- package/public/apple-touch-icon.png +0 -0
- package/public/components/admin-route-host.ok.js +1 -0
- package/public/components/env-picker.ok.js +1 -0
- package/public/components/field-path-input.ok.js +1 -0
- package/public/components/field.html +6 -0
- package/public/components/geo-map.ok.js +1 -0
- package/public/components/ok-cron-input.ok.js +1 -0
- package/public/components/ok-dropzone.ok.js +1 -0
- package/public/components/ok-js-input.ok.js +1 -0
- package/public/components/ok-json-input.ok.js +1 -0
- package/public/components/ok-text-monaco-input.ok.js +1 -0
- package/public/components/theme-toggle.ok.js +1 -0
- package/public/favicon-16x16.png +0 -0
- package/public/favicon-32x32.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/images/logo.png +0 -0
- package/public/images/logo.svg +333 -0
- package/public/index.html +6 -0
- package/public/layouts/_default.ok.html +1 -0
- package/public/layouts/okdb-cube.ok.html +1 -0
- package/public/login-app.js +1 -0
- package/public/login.html +1 -0
- package/public/modules/ok.js +1 -0
- package/public/sections/api/index.ok.html +1 -0
- package/public/sections/api/parts/api-endpoint.ok.js +1 -0
- package/public/sections/auth/index.ok.html +1 -0
- package/public/sections/auth/modals/create-token-modal.ok.js +1 -0
- package/public/sections/auth/modals/edit-token-modal.ok.js +1 -0
- package/public/sections/auth/modals/perm-info-popover.ok.js +1 -0
- package/public/sections/auth/parts/token-detail.ok.js +1 -0
- package/public/sections/auth/parts/token-list.ok.js +1 -0
- package/public/sections/db/index.ok.html +1 -0
- package/public/sections/db/modals/add-item-modal.ok.js +1 -0
- package/public/sections/db/modals/create-env-modal.ok.js +1 -0
- package/public/sections/db/modals/create-fts-modal.ok.js +1 -0
- package/public/sections/db/modals/create-index-modal.ok.js +1 -0
- package/public/sections/db/modals/create-pipeline-modal.ok.js +1 -0
- package/public/sections/db/modals/demo-env-modal.ok.js +1 -0
- package/public/sections/db/modals/remove-env-modal.ok.js +1 -0
- package/public/sections/db/modals/schema-edit-modal.ok.js +1 -0
- package/public/sections/db/parts/db-overview.ok.js +1 -0
- package/public/sections/db/parts/db-pipelines-panel.ok.js +1 -0
- package/public/sections/db/parts/edit-row.ok.js +1 -0
- package/public/sections/db/parts/tm-timeline.ok.js +1 -0
- package/public/sections/db/parts/type-changelog.ok.js +1 -0
- package/public/sections/db/parts/type-list.ok.js +1 -0
- package/public/sections/db/parts/type-pipelines-tab.ok.js +1 -0
- package/public/sections/db/parts/type-schema-tab.ok.js +1 -0
- package/public/sections/db/parts/type-viewer.ok.js +1 -0
- package/public/sections/db/parts/type-violations-tab.ok.js +1 -0
- package/public/sections/docs/index.ok.html +1 -0
- package/public/sections/embeddings/index.ok.html +1 -0
- package/public/sections/embeddings/modals/register-model-modal.ok.js +1 -0
- package/public/sections/embeddings/parts/embed-create-panel.ok.js +1 -0
- package/public/sections/embeddings/parts/embed-embedder-panel.ok.js +1 -0
- package/public/sections/embeddings/parts/embed-engine-declaration-editor.ok.js +1 -0
- package/public/sections/embeddings/parts/embed-engine-list.ok.js +1 -0
- package/public/sections/embeddings/parts/embed-indexer-panel.ok.js +1 -0
- package/public/sections/embeddings/parts/embed-lifecycle-bar.ok.js +1 -0
- package/public/sections/embeddings/parts/embed-model-catalog.ok.js +1 -0
- package/public/sections/embeddings/parts/embed-overview.ok.js +1 -0
- package/public/sections/embeddings/parts/embed-search-panel.ok.js +1 -0
- package/public/sections/embeddings/parts/embed-worker-panel.ok.js +1 -0
- package/public/sections/embeddings/parts/embeddings-engine-panel.ok.js +1 -0
- package/public/sections/embeddings/parts/engines-overview.ok.js +1 -0
- package/public/sections/embeddings/parts/pipeline-create-panel.ok.js +1 -0
- package/public/sections/engines/engine-panel-shared-style.js +1 -0
- package/public/sections/engines/engine-ui-utils.js +1 -0
- package/public/sections/engines/index.ok.html +1 -0
- package/public/sections/engines/modals/engine-modal.ok.js +1 -0
- package/public/sections/engines/parts/engine-declaration-editor.ok.js +1 -0
- package/public/sections/engines/parts/engine-lifecycle-actions.ok.js +1 -0
- package/public/sections/engines/parts/engine-panel-shell.ok.js +1 -0
- package/public/sections/engines/parts/engine-resource-card.ok.js +1 -0
- package/public/sections/engines/parts/engine-row-item.ok.js +1 -0
- package/public/sections/engines/parts/generic-engine-panel.ok.js +1 -0
- package/public/sections/files/index.ok.html +1 -0
- package/public/sections/files/parts/files-blob-status.ok.js +1 -0
- package/public/sections/files/parts/files-collection-list.ok.js +1 -0
- package/public/sections/files/parts/files-collection-panel.ok.js +1 -0
- package/public/sections/files/parts/files-file-list.ok.js +1 -0
- package/public/sections/files/parts/files-overview.ok.js +1 -0
- package/public/sections/files/parts/files-path-browser.ok.js +1 -0
- package/public/sections/files/parts/files-upload-panel.ok.js +1 -0
- package/public/sections/functions/index.ok.html +1 -0
- package/public/sections/functions/modals/function-modal.ok.js +1 -0
- package/public/sections/functions/parts/function-detail.ok.js +1 -0
- package/public/sections/functions/parts/function-logs.ok.js +1 -0
- package/public/sections/functions/parts/function-runner.ok.js +1 -0
- package/public/sections/functions/parts/functions-list.ok.js +1 -0
- package/public/sections/license/index.ok.html +1 -0
- package/public/sections/license/parts/license-panel.ok.js +1 -0
- package/public/sections/processors/index.ok.html +1 -0
- package/public/sections/queue/index.ok.html +1 -0
- package/public/sections/queue/modals/create-bucket-modal.ok.js +1 -0
- package/public/sections/queue/modals/edit-bucket-modal.ok.js +1 -0
- package/public/sections/queue/modals/edit-job-modal.ok.js +1 -0
- package/public/sections/queue/modals/enqueue-job-modal.ok.js +1 -0
- package/public/sections/queue/modals/job-type-modal.ok.js +1 -0
- package/public/sections/queue/parts/ok-job-form.ok.js +1 -0
- package/public/sections/queue/parts/queue-buckets.ok.js +1 -0
- package/public/sections/queue/parts/queue-job-types.ok.js +1 -0
- package/public/sections/queue/parts/queue-jobs.ok.js +1 -0
- package/public/sections/queue/parts/queue-types.ok.js +1 -0
- package/public/sections/queue/parts/queue-workers.ok.js +1 -0
- package/public/sections/sync/index.ok.html +5 -0
- package/public/sections/sync/parts/sync-node-detail.ok.js +1 -0
- package/public/sections/sync/parts/sync-retention.ok.js +1 -0
- package/public/sections/sync/parts/sync-topology.ok.js +1 -0
- package/public/sections/system/index.ok.html +1 -0
- package/public/sections/system/modals/data-ops-modal.ok.js +1 -0
- package/public/sections/system/parts/system-api-panel.ok.js +1 -0
- package/public/sections/system/parts/system-auth-panel.ok.js +1 -0
- package/public/sections/system/parts/system-log-history.ok.js +1 -0
- package/public/sections/system/parts/system-log.ok.js +1 -0
- package/public/sections/system/parts/system-status.ok.js +1 -0
- package/public/sections/system/parts/system-sync-panel.ok.js +1 -0
- package/public/sections/views/index.ok.html +1 -0
- package/public/sections/views/modals/create-view-modal.ok.js +1 -0
- package/public/sections/views/parts/view-detail.ok.js +1 -0
- package/public/sections/views/parts/views-list.ok.js +1 -0
- package/public/sections/views/parts/views-overview.ok.js +1 -0
- package/public/setup-app.js +1 -0
- package/public/setup.html +1 -0
- package/public/site.webmanifest +1 -0
- package/public/stores/auth-store.js +1 -0
- package/public/stores/events-store.js +1 -0
- package/public/stores/functions-store.js +1 -0
- package/public/stores/okdb-store.js +1 -0
- package/public/stores/theme-store.js +1 -0
- package/public/styles.css +1 -0
- package/public/test-cron-input.html +10 -0
- package/public/test-json-input.html +101 -0
- package/public/util/permissions.js +1 -0
- package/public/util/sift-schema.js +1 -0
- package/public/vendor/okjs/ok.esm.min.js +2 -0
- package/public/vendor/okjs/toolkit/behavior/async.ok.js +1 -0
- package/public/vendor/okjs/toolkit/components/ok-chart.ok.js +1 -0
- package/public/vendor/okjs/toolkit/components/ok-doc-viewer.ok.js +1 -0
- package/public/vendor/okjs/toolkit/components/ok-marked.ok.js +1 -0
- package/public/vendor/okjs/toolkit/components/ok-monaco.ok.js +1 -0
- package/public/vendor/okjs/toolkit/core/ok-layer-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/core/ok-layer.ok.js +1 -0
- package/public/vendor/okjs/toolkit/core/ok-overlay.ok.js +1 -0
- package/public/vendor/okjs/toolkit/core/ok-sandbox.ok.js +1 -0
- package/public/vendor/okjs/toolkit/core/transition.ok.js +1 -0
- package/public/vendor/okjs/toolkit/core/virtualized.ok.js +1 -0
- package/public/vendor/okjs/toolkit/devtools/ok-console-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/devtools/ok-console.ok.js +1 -0
- package/public/vendor/okjs/toolkit/devtools/ok-fps-monitor-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/devtools/ok-fps-monitor.ok.js +1 -0
- package/public/vendor/okjs/toolkit/devtools/ok-inspector-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/devtools/ok-inspector.ok.js +1 -0
- package/public/vendor/okjs/toolkit/devtools/ok-js-tree.ok.js +1 -0
- package/public/vendor/okjs/toolkit/devtools/ok-timeline-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/devtools/ok-timeline.ok.js +1 -0
- package/public/vendor/okjs/toolkit/docs/doc-viewer.ok.js +1 -0
- package/public/vendor/okjs/toolkit/editor/ok-live-component.ok.js +1 -0
- package/public/vendor/okjs/toolkit/editor/ok-live-example.ok.js +1 -0
- package/public/vendor/okjs/toolkit/editor/ok-live-shell.ok.js +1 -0
- package/public/vendor/okjs/toolkit/elements/ok-dropdown.ok.js +1 -0
- package/public/vendor/okjs/toolkit/elements/ok-icon.ok.js +1 -0
- package/public/vendor/okjs/toolkit/elements/ok-select.ok.js +1 -0
- package/public/vendor/okjs/toolkit/elements/ok-table.ok.js +1 -0
- package/public/vendor/okjs/toolkit/errors/ok-crash-boundary.ok.js +1 -0
- package/public/vendor/okjs/toolkit/errors/ok-crash-info.ok.js +1 -0
- package/public/vendor/okjs/toolkit/i18n/i18n-editor-examples.ok.js +1 -0
- package/public/vendor/okjs/toolkit/i18n/i18n-editor.ok.js +1 -0
- package/public/vendor/okjs/toolkit/i18n/i18n-key-editor-tips.ok.js +1 -0
- package/public/vendor/okjs/toolkit/i18n/i18n-key-editor.ok.js +1 -0
- package/public/vendor/okjs/toolkit/i18n/i18n-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/i18n/ok-i18n.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-contextmenu.ok.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-dismiss-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-draggable.ok.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-flyover-panel.ok.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-flyover.ok.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-highlight-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-highlight.ok.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-hotkeys-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-picker-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-popout-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-popout.ok.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-portal-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-submenu.ok.js +1 -0
- package/public/vendor/okjs/toolkit/layout/ok-resizer.ok.js +1 -0
- package/public/vendor/okjs/toolkit/manifest.js +1 -0
- package/public/vendor/okjs/toolkit/modals/ok-modal-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/modals/ok-modal.ok.js +1 -0
- package/public/vendor/okjs/toolkit/modals/ok-toast-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/modals/ok-window.ok.js +1 -0
- package/public/vendor/okjs/toolkit/navigation/hash-router.ok.js +1 -0
- package/public/vendor/okjs/toolkit/navigation/history-router.ok.js +1 -0
- package/public/vendor/okjs/toolkit/navigation/router.ok.js +1 -0
- package/public/vendor/okjs/toolkit/sync/reactive-sync-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/sync/reactive-sync.js +1 -0
- package/public/vendor/okjs/toolkit/theming/blocks/ok-design-button.css.js +1 -0
- package/public/vendor/okjs/toolkit/theming/blocks/ok-design-input.css.js +1 -0
- package/public/vendor/okjs/toolkit/theming/ok-design-style.js +1 -0
- package/public/vendor/okjs/toolkit/theming/ok-design-vars.js +1 -0
- package/public/vendor/okjs/toolkit/theming/ok-design.ok.js +1 -0
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-input.ok.js +1 -0
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-style.js +1 -0
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-utils.js +1 -0
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-variable.ok.js +1 -0
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-vm.js +1 -0
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor.ok.js +1 -0
- package/public/vendor/okjs/toolkit/theming/ok-theme.ok.js +1 -0
- package/public/view-models/type-query-vm.js +1 -0
- package/types/environment.d.ts +130 -0
- package/types/errors.d.ts +98 -0
- package/types/features/admin.d.ts +4 -0
- package/types/features/api.d.ts +18 -0
- package/types/features/auth.d.ts +31 -0
- package/types/features/embeddings.d.ts +39 -0
- package/types/features/engines.d.ts +23 -0
- package/types/features/files.d.ts +29 -0
- package/types/features/fts.d.ts +25 -0
- package/types/features/functions.d.ts +23 -0
- package/types/features/mcp.d.ts +17 -0
- package/types/features/pipelines.d.ts +19 -0
- package/types/features/queue.d.ts +189 -0
- package/types/features/sync.d.ts +34 -0
- package/types/features/time-machine.d.ts +32 -0
- package/types/features/views.d.ts +16 -0
- package/types/index.d.ts +153 -0
- package/types/options.d.ts +202 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function _0xa345(_0x33b09c,_0x214216){_0x33b09c=_0x33b09c-0xe5;const _0x17a4c6=_0x17a4();let _0xa3452c=_0x17a4c6[_0x33b09c];return _0xa3452c;}function _0x17a4(){const _0x57e8ec=['buildProviderConfig','locktype','busy','inline','open','tab','toString','chunk_overlap','model','error','/embeddings/search','11jIioku','required','submitWorker','__custom__','liveOllamaError','off','1000','emb_model','chunk_custom','Model\x20is\x20required','json','entries','num','findModelEntry','50595NtRvaC','/embeddings/providers','some','algorithms','key','number','Embedder\x20name\x20is\x20required','shared','storage_key','keys','source_type','reconcileModelSelection','defaultFieldMode','774idgAkI','worker','\x0a\x20\x20.card\x20{\x20background:var(--okdb-app-surface);\x20border-radius:12px;\x20padding:16px;\x20box-shadow:0\x200\x205px\x20#ffffff1a;\x20}\x0a\x20\x20.card-title\x20{\x20font-weight:600;\x20margin-bottom:12px;\x20font-size:14px;\x20}\x0a\x20\x20.form-grid\x20{\x20display:grid;\x20grid-template-columns:140px\x201fr;\x20gap:8px\x2012px;\x20align-items:center;\x20font-size:13px;\x20}\x0a\x20\x20.form-label\x20{\x20opacity:.7;\x20text-align:right;\x20}\x0a\x20\x20.form-input\x20{\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:6px;\x20padding:6px\x208px;\x20color:inherit;\x20font-size:13px;\x20width:100%;\x20box-sizing:border-box;\x20}\x0a\x20\x20.form-input:focus\x20{\x20outline:none;\x20border-color:var(--okdb-accent);\x20}\x0a\x20\x20.form-select\x20{\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:6px;\x20padding:6px\x208px;\x20color:inherit;\x20font-size:13px;\x20width:100%;\x20box-sizing:border-box;\x20}\x0a\x20\x20.tab-bar\x20{\x20display:flex;\x20gap:2px;\x20border-bottom:1px\x20solid\x20var(--okdb-app-border);\x20margin-bottom:16px;\x20}\x0a\x20\x20.tab\x20{\x20padding:7px\x2014px;\x20border-radius:6px\x206px\x200\x200;\x20cursor:pointer;\x20font-size:13px;\x20border:1px\x20solid\x20transparent;\x20border-bottom:none;\x20background:transparent;\x20}\x0a\x20\x20.tab:hover\x20{\x20background:var(--okdb-app-surface);\x20}\x0a\x20\x20.tab--on\x20{\x20background:var(--okdb-app-surface);\x20border-color:var(--okdb-app-border);\x20color:var(--okdb-accent);\x20}\x0a\x20\x20.section-title\x20{\x20font-size:11px;\x20text-transform:uppercase;\x20opacity:.45;\x20letter-spacing:.06em;\x20margin:14px\x200\x206px;\x20grid-column:1/-1;\x20}\x0a\x20\x20.hint\x20{\x20font-size:11px;\x20opacity:.5;\x20font-style:italic;\x20}\x0a\x20\x20.error-box\x20{\x20color:var(--okdb-danger);\x20font-size:13px;\x20padding:8px\x2012px;\x20border:1px\x20solid\x20var(--okdb-danger);\x20border-radius:6px;\x20}\x0a\x20\x20.mode-pills\x20{\x20display:flex;\x20gap:3px;\x20}\x0a\x20\x20.mode-pill\x20{\x20padding:2px\x208px;\x20border-radius:999px;\x20font-size:11px;\x20border:1px\x20solid\x20var(--okdb-app-border);\x20background:transparent;\x20cursor:pointer;\x20color:inherit;\x20opacity:.7;\x20}\x0a\x20\x20.mode-pill:hover\x20{\x20opacity:1;\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2027%,\x20transparent);\x20}\x0a\x20\x20.mode-pill--on\x20{\x20border-color:var(--okdb-accent);\x20color:var(--okdb-accent);\x20opacity:1;\x20background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x207%,\x20transparent);\x20}\x0a\x20\x20.field-hint\x20{\x20font-size:11px;\x20opacity:.45;\x20font-style:italic;\x20margin-top:2px;\x20grid-column:2;\x20}\x0a\x20\x20.dims-badge\x20{\x20display:inline-flex;\x20align-items:center;\x20gap:6px;\x20font-size:12px;\x20color:var(--okdb-accent);\x20background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x207%,\x20transparent);\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-accent)\x2027%,\x20transparent);\x20border-radius:6px;\x20padding:3px\x2010px;\x20}\x0a\x20\x20.dims-badge-muted\x20{\x20color:#888;\x20border-color:var(--okdb-app-border);\x20background:transparent;\x20}\x0a\x20\x20.custom-model-box\x20{\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:8px;\x20padding:10px\x2012px;\x20margin-top:4px;\x20display:flex;\x20flex-direction:column;\x20gap:8px;\x20}\x0a\x20\x20.custom-model-box\x20.row\x20{\x20display:flex;\x20gap:8px;\x20align-items:center;\x20}\x0a\x20\x20.custom-model-box\x20label\x20{\x20font-size:12px;\x20opacity:.6;\x20white-space:nowrap;\x20}\x0a\x20\x20.save-to-catalog\x20{\x20display:flex;\x20align-items:center;\x20gap:6px;\x20font-size:12px;\x20opacity:.7;\x20cursor:pointer;\x20}\x0a\x20\x20.save-to-catalog\x20input\x20{\x20cursor:pointer;\x20}\x0a','typeMap','baseUrl','map','lockedEnv','chunk_size','geo','Source\x20type\x20is\x20required','?url=','$dispatch','all','API','string','prepare_custom','lockedStorageKey','field_mode','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:0;\x20width:min(700px,\x2078vw);\x20max-height:76vh;\x20min-height:0;\x22>\x0a\x0a\x0a\x20\x20<!--\x20Tab\x20bar\x20-->\x0a\x20\x20<div\x20class=\x22tab-bar\x22>\x0a\x20\x20\x20\x20<button\x20:class=\x22tab\x20===\x20\x27pipeline\x27\x20?\x20\x27tab\x20tab--on\x27\x20:\x20\x27tab\x27\x22\x20@click=\x22setTab(\x27pipeline\x27)\x22>Pipeline</button>\x0a\x20\x20\x20\x20<button\x20:class=\x22tab\x20===\x20\x27embedder\x27\x20?\x20\x27tab\x20tab--on\x27\x20:\x20\x27tab\x27\x22\x20@click=\x22setTab(\x27embedder\x27)\x22>Embedder</button>\x0a\x20\x20\x20\x20<button\x20:class=\x22tab\x20===\x20\x27indexer\x27\x20\x20?\x20\x27tab\x20tab--on\x27\x20:\x20\x27tab\x27\x22\x20@click=\x22setTab(\x27indexer\x27)\x22>Indexer</button>\x0a\x20\x20\x20\x20<button\x20:class=\x22tab\x20===\x20\x27search\x27\x20\x20\x20?\x20\x27tab\x20tab--on\x27\x20:\x20\x27tab\x27\x22\x20@click=\x22setTab(\x27search\x27)\x22>Search</button>\x0a\x20\x20\x20\x20<button\x20:class=\x22tab\x20===\x20\x27worker\x27\x20\x20\x20?\x20\x27tab\x20tab--on\x27\x20:\x20\x27tab\x27\x22\x20@click=\x22setTab(\x27worker\x27)\x22>Worker</button>\x0a\x20\x20</div>\x0a\x0a\x20\x20<div\x20style=\x22overflow:auto;\x20flex:1;\x20min-height:0;\x20padding-right:4px;\x22>\x0a\x0a\x20\x20\x20\x20<!--\x20──\x20Pipeline\x20────────────────────────────────────────────────────\x20-->\x0a\x20\x20\x20\x20<if\x20:=\x22tab\x20===\x20\x27pipeline\x27\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22>New\x20Pipeline\x20<span\x20style=\x22font-weight:400;\x20opacity:.5;\x20font-size:12px;\x22>(creates\x20embedder\x20+\x20indexer\x20+\x20search\x20in\x20one\x20step)</span></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22form-grid\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22section-title\x22>General</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Name\x20*</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20:value=\x22pl.name\x22\x20@input=\x22pl.name\x20=\x20$el.value\x22\x20placeholder=\x22articles-body\x22\x20/>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Source\x20type\x20*</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!lockedType\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20class=\x22form-select\x22\x20:value=\x22pl.source_type\x22\x20@change=\x22onPlSourceTypeChange($el.value)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22\x22>—\x20select\x20a\x20type\x20—</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22types\x22\x20let:item=\x22t\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20:value=\x22t\x22>{{\x20t\x20}}</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22lockedType\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22form-input\x22\x20style=\x22background:color-mix(in\x20srgb,\x20var(--okdb-app-bg-deep)\x2033%,\x20transparent);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2027%,\x20transparent);\x20color:var(--okdb-accent);\x20cursor:default;\x22>{{\x20lockedType\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Field</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22mode-pills\x22\x20style=\x22margin-bottom:5px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20:class=\x22pl.field_mode\x20===\x20\x27text\x27\x20\x20\x20?\x20\x27mode-pill\x20mode-pill--on\x27\x20:\x20\x27mode-pill\x27\x22\x20@click=\x22setPlFieldMode(\x27text\x27)\x22>text</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20:class=\x22pl.field_mode\x20===\x20\x27all\x27\x20\x20\x20\x20?\x20\x27mode-pill\x20mode-pill--on\x27\x20:\x20\x27mode-pill\x27\x22\x20@click=\x22setPlFieldMode(\x27all\x27)\x22>all</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20:class=\x22pl.field_mode\x20===\x20\x27custom\x27\x20?\x20\x27mode-pill\x20mode-pill--on\x27\x20:\x20\x27mode-pill\x27\x22\x20@click=\x22setPlFieldMode(\x27custom\x27)\x22>custom</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22pl.source_type\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<field-path-input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22pl.field\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:items=\x22getFieldItems(pl.source_type,\x20pl.field_mode)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:allow-custom=\x22pl.field_mode\x20===\x20\x27custom\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x22blank\x20=\x20whole\x20record\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@change=\x22pl.field\x20=\x20$event.detail\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!pl.source_type\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.45;\x20font-style:italic;\x22>Select\x20a\x20source\x20type\x20first.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Mode</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20class=\x22form-select\x22\x20:value=\x22pl.mode\x22\x20@change=\x22pl.mode\x20=\x20$el.value\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22inline\x22>inline\x20—\x20embed\x20immediately\x20(local/fast\x20models)</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22queue\x22>queue\x20—\x20async\x20via\x20worker\x20(remote\x20APIs,\x20scale)</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22section-title\x22>Embedder</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Provider</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20class=\x22form-select\x22\x20:value=\x22pl.emb_type\x22\x20@change=\x22onProviderChange(pl,\x20$el.value)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22providers\x22\x20let:item=\x22p\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20:value=\x22p.key\x22>{{\x20p.label\x20}}</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Model</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20justify-content:space-between;\x20gap:8px;\x20margin-bottom:5px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20opacity:.5;\x22>Choose\x20a\x20known\x20model\x20or\x20register\x20a\x20custom\x20one\x20inline.</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22openModelCatalog(pl)\x22\x20style=\x22font-size:11px;\x20padding:2px\x208px;\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2033%,\x20transparent);\x20color:var(--okdb-accent);\x20background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x206%,\x20transparent);\x22>Browse\x20catalog</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22openRegisterModel(pl)\x22\x20style=\x22font-size:11px;\x20padding:2px\x208px;\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-purple)\x2033%,\x20transparent);\x20color:var(--okdb-purple);\x20background:color-mix(in\x20srgb,\x20var(--okdb-purple)\x206%,\x20transparent);\x22>+\x20Register\x20model</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22pl.emb_type\x20===\x20\x27ollama\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:8px;\x20margin-bottom:5px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22refreshOllamaModels(pl)\x22\x20:disabled=\x22liveOllamaLoading\x22\x20style=\x22font-size:11px;\x20padding:2px\x208px;\x22>{{\x20liveOllamaLoading\x20?\x20\x27…\x27\x20:\x20\x27↺\x20Refresh\x27\x20}}</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20opacity:.55;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22liveOllamaModels\x20===\x20null\x22>○\x20catalog\x20(not\x20yet\x20probed)</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22Array.isArray(liveOllamaModels)\x20&&\x20liveOllamaModels.length\x22>●\x20live\x20—\x20{{\x20liveOllamaModels.length\x20}}\x20installed</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22Array.isArray(liveOllamaModels)\x20&&\x20!liveOllamaModels.length\x20&&\x20!liveOllamaError\x22>○\x20catalog\x20(none\x20found\x20on\x20server)</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22liveOllamaError\x20&&\x20(!Array.isArray(liveOllamaModels)\x20||\x20!liveOllamaModels.length)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20color:var(--okdb-danger);\x20max-width:260px;\x20white-space:nowrap;\x20overflow:hidden;\x20text-overflow:ellipsis;\x22\x20:title=\x22liveOllamaError\x22>⚠\x20{{\x20liveOllamaError\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20class=\x22form-select\x22\x20:value=\x22pl.emb_model_sel\x22\x20@change=\x22onModelSelChange(pl,\x20$el.value)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22\x22>—\x20Select\x20model\x20—</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22modelsForProvider(pl.emb_type)\x22\x20let:item=\x22m\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20:value=\x22m.model\x22>{{\x20modelLabel(m)\x20}}</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22__custom__\x22>──\x20Custom\x20model…\x20──</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!pl.emb_custom\x20&&\x20pl.emb_dims_auto\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22margin-top:5px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22dims-badge\x22>{{\x20pl.emb_dims_auto\x20}}\x20dims\x20(auto)</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22pl.emb_custom\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22custom-model-box\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22row\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label>Model\x20name</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20style=\x22flex:1;\x22\x20:value=\x22pl.emb_custom_model\x22\x20@input=\x22pl.emb_custom_model\x20=\x20$el.value\x22\x20placeholder=\x22e.g.\x20my-fine-tuned-embed\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22row\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label>Dims\x20*</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20style=\x22width:90px;\x22\x20type=\x22number\x22\x20:value=\x22pl.emb_custom_dims\x22\x20@input=\x22pl.emb_custom_dims\x20=\x20$el.value\x22\x20placeholder=\x22e.g.\x20768\x22\x20min=\x221\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20opacity:.45;\x20font-style:italic;\x22>Leave\x20blank\x20to\x20auto-probe\x20on\x20start</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22save-to-catalog\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22pl.emb_save_catalog\x22\x20@change=\x22pl.emb_save_catalog\x20=\x20$el.checked\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Save\x20this\x20model\x20to\x20the\x20catalog\x20for\x20future\x20use\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Dynamic\x20provider\x20config\x20fields\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22providerFields(pl.emb_type)\x22\x20let:item=\x22f\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>{{\x20f.label\x20}}{{\x20f.required\x20?\x20\x27\x20*\x27\x20:\x20\x27\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:type=\x22f.type\x20===\x20\x27password\x27\x20?\x20\x27password\x27\x20:\x20f.type\x20===\x20\x27number\x27\x20?\x20\x27number\x27\x20:\x20\x27text\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20class=\x22form-input\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22pl.emb_config[f.key]\x20??\x20\x27\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@input=\x22pl.emb_config[f.key]\x20=\x20$el.value\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:placeholder=\x22f.placeholder\x20??\x20\x27\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22f.hint\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-hint\x22>{{\x20f.hint\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22providerNote(pl.emb_type)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22grid-column:1/-1;\x20opacity:.5;\x20font-style:italic;\x20font-size:11px;\x22>{{\x20providerNote(pl.emb_type)\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22pl.mode\x20===\x20\x27queue\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22section-title\x22>Worker\x20(queue\x20mode)</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Concurrency</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20type=\x22number\x22\x20:value=\x22pl.w_concurrency\x22\x20@input=\x22pl.w_concurrency\x20=\x20$el.value\x22\x20placeholder=\x221\x22\x20min=\x221\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Poll\x20interval\x20(ms)</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20type=\x22number\x22\x20:value=\x22pl.w_poll_interval\x22\x20@input=\x22pl.w_poll_interval\x20=\x20$el.value\x22\x20placeholder=\x221000\x22\x20min=\x22100\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20──\x20Prepare\x20+\x20Chunk\x20(only\x20relevant\x20when\x20a\x20specific\x20field\x20is\x20selected)\x20──\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22pl.field.trim()\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22section-title\x22>Text\x20Processing</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Prepare</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20class=\x22form-select\x22\x20:value=\x22pl.prepare\x22\x20@change=\x22pl.prepare\x20=\x20$el.value\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22none\x22>none\x20—\x20use\x20field\x20value\x20as-is</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22html\x22>html\x20—\x20strip\x20tags,\x20decode\x20entities</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22markdown\x22>markdown\x20—\x20strip\x20syntax,\x20keep\x20text</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22json-text\x22>json-text\x20—\x20extract\x20string\x20values\x20from\x20JSON</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22custom\x22>custom\x20—\x20use\x20a\x20registered\x20preparer</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22pl.prepare\x20===\x20\x27custom\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20style=\x22margin-top:5px;\x22\x20:value=\x22pl.prepare_custom\x22\x20@input=\x22pl.prepare_custom\x20=\x20$el.value\x22\x20placeholder=\x22name\x20passed\x20to\x20okdb.embeddings.registerPreparer()\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-hint\x22>Register\x20server-side:\x20<code>okdb.embeddings.registerPreparer(\x27name\x27,\x20fn)</code></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22pl.prepare\x20!==\x20\x27custom\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-hint\x22>Cleans\x20the\x20field\x20text\x20before\x20chunking\x20and\x20embedding.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Chunking</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20class=\x22form-select\x22\x20:value=\x22pl.chunk_strategy\x22\x20@change=\x22pl.chunk_strategy\x20=\x20$el.value\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22off\x22>off\x20—\x20embed\x20whole\x20field\x20as\x20one\x20vector</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22fixed\x22>fixed\x20—\x20split\x20by\x20character\x20count</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22sentence\x22>sentence\x20—\x20split\x20on\x20sentence\x20boundaries</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22paragraph\x22>paragraph\x20—\x20split\x20on\x20paragraph\x20breaks</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22custom\x22>custom\x20—\x20use\x20a\x20registered\x20strategy</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22pl.chunk_strategy\x20===\x20\x27custom\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20style=\x22margin-top:5px;\x22\x20:value=\x22pl.chunk_custom\x22\x20@input=\x22pl.chunk_custom\x20=\x20$el.value\x22\x20placeholder=\x22name\x20passed\x20to\x20okdb.embeddings.registerChunkStrategy()\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-hint\x22>Register\x20server-side:\x20<code>okdb.embeddings.registerChunkStrategy(\x27name\x27,\x20fn)</code></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22pl.chunk_strategy\x20!==\x20\x27off\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:grid;\x20grid-template-columns:auto\x201fr\x20auto\x201fr;\x20gap:6px\x208px;\x20align-items:center;\x20margin-top:8px;\x20font-size:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.6;\x22>Size</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20type=\x22number\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22pl.chunk_size\x22\x20@input=\x22pl.chunk_size\x20=\x20$el.value\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x22512\x22\x20min=\x2232\x22\x20style=\x22width:80px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Max\x20characters\x20per\x20chunk\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22pl.chunk_strategy\x20===\x20\x27fixed\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.6;\x22>Overlap</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20type=\x22number\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22pl.chunk_overlap\x22\x20@input=\x22pl.chunk_overlap\x20=\x20$el.value\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x2264\x22\x20min=\x220\x22\x20style=\x22width:80px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Overlap\x20characters\x20between\x20consecutive\x20chunks\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x20margin-top:8px;\x20font-size:12px;\x20cursor:pointer;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22pl.chunk_store_text\x22\x20@change=\x22pl.chunk_store_text\x20=\x20$el.checked\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Store\x20chunk\x20text\x20in\x20doc_status\x20<span\x20style=\x22opacity:.45;\x22>(enables\x20preview\x20in\x20search\x20results)</span></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-hint\x22\x20style=\x22margin-top:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Each\x20chunk\x20is\x20identified\x20by\x20a\x20content\x20hash\x20—\x20unchanged\x20chunks\x20are\x20never\x20re-embedded\x20on\x20update.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!pl.field.trim()\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22section-title\x22>Text\x20Processing</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22grid-column:1/-1;\x20font-size:11px;\x20opacity:.4;\x20font-style:italic;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Select\x20a\x20specific\x20field\x20above\x20to\x20enable\x20prepare\x20&\x20chunking\x20options.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22section-title\x22>Search\x20Index</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Algorithm</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20class=\x22form-select\x22\x20:value=\x22pl.algorithm\x22\x20@change=\x22onAlgorithmChange(pl,\x20$el.value)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22algorithms\x22\x20let:item=\x22a\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20:value=\x22a.key\x22>{{\x20a.label\x20}}</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22algorithmNote(pl.algorithm)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-hint\x22>{{\x20algorithmNote(pl.algorithm)\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22algorithmFields(pl.algorithm)\x22\x20let:item=\x22f\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>{{\x20f.label\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22f.type\x20===\x20\x27select\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20class=\x22form-select\x22\x20:value=\x22pl.alg_config[f.key]\x20??\x20\x27\x27\x22\x20@change=\x22pl.alg_config[f.key]\x20=\x20$el.value\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22f.options\x20??\x20[]\x22\x20let:item=\x22o\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20:value=\x22o.value\x22>{{\x20o.label\x20}}</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22f.type\x20!==\x20\x27select\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:type=\x22f.type\x20===\x20\x27number\x27\x20?\x20\x27number\x27\x20:\x20\x27text\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20class=\x22form-input\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22pl.alg_config[f.key]\x20??\x20\x27\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@input=\x22pl.alg_config[f.key]\x20=\x20$el.value\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:placeholder=\x22f.placeholder\x20??\x20\x27\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22f.hint\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-hint\x22>{{\x20f.hint\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<!--\x20──\x20Embedder\x20─────────────────────────────────────────────────────\x20-->\x0a\x20\x20\x20\x20<if\x20:=\x22tab\x20===\x20\x27embedder\x27\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22>New\x20Embedder</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22form-grid\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Name\x20*</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20:value=\x22emb.name\x22\x20@input=\x22emb.name\x20=\x20$el.value\x22\x20placeholder=\x22my-ollama\x22\x20/>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Provider</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20class=\x22form-select\x22\x20:value=\x22emb.emb_type\x22\x20@change=\x22onProviderChange(emb,\x20$el.value)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22providers\x22\x20let:item=\x22p\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20:value=\x22p.key\x22>{{\x20p.label\x20}}</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Model</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20justify-content:space-between;\x20gap:8px;\x20margin-bottom:5px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20opacity:.5;\x22>Choose\x20a\x20known\x20model\x20or\x20register\x20a\x20custom\x20one\x20inline.</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22openModelCatalog(emb)\x22\x20style=\x22font-size:11px;\x20padding:2px\x208px;\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2033%,\x20transparent);\x20color:var(--okdb-accent);\x20background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x206%,\x20transparent);\x22>Browse\x20catalog</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22openRegisterModel(emb)\x22\x20style=\x22font-size:11px;\x20padding:2px\x208px;\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-purple)\x2033%,\x20transparent);\x20color:var(--okdb-purple);\x20background:color-mix(in\x20srgb,\x20var(--okdb-purple)\x206%,\x20transparent);\x22>+\x20Register\x20model</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22emb.emb_type\x20===\x20\x27ollama\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:8px;\x20margin-bottom:5px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22refreshOllamaModels(emb)\x22\x20:disabled=\x22liveOllamaLoading\x22\x20style=\x22font-size:11px;\x20padding:2px\x208px;\x22>{{\x20liveOllamaLoading\x20?\x20\x27…\x27\x20:\x20\x27↺\x20Refresh\x27\x20}}</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20opacity:.55;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22liveOllamaModels\x20===\x20null\x22>○\x20catalog\x20(not\x20yet\x20probed)</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22Array.isArray(liveOllamaModels)\x20&&\x20liveOllamaModels.length\x22>●\x20live\x20—\x20{{\x20liveOllamaModels.length\x20}}\x20installed</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22Array.isArray(liveOllamaModels)\x20&&\x20!liveOllamaModels.length\x20&&\x20!liveOllamaError\x22>○\x20catalog\x20(none\x20found\x20on\x20server)</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22liveOllamaError\x20&&\x20(!Array.isArray(liveOllamaModels)\x20||\x20!liveOllamaModels.length)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20color:var(--okdb-danger);\x20max-width:260px;\x20white-space:nowrap;\x20overflow:hidden;\x20text-overflow:ellipsis;\x22\x20:title=\x22liveOllamaError\x22>⚠\x20{{\x20liveOllamaError\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20class=\x22form-select\x22\x20:value=\x22emb.emb_model_sel\x22\x20@change=\x22onModelSelChange(emb,\x20$el.value)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22\x22>—\x20Select\x20model\x20—</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22modelsForProvider(emb.emb_type)\x22\x20let:item=\x22m\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20:value=\x22m.model\x22>{{\x20modelLabel(m)\x20}}</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22__custom__\x22>──\x20Custom\x20model…\x20──</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!emb.emb_custom\x20&&\x20emb.emb_dims_auto\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22margin-top:5px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22dims-badge\x22>{{\x20emb.emb_dims_auto\x20}}\x20dims\x20(auto)</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22emb.emb_custom\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22custom-model-box\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22row\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label>Model\x20name</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20style=\x22flex:1;\x22\x20:value=\x22emb.emb_custom_model\x22\x20@input=\x22emb.emb_custom_model\x20=\x20$el.value\x22\x20placeholder=\x22e.g.\x20my-fine-tuned-embed\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22row\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label>Dims</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20style=\x22width:90px;\x22\x20type=\x22number\x22\x20:value=\x22emb.emb_custom_dims\x22\x20@input=\x22emb.emb_custom_dims\x20=\x20$el.value\x22\x20placeholder=\x22auto\x22\x20min=\x221\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20opacity:.45;\x20font-style:italic;\x22>Auto-probed\x20on\x20start\x20if\x20blank</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22save-to-catalog\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22emb.emb_save_catalog\x22\x20@change=\x22emb.emb_save_catalog\x20=\x20$el.checked\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Save\x20this\x20model\x20to\x20the\x20catalog\x20for\x20future\x20use\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Dynamic\x20provider\x20config\x20fields\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22providerFields(emb.emb_type)\x22\x20let:item=\x22f\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>{{\x20f.label\x20}}{{\x20f.required\x20?\x20\x27\x20*\x27\x20:\x20\x27\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:type=\x22f.type\x20===\x20\x27password\x27\x20?\x20\x27password\x27\x20:\x20f.type\x20===\x20\x27number\x27\x20?\x20\x27number\x27\x20:\x20\x27text\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20class=\x22form-input\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22emb.emb_config[f.key]\x20??\x20\x27\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@input=\x22emb.emb_config[f.key]\x20=\x20$el.value\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:placeholder=\x22f.placeholder\x20??\x20\x27\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22f.hint\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-hint\x22>{{\x20f.hint\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22providerNote(emb.emb_type)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22grid-column:1/-1;\x20opacity:.5;\x20font-style:italic;\x20font-size:11px;\x22>{{\x20providerNote(emb.emb_type)\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<!--\x20──\x20Indexer\x20──────────────────────────────────────────────────────\x20-->\x0a\x20\x20\x20\x20<if\x20:=\x22tab\x20===\x20\x27indexer\x27\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22>New\x20Indexer</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22form-grid\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Name\x20*</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20:value=\x22idx.name\x22\x20@input=\x22idx.name\x20=\x20$el.value\x22\x20placeholder=\x22articles-body\x22\x20/>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Source\x20type\x20*</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!lockedType\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20class=\x22form-select\x22\x20:value=\x22idx.source_type\x22\x20@change=\x22onIdxSourceTypeChange($el.value)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22\x22>—\x20select\x20a\x20type\x20—</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22types\x22\x20let:item=\x22t\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20:value=\x22t\x22>{{\x20t\x20}}</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22lockedType\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22form-input\x22\x20style=\x22background:color-mix(in\x20srgb,\x20var(--okdb-app-bg-deep)\x2033%,\x20transparent);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2027%,\x20transparent);\x20color:var(--okdb-accent);\x20cursor:default;\x22>{{\x20lockedType\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Embedder\x20name\x20*</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20:value=\x22idx.embedder\x22\x20@input=\x22idx.embedder\x20=\x20$el.value\x22\x20placeholder=\x22my-ollama\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Storage\x20key</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20:value=\x22idx.storage_key\x22\x20@input=\x22idx.storage_key\x20=\x20$el.value\x22\x20placeholder=\x22same\x20as\x20name\x20if\x20blank\x22\x20/>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Field</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22mode-pills\x22\x20style=\x22margin-bottom:5px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20:class=\x22idx.field_mode\x20===\x20\x27text\x27\x20\x20\x20?\x20\x27mode-pill\x20mode-pill--on\x27\x20:\x20\x27mode-pill\x27\x22\x20@click=\x22setIdxFieldMode(\x27text\x27)\x22>text</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20:class=\x22idx.field_mode\x20===\x20\x27all\x27\x20\x20\x20\x20?\x20\x27mode-pill\x20mode-pill--on\x27\x20:\x20\x27mode-pill\x27\x22\x20@click=\x22setIdxFieldMode(\x27all\x27)\x22>all</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20:class=\x22idx.field_mode\x20===\x20\x27custom\x27\x20?\x20\x27mode-pill\x20mode-pill--on\x27\x20:\x20\x27mode-pill\x27\x22\x20@click=\x22setIdxFieldMode(\x27custom\x27)\x22>custom</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22idx.source_type\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<field-path-input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22idx.field\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:items=\x22getFieldItems(idx.source_type,\x20idx.field_mode)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:allow-custom=\x22idx.field_mode\x20===\x20\x27custom\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x22blank\x20=\x20whole\x20record\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@change=\x22idx.field\x20=\x20$event.detail\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!idx.source_type\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.45;\x20font-style:italic;\x22>Select\x20a\x20source\x20type\x20first.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Dims</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20type=\x22number\x22\x20:value=\x22idx.dims\x22\x20@input=\x22idx.dims\x20=\x20$el.value\x22\x20placeholder=\x22auto\x20(from\x20embedder)\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-hint\x22>Leave\x20blank\x20—\x20inherited\x20from\x20the\x20named\x20embedder\x20engine</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Mode</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20class=\x22form-select\x22\x20:value=\x22idx.mode\x22\x20@change=\x22idx.mode\x20=\x20$el.value\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22inline\x22>inline</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22queue\x22>queue</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22idx.mode\x20===\x20\x27queue\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Job\x20type</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20:value=\x22idx.job_type\x22\x20@input=\x22idx.job_type\x20=\x20$el.value\x22\x20placeholder=\x22embed:indexer@name\x20(auto\x20if\x20blank)\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<!--\x20──\x20Search\x20───────────────────────────────────────────────────────\x20-->\x0a\x20\x20\x20\x20<if\x20:=\x22tab\x20===\x20\x27search\x27\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22>New\x20Vector\x20Search\x20Engine</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22form-grid\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Name\x20*</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20:value=\x22srch.name\x22\x20@input=\x22srch.name\x20=\x20$el.value\x22\x20placeholder=\x22default:articles-body-alt\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-hint\x22>Use\x20a\x20unique\x20engine\x20name.\x20In\x20env-scoped\x20views,\x20names\x20are\x20usually\x20prefixed\x20with\x20the\x20environment.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Source\x20type\x20*</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!lockedType\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20class=\x22form-select\x22\x20:value=\x22srch.source_type\x22\x20@change=\x22srch.source_type\x20=\x20$el.value\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22\x22>—\x20select\x20a\x20type\x20—</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22types\x22\x20let:item=\x22t\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20:value=\x22t\x22>{{\x20t\x20}}</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22lockedType\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22form-input\x22\x20style=\x22background:color-mix(in\x20srgb,\x20var(--okdb-app-bg-deep)\x2033%,\x20transparent);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2027%,\x20transparent);\x20color:var(--okdb-accent);\x20cursor:default;\x22>{{\x20lockedType\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Storage\x20key\x20*</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!lockedStorageKey\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20:value=\x22srch.storage_key\x22\x20@input=\x22srch.storage_key\x20=\x20$el.value\x22\x20placeholder=\x22articles-body\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22lockedStorageKey\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22form-input\x22\x20style=\x22background:color-mix(in\x20srgb,\x20var(--okdb-app-bg-deep)\x2033%,\x20transparent);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2027%,\x20transparent);\x20color:var(--okdb-accent);\x20cursor:default;\x22>{{\x20lockedStorageKey\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Embedder\x20name</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!lockedEmbedder\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20:value=\x22srch.embedder\x22\x20@input=\x22srch.embedder\x20=\x20$el.value\x22\x20placeholder=\x22my-ollama\x20(enables\x20text\x20queries\x20+\x20auto\x20dims)\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22lockedEmbedder\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22form-input\x22\x20style=\x22background:color-mix(in\x20srgb,\x20var(--okdb-app-bg-deep)\x2033%,\x20transparent);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-info)\x2027%,\x20transparent);\x20color:var(--okdb-info);\x20cursor:default;\x22>{{\x20lockedEmbedder\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Dims</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20type=\x22number\x22\x20:value=\x22srch.dims\x22\x20@input=\x22srch.dims\x20=\x20$el.value\x22\x20placeholder=\x22auto\x20(from\x20embedder)\x22\x20min=\x221\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-hint\x22>Leave\x20blank\x20—\x20resolved\x20from\x20the\x20named\x20embedder\x20engine</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Algorithm</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20class=\x22form-select\x22\x20:value=\x22srch.algorithm\x22\x20@change=\x22onAlgorithmChange(srch,\x20$el.value)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22algorithms\x22\x20let:item=\x22a\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20:value=\x22a.key\x22>{{\x20a.label\x20}}</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22algorithmNote(srch.algorithm)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-hint\x22>{{\x20algorithmNote(srch.algorithm)\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22algorithmFields(srch.algorithm)\x22\x20let:item=\x22f\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>{{\x20f.label\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22f.type\x20===\x20\x27select\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20class=\x22form-select\x22\x20:value=\x22srch.alg_config[f.key]\x20??\x20\x27\x27\x22\x20@change=\x22srch.alg_config[f.key]\x20=\x20$el.value\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22f.options\x20??\x20[]\x22\x20let:item=\x22o\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20:value=\x22o.value\x22>{{\x20o.label\x20}}</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22f.type\x20!==\x20\x27select\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:type=\x22f.type\x20===\x20\x27number\x27\x20?\x20\x27number\x27\x20:\x20\x27text\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20class=\x22form-input\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22srch.alg_config[f.key]\x20??\x20\x27\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@input=\x22srch.alg_config[f.key]\x20=\x20$el.value\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:placeholder=\x22f.placeholder\x20??\x20\x27\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22f.hint\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-hint\x22>{{\x20f.hint\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<!--\x20──\x20Worker\x20───────────────────────────────────────────────────────\x20-->\x0a\x20\x20\x20\x20<if\x20:=\x22tab\x20===\x20\x27worker\x27\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22>New\x20Embed\x20Worker\x20<span\x20style=\x22font-weight:400;\x20opacity:.5;\x20font-size:12px;\x22>(queue\x20mode\x20only)</span></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22form-grid\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Name\x20*</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20:value=\x22wkr.name\x22\x20@input=\x22wkr.name\x20=\x20$el.value\x22\x20placeholder=\x22articles-body-worker\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Job\x20type\x20*</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20:value=\x22wkr.job_type\x22\x20@input=\x22wkr.job_type\x20=\x20$el.value\x22\x20placeholder=\x22embed:indexer@articles-body\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x20hint\x22>convention:\x20embed:indexer@{indexer-name}</span><span></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Indexer\x20name\x20*</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20:value=\x22wkr.indexer\x22\x20@input=\x22wkr.indexer\x20=\x20$el.value\x22\x20placeholder=\x22articles-body\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Embedder\x20name\x20*</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20:value=\x22wkr.embedder\x22\x20@input=\x22wkr.embedder\x20=\x20$el.value\x22\x20placeholder=\x22my-ollama\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Concurrency</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20type=\x22number\x22\x20:value=\x22wkr.concurrency\x22\x20@input=\x22wkr.concurrency\x20=\x20$el.value\x22\x20placeholder=\x221\x22\x20min=\x221\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Poll\x20interval\x20(ms)</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20type=\x22number\x22\x20:value=\x22wkr.pollInterval\x22\x20@input=\x22wkr.pollInterval\x20=\x20$el.value\x22\x20placeholder=\x221000\x22\x20min=\x22100\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>TTL\x20(ms)</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20type=\x22number\x22\x20:value=\x22wkr.ttl\x22\x20@input=\x22wkr.ttl\x20=\x20$el.value\x22\x20placeholder=\x2230000\x22\x20min=\x221000\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20Footer\x20bar\x20-->\x0a\x20\x20<div\x20style=\x22padding-top:14px;\x20display:flex;\x20align-items:center;\x20gap:10px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20@click=\x22handleSubmit\x22\x0a\x20\x20\x20\x20\x20\x20:disabled=\x22busy\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2013%,\x20transparent);\x20border-color:var(--okdb-accent);\x20color:var(--okdb-accent);\x20font-weight:600;\x20padding:7px\x2020px;\x22\x0a\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20{{\x20busy\x20?\x20\x27Creating…\x27\x20:\x20\x27Create\x27\x20}}\x0a\x20\x20\x20\x20</button>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22error\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22error-box\x22>{{\x20error\x20}}</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22success\x20&&\x20!error\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-success);\x20font-size:13px;\x22>✓\x20Created\x20successfully</span>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a\x0a</div>\x0a','modal','/embeddings/embedders','loadTypes','pollInterval','maybeSaveToCatalog','result','algorithm_config','726424fbxDPA','pipeline','/types','stores','alg_config','\x20is\x20required','512','split','field','emb_type','chunk_strategy','ollama','text','includes','Dims\x20is\x20required\x20for\x20custom\x20models','submitSearch','ENGINE_ALREADY_EXISTS','$ok','buildAlgorithmConfig','Created!','chunk_store_text','embedder','prepare','lockembedder','/embeddings/indexers','35RTKPsQ','concurrency','submitIndexer','lockenv','submitEmbedder','Name\x20is\x20required','Job\x20type\x20is\x20required','dims','1VAgRvK','type','POST','default','emb_custom_model','description','loading','emb_custom_dims','source','2351480AcktlQ','ttl','job_type','/deep-properties','label','trim','emb_custom','find','chunk','isArray','3yCuwgz','effectiveModel','_post','Indexer\x20name\x20is\x20required','emb_config','107667xdhRar','/pipelines','types','liveOllamaModels','live','refreshOllamaModels','url','algorithm','providerMap','queue','data','selectedEnv','\x20—\x20?\x20dims','liveOllamaLoading','overlap','filter','refreshCatalogState','submitPipeline','srch','<register-model-modal\x20:modal=\x22modal\x22\x20:initial-provider=\x22initialProvider\x22\x20:on-done=\x22onDone\x22\x20/>','lockstoragekey','wkr','loadAlgorithms','3741612VXGgMh','Model\x20Catalog','30000','stringify','search','810JmDaYO','paths','toFixed','/embeddings/models','embed-create-panel','algorithmMap','initialtab','isInteger','message','\x22\x20already\x20exists.','toast','algorithmFields','lockedEmbedder','modelsForProvider','HTTP\x20','length','loadModelCatalog','emb_model_sel','Storage\x20key\x20is\x20required','application/json','idx','/type/','fields','emb_save_catalog','emb','modelCatalog','flat','clearModelSelection','44492877cxzhJP','745876WFhqfN','get','providers','w_concurrency','okdb','providerFields','mode','success','deepTypeMap','Register\x20Model','loadDeepForType','emb_dims_auto','An\x20engine\x20named\x20\x22','name','$attr','custom','sort','indexer','/embeddings/algorithms','lockedType','\x20GB','/env/','status'];_0x17a4=function(){return _0x57e8ec;};return _0x17a4();}const _0xc95d48=_0xa345;(function(_0x1ba05f,_0x54840b){const _0x31b7fc=_0xa345,_0x2f148e=_0x1ba05f();while(!![]){try{const _0x2f0be5=parseInt(_0x31b7fc(0x189))/0x1*(-parseInt(_0x31b7fc(0x168))/0x2)+parseInt(_0x31b7fc(0x19c))/0x3*(-parseInt(_0x31b7fc(0x111))/0x4)+-parseInt(_0x31b7fc(0x141))/0x5*(parseInt(_0x31b7fc(0x14e))/0x6)+parseInt(_0x31b7fc(0x181))/0x7*(-parseInt(_0x31b7fc(0x192))/0x8)+-parseInt(_0x31b7fc(0x1a1))/0x9*(-parseInt(_0x31b7fc(0xf4))/0xa)+-parseInt(_0x31b7fc(0x133))/0xb*(parseInt(_0x31b7fc(0xef))/0xc)+parseInt(_0x31b7fc(0x110))/0xd;if(_0x2f0be5===_0x54840b)break;else _0x2f148e['push'](_0x2f148e['shift']());}catch(_0x12479d){_0x2f148e['push'](_0x2f148e['shift']());}}}(_0x17a4,0xb8550));import _0x51b2fd from'../../../components/field-path-input.ok.js';import _0x29ed63 from'./embed-model-catalog.ok.js';import _0x194508 from'../modals/register-model-modal.ok.js';export default{'tag':_0xc95d48(0xf8),'attr':{'locktype':{},'lockenv':{},'initialtab':{},'lockstoragekey':{},'lockembedder':{}},'dependencies':[_0x51b2fd,_0x194508,_0x29ed63],'context':_0x39a1e0=>({'tab':'pipeline','busy':!0x1,'error':null,'success':null,get 'lockedType'(){const _0x2734c7=_0xc95d48;return _0x39a1e0['$attr'][_0x2734c7(0x129)]||null;},get 'lockedEnv'(){const _0x336217=_0xc95d48;return _0x39a1e0[_0x336217(0x11f)][_0x336217(0x184)]||_0x39a1e0[_0x336217(0x179)]?.[_0x336217(0x16b)]?.[_0x336217(0x115)]?.[_0x336217(0x1ac)]||_0x336217(0x18c);},get 'lockedStorageKey'(){const _0x449c35=_0xc95d48;return _0x39a1e0['$attr'][_0x449c35(0xec)]||null;},get 'lockedEmbedder'(){const _0x466d4c=_0xc95d48;return _0x39a1e0[_0x466d4c(0x11f)][_0x466d4c(0x17f)]||null;},'types':[],'typeMap':{},'deepTypeMap':{},'modelCatalog':{},'liveOllamaModels':null,'liveOllamaLoading':!0x1,'liveOllamaError':null,'providers':[],'providerMap':{},'algorithms':[],'algorithmMap':{},async 'loadTypes'(){const _0x495662=_0xc95d48;try{const _0x197824=this[_0x495662(0x154)],_0x54c3c7=await fetch(__ENV__[_0x495662(0x15b)]+_0x495662(0x126)+encodeURIComponent(_0x197824)+_0x495662(0x16a)),_0x42d9ae=(await _0x54c3c7[_0x495662(0x13d)]())[_0x495662(0x1ab)]||[];if(this[_0x495662(0x1a3)]=Array['isArray'](_0x42d9ae)?_0x42d9ae[_0x495662(0x153)](_0x594fbe=>_0x594fbe[_0x495662(0x18a)]??_0x594fbe['name']??_0x594fbe)[_0x495662(0xe7)](Boolean)[_0x495662(0x121)]():Object[_0x495662(0x14a)](_0x42d9ae)['sort'](),this[_0x495662(0x151)]={},Array['isArray'](_0x42d9ae)){for(const _0x3e5157 of _0x42d9ae)_0x3e5157['type']&&(this[_0x495662(0x151)][_0x3e5157['type']]=_0x3e5157[_0x495662(0x10a)]||{});}else{for(const [_0x4ad381,_0x1bdead]of Object[_0x495662(0x13e)](_0x42d9ae))this[_0x495662(0x151)][_0x4ad381]=_0x1bdead['fields']||{};}}catch{this[_0x495662(0x1a3)]=[],this['typeMap']={};}},async 'loadModelCatalog'(){const _0xd38b90=_0xc95d48;try{const _0x4c3749=await fetch(__ENV__[_0xd38b90(0x15b)]+'/embeddings/models'),_0x27a468=await _0x4c3749[_0xd38b90(0x13d)]();this[_0xd38b90(0x10d)]=_0x27a468[_0xd38b90(0x1ab)]??{};}catch{this[_0xd38b90(0x10d)]={};}},async 'loadProviders'(){const _0x3488d6=_0xc95d48;try{const _0x21186a=await fetch(__ENV__[_0x3488d6(0x15b)]+_0x3488d6(0x142)),_0x2f6ac3=await _0x21186a[_0x3488d6(0x13d)]();this['providers']=_0x2f6ac3[_0x3488d6(0x1ab)]??[],this['providerMap']={};for(const _0x389a8a of this[_0x3488d6(0x113)])this['providerMap'][_0x389a8a['key']]=_0x389a8a;}catch{this[_0x3488d6(0x113)]=[],this[_0x3488d6(0x1a9)]={};}},async 'loadAlgorithms'(){const _0x155ea2=_0xc95d48;try{const _0x132731=await fetch(__ENV__['API']+_0x155ea2(0x123)),_0xffd7b7=await _0x132731[_0x155ea2(0x13d)]();this[_0x155ea2(0x144)]=_0xffd7b7['data']??[],this['algorithmMap']={};for(const _0x5249b8 of this['algorithms'])this[_0x155ea2(0xf9)][_0x5249b8['key']]=_0x5249b8;}catch{this['algorithms']=[],this['algorithmMap']={};}},async 'loadDeepForType'(_0x2b74ff){const _0x556885=_0xc95d48;if(_0x2b74ff&&void 0x0===this[_0x556885(0x119)][_0x2b74ff]){this['deepTypeMap']={...this[_0x556885(0x119)],[_0x2b74ff]:{'paths':{},'loading':!0x0}};try{const _0x49471c=this[_0x556885(0x154)],_0x282cda=await fetch(__ENV__[_0x556885(0x15b)]+_0x556885(0x126)+encodeURIComponent(_0x49471c)+_0x556885(0x109)+encodeURIComponent(_0x2b74ff)+_0x556885(0x195)),_0x348329=await _0x282cda[_0x556885(0x13d)]();this[_0x556885(0x119)]={...this[_0x556885(0x119)],[_0x2b74ff]:{'paths':(_0x348329['data']??_0x348329[_0x556885(0x166)])?.['paths']??{},'loading':!0x1}};}catch{this['deepTypeMap']={...this['deepTypeMap'],[_0x2b74ff]:{'paths':{},'loading':!0x1}};}}},async 'refreshOllamaModels'(_0x506342){const _0x4fb8a0=_0xc95d48;this[_0x4fb8a0(0xe5)]=!0x0,this['liveOllamaError']=null;const _0x244903=_0x506342?.[_0x4fb8a0(0x1a0)]?.[_0x4fb8a0(0x1a7)]??_0x506342?.['emb_config']?.[_0x4fb8a0(0x152)]??'',_0x4f02ed=_0x244903?_0x4fb8a0(0x158)+encodeURIComponent(_0x244903):'';try{const _0x9f7cbe=await fetch(__ENV__['API']+'/embeddings/probe-ollama-models'+_0x4f02ed),_0xef5a36=await _0x9f7cbe[_0x4fb8a0(0x13d)](),_0x33b9a6=_0xef5a36[_0x4fb8a0(0x1ab)]??_0xef5a36[_0x4fb8a0(0x166)]??{};if(_0x4fb8a0(0x131)!==_0x33b9a6[_0x4fb8a0(0x191)]&&_0x33b9a6['models']?.['length']){const _0x2d7eac=new Map((this[_0x4fb8a0(0x10d)][_0x4fb8a0(0x173)]??[])[_0x4fb8a0(0x153)](_0x3bab54=>[_0x3bab54['model'],_0x3bab54]));this[_0x4fb8a0(0x1a4)]=_0x33b9a6['models'][_0x4fb8a0(0x153)](_0x3b02c9=>{const _0x399f2d=_0x4fb8a0,_0x192d26=_0x3b02c9[_0x399f2d(0x130)][_0x399f2d(0x16f)](':')[0x0],_0xf883ae=_0x2d7eac[_0x399f2d(0x112)](_0x3b02c9[_0x399f2d(0x130)])??_0x2d7eac['get'](_0x192d26);return{'model':_0x3b02c9['model'],'dims':_0xf883ae?.[_0x399f2d(0x188)]??null,'description':_0x3b02c9['size']?(_0x3b02c9['size']/0x3b9aca00)[_0x399f2d(0xf6)](0x1)+_0x399f2d(0x125):null,'builtin':!0x1,'live':!0x0};}),this[_0x4fb8a0(0x137)]=null;}else this[_0x4fb8a0(0x1a4)]=[],this[_0x4fb8a0(0x137)]=_0x33b9a6[_0x4fb8a0(0x131)]??'No\x20models\x20found\x20on\x20Ollama\x20server';}catch(_0x17471e){this['liveOllamaModels']=[],this[_0x4fb8a0(0x137)]=_0x17471e[_0x4fb8a0(0xfc)];}finally{this[_0x4fb8a0(0xe5)]=!0x1;for(const _0x413b1a of[this['pl'],this[_0x4fb8a0(0x10c)]])_0x4fb8a0(0x173)===_0x413b1a?.[_0x4fb8a0(0x171)]&&this[_0x4fb8a0(0x14c)](_0x413b1a);}},'modelLabel'(_0x4dbbf1){const _0x281dd4=_0xc95d48;let _0x5bb6d4=_0x4dbbf1[_0x281dd4(0x1a5)]?'●\x20'+_0x4dbbf1['model']:_0x4dbbf1[_0x281dd4(0x130)];return _0x4dbbf1[_0x281dd4(0x188)]?_0x5bb6d4+='\x20—\x20'+_0x4dbbf1['dims']+'\x20dims':_0x4dbbf1['description']?_0x5bb6d4+='\x20—\x20'+_0x4dbbf1[_0x281dd4(0x18e)]:_0x4dbbf1[_0x281dd4(0x1a5)]&&(_0x5bb6d4+=_0x281dd4(0x1ad)),_0x5bb6d4;},'modelsForProvider'(_0x57be49){const _0x5d01a3=_0xc95d48;return _0x5d01a3(0x173)===_0x57be49&&Array['isArray'](this[_0x5d01a3(0x1a4)])&&this[_0x5d01a3(0x1a4)][_0x5d01a3(0x103)]?this['liveOllamaModels']:this[_0x5d01a3(0x10d)][_0x57be49]??[];},'findModelEntry'(_0x57e938,_0x3a5df9){const _0x4f8494=_0xc95d48;if(!_0x3a5df9||_0x4f8494(0x136)===_0x3a5df9)return null;const _0x283283=this[_0x4f8494(0x101)](_0x57e938),_0x50aeb8=_0x283283['find'](_0x275950=>_0x275950[_0x4f8494(0x130)]===_0x3a5df9);if(_0x50aeb8)return _0x50aeb8;const _0x28baf7=String(_0x3a5df9)[_0x4f8494(0x16f)](':')[0x0];return _0x283283[_0x4f8494(0x199)](_0x2b4f16=>_0x2b4f16[_0x4f8494(0x130)]===_0x28baf7||String(_0x2b4f16[_0x4f8494(0x130)]||'')['split'](':')[0x0]===_0x28baf7)??null;},'clearModelSelection'(_0x5387a0){const _0x33ac67=_0xc95d48;_0x5387a0[_0x33ac67(0x105)]='',_0x5387a0[_0x33ac67(0x13a)]='',_0x5387a0['emb_dims_auto']=null,_0x5387a0[_0x33ac67(0x198)]=!0x1;},'reconcileModelSelection'(_0x48bcf5){const _0x1c9bf0=_0xc95d48;if(!_0x48bcf5)return;if(_0x1c9bf0(0x136)===_0x48bcf5[_0x1c9bf0(0x105)])return _0x48bcf5['emb_custom']=!0x0,_0x48bcf5[_0x1c9bf0(0x13a)]='',void(_0x48bcf5[_0x1c9bf0(0x11c)]=null);if(!_0x48bcf5[_0x1c9bf0(0x105)])return void this[_0x1c9bf0(0x10f)](_0x48bcf5);const _0x5e4d1c=this['findModelEntry'](_0x48bcf5[_0x1c9bf0(0x171)],_0x48bcf5[_0x1c9bf0(0x105)]);_0x5e4d1c?(_0x48bcf5[_0x1c9bf0(0x105)]=_0x5e4d1c[_0x1c9bf0(0x130)],_0x48bcf5[_0x1c9bf0(0x13a)]=_0x5e4d1c[_0x1c9bf0(0x130)],_0x48bcf5[_0x1c9bf0(0x11c)]=_0x5e4d1c[_0x1c9bf0(0x188)]??null,_0x48bcf5[_0x1c9bf0(0x198)]=!0x1):this[_0x1c9bf0(0x10f)](_0x48bcf5);},'providerFields'(_0x30d9b1){const _0x4791bd=_0xc95d48;return this['providerMap'][_0x30d9b1]?.[_0x4791bd(0x10a)]??[];},'providerNote'(_0x53e179){return this['providerMap'][_0x53e179]?.['note']??null;},'algorithmFields'(_0x514cc9){const _0x431ac7=_0xc95d48;return this['algorithmMap'][_0x514cc9]?.[_0x431ac7(0x10a)]??[];},'algorithmNote'(_0x471d73){const _0x48eb50=_0xc95d48;return this[_0x48eb50(0xf9)][_0x471d73]?.['note']??null;},'onAlgorithmChange'(_0x34b019,_0x31b007){const _0x1da73b=_0xc95d48;_0x34b019[_0x1da73b(0x1a8)]=_0x31b007,_0x34b019[_0x1da73b(0x16c)]={};for(const _0xc4fd69 of this[_0x1da73b(0xff)](_0x31b007))void 0x0!==_0xc4fd69[_0x1da73b(0x18c)]&&(_0x34b019[_0x1da73b(0x16c)][_0xc4fd69[_0x1da73b(0x145)]]=_0xc4fd69[_0x1da73b(0x18c)]);},'buildAlgorithmConfig'(_0x20a00e){const _0x2446be=_0xc95d48,_0x513a32=this['algorithmFields'](_0x20a00e[_0x2446be(0x1a8)]??_0x2446be(0x10e)),_0x46cae2={};for(const _0x34a24f of _0x513a32){const _0x3cc0b7=_0x20a00e[_0x2446be(0x16c)]?.[_0x34a24f[_0x2446be(0x145)]];if(void 0x0===_0x3cc0b7||''===_0x3cc0b7)void 0x0!==_0x34a24f[_0x2446be(0x18c)]&&(_0x46cae2[_0x34a24f[_0x2446be(0x145)]]=_0x34a24f['default']);else{const _0x2cef14='number'===_0x34a24f[_0x2446be(0x18a)]?Number(_0x3cc0b7):String(_0x3cc0b7);if(_0x2446be(0x146)===_0x34a24f[_0x2446be(0x18a)]&&isNaN(_0x2cef14))continue;_0x46cae2[_0x34a24f[_0x2446be(0x145)]]=_0x2cef14;}}return _0x46cae2;},'buildProviderConfig'(_0x3717cf){const _0x20563a=_0xc95d48,_0x590440=this['providerFields'](_0x3717cf[_0x20563a(0x171)]??''),_0x32482e={};for(const _0x151591 of _0x590440){const _0x8d3d37=_0x3717cf['emb_config']?.[_0x151591[_0x20563a(0x145)]];void 0x0===_0x8d3d37||''===_0x8d3d37?void 0x0!==_0x151591[_0x20563a(0x18c)]&&(_0x32482e[_0x151591[_0x20563a(0x145)]]=_0x151591[_0x20563a(0x18c)]):_0x32482e[_0x151591[_0x20563a(0x145)]]=_0x20563a(0x146)===_0x151591[_0x20563a(0x18a)]?Number(_0x8d3d37):String(_0x8d3d37);}return _0x32482e;},'getFields'(_0xad81f3,_0x54058b){const _0x30bef7=_0xc95d48,_0x2b6255=this['deepTypeMap'][_0xad81f3];if(_0x2b6255&&!_0x2b6255[_0x30bef7(0x18f)]&&Object[_0x30bef7(0x14a)](_0x2b6255[_0x30bef7(0xf5)])['length']>0x0){const _0x49a5c4=Object[_0x30bef7(0x14a)](_0x2b6255[_0x30bef7(0xf5)]);return _0x30bef7(0x174)===_0x54058b?_0x49a5c4[_0x30bef7(0xe7)](_0xa4dd8=>_0x2b6255[_0x30bef7(0xf5)][_0xa4dd8][_0x30bef7(0x175)]('string'))[_0x30bef7(0x121)]():_0x49a5c4[_0x30bef7(0x121)]();}const _0x48f3e8=this[_0x30bef7(0x151)][_0xad81f3]||{},_0x4c56f5=Object[_0x30bef7(0x14a)](_0x48f3e8);return _0x30bef7(0x174)===_0x54058b?_0x4c56f5[_0x30bef7(0xe7)](_0x27e3eb=>_0x48f3e8[_0x27e3eb][_0x30bef7(0x175)](_0x30bef7(0x15c))):_0x4c56f5['sort']();},'defaultFieldMode'(_0x4b2c52){const _0xab1c7c=_0xc95d48,_0x38833a=this[_0xab1c7c(0x119)][_0x4b2c52];if(_0x38833a&&!_0x38833a[_0xab1c7c(0x18f)]&&Object['keys'](_0x38833a[_0xab1c7c(0xf5)])[_0xab1c7c(0x103)]>0x0){const _0x4a5525=Object[_0xab1c7c(0x14a)](_0x38833a[_0xab1c7c(0xf5)]);return _0x4a5525[_0xab1c7c(0x103)]?_0x4a5525[_0xab1c7c(0x143)](_0x1dca61=>_0x38833a[_0xab1c7c(0xf5)][_0x1dca61][_0xab1c7c(0x175)](_0xab1c7c(0x15c)))?_0xab1c7c(0x174):'all':_0xab1c7c(0x120);}const _0x33e26e=this[_0xab1c7c(0x151)][_0x4b2c52]||{},_0x2dd55f=Object[_0xab1c7c(0x14a)](_0x33e26e);return _0x2dd55f[_0xab1c7c(0x103)]?_0x2dd55f[_0xab1c7c(0x143)](_0xee2a61=>_0x33e26e[_0xee2a61][_0xab1c7c(0x175)]('string'))?_0xab1c7c(0x174):_0xab1c7c(0x15a):_0xab1c7c(0x120);},'getFieldItems'(_0x2e0868,_0x51c885){const _0x576f27=_0xc95d48,_0x28f6de=this[_0x576f27(0x119)][_0x2e0868];let _0x41cdcb;return _0x41cdcb=_0x28f6de&&!_0x28f6de[_0x576f27(0x18f)]&&Object[_0x576f27(0x14a)](_0x28f6de[_0x576f27(0xf5)])[_0x576f27(0x103)]>0x0?Object[_0x576f27(0x13e)](_0x28f6de[_0x576f27(0xf5)]):Object[_0x576f27(0x13e)](this['typeMap'][_0x2e0868]||{})[_0x576f27(0x153)](([_0x28860d,_0xd2b7af])=>[_0x28860d,_0xd2b7af]),_0x576f27(0x174)===_0x51c885&&(_0x41cdcb=_0x41cdcb[_0x576f27(0xe7)](([,_0x5221c7])=>_0x5221c7['includes'](_0x576f27(0x15c)))),_0x41cdcb[_0x576f27(0x153)](([_0x1590c6,_0x487c41])=>({'path':_0x1590c6,'types':Array['isArray'](_0x487c41)?_0x487c41:[_0x487c41],'hint':Array['isArray'](_0x487c41)&&_0x487c41[_0x576f27(0x175)](_0x576f27(0x156))?_0x576f27(0x156):null}));},'onProviderChange'(_0x576d17,_0x41f404){const _0x380962=_0xc95d48;_0x576d17[_0x380962(0x171)]=_0x41f404,_0x576d17[_0x380962(0x1a0)]={};for(const _0x1ee156 of this['providerFields'](_0x41f404))void 0x0!==_0x1ee156[_0x380962(0x18c)]&&(_0x576d17['emb_config'][_0x1ee156['key']]=_0x1ee156[_0x380962(0x18c)]);'ollama'!==_0x41f404||null!==this['liveOllamaModels']||this[_0x380962(0xe5)]||this[_0x380962(0x1a6)](_0x576d17),this['clearModelSelection'](_0x576d17),_0x576d17['emb_custom_model']='',_0x576d17['emb_custom_dims']='',_0x576d17['emb_save_catalog']=!0x1;},'onModelSelChange'(_0x23c6ae,_0x1532a1){const _0x4b6756=_0xc95d48;if(_0x23c6ae[_0x4b6756(0x105)]=_0x1532a1,_0x1532a1){if('__custom__'===_0x1532a1)_0x23c6ae[_0x4b6756(0x198)]=!0x0,_0x23c6ae[_0x4b6756(0x13a)]='',_0x23c6ae['emb_dims_auto']=null;else{_0x23c6ae[_0x4b6756(0x198)]=!0x1,_0x23c6ae['emb_model']=_0x1532a1;const _0x5ab179=this[_0x4b6756(0x140)](_0x23c6ae[_0x4b6756(0x171)],_0x1532a1);_0x23c6ae[_0x4b6756(0x11c)]=_0x5ab179?.['dims']??null,_0x23c6ae[_0x4b6756(0x18d)]='',_0x23c6ae['emb_custom_dims']='',_0x23c6ae['emb_save_catalog']=!0x1;}}else this[_0x4b6756(0x10f)](_0x23c6ae);},'effectiveModel':_0x4b5d6c=>_0x4b5d6c[_0xc95d48(0x198)]?_0x4b5d6c[_0xc95d48(0x18d)][_0xc95d48(0x197)]():_0x4b5d6c[_0xc95d48(0x13a)],'effectiveDims'(_0x9f5049){const _0x829ac8=_0xc95d48;if(_0x9f5049[_0x829ac8(0x198)]){const _0x48d656=Number(_0x9f5049[_0x829ac8(0x190)]);return Number[_0x829ac8(0xfb)](_0x48d656)&&_0x48d656>0x0?_0x48d656:null;}return _0x9f5049[_0x829ac8(0x11c)]??null;},async 'maybeSaveToCatalog'(_0x387890){const _0x181142=_0xc95d48;if(!_0x387890[_0x181142(0x198)]||!_0x387890[_0x181142(0x10b)])return!0x0;const _0x26c25a=_0x387890[_0x181142(0x18d)][_0x181142(0x197)](),_0x105700=Number(_0x387890[_0x181142(0x190)]);if(!_0x26c25a||!_0x105700)return!0x0;try{await fetch(__ENV__[_0x181142(0x15b)]+_0x181142(0xf7),{'method':_0x181142(0x18b),'headers':{'Content-Type':'application/json'},'body':JSON['stringify']({'provider':_0x387890[_0x181142(0x171)],'model':_0x26c25a,'dims':_0x105700})}),await this[_0x181142(0x104)]();}catch{}return!0x0;},async 'openRegisterModel'(_0x121c62){const _0x2c1411=_0xc95d48;await _0x39a1e0[_0x2c1411(0x179)][_0x2c1411(0x148)][_0x2c1411(0x161)]['open']({'owner':_0x39a1e0,'title':_0x2c1411(0x11a),'content':_0x2c1411(0xeb),'context':_0x356b95=>({'modal':_0x356b95,'initialProvider':_0x121c62?.[_0x2c1411(0x171)]??'','onDone':async()=>{const _0x23f700=_0x2c1411;await this[_0x23f700(0xe8)](_0x121c62);}})});},async 'refreshCatalogState'(_0x2e5d26){const _0x3ae61d=_0xc95d48;await this[_0x3ae61d(0x104)](),_0x2e5d26&&('ollama'===(_0x2e5d26?.['emb_type']??'')&&Array[_0x3ae61d(0x19b)](this[_0x3ae61d(0x1a4)])&&this[_0x3ae61d(0x1a4)]['length']||_0x2e5d26[_0x3ae61d(0x105)])&&this[_0x3ae61d(0x14c)](_0x2e5d26);},async 'openModelCatalog'(_0x28669b){const _0x41e7ae=_0xc95d48;await _0x39a1e0[_0x41e7ae(0x179)][_0x41e7ae(0x148)]['modal'][_0x41e7ae(0x12c)]({'owner':_0x39a1e0,'title':_0x41e7ae(0xf0),'content':'<embed-model-catalog\x20:initialprovider=\x22initialProvider\x22\x20:compact=\x22true\x22\x20:onchanged=\x22onChanged\x22\x20/>','context':()=>({'initialProvider':_0x28669b?.['emb_type']??'','onChanged':async()=>{await this['refreshCatalogState'](_0x28669b);}})});},'pl':{'name':'','source_type':'','field':'','field_mode':'custom','mode':_0xc95d48(0x12b),'emb_type':'','emb_model_sel':'','emb_model':'','emb_dims_auto':null,'emb_custom':!0x1,'emb_custom_model':'','emb_custom_dims':'','emb_save_catalog':!0x1,'emb_config':{},'w_concurrency':'1','w_poll_interval':_0xc95d48(0x139),'algorithm':_0xc95d48(0x10e),'alg_config':{},'prepare':'none','prepare_custom':'','chunk_strategy':_0xc95d48(0x138),'chunk_custom':'','chunk_size':_0xc95d48(0x16e),'chunk_overlap':'64','chunk_store_text':!0x0},'onPlSourceTypeChange'(_0x532a0c){const _0x1b5e84=_0xc95d48;this['pl'][_0x1b5e84(0x14b)]=_0x532a0c,this['pl'][_0x1b5e84(0x170)]='',this['pl']['field_mode']=this[_0x1b5e84(0x14d)](_0x532a0c),this[_0x1b5e84(0x11b)](_0x532a0c);},'setPlFieldMode'(_0x48beb2){const _0x3db9aa=_0xc95d48;this['pl'][_0x3db9aa(0x15f)]=_0x48beb2,this['pl']['field']='';},'idx':{'name':'','source_type':'','embedder':'','storage_key':'','field':'','field_mode':'custom','dims':'','mode':'inline','job_type':''},'onIdxSourceTypeChange'(_0x2c59d0){const _0x4d1664=_0xc95d48;this[_0x4d1664(0x108)][_0x4d1664(0x14b)]=_0x2c59d0,this[_0x4d1664(0x108)][_0x4d1664(0x170)]='',this[_0x4d1664(0x108)][_0x4d1664(0x15f)]=this[_0x4d1664(0x14d)](_0x2c59d0),this['loadDeepForType'](_0x2c59d0);},'setIdxFieldMode'(_0x1a1eda){const _0x4f71aa=_0xc95d48;this['idx'][_0x4f71aa(0x15f)]=_0x1a1eda,this['idx'][_0x4f71aa(0x170)]='';},'emb':{'name':'','emb_type':'','emb_model_sel':'','emb_model':'','emb_dims_auto':null,'emb_custom':!0x1,'emb_custom_model':'','emb_custom_dims':'','emb_save_catalog':!0x1,'emb_config':{}},'srch':{'name':'','source_type':'','storage_key':'','dims':'','embedder':'','algorithm':_0xc95d48(0x10e),'alg_config':{}},'wkr':{'name':'','job_type':'','indexer':'','embedder':'','concurrency':'1','pollInterval':_0xc95d48(0x139),'ttl':_0xc95d48(0xf1)},'setTab'(_0x36b3e1){const _0x1d61b7=_0xc95d48;this[_0x1d61b7(0x12d)]=_0x36b3e1,this[_0x1d61b7(0x131)]=null,this[_0x1d61b7(0x118)]=null;},'num'(_0x53e8d7){const _0x260ab3=Number(_0x53e8d7);return isNaN(_0x260ab3)||''===_0x53e8d7?void 0x0:_0x260ab3;},async 'submitPipeline'(){const _0x35cfcd=_0xc95d48,_0x3c653e=this['pl'];if(!_0x3c653e[_0x35cfcd(0x11e)]['trim']())return this[_0x35cfcd(0x131)]=_0x35cfcd(0x186);if(!_0x3c653e['source_type'][_0x35cfcd(0x197)]())return this[_0x35cfcd(0x131)]='Source\x20type\x20is\x20required';const _0x3ea530=this[_0x35cfcd(0x19d)](_0x3c653e),_0x551ec0=this['effectiveDims'](_0x3c653e);if(!_0x3ea530)return this[_0x35cfcd(0x131)]=_0x35cfcd(0x13c);if(_0x3c653e[_0x35cfcd(0x198)]&&!_0x551ec0)return this[_0x35cfcd(0x131)]=_0x35cfcd(0x176);for(const _0x4dc5c3 of this['providerFields'](_0x3c653e[_0x35cfcd(0x171)]))if(_0x4dc5c3[_0x35cfcd(0x134)]&&!_0x3c653e[_0x35cfcd(0x1a0)][_0x4dc5c3[_0x35cfcd(0x145)]]?.[_0x35cfcd(0x12e)]()['trim']())return this['error']=_0x4dc5c3[_0x35cfcd(0x196)]+_0x35cfcd(0x16d);await this[_0x35cfcd(0x165)](_0x3c653e);const _0xb1fb30=this['lockedEnv'],_0x49f64d=_0x3c653e[_0x35cfcd(0x14b)]['trim'](),_0x2eca14={'name':_0x3c653e[_0x35cfcd(0x11e)][_0x35cfcd(0x197)](),'field':_0x3c653e['field'][_0x35cfcd(0x197)]()||void 0x0,'dims':_0x551ec0??void 0x0,'mode':_0x3c653e['mode'],'embedder':{'type':_0x3c653e[_0x35cfcd(0x171)],'model':_0x3ea530||void 0x0,...this[_0x35cfcd(0x128)](_0x3c653e)},'algorithm':_0x3c653e[_0x35cfcd(0x1a8)]},_0x3851e4=this[_0x35cfcd(0x17a)](_0x3c653e);if(Object[_0x35cfcd(0x14a)](_0x3851e4)['length']&&(_0x2eca14[_0x35cfcd(0x167)]=_0x3851e4),_0x35cfcd(0x1aa)===_0x3c653e[_0x35cfcd(0x117)]&&(_0x2eca14[_0x35cfcd(0x14f)]={'concurrency':this[_0x35cfcd(0x13f)](_0x3c653e[_0x35cfcd(0x114)]),'pollInterval':this[_0x35cfcd(0x13f)](_0x3c653e['w_poll_interval'])}),_0x3c653e[_0x35cfcd(0x170)][_0x35cfcd(0x197)]()&&'none'!==_0x3c653e[_0x35cfcd(0x17e)]&&(_0x2eca14['prepare']=_0x35cfcd(0x120)===_0x3c653e[_0x35cfcd(0x17e)]?_0x3c653e[_0x35cfcd(0x15d)][_0x35cfcd(0x197)]():_0x3c653e[_0x35cfcd(0x17e)]),_0x3c653e[_0x35cfcd(0x170)]['trim']()&&_0x35cfcd(0x138)!==_0x3c653e['chunk_strategy']){const _0x3a9d14=_0x35cfcd(0x120)===_0x3c653e['chunk_strategy']?_0x3c653e[_0x35cfcd(0x13b)][_0x35cfcd(0x197)]():_0x3c653e[_0x35cfcd(0x172)];_0x2eca14[_0x35cfcd(0x19a)]={'strategy':_0x3a9d14,'size':this['num'](_0x3c653e[_0x35cfcd(0x155)])??0x200,'overlap':'fixed'===_0x3c653e[_0x35cfcd(0x172)]?this[_0x35cfcd(0x13f)](_0x3c653e[_0x35cfcd(0x12f)])??0x40:void 0x0,'storeText':_0x3c653e[_0x35cfcd(0x17c)]},void 0x0===_0x2eca14[_0x35cfcd(0x19a)][_0x35cfcd(0xe6)]&&delete _0x2eca14[_0x35cfcd(0x19a)]['overlap'];}await this['_post']('/env/'+encodeURIComponent(_0xb1fb30)+'/type/'+encodeURIComponent(_0x49f64d)+_0x35cfcd(0x1a2),_0x2eca14);},async 'submitEmbedder'(){const _0x280303=_0xc95d48,_0x19d20e=this[_0x280303(0x10c)];if(!_0x19d20e[_0x280303(0x11e)][_0x280303(0x197)]())return this[_0x280303(0x131)]=_0x280303(0x186);const _0x451f97=this[_0x280303(0x19d)](_0x19d20e);if(!_0x451f97)return this[_0x280303(0x131)]='Model\x20is\x20required';for(const _0x53fea3 of this[_0x280303(0x116)](_0x19d20e['emb_type']))if(_0x53fea3[_0x280303(0x134)]&&!_0x19d20e[_0x280303(0x1a0)][_0x53fea3[_0x280303(0x145)]]?.[_0x280303(0x12e)]()[_0x280303(0x197)]())return this[_0x280303(0x131)]=_0x53fea3['label']+'\x20is\x20required';await this[_0x280303(0x165)](_0x19d20e);const _0x396b1e={'name':_0x19d20e['name'][_0x280303(0x197)](),'type':_0x19d20e[_0x280303(0x171)],'model':_0x451f97||void 0x0,...this[_0x280303(0x128)](_0x19d20e)};await this[_0x280303(0x19e)](_0x280303(0x162),_0x396b1e);},async 'submitIndexer'(){const _0x392dfc=_0xc95d48,_0x20aa8d=this[_0x392dfc(0x108)];if(!_0x20aa8d[_0x392dfc(0x11e)][_0x392dfc(0x197)]())return this[_0x392dfc(0x131)]=_0x392dfc(0x186);if(!_0x20aa8d[_0x392dfc(0x14b)][_0x392dfc(0x197)]())return this['error']=_0x392dfc(0x157);if(!_0x20aa8d[_0x392dfc(0x17d)][_0x392dfc(0x197)]())return this[_0x392dfc(0x131)]=_0x392dfc(0x147);const _0x445a0f={'name':_0x20aa8d[_0x392dfc(0x11e)]['trim'](),'source_env':this[_0x392dfc(0x154)],'source_type':_0x20aa8d[_0x392dfc(0x14b)]['trim'](),'embedder':_0x20aa8d[_0x392dfc(0x17d)][_0x392dfc(0x197)](),'storage_key':_0x20aa8d['storage_key'][_0x392dfc(0x197)]()||void 0x0,'field':_0x20aa8d[_0x392dfc(0x170)]['trim']()||void 0x0,'dims':this[_0x392dfc(0x13f)](_0x20aa8d['dims']),'mode':_0x20aa8d[_0x392dfc(0x117)],'job_type':_0x20aa8d['job_type'][_0x392dfc(0x197)]()||void 0x0};await this[_0x392dfc(0x19e)](_0x392dfc(0x180),_0x445a0f);},async 'submitSearch'(){const _0x57c639=_0xc95d48,_0x36547f=this['srch'];if(!_0x36547f[_0x57c639(0x11e)][_0x57c639(0x197)]())return this['error']='Name\x20is\x20required';const _0x36417b=(this[_0x57c639(0x124)]??_0x36547f[_0x57c639(0x14b)]??'')[_0x57c639(0x197)]();if(!_0x36417b)return this['error']=_0x57c639(0x157);if(!_0x36547f[_0x57c639(0x149)]['trim']())return this['error']=_0x57c639(0x106);const _0x5f4246={'name':_0x36547f[_0x57c639(0x11e)][_0x57c639(0x197)](),'source_type':_0x36417b,'source_env':this[_0x57c639(0x154)],'storage_key':_0x36547f['storage_key'][_0x57c639(0x197)](),'dims':_0x36547f[_0x57c639(0x188)]?Number(_0x36547f[_0x57c639(0x188)]):void 0x0,'embedder':_0x36547f[_0x57c639(0x17d)][_0x57c639(0x197)]()||void 0x0,'algorithm':_0x36547f['algorithm']},_0x8541b7=this['buildAlgorithmConfig'](_0x36547f);Object[_0x57c639(0x14a)](_0x8541b7)[_0x57c639(0x103)]&&(_0x5f4246[_0x57c639(0x167)]=_0x8541b7),await this[_0x57c639(0x19e)](_0x57c639(0x132),_0x5f4246);},async 'submitWorker'(){const _0x4a4962=_0xc95d48,_0x554184=this[_0x4a4962(0xed)];if(!_0x554184[_0x4a4962(0x11e)][_0x4a4962(0x197)]())return this[_0x4a4962(0x131)]=_0x4a4962(0x186);if(!_0x554184['job_type'][_0x4a4962(0x197)]())return this[_0x4a4962(0x131)]=_0x4a4962(0x187);if(!_0x554184[_0x4a4962(0x122)][_0x4a4962(0x197)]())return this['error']=_0x4a4962(0x19f);if(!_0x554184['embedder'][_0x4a4962(0x197)]())return this[_0x4a4962(0x131)]=_0x4a4962(0x147);const _0x5390a8={'name':_0x554184['name']['trim'](),'job_type':_0x554184[_0x4a4962(0x194)][_0x4a4962(0x197)](),'indexer':_0x554184[_0x4a4962(0x122)][_0x4a4962(0x197)](),'embedder':_0x554184[_0x4a4962(0x17d)][_0x4a4962(0x197)](),'concurrency':this[_0x4a4962(0x13f)](_0x554184[_0x4a4962(0x182)]),'pollInterval':this[_0x4a4962(0x13f)](_0x554184[_0x4a4962(0x164)]),'ttl':this[_0x4a4962(0x13f)](_0x554184[_0x4a4962(0x193)])};await this[_0x4a4962(0x19e)]('/embeddings/workers',_0x5390a8);},async '_post'(_0x43ac72,_0x16bcaf){const _0x1a0d52=_0xc95d48;this[_0x1a0d52(0x12a)]=!0x0,this[_0x1a0d52(0x131)]=null,this[_0x1a0d52(0x118)]=null;try{const _0x244b9d=await fetch(''+__ENV__[_0x1a0d52(0x15b)]+_0x43ac72,{'method':_0x1a0d52(0x18b),'headers':{'Content-Type':_0x1a0d52(0x107)},'body':JSON[_0x1a0d52(0xf2)](_0x16bcaf)}),_0x22e4fa=await _0x244b9d[_0x1a0d52(0x13d)]();if(!_0x244b9d['ok']){const _0xf6a7d2=_0x22e4fa?.['error']?.[_0x1a0d52(0xfc)]||_0x22e4fa?.['message']||_0x1a0d52(0x102)+_0x244b9d[_0x1a0d52(0x127)];return void(this['error']=_0xf6a7d2[_0x1a0d52(0x175)](_0x1a0d52(0x178))?_0x1a0d52(0x11d)+_0x16bcaf[_0x1a0d52(0x11e)]+_0x1a0d52(0xfd):_0xf6a7d2);}this[_0x1a0d52(0x118)]=_0x22e4fa[_0x1a0d52(0x1ab)],_0x39a1e0[_0x1a0d52(0x179)]['shared']?.[_0x1a0d52(0xfe)]?.[_0x1a0d52(0x118)]?.(_0x1a0d52(0x17b)),_0x39a1e0[_0x1a0d52(0x159)]('created',_0x22e4fa[_0x1a0d52(0x1ab)]);}catch(_0x286362){this[_0x1a0d52(0x131)]=_0x286362?.[_0x1a0d52(0xfc)]||String(_0x286362);}finally{this[_0x1a0d52(0x12a)]=!0x1;}},'handleSubmit'(){const _0x5ef8c2=_0xc95d48;switch(this[_0x5ef8c2(0x12d)]){case _0x5ef8c2(0x169):return this[_0x5ef8c2(0xe9)]();case _0x5ef8c2(0x17d):return this[_0x5ef8c2(0x185)]();case'indexer':return this[_0x5ef8c2(0x183)]();case _0x5ef8c2(0xf3):return this[_0x5ef8c2(0x177)]();case _0x5ef8c2(0x14f):return this[_0x5ef8c2(0x135)]();}}}),async 'init'(_0x58a514){const _0x24f426=_0xc95d48;await Promise[_0x24f426(0x15a)]([this[_0x24f426(0x163)](),this[_0x24f426(0x104)](),this['loadProviders'](),this[_0x24f426(0xee)]()]);const _0x56c154=_0x58a514[_0x24f426(0x11f)][_0x24f426(0xfa)];_0x56c154&&[_0x24f426(0x169),'embedder','indexer',_0x24f426(0xf3),_0x24f426(0x14f)][_0x24f426(0x175)](_0x56c154)&&(this[_0x24f426(0x12d)]=_0x56c154);const _0xf2b4c8=_0x58a514[_0x24f426(0x11f)][_0x24f426(0x129)];_0xf2b4c8&&(this['pl']['source_type']=_0xf2b4c8,this['pl'][_0x24f426(0x15f)]=this[_0x24f426(0x14d)](_0xf2b4c8),this[_0x24f426(0x108)][_0x24f426(0x14b)]=_0xf2b4c8,this[_0x24f426(0x108)]['field_mode']=this[_0x24f426(0x14d)](_0xf2b4c8),this[_0x24f426(0xea)][_0x24f426(0x14b)]=_0xf2b4c8,this[_0x24f426(0x11b)](_0xf2b4c8)),this['lockedStorageKey']&&(this[_0x24f426(0xea)][_0x24f426(0x149)]=this[_0x24f426(0x15e)]),this['lockedEmbedder']&&(this[_0x24f426(0xea)][_0x24f426(0x17d)]=this[_0x24f426(0x100)]);const _0x588eb7=this[_0x24f426(0x113)][0x0]?.[_0x24f426(0x145)]??'';for(const _0x378644 of[this['pl'],this['emb']]){_0x378644[_0x24f426(0x171)]=_0x588eb7,_0x378644[_0x24f426(0x1a0)]={};for(const _0x3835d1 of this['providerFields'](_0x588eb7))void 0x0!==_0x3835d1[_0x24f426(0x18c)]&&(_0x378644['emb_config'][_0x3835d1[_0x24f426(0x145)]]=_0x3835d1[_0x24f426(0x18c)]);this[_0x24f426(0x10f)](_0x378644);}_0x24f426(0x173)===_0x588eb7&&this[_0x24f426(0x1a6)](this['pl']);for(const _0x40e2ba of[this['pl'],this[_0x24f426(0xea)]])for(const _0x2aab86 of this[_0x24f426(0xff)](_0x40e2ba[_0x24f426(0x1a8)]))void 0x0!==_0x2aab86['default']&&(_0x40e2ba[_0x24f426(0x16c)][_0x2aab86['key']]=_0x2aab86[_0x24f426(0x18c)]);},'template':_0xc95d48(0x160),'style':_0xc95d48(0x150)};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const _0x45daec=_0x1629;(function(_0x409770,_0x38bbe9){const _0x2b30ed=_0x1629,_0x5cb816=_0x409770();while(!![]){try{const _0x563301=parseInt(_0x2b30ed(0x152))/0x1+parseInt(_0x2b30ed(0x15a))/0x2*(parseInt(_0x2b30ed(0x153))/0x3)+parseInt(_0x2b30ed(0x143))/0x4*(parseInt(_0x2b30ed(0x140))/0x5)+parseInt(_0x2b30ed(0x13f))/0x6*(parseInt(_0x2b30ed(0x147))/0x7)+parseInt(_0x2b30ed(0x14c))/0x8*(-parseInt(_0x2b30ed(0x146))/0x9)+parseInt(_0x2b30ed(0x154))/0xa+parseInt(_0x2b30ed(0x144))/0xb*(-parseInt(_0x2b30ed(0x151))/0xc);if(_0x563301===_0x38bbe9)break;else _0x5cb816['push'](_0x5cb816['shift']());}catch(_0x2c4026){_0x5cb816['push'](_0x5cb816['shift']());}}}(_0x58cf,0x5a4a6));import _0x355ec8 from'../../engines/parts/engine-panel-shell.ok.js';function _0x1629(_0x6b13b7,_0x99d0ad){_0x6b13b7=_0x6b13b7-0x13c;const _0x58cf4f=_0x58cf();let _0x1629f4=_0x58cf4f[_0x6b13b7];return _0x1629f4;}import{ENGINE_PANEL_SHARED_STYLE as _0x5ed874}from'../../engines/engine-panel-shared-style.js';import{dispatchEnginePipelineSelection as _0x32fd79,maskSensitiveConfig as _0xdccc56}from'../../engines/engine-ui-utils.js';const s=_0x5ed874;function _0x58cf(){const _0x260c8f=['12BPhOKz','24046RrLAVo','health\x20check\x20failed','1079757xSMCHo','1321999RUrjdb','checkHealth','message','error','data','8FNBjTZ','/health','latency','includes','engine','7704NXBMPs','709603HXmxTy','27078ccgkjk','2698590wsJteO','eng','health','config','$attr','model','68PTSePE','isRunning','type','busy','$watch','name','12fazPWM','381925YxAfWF','\x0a<engine-panel-shell\x0a\x20\x20:engine=\x22eng\x22\x0a\x20\x20:title=\x22name\x22\x0a\x20\x20type-label=\x22embedder\x22\x0a\x20\x20type-color=\x22var(--okdb-info)\x22\x0a\x20\x20show-refresh=\x22true\x22\x0a\x20\x20:refresh-busy=\x22busy\x22\x0a\x20\x20:on-refresh=\x22reloadPanel\x22\x0a\x20\x20:on-pipeline=\x22viewPipeline\x22\x0a\x20\x20@engine-updated=\x22$dispatch(\x27engine-updated\x27,\x20$event.detail)\x22\x0a\x20\x20@refresh=\x22$dispatch(\x27refresh\x27)\x22\x0a\x20\x20@deleted=\x22$dispatch(\x27deleted\x27,\x20$event.detail)\x22\x0a>\x0a\x20\x20<div\x20class=\x22stack-compact\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:8px;min-width:0;flex:1;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22pill-row\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Embedding\x20provider\x20type.\x22>{{\x20providerType\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Active\x20model.\x22>{{\x20modelName\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22health?.ok\x20===\x20true\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20style=\x22border-color:color-mix(in\x20srgb,\x20var(--okdb-success)\x2033%,\x20transparent);color:var(--okdb-success);background:color-mix(in\x20srgb,\x20var(--okdb-success)\x207%,\x20transparent);\x22>healthy</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22health?.ok\x20===\x20false\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20style=\x22border-color:color-mix(in\x20srgb,\x20var(--okdb-danger)\x2033%,\x20transparent);color:var(--okdb-danger);background:color-mix(in\x20srgb,\x20var(--okdb-danger)\x207%,\x20transparent);\x22>unhealthy</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22story-lead\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Live\x20embedding\x20connection\x20for\x20<strong>{{\x20modelName\x20}}</strong>\x20on\x20<strong>{{\x20providerType\x20}}</strong>.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Indexers\x20and\x20workers\x20depend\x20on\x20this\x20engine\x20to\x20turn\x20content\x20into\x20vectors.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22story-note\x22>Use\x20health\x20checks\x20to\x20confirm\x20the\x20provider\x20is\x20reachable\x20and\x20returning\x20the\x20expected\x20vector\x20shape\x20before\x20debugging\x20downstream\x20pipelines.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-grid\x20metric-grid--compact\x22\x20style=\x22min-width:min(100%,\x20340px);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Dims</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20style=\x22color:var(--okdb-accent);\x22>{{\x20dimsValue\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Latency</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20style=\x22color:var(--okdb-app-fg);\x22>{{\x20latencyValue\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:10px;flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22checkHealth\x22\x20:disabled=\x22busy\x20||\x20!eng.isRunning\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20busy\x20?\x20\x27Checking…\x27\x20:\x20\x27Check\x20Health\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!eng.isRunning\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22story-note\x22>Start\x20the\x20engine\x20to\x20run\x20a\x20live\x20health\x20probe.</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22alert\x20alert--error\x22>{{\x20error\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<div\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Connection\x20details</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22kv-grid\x20kv-grid--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>provider</span><span\x20class=\x22kv-val\x22>{{\x20providerType\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>model</span><span\x20class=\x22kv-val\x22>{{\x20modelName\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>dims</span><span\x20class=\x22kv-val\x22>{{\x20dimsValue\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22health\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>health</span><span\x20:style=\x22\x27color:\x27\x20+\x20(health.ok\x20?\x20\x27var(--okdb-success)\x27\x20:\x20\x27var(--okdb-danger)\x27)\x22>{{\x20health.ok\x20?\x20\x27ok\x27\x20:\x20\x27error\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22configEntries.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22kv-grid\x20kv-grid--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22configEntries\x22\x20let:item=\x22pair\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>{{\x20pair[0]\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-val\x22>{{\x20pair[1]\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a</engine-panel-shell>\x0a','fmtConfig'];_0x58cf=function(){return _0x260c8f;};return _0x58cf();}export default{'tag':'embed-embedder-panel','dependencies':[_0x355ec8],'attr':{'name':{},'engine':{}},'context':_0x3def71=>({'busy':!0x1,'health':null,'error':null,get 'eng'(){const _0x268fe4=_0x1629;return _0x3def71[_0x268fe4(0x158)][_0x268fe4(0x150)]??{};},get 'name'(){const _0xbcae02=_0x1629;return _0x3def71[_0xbcae02(0x158)][_0xbcae02(0x13e)];},get 'config'(){const _0x3be2d0=_0x1629;return this['eng'][_0x3be2d0(0x157)]??{};},get 'providerType'(){const _0x35ab41=_0x1629;return this['health']?.[_0x35ab41(0x15c)]||this[_0x35ab41(0x157)][_0x35ab41(0x15c)]||'—';},get 'modelName'(){const _0x418474=_0x1629;return this[_0x418474(0x156)]?.[_0x418474(0x159)]||this[_0x418474(0x157)]['model']||'—';},get 'dimsValue'(){const _0x597eaf=_0x1629;return this[_0x597eaf(0x156)]?.['dims']??this['config']['dimensions']??'—';},get 'latencyValue'(){const _0x2c7718=_0x1629;return null!=this[_0x2c7718(0x156)]?.['latency']?this[_0x2c7718(0x156)][_0x2c7718(0x14e)]+'ms':'—';},get 'configEntries'(){const _0x23bc1f=_0x1629;return Object['entries'](this[_0x23bc1f(0x142)](this['config']))['filter'](([_0x5ef65f])=>![_0x23bc1f(0x15c),'model'][_0x23bc1f(0x14f)](_0x5ef65f));},async 'checkHealth'(){const _0x328b76=_0x1629;this[_0x328b76(0x13c)]=!0x0,this[_0x328b76(0x14a)]=null;try{const _0x45e2ce=await fetch(__ENV__['API']+'/embeddings/embedders/'+encodeURIComponent(this[_0x328b76(0x13e)])+_0x328b76(0x14d)),_0x3bbecc=await _0x45e2ce['json']();if(!_0x45e2ce['ok'])throw new Error(_0x3bbecc?.[_0x328b76(0x14a)]?.[_0x328b76(0x149)]||_0x328b76(0x145));this[_0x328b76(0x156)]=_0x3bbecc[_0x328b76(0x14b)];}catch(_0x3642c4){this['error']=_0x3642c4?.[_0x328b76(0x149)]||String(_0x3642c4),this['health']=null;}finally{this[_0x328b76(0x13c)]=!0x1;}},'fmtConfig':_0xdccc56,'viewPipeline'(){const _0x188daf=_0x1629;_0x32fd79(_0x3def71,this[_0x188daf(0x155)]);},async 'reloadPanel'(){const _0x1734bc=_0x1629;this['health']=null,this[_0x1734bc(0x14a)]=null,this[_0x1734bc(0x155)]['isRunning']&&await this[_0x1734bc(0x148)]();}}),async 'init'(_0x6a86d7){const _0x39c6d2=_0x1629;_0x6a86d7[_0x39c6d2(0x13d)](()=>_0x6a86d7['$attr']['name'],async()=>{const _0x3e5389=_0x39c6d2;this['health']=null,this['error']=null,this[_0x3e5389(0x155)]['isRunning']&&await this[_0x3e5389(0x148)]();}),this[_0x39c6d2(0x155)][_0x39c6d2(0x15b)]&&await this[_0x39c6d2(0x148)]();},'template':_0x45daec(0x141),'style':s};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function _0x4fe0(_0x15295f,_0x1dd41b){_0x15295f=_0x15295f-0x10b;var _0x4ddbe5=_0x4ddb();var _0x4fe09d=_0x4ddbe5[_0x15295f];return _0x4fe09d;}(function(_0x4168bc,_0x5710e9){var _0xfce2f5=_0x4fe0,_0x1b2b16=_0x4168bc();while(!![]){try{var _0x2bc089=-parseInt(_0xfce2f5(0x10e))/0x1*(-parseInt(_0xfce2f5(0x110))/0x2)+parseInt(_0xfce2f5(0x10f))/0x3+parseInt(_0xfce2f5(0x112))/0x4*(parseInt(_0xfce2f5(0x115))/0x5)+-parseInt(_0xfce2f5(0x10b))/0x6+parseInt(_0xfce2f5(0x113))/0x7+-parseInt(_0xfce2f5(0x111))/0x8*(-parseInt(_0xfce2f5(0x10c))/0x9)+parseInt(_0xfce2f5(0x10d))/0xa*(-parseInt(_0xfce2f5(0x114))/0xb);if(_0x2bc089===_0x5710e9)break;else _0x1b2b16['push'](_0x1b2b16['shift']());}catch(_0xc82d02){_0x1b2b16['push'](_0x1b2b16['shift']());}}}(_0x4ddb,0xce517));function _0x4ddb(){var _0x279dee=['2081094vVRjJI','153SJuuvY','6840cvKoYa','615qOOIWA','574725ZGzDLr','3862RdOXce','390408dxvTCN','4WlzIMf','11557686hiktfH','51755IBDnxD','2751465WxVgLC'];_0x4ddb=function(){return _0x279dee;};return _0x4ddb();}import _0x514d1f from'../../engines/parts/engine-declaration-editor.ok.js';export default{..._0x514d1f,'tag':'embed-engine-declaration-editor'};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const _0x17afcb=_0xaa2d;function _0xaa2d(_0x2a7765,_0x305602){_0x2a7765=_0x2a7765-0xe7;const _0x43108a=_0x4310();let _0xaa2d25=_0x43108a[_0x2a7765];return _0xaa2d25;}(function(_0x2c268f,_0x6ad3f1){const _0xa422cd=_0xaa2d,_0x1e6af0=_0x2c268f();while(!![]){try{const _0x2fc1fc=-parseInt(_0xa422cd(0xf2))/0x1*(parseInt(_0xa422cd(0x115))/0x2)+-parseInt(_0xa422cd(0x103))/0x3+parseInt(_0xa422cd(0x113))/0x4*(parseInt(_0xa422cd(0x102))/0x5)+parseInt(_0xa422cd(0xfd))/0x6+parseInt(_0xa422cd(0x121))/0x7+-parseInt(_0xa422cd(0xec))/0x8*(parseInt(_0xa422cd(0x11a))/0x9)+parseInt(_0xa422cd(0x10c))/0xa;if(_0x2fc1fc===_0x6ad3f1)break;else _0x1e6af0['push'](_0x1e6af0['shift']());}catch(_0x58835e){_0x1e6af0['push'](_0x1e6af0['shift']());}}}(_0x4310,0x2796b));import _0x41269e from'@toolkit/elements/ok-icon.ok.js';import _0x494c8f from'@toolkit/core/ok-overlay.ok.js';import _0x15f0d3 from'../../../stores/events-store.js';import _0x1a92dc from'../../engines/parts/engine-row-item.ok.js';function _0x4310(){const _0x76cd84=['\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:10px;\x20height:100%;\x20min-height:0;\x22>\x0a\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20justify-content:space-between;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-weight:600;\x22>Engines</div>\x0a\x20\x20\x20\x20<button\x20@click=\x22load\x22\x20:disabled=\x22busy\x22\x20style=\x22opacity:.8;\x22>↻</button>\x0a\x20\x20</div>\x0a\x0a\x20\x20<if\x20:=\x22busy\x22>\x0a\x20\x20\x20\x20<ok-overlay>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22loader-center\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22loader\x22\x20class=\x22spin\x22\x20style=\x22width:24px;height:24px;\x22></ok-icon>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</ok-overlay>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Top\x20nav:\x20Overview\x20+\x20Create\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:2px;\x20margin-bottom:4px;\x22>\x0a\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20:class=\x22selected\x20===\x20null\x20?\x20\x27eng-row\x20eng-row--on\x27\x20:\x20\x27eng-row\x27\x22\x0a\x20\x20\x20\x20\x20\x20@click=\x22selectNone\x22\x0a\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22width:14px;\x20text-align:center;\x20flex-shrink:0;\x22>⊞</span>\x0a\x20\x20\x20\x20\x20\x20<span>Overview</span>\x0a\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20:class=\x22selected\x20===\x20\x27__create__\x27\x20?\x20\x27eng-row\x20eng-row--on\x27\x20:\x20\x27eng-row\x27\x22\x0a\x20\x20\x20\x20\x20\x20@click=\x22openCreate\x22\x0a\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22width:14px;\x20text-align:center;\x20flex-shrink:0;\x20color:var(--okdb-accent);\x22>+</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-accent);\x22>Create\x20Engine</span>\x0a\x20\x20\x20\x20</button>\x0a\x20\x20</div>\x0a\x0a\x20\x20<div\x20style=\x22border-top:1px\x20solid\x20var(--okdb-app-border);\x20margin:0\x200\x204px;\x22></div>\x0a\x0a\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:12px;\x20overflow:auto;\x20min-height:0;\x20padding-right:4px;\x22>\x0a\x20\x20\x20\x20<each\x20:of=\x22typeOrder\x22\x20let:item=\x22t\x22>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22hasEngines(t)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20opacity:.5;\x20letter-spacing:.06em;\x20margin-bottom:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20typeLabel[t]\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:2px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22grouped[t]\x22\x20let:item=\x22eng\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<engine-row-item\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:engine=\x22eng\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:label=\x22itemLabel[t]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:label-color=\x22itemColor[t]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:subtitle=\x22eng.status\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20action-label=\x22\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:selected=\x22selected\x20===\x20eng.key\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@select=\x22select($event.detail)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22pipeline(eng)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22pipeline-tag\x22\x20:title=\x22\x27pipeline:\x20\x27\x20+\x20pipeline(eng)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20pipeline(eng)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</engine-row-item>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</each>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22engines.length\x20===\x200\x20&&\x20!busy\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.5;\x20font-size:12px;\x22>No\x20engines\x20found.</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a\x0a</div>\x0a','var(--okdb-accent)','key','Embedder','Embedders','1911606qypJMq','engine:stopped','.eng-row{display:flex;align-items:center;gap:8px;padding:6px\x208px;border-radius:6px;border:1px\x20solid\x20transparent;background:0\x200;cursor:pointer;width:100%}.eng-row--on,.eng-row:hover{background:var(--okdb-app-surface);border-color:var(--okdb-app-border)}.eng-row--on{border-color:var(--okdb-accent)}.pipeline-tag{flex-shrink:0;max-width:72px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;padding:1px\x205px;border-radius:999px;border:1px\x20solid\x20color-mix(in\x20srgb,var(--okdb-indigo)\x2033%,transparent);color:var(--okdb-indigo);background:color-mix(in\x20srgb,var(--okdb-indigo)\x207%,transparent);letter-spacing:.02em}','$ok','fulfilled','1660WmFOmZ','407823mgtmJT','select','selectedEnv','loaded','length','var(--okdb-purple)','grouped','engines','/embeddings/embedders','1681690lRtowM','embeddings:pipeline:ready','then','push','var(--okdb-info)','vector-search','__create__','244wxstsY','API','2BQAjEt','meta','Search','json','load','24588OGfWzG','pipeline','embed-engine-list\x20load\x20error','/env/','value','engine:uninstalled','status','35175MqDszO','Worker','engine:started','$dispatch','type','selected','280ijPfjC','embeddings:indexer:flushed','okdb','stores','/engines','engine:installed','118331Vctjys','data','Workers','busy','var(--okdb-warning)','_unsubs'];_0x4310=function(){return _0x76cd84;};return _0x4310();}export default{'tag':'embed-engine-list','dependencies':[_0x494c8f,_0x41269e,_0x1a92dc],'context':_0x538fab=>({'busy':!0x1,'engines':[],'selected':null,'_unsubs':[],'typeOrder':['embedder','indexer','embed-worker',_0x17afcb(0x111)],'typeLabel':{'embedder':_0x17afcb(0xfc),'indexer':'Indexers','embed-worker':_0x17afcb(0xf4),'vector-search':_0x17afcb(0x117)},'itemLabel':{'embedder':_0x17afcb(0xfb),'indexer':'Indexer','embed-worker':_0x17afcb(0xe7),'vector-search':_0x17afcb(0x117)},'itemColor':{'embedder':_0x17afcb(0x110),'indexer':_0x17afcb(0x108),'embed-worker':_0x17afcb(0xf6),'vector-search':_0x17afcb(0xf9)},async 'load'(){const _0x210daf=_0x17afcb;this[_0x210daf(0xf5)]=!0x0;try{const _0x3a79de=_0x538fab[_0x210daf(0x100)]?.[_0x210daf(0xef)]?.[_0x210daf(0xee)]?.[_0x210daf(0x105)]||'default',[_0x280e74,_0x2c74ae]=await Promise['allSettled']([fetch(__ENV__[_0x210daf(0x114)]+_0x210daf(0x11d)+encodeURIComponent(_0x3a79de)+_0x210daf(0xf0))[_0x210daf(0x10e)](_0x9bf026=>_0x9bf026['json']()),fetch(__ENV__[_0x210daf(0x114)]+_0x210daf(0x10b))[_0x210daf(0x10e)](_0x59eb47=>_0x59eb47[_0x210daf(0x118)]())]),_0x1dc861='fulfilled'===_0x280e74['status']?_0x280e74[_0x210daf(0x11e)]?.[_0x210daf(0xf3)]??[]:[],_0x563c29=_0x210daf(0x101)===_0x2c74ae[_0x210daf(0x120)]?_0x2c74ae[_0x210daf(0x11e)]?.['data']??[]:[];this[_0x210daf(0x10a)]=[..._0x563c29,..._0x1dc861],_0x538fab['$dispatch'](_0x210daf(0x106),this['engines']);}catch(_0x5677df){console['error'](_0x210daf(0x11c),_0x5677df),this[_0x210daf(0x10a)]=[];}finally{this[_0x210daf(0xf5)]=!0x1;}},async 'refresh'(){const _0x24aed2=_0x17afcb;await this[_0x24aed2(0x119)]();},get 'grouped'(){const _0x12f82b=_0x17afcb,_0x3204b1={};for(const _0xd0466e of this['typeOrder'])_0x3204b1[_0xd0466e]=[];for(const _0x1093cd of this[_0x12f82b(0x10a)])_0x3204b1[_0x1093cd[_0x12f82b(0xea)]]&&_0x3204b1[_0x1093cd[_0x12f82b(0xea)]][_0x12f82b(0x10f)](_0x1093cd);return _0x3204b1;},'hasEngines'(_0x36a28d){const _0x2e2de=_0x17afcb;return(this[_0x2e2de(0x109)][_0x36a28d]||[])[_0x2e2de(0x107)]>0x0;},'selectNone'(){const _0x1a27eb=_0x17afcb;this[_0x1a27eb(0xeb)]=null,_0x538fab[_0x1a27eb(0xe9)](_0x1a27eb(0x104),null);},'openCreate'(){const _0x29d10b=_0x17afcb;this[_0x29d10b(0xeb)]=_0x29d10b(0x112),_0x538fab['$dispatch']('create',null);},'clearSelection'(){const _0x5c4963=_0x17afcb;this[_0x5c4963(0xeb)]=null;},'select'(_0x539410){const _0x96944d=_0x17afcb;this[_0x96944d(0xeb)]=_0x539410?.[_0x96944d(0xfa)]??null,_0x538fab['$dispatch'](_0x96944d(0x104),_0x539410);},'pipeline':_0x27b372=>_0x27b372[_0x17afcb(0x116)]?.[_0x17afcb(0x11b)]??null}),async 'mount'(){const _0x21d4db=_0x17afcb;await this[_0x21d4db(0x119)]();const _0xd34847=()=>this[_0x21d4db(0x119)]();this[_0x21d4db(0xf7)]=[_0x15f0d3['on'](_0x21d4db(0xe8),_0xd34847),_0x15f0d3['on'](_0x21d4db(0xfe),_0xd34847),_0x15f0d3['on']('engine:error',_0xd34847),_0x15f0d3['on'](_0x21d4db(0xf1),_0xd34847),_0x15f0d3['on'](_0x21d4db(0x11f),_0xd34847),_0x15f0d3['on'](_0x21d4db(0x10d),_0xd34847),_0x15f0d3['on']('embeddings:indexer:ready',_0xd34847),_0x15f0d3['on'](_0x21d4db(0xed),_0xd34847)];},'unmount'(){const _0x21a111=_0x17afcb;for(const _0x42bea7 of this[_0x21a111(0xf7)])_0x42bea7();this[_0x21a111(0xf7)]=[];},'template':_0x17afcb(0xf8),'style':_0x17afcb(0xff)};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const _0x1404a6=_0x2714;(function(_0x354461,_0x396f65){const _0x4b09cb=_0x2714,_0x239f1e=_0x354461();while(!![]){try{const _0x362822=parseInt(_0x4b09cb(0xb9))/0x1*(-parseInt(_0x4b09cb(0xd6))/0x2)+parseInt(_0x4b09cb(0xa4))/0x3+-parseInt(_0x4b09cb(0x87))/0x4*(-parseInt(_0x4b09cb(0x85))/0x5)+parseInt(_0x4b09cb(0x7e))/0x6*(-parseInt(_0x4b09cb(0xe5))/0x7)+parseInt(_0x4b09cb(0x75))/0x8+-parseInt(_0x4b09cb(0x90))/0x9*(-parseInt(_0x4b09cb(0xc1))/0xa)+-parseInt(_0x4b09cb(0xd0))/0xb;if(_0x362822===_0x396f65)break;else _0x239f1e['push'](_0x239f1e['shift']());}catch(_0x517ffe){_0x239f1e['push'](_0x239f1e['shift']());}}}(_0x5ccd,0x697b4));import _0x433062 from'@toolkit/elements/ok-icon.ok.js';import _0x3d83d1 from'@toolkit/elements/ok-table.ok.js';function _0x5ccd(){const _0xf31a1f=['embeddings:indexer:doc:failed','search','_pipelineUrl','load','vector','indexer','source_key','mode','4137fGJBRN','default','embeddings:indexer:flushed','\x20more]','join','deleted','queueStats','/docs?','var(--okdb-info)','round','4729136VFzrYx','docCounts','now','engine:started','docsStatus','storage_key','embeddings:doc:status_change','m\x20ago','not\x20found','7692fqwmMt','engine',',\x20cleaned\x20up\x20','min','push','all','embedder','3392630ashcYA','partial','4oXKwlM','loadDocs','h\x20ago','\x20doc(s)','</b>\x22?<br><br>Use\x20this\x20when\x20jobs\x20were\x20purged\x20from\x20the\x20queue\x20but\x20docs\x20are\x20stuck\x20as\x20PENDING.','var(--okdb-danger)','modal','Retry\x20failed','var(--okdb-success)','153DGdPqo','Re-enqueue\x20ALL\x20failed\x20AND\x20stuck-pending\x20docs\x20for\x20\x22<b>','/stats','source_env','docsLoadMs','shared','API','retry\x20failed','last_seen_clock','flush\x20failed','success','config','\x20failed)','docs','eng','#9ca3af','Delete\x20\x22','length','\x0a\x20\x20.pill\x20{\x20border:1px\x20solid\x20var(--okdb-app-border);\x20background:var(--okdb-app-surface);\x20padding:3px\x2010px;\x20border-radius:999px;\x20font-size:12px;\x20cursor:pointer;\x20}\x0a\x20\x20.pill--on\x20{\x20border-color:var(--okdb-accent);\x20}\x0a','message','640992shEJJe','data','_busy','stringify','Re-enqueued\x20\x22','stats','queue','retried','$watch','_unsubs','Re-enqueued\x20','map','error','head_clock','total_chunks','embed-indexer-panel','failed','name','json','POST','vector_count','24754OWpkVz','var(--okdb-purple)','$ok','status','/flush','Re-enqueue\x20all\x20failed\x20docs\x20for\x20indexer\x20\x22','docsBusy','done','445910riBmfM','application/json','set','toast','\x0a<engine-panel-shell\x0a\x20\x20:engine=\x22eng\x22\x0a\x20\x20:title=\x22name\x22\x0a\x20\x20type-label=\x22indexer\x22\x0a\x20\x20type-color=\x22var(--okdb-purple)\x22\x0a\x20\x20:badges=\x22headerBadges\x22\x0a\x20\x20show-refresh=\x22true\x22\x0a\x20\x20fill=\x22true\x22\x0a\x20\x20:refresh-busy=\x22busy\x20||\x20docsBusy\x20||\x20queueBusy\x20||\x20flushing\x22\x0a\x20\x20:on-refresh=\x22onRefresh\x22\x0a\x20\x20:on-pipeline=\x22viewPipeline\x22\x0a\x20\x20@engine-updated=\x22$dispatch(\x27engine-updated\x27,\x20$event.detail)\x22\x0a\x20\x20@refresh=\x22$dispatch(\x27refresh\x27)\x22\x0a\x20\x20@deleted=\x22$dispatch(\x27deleted\x27,\x20$event.detail)\x22\x0a>\x0a\x20\x20<if\x20:=\x22error\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20font-size:13px;\x22>{{\x20error\x20}}</div>\x0a\x20\x20</if>\x0a\x0a\x0a\x20\x20<if\x20:=\x22indexer\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22stack-compact\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:8px;min-width:0;flex:1;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22pill-row\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Source\x20type\x20being\x20indexed.\x22>{{\x20indexer.source_type\x20||\x20\x27—\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Source\x20environment.\x22>source\x20env:\x20{{\x20sourceEnvName\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Embedder\x20used\x20to\x20create\x20vectors.\x22>embedder:\x20{{\x20embedderName\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Storage\x20key\x20for\x20the\x20vector\x20store.\x22>store:\x20{{\x20storageKey\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20:style=\x22\x27border-color:\x27\x20+\x20(isCaughtUp\x20?\x20\x27color-mix(in\x20srgb,\x20var(--okdb-success)\x2033%,\x20transparent)\x27\x20:\x20\x27color-mix(in\x20srgb,\x20var(--okdb-warning)\x2033%,\x20transparent)\x27)\x20+\x20\x27;color:\x27\x20+\x20(isCaughtUp\x20?\x20\x27var(--okdb-success)\x27\x20:\x20\x27var(--okdb-warning)\x27)\x20+\x20\x27;background:\x27\x20+\x20(isCaughtUp\x20?\x20\x27color-mix(in\x20srgb,\x20var(--okdb-success)\x207%,\x20transparent)\x27\x20:\x20\x27color-mix(in\x20srgb,\x20var(--okdb-warning)\x207%,\x20transparent)\x27)\x20+\x20\x27;\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20isCaughtUp\x20?\x20\x27caught\x20up\x27\x20:\x20\x27processing\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22story-lead\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Watches\x20<strong>{{\x20indexer.source_type\x20||\x20\x27—\x27\x20}}</strong>\x20and\x20keeps\x20vectors\x20current\x20in\x20<strong>{{\x20storageKey\x20}}</strong>.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22story-note\x22>Flush\x20to\x20force\x20pending\x20writes\x20through\x20now.\x20Use\x20the\x20document\x20table\x20below\x20to\x20inspect\x20failures,\x20retry\x20queue-backed\x20docs,\x20and\x20inspect\x20stored\x20vectors.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-grid\x20metric-grid--compact\x22\x20style=\x22min-width:min(100%,\x20420px);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Vectors</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20style=\x22color:var(--okdb-success);\x22>{{\x20vectorCount.toLocaleString()\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Done</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20style=\x22color:var(--okdb-success);\x22>{{\x20doneDocs.toLocaleString()\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Pending</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20:style=\x22\x27color:\x27\x20+\x20(pendingDocs\x20>\x200\x20?\x20\x27var(--okdb-warning)\x27\x20:\x20\x27var(--okdb-app-fg)\x27)\x22>{{\x20pendingDocs.toLocaleString()\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Failed</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20:style=\x22\x27color:\x27\x20+\x20(failedDocs\x20>\x200\x20?\x20\x27var(--okdb-danger)\x27\x20:\x20\x27var(--okdb-app-fg)\x27)\x22>{{\x20failedDocs.toLocaleString()\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:10px;flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22flush\x22\x20:disabled=\x22flushing\x20||\x20!eng.isRunning\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20flushing\x20?\x20\x27Flushing…\x27\x20:\x20\x27Flush\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22story-note\x22>Changelog\x20{{\x20indexer.last_seen_clock\x20??\x20\x27—\x27\x20}}\x20/\x20{{\x20indexer.head_clock\x20??\x20\x27—\x27\x20}}\x20·\x20{{\x20clockPct\x20}}%</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22search\x20&&\x20search.count\x20!=\x20null\x20&&\x20search.count\x20!==\x20indexer.vector_count\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22story-note\x22\x20style=\x22color:var(--okdb-warning);\x22\x20title=\x22In-memory\x20index\x20differs\x20from\x20storage\x20—\x20rebuild\x20may\x20be\x20needed\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20search\x20index:\x20{{\x20search.count.toLocaleString()\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22background:var(--okdb-app-border);\x20border-radius:6px;\x20height:6px;\x20overflow:hidden;\x22\x20:title=\x22clockPct\x20+\x20\x27%\x20of\x20changelog\x20processed\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20:style=\x22\x27height:100%;\x20border-radius:6px;\x20transition:width\x20.3s;\x20background:\x27\x20+\x20(isCaughtUp\x20?\x20\x27var(--okdb-success)\x27\x20:\x20\x27var(--okdb-accent)\x27)\x20+\x20\x27;\x20width:\x27\x20+\x20clockPct\x20+\x20\x27%\x27\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Indexer\x20settings</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22kv-grid\x20kv-grid--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>source\x20type</span><span\x20class=\x22kv-val\x22>{{\x20indexer.source_type\x20||\x20\x27—\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>source\x20env</span><span\x20class=\x22kv-val\x22>{{\x20sourceEnvName\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>embedder</span><span\x20class=\x22kv-val\x22>{{\x20embedderName\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>storage\x20key</span><span\x20class=\x22kv-val\x22>{{\x20storageKey\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>mode</span><span\x20class=\x22kv-val\x22>{{\x20indexer.mode\x20||\x20\x27inline\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22indexer.job_type\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>job\x20type</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-val\x22\x20style=\x22font-size:11px;font-family:monospace;\x22>{{\x20indexer.job_type\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22queueMode\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:10px;\x20margin-bottom:10px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Queue</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20opacity:.5;\x22>job\x20type:\x20<span\x20style=\x22font-family:monospace;\x22>{{\x20indexer.job_type\x20}}</span></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22loadQueueStats\x22\x20:disabled=\x22queueBusy\x22\x20style=\x22margin-left:auto;\x20font-size:11px;\x20padding:2px\x208px;\x20opacity:.7;\x22>↻</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22queueStats\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:grid;\x20grid-template-columns:repeat(4,1fr);\x20gap:8px;\x20text-align:center;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-box\x22\x20style=\x22background:var(--okdb-app-border);\x20border-radius:6px;\x20padding:8px\x204px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:22px;\x20font-weight:600;\x20color:var(--okdb-warning);\x22>{{\x20queueStats.byStatus?.pending\x20??\x200\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:10px;\x20opacity:.6;\x20margin-top:2px;\x22>Pending</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-box\x22\x20style=\x22background:var(--okdb-app-border);\x20border-radius:6px;\x20padding:8px\x204px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:22px;\x20font-weight:600;\x20color:var(--okdb-info);\x22>{{\x20queueStats.byStatus?.running\x20??\x200\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:10px;\x20opacity:.6;\x20margin-top:2px;\x22>Running</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-box\x22\x20style=\x22background:var(--okdb-app-border);\x20border-radius:6px;\x20padding:8px\x204px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:22px;\x20font-weight:600;\x20color:var(--okdb-success);\x22>{{\x20queueStats.byStatus?.done\x20??\x200\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:10px;\x20opacity:.6;\x20margin-top:2px;\x22>Done</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-box\x22\x20style=\x22background:var(--okdb-app-border);\x20border-radius:6px;\x20padding:8px\x204px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:22px;\x20font-weight:600;\x20color:var(--okdb-danger);\x22>{{\x20queueStats.byStatus?.failed\x20??\x200\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:10px;\x20opacity:.6;\x20margin-top:2px;\x22>Failed</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22margin-top:8px;\x20font-size:11px;\x20opacity:.4;\x20font-style:italic;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Queue\x20tracks\x20individual\x20job\x20attempts.\x20Done\x20jobs\x20are\x20auto-pruned;\x20failed\x20jobs\x20persist\x20until\x20retried.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!queueStats\x20&&\x20!queueBusy\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.4;\x20font-style:italic;\x22>No\x20queue\x20stats\x20for\x20this\x20job\x20type\x20—\x20queue\x20may\x20be\x20idle\x20or\x20feature\x20inactive.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22queueBusy\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.4;\x22>Loading…</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Doc\x20status\x20table\x20-->\x0a\x20\x20<div\x20class=\x22card\x22\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:10px;\x20flex:1;\x20min-height:0;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:8px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Documents</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:6px;\x20flex-wrap:wrap;\x20margin-left:auto;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setDocsStatus(null)\x22\x20\x20\x20\x20\x20\x20\x20:class=\x22docsStatus\x20==\x20null\x20\x20\x20\x20\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>All</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setDocsStatus(\x27pending\x27)\x22\x20\x20:class=\x22docsStatus\x20===\x20\x27pending\x27\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>Pending</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setDocsStatus(\x27done\x27)\x22\x20\x20\x20\x20\x20:class=\x22docsStatus\x20===\x20\x27done\x27\x20\x20\x20\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>Done</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setDocsStatus(\x27failed\x27)\x22\x20\x20\x20:class=\x22docsStatus\x20===\x20\x27failed\x27\x20\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>Failed</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setDocsStatus(\x27partial\x27)\x22\x20\x20:class=\x22docsStatus\x20===\x20\x27partial\x27\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>Partial</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setDocsStatus(\x27deleted\x27)\x22\x20\x20:class=\x22docsStatus\x20===\x20\x27deleted\x27\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>Deleted</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22loadDocs\x22\x20:disabled=\x22docsBusy\x22\x20style=\x22opacity:.8;\x22>↻</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22indexer?.mode\x20===\x20\x27queue\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22retryFailed()\x22\x20:disabled=\x22docsBusy\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22color:var(--okdb-warning);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-warning)\x2027%,\x20transparent);\x20font-size:12px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Re-enqueue\x20all\x20FAILED\x20docs\x20for\x20this\x20indexer\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20↺\x20Retry\x20Failed\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22retryStuckPending()\x22\x20:disabled=\x22docsBusy\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22color:var(--okdb-app-fg-muted);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-app-fg-muted)\x2027%,\x20transparent);\x20font-size:12px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Re-enqueue\x20FAILED\x20+\x20stuck\x20PENDING\x20docs\x20(use\x20when\x20queue\x20jobs\x20were\x20purged\x20externally)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20↺\x20Retry\x20Stuck\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22docsError\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20font-size:13px;\x22>{{\x20docsError\x20}}</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<div\x20style=\x22position:relative;\x20flex:1;\x20min-height:0;\x20overflow:auto;\x22>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22docsBusy\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<ok-overlay>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22loader-center\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22loader\x22\x20class=\x22spin\x22\x20style=\x22width:28px;height:28px;\x22></ok-icon>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</ok-overlay>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20<ok-table\x20:data=\x22docs\x22\x20no-scroll\x20style=\x22width:100%;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<columns>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x22130px\x22\x20no-resize>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>Status</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22\x27color:\x27\x20+\x20statusColor(row.status)\x20+\x20\x27;\x20font-size:12px;\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20row.status\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22chunkProgress(row)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20opacity:.7;\x20margin-left:4px;\x22>{{\x20chunkProgress(row)\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>Source\x20Key</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>{{\x20row.source_key\x20}}</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x22110px\x22\x20no-resize>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>Updated</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>{{\x20relTime(row.updated)\x20}}</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x22200px\x22\x20no-resize>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>Error</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-danger);\x20font-size:11px;\x20opacity:.85;\x22\x20:title=\x22row.error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20row.error.slice(0,\x2060)\x20}}{{\x20row.error.length\x20>\x2060\x20?\x20\x27…\x27\x20:\x20\x27\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x22140px\x22\x20no-resize>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>Actions</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:4px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22(row.status\x20===\x20\x27failed\x27\x20||\x20row.status\x20===\x20\x27pending\x27)\x20&&\x20indexer?.mode\x20===\x20\x27queue\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22retryDoc(row)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22row._busy\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:3px\x208px;\x20color:var(--okdb-warning);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-warning)\x2027%,\x20transparent);\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Re-enqueue\x20this\x20document\x20for\x20embedding\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>↺\x20Retry</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.status\x20!==\x20\x27deleted\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22markDeleteDoc(row)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22row._busy\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:3px\x208px;\x20color:var(--okdb-danger);\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>Delete</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</columns>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<expanded\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22padding:10px;\x20font-size:12px;\x20display:flex;\x20flex-direction:column;\x20gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22kv-grid\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>source_key</span>\x20\x20<span\x20class=\x22kv-val\x22>{{\x20row.source_key\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>engine_key</span>\x20\x20<span\x20class=\x22kv-val\x22>{{\x20row.engine_key\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>mode</span>\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-val\x22>{{\x20row.mode\x20||\x20\x27—\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>clock</span>\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-val\x22>{{\x20row.clock\x20??\x20\x27—\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>created</span>\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-val\x22>{{\x20relTime(row.created)\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>updated</span>\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-val\x22>{{\x20relTime(row.updated)\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.total_chunks\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>chunks</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-val\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-success);\x22>{{\x20row.chunk_done\x20??\x200\x20}}\x20done</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.chunk_failed\x20>\x200\x22><span\x20style=\x22color:var(--okdb-danger);\x22>\x20·\x20{{\x20row.chunk_failed\x20}}\x20failed</span></if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22(row.chunk_pending\x20??\x200)\x20>\x200\x22><span\x20style=\x22color:var(--okdb-warning);\x22>\x20·\x20{{\x20row.chunk_pending\x20}}\x20pending</span></if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.5;\x22>\x20/\x20{{\x20row.total_chunks\x20}}\x20total</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20white-space:pre-wrap;\x22>{{\x20row.error\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Vector\x20viewer\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.status\x20===\x20\x27done\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:8px;\x20margin-top:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22toggleVector(row)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:3px\x2010px;\x20color:var(--okdb-purple);\x20border-color:var(--okdb-purple);\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22vectorCache[row.source_key]?.busy\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22vectorCache[row.source_key]?.busy\x22>…</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!vectorCache[row.source_key]?.busy\x20&&\x20!vectorCache[row.source_key]?.vector\x20&&\x20!vectorCache[row.source_key]?.error\x22>🔍\x20View\x20Vector</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22vectorCache[row.source_key]?.vector\x20||\x20vectorCache[row.source_key]?.error\x22>✕\x20Hide\x20Vector</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22vectorCache[row.source_key]?.dims\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.5;\x20font-size:11px;\x22>{{\x20vectorCache[row.source_key].dims\x20}}\x20dims</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22vectorCache[row.source_key]?.error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20font-size:11px;\x22>{{\x20vectorCache[row.source_key].error\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22vectorCache[row.source_key]?.vector\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:6px;\x20padding:8px;\x20font-family:monospace;\x20font-size:11px;\x20word-break:break-all;\x20color:var(--okdb-purple);\x20max-height:80px;\x20overflow:auto;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20fmtVec(vectorCache[row.source_key].vector)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</expanded>\x0a\x20\x20\x20\x20\x20\x20</ok-table>\x0a\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22docs.length\x20===\x200\x20&&\x20!docsBusy\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.5;\x20font-size:13px;\x20padding:12px\x200;\x22>No\x20documents\x20found.</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.6;\x20display:flex;\x20gap:12px;\x20align-items:center;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20<span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Showing\x20{{\x20docs.length\x20}}{{\x20docs.length\x20>=\x20docsLimit\x20?\x20\x27+\x27\x20:\x20\x27\x27\x20}}\x20{{\x20docsStatus\x20||\x20\x27\x27\x20}}\x20docs\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22docsLoadMs\x20!==\x20null\x22>\x20in\x20{{\x20docsLoadMs\x20}}ms</if>\x0a\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22indexer?.doc_counts?.total\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.7;\x22>Total\x20tracked:\x20{{\x20indexer.doc_counts.total.toLocaleString()\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a</engine-panel-shell>\x0a','chunk_failed','markDelete\x20failed','dims','busy','Deleted',',\x20…\x20+','\x20deleted','Delete\x20failed','engine:stopped','flushing','2854907VAUAqy','/retry','embeddings:indexer:ready','Flush\x20failed','/embeddings/storage/','vectorCache','64qdRVvP','/docs/','s\x20ago','confirm','$attr','/retry-failed','loadQueueStats'];_0x5ccd=function(){return _0xf31a1f;};return _0x5ccd();}import _0x43bccd from'@toolkit/core/ok-overlay.ok.js';import _0x5d5548 from'../../../stores/events-store.js';import _0x85804 from'../../engines/parts/engine-panel-shell.ok.js';function _0x2714(_0x106794,_0x153ce9){_0x106794=_0x106794-0x74;const _0x5ccdfd=_0x5ccd();let _0x27142a=_0x5ccdfd[_0x106794];return _0x27142a;}import{ENGINE_PANEL_SHARED_STYLE as _0x4ef9d6}from'../../engines/engine-panel-shared-style.js';import{buildEmbeddingsPipelineUrl as _0x5d6c5d,dispatchEnginePipelineSelection as _0x446368}from'../../engines/engine-ui-utils.js';const d=_0x4ef9d6+_0x1404a6(0xa2);export default{'tag':_0x1404a6(0xb3),'dependencies':[_0x433062,_0x3d83d1,_0x43bccd,_0x85804],'attr':{'name':{},'engine':{}},'context':_0x5f05f2=>({'busy':!0x1,'flushing':!0x1,'stats':null,'error':null,'docsStatus':null,'docs':[],'docsBusy':!0x1,'docsError':null,'docsLimit':0x32,'docsLoadMs':null,'queueStats':null,'queueBusy':!0x1,get 'eng'(){const _0x38478c=_0x1404a6;return _0x5f05f2[_0x38478c(0xda)][_0x38478c(0x7f)]??{};},get 'name'(){const _0x1c8092=_0x1404a6;return _0x5f05f2[_0x1c8092(0xda)][_0x1c8092(0xb5)];},get '_pipelineUrl'(){const _0xef507a=_0x1404a6;return _0x5d6c5d(this[_0xef507a(0x9e)],this['name']);},get 'indexer'(){const _0x321b82=_0x1404a6;return this[_0x321b82(0xa9)]?.[_0x321b82(0xe2)]??null;},get 'search'(){const _0xe1b460=_0x1404a6;return this[_0xe1b460(0xa9)]?.[_0xe1b460(0xde)]??null;},get 'sourceEnvName'(){const _0x3f034e=_0x1404a6;return this[_0x3f034e(0x9e)]?.[_0x3f034e(0x9b)]?.[_0x3f034e(0x93)]??_0x3f034e(0xe6);},get 'embedderName'(){const _0x28bd6c=_0x1404a6;return this[_0x28bd6c(0xe2)]?.['embedder']||this[_0x28bd6c(0x9e)]?.['config']?.[_0x28bd6c(0x84)]||'—';},get 'storageKey'(){const _0x2ed0da=_0x1404a6;return this[_0x2ed0da(0xe2)]?.[_0x2ed0da(0x7a)]||this[_0x2ed0da(0x9e)]?.['config']?.[_0x2ed0da(0x7a)]||this[_0x2ed0da(0xb5)];},get 'docCounts'(){const _0x10c9e7=_0x1404a6;return this[_0x10c9e7(0xe2)]?.['doc_counts']??null;},get 'queueMode'(){const _0x4232be=_0x1404a6;return'queue'===(this[_0x4232be(0xe2)]?.[_0x4232be(0xe4)]||'inline');},get 'pendingDocs'(){const _0x22d8b8=_0x1404a6;return this[_0x22d8b8(0x76)]?.['pending']??0x0;},get 'failedDocs'(){const _0x40f92e=_0x1404a6;return this[_0x40f92e(0x76)]?.['failed']??0x0;},get 'doneDocs'(){const _0x3cdb76=_0x1404a6;return this[_0x3cdb76(0x76)]?.[_0x3cdb76(0xc0)]??0x0;},get 'vectorCount'(){const _0x184da6=_0x1404a6;return this[_0x184da6(0xe2)]?.[_0x184da6(0xb8)]??0x0;},get 'headerBadges'(){const _0x23123a=_0x1404a6,_0x12846b=[];return this[_0x23123a(0xe2)]?.[_0x23123a(0xe4)]&&_0x12846b[_0x23123a(0x82)]({'text':this['indexer'][_0x23123a(0xe4)],'color':_0x23123a(0xba)}),_0x12846b;},get 'clockPct'(){const _0x3a000a=_0x1404a6,_0x34acd8=this[_0x3a000a(0xe2)]?.[_0x3a000a(0x98)]??0x0,_0x8fb5f=this['indexer']?.['head_clock']??0x0;return _0x8fb5f?Math[_0x3a000a(0x81)](0x64,Math[_0x3a000a(0x74)](_0x34acd8/_0x8fb5f*0x64)):0x0;},get 'isCaughtUp'(){const _0x3ff3bc=_0x1404a6,_0x3196fe=this['indexer']?.[_0x3ff3bc(0x98)]??0x0,_0x2bf499=this[_0x3ff3bc(0xe2)]?.[_0x3ff3bc(0xb1)]??0x0;return _0x2bf499>0x0&&_0x3196fe>=_0x2bf499;},async 'load'(){const _0x1bdc1c=_0x1404a6;this[_0x1bdc1c(0xc9)]=!0x0,this[_0x1bdc1c(0xb0)]=null;try{const _0x4ceb11=await fetch(this['_pipelineUrl']+_0x1bdc1c(0x92)),_0x31171b=await _0x4ceb11[_0x1bdc1c(0xb6)]();if(!_0x4ceb11['ok'])throw new Error(_0x31171b?.[_0x1bdc1c(0xb0)]?.[_0x1bdc1c(0xa3)]||_0x1bdc1c(0xb4));this[_0x1bdc1c(0xa9)]=_0x31171b[_0x1bdc1c(0xa5)];}catch(_0x3efbd1){this['error']=_0x3efbd1?.[_0x1bdc1c(0xa3)]||String(_0x3efbd1),this[_0x1bdc1c(0xa9)]=null;}finally{this[_0x1bdc1c(0xc9)]=!0x1;}},async 'flush'(){const _0xcb50bf=_0x1404a6;this[_0xcb50bf(0xcf)]=!0x0;try{if(!(await fetch(this[_0xcb50bf(0xdf)]+_0xcb50bf(0xbd),{'method':_0xcb50bf(0xb7)}))['ok'])throw new Error(_0xcb50bf(0x99));_0x5f05f2[_0xcb50bf(0xbb)][_0xcb50bf(0x95)]?.[_0xcb50bf(0xc4)]?.[_0xcb50bf(0x9a)]?.('Flushed'),await this[_0xcb50bf(0xe0)](),await this[_0xcb50bf(0x88)]();}catch(_0x2dc75e){_0x5f05f2[_0xcb50bf(0xbb)][_0xcb50bf(0x95)]?.[_0xcb50bf(0xc4)]?.[_0xcb50bf(0xb0)]?.(_0x2dc75e?.['message']||_0xcb50bf(0xd3));}finally{this[_0xcb50bf(0xcf)]=!0x1;}},async 'setDocsStatus'(_0x8a3654){const _0xba593f=_0x1404a6;this[_0xba593f(0x79)]=_0x8a3654,await this[_0xba593f(0x88)]();},async 'onRefresh'(){const _0x30f952=_0x1404a6;await Promise[_0x30f952(0x83)]([this[_0x30f952(0xe0)](),this['loadDocs']()]),_0x30f952(0xaa)===this['indexer']?.[_0x30f952(0xe4)]&&await this[_0x30f952(0xdc)]();},async 'loadDocs'(){const _0x9a3577=_0x1404a6;this['docsBusy']=!0x0,this['docsError']=null;const _0x4fe19c=Date[_0x9a3577(0x77)]();try{const _0x20fc0e=new URLSearchParams({'limit':this['docsLimit']});this['docsStatus']&&_0x20fc0e[_0x9a3577(0xc3)](_0x9a3577(0xbc),this[_0x9a3577(0x79)]);const _0x1e8961=await fetch(this[_0x9a3577(0xdf)]+_0x9a3577(0xec)+_0x20fc0e),_0x237204=await _0x1e8961[_0x9a3577(0xb6)]();if(!_0x1e8961['ok'])throw new Error(_0x237204?.[_0x9a3577(0xb0)]?.[_0x9a3577(0xa3)]||_0x9a3577(0xb4));this[_0x9a3577(0x9d)]=_0x237204[_0x9a3577(0xa5)]||[],this[_0x9a3577(0x94)]=Date[_0x9a3577(0x77)]()-_0x4fe19c;}catch(_0x4810f4){this['docsError']=_0x4810f4?.['message']||String(_0x4810f4),this[_0x9a3577(0x9d)]=[],this[_0x9a3577(0x94)]=null;}finally{this[_0x9a3577(0xbf)]=!0x1;}},async 'loadQueueStats'(){const _0x51a0ab=_0x1404a6;_0x51a0ab(0xaa)===this['indexer']?.['mode']&&(this[_0x51a0ab(0xeb)]=this['stats']?.[_0x51a0ab(0xaa)]??null);},async 'markDeleteDoc'(_0x102226){const _0x275b2f=_0x1404a6;if(await _0x5f05f2[_0x275b2f(0xbb)][_0x275b2f(0x95)][_0x275b2f(0x8d)][_0x275b2f(0xd9)](_0x275b2f(0xa0)+_0x102226['source_key']+'\x22?')){_0x102226[_0x275b2f(0xa6)]=!0x0;try{if(!(await fetch(this[_0x275b2f(0xdf)]+_0x275b2f(0xd7)+encodeURIComponent(_0x102226['source_key'])+'/markDelete',{'method':_0x275b2f(0xb7),'headers':{'Content-Type':_0x275b2f(0xc2)},'body':JSON['stringify']({'clock':null})}))['ok'])throw new Error(_0x275b2f(0xc7));_0x5f05f2[_0x275b2f(0xbb)][_0x275b2f(0x95)]?.[_0x275b2f(0xc4)]?.['info']?.(_0x275b2f(0xca)),await this[_0x275b2f(0x88)]();}catch(_0x1fa194){_0x5f05f2[_0x275b2f(0xbb)][_0x275b2f(0x95)]?.[_0x275b2f(0xc4)]?.[_0x275b2f(0xb0)]?.(_0x1fa194?.[_0x275b2f(0xa3)]||_0x275b2f(0xcd));}finally{_0x102226[_0x275b2f(0xa6)]=!0x1;}}},async 'retryDoc'(_0x495067){const _0x274ed3=_0x1404a6;_0x495067['_busy']=!0x0;try{const _0x4eddfb=await fetch(this[_0x274ed3(0xdf)]+_0x274ed3(0xd7)+encodeURIComponent(_0x495067[_0x274ed3(0xe3)])+_0x274ed3(0xd1),{'method':_0x274ed3(0xb7)}),_0x58660c=await _0x4eddfb[_0x274ed3(0xb6)]();if(!_0x4eddfb['ok'])throw new Error(_0x58660c?.['error']?.['message']||_0x274ed3(0x97));_0x5f05f2[_0x274ed3(0xbb)][_0x274ed3(0x95)]?.[_0x274ed3(0xc4)]?.[_0x274ed3(0x9a)]?.(_0x274ed3(0xa8)+_0x495067[_0x274ed3(0xe3)]+'\x22'),await this[_0x274ed3(0x88)]();}catch(_0x1fb4c0){_0x5f05f2[_0x274ed3(0xbb)][_0x274ed3(0x95)]?.[_0x274ed3(0xc4)]?.[_0x274ed3(0xb0)]?.(_0x1fb4c0?.[_0x274ed3(0xa3)]||_0x274ed3(0x8e));}finally{_0x495067[_0x274ed3(0xa6)]=!0x1;}},async 'retryFailed'(){const _0x5b28cd=_0x1404a6;if(await _0x5f05f2[_0x5b28cd(0xbb)][_0x5b28cd(0x95)][_0x5b28cd(0x8d)]['confirm'](_0x5b28cd(0xbe)+this[_0x5b28cd(0xb5)]+'\x22?')){this[_0x5b28cd(0xbf)]=!0x0;try{const _0x340ede=await fetch(this[_0x5b28cd(0xdf)]+_0x5b28cd(0xdb),{'method':_0x5b28cd(0xb7),'headers':{'Content-Type':_0x5b28cd(0xc2)},'body':JSON[_0x5b28cd(0xa7)]({'limit':0x1388,'includeStuckPending':!0x1})}),_0x56d058=await _0x340ede[_0x5b28cd(0xb6)]();if(!_0x340ede['ok'])throw new Error(_0x56d058?.[_0x5b28cd(0xb0)]?.['message']||_0x5b28cd(0xb4));const _0x27a3e8=_0x56d058[_0x5b28cd(0xa5)];_0x5f05f2[_0x5b28cd(0xbb)][_0x5b28cd(0x95)]?.[_0x5b28cd(0xc4)]?.[_0x5b28cd(0x9a)]?.('Re-enqueued\x20'+_0x27a3e8[_0x5b28cd(0xab)]+_0x5b28cd(0x8a)+(_0x27a3e8[_0x5b28cd(0xea)]?_0x5b28cd(0x80)+_0x27a3e8['deleted']+_0x5b28cd(0xcc):'')),await Promise['all']([this['load'](),this[_0x5b28cd(0x88)]()]);}catch(_0x4747fa){_0x5f05f2[_0x5b28cd(0xbb)][_0x5b28cd(0x95)]?.[_0x5b28cd(0xc4)]?.[_0x5b28cd(0xb0)]?.(_0x4747fa?.[_0x5b28cd(0xa3)]||'Retry\x20failed');}finally{this[_0x5b28cd(0xbf)]=!0x1;}}},async 'retryStuckPending'(){const _0x5e7ac7=_0x1404a6;if(await _0x5f05f2['$ok'][_0x5e7ac7(0x95)][_0x5e7ac7(0x8d)]['confirm'](_0x5e7ac7(0x91)+this[_0x5e7ac7(0xb5)]+_0x5e7ac7(0x8b))){this[_0x5e7ac7(0xbf)]=!0x0;try{const _0x411222=await fetch(this[_0x5e7ac7(0xdf)]+_0x5e7ac7(0xdb),{'method':_0x5e7ac7(0xb7),'headers':{'Content-Type':_0x5e7ac7(0xc2)},'body':JSON[_0x5e7ac7(0xa7)]({'limit':0x1388,'includeStuckPending':!0x0})}),_0x4979f0=await _0x411222[_0x5e7ac7(0xb6)]();if(!_0x411222['ok'])throw new Error(_0x4979f0?.['error']?.[_0x5e7ac7(0xa3)]||_0x5e7ac7(0xb4));const _0x5f2790=_0x4979f0['data'];_0x5f05f2['$ok'][_0x5e7ac7(0x95)]?.[_0x5e7ac7(0xc4)]?.[_0x5e7ac7(0x9a)]?.(_0x5e7ac7(0xae)+_0x5f2790['retried']+'\x20doc(s)'+(_0x5f2790[_0x5e7ac7(0xea)]?_0x5e7ac7(0x80)+_0x5f2790[_0x5e7ac7(0xea)]+'\x20deleted':'')),await Promise['all']([this[_0x5e7ac7(0xe0)](),this[_0x5e7ac7(0x88)]()]);}catch(_0x9f0bac){_0x5f05f2[_0x5e7ac7(0xbb)]['shared']?.[_0x5e7ac7(0xc4)]?.[_0x5e7ac7(0xb0)]?.(_0x9f0bac?.[_0x5e7ac7(0xa3)]||'Retry\x20failed');}finally{this[_0x5e7ac7(0xbf)]=!0x1;}}},'statusColor':_0x203141=>({'done':_0x1404a6(0x8f),'failed':_0x1404a6(0x8c),'deleted':_0x1404a6(0x9f),'pending':'var(--okdb-warning)','running':_0x1404a6(0xed),'partial':'var(--okdb-orange)'}[_0x203141]||_0x1404a6(0x9f)),'chunkProgress'(_0x5289dd){const _0x35f766=_0x1404a6;if(!(_0x5289dd[_0x35f766(0xb2)]>0x0))return null;const _0x498600=_0x5289dd['chunk_done']??0x0,_0x272062=_0x5289dd[_0x35f766(0xb2)],_0xb655b7=_0x5289dd[_0x35f766(0xc6)]??0x0;return _0x35f766(0x86)===_0x5289dd[_0x35f766(0xbc)]&&_0xb655b7>0x0?_0x498600+'/'+_0x272062+'\x20('+_0xb655b7+_0x35f766(0x9c):_0x498600+'/'+_0x272062;},'relTime'(_0x5f3889){const _0x58ee41=_0x1404a6;if(!_0x5f3889)return'—';const _0x4dbe9b=Date['now']()-_0x5f3889;return _0x4dbe9b<0x1388?'just\x20now':_0x4dbe9b<0xea60?Math[_0x58ee41(0x74)](_0x4dbe9b/0x3e8)+_0x58ee41(0xd8):_0x4dbe9b<0x36ee80?Math[_0x58ee41(0x74)](_0x4dbe9b/0xea60)+_0x58ee41(0x7c):Math[_0x58ee41(0x74)](_0x4dbe9b/0x36ee80)+_0x58ee41(0x89);},'vectorCache':{},async 'fetchVector'(_0x55b4f1){const _0x366899=_0x1404a6,_0x11afc3=_0x55b4f1[_0x366899(0xe3)];if(!this[_0x366899(0xd5)][_0x11afc3]?.[_0x366899(0xe1)]&&!this[_0x366899(0xd5)][_0x11afc3]?.[_0x366899(0xc9)]){this[_0x366899(0xd5)][_0x11afc3]={'busy':!0x0,'error':null,'vector':null,'dims':null};try{const _0x41d1ff=this['indexer']?.[_0x366899(0x7a)]||this[_0x366899(0xb5)],_0x5d2b44=await fetch(__ENV__[_0x366899(0x96)]+_0x366899(0xd4)+encodeURIComponent(_0x41d1ff)+'/'+encodeURIComponent(_0x11afc3)),_0x54484b=await _0x5d2b44['json']();if(!_0x5d2b44['ok'])throw new Error(_0x54484b?.['error']?.[_0x366899(0xa3)]||_0x366899(0x7d));this[_0x366899(0xd5)][_0x11afc3]={'busy':!0x1,'error':null,'dims':_0x54484b[_0x366899(0xa5)][_0x366899(0xc8)],'vector':_0x54484b[_0x366899(0xa5)][_0x366899(0xe1)]};}catch(_0x4f0be6){this['vectorCache'][_0x11afc3]={'busy':!0x1,'error':_0x4f0be6?.['message']||String(_0x4f0be6),'vector':null,'dims':null};}}},'toggleVector'(_0x1781e2){const _0x4b8f2f=_0x1404a6,_0x5933b4=_0x1781e2[_0x4b8f2f(0xe3)];this['vectorCache'][_0x5933b4]?.[_0x4b8f2f(0xe1)]||this[_0x4b8f2f(0xd5)][_0x5933b4]?.[_0x4b8f2f(0xb0)]?delete this[_0x4b8f2f(0xd5)][_0x5933b4]:this['fetchVector'](_0x1781e2);},'fmtVec'(_0x4b0a5b){const _0x34fdf0=_0x1404a6;if(!_0x4b0a5b)return'';const _0xa4d72c=_0x4b0a5b['slice'](0x0,0xc)[_0x34fdf0(0xaf)](_0x4419a4=>_0x4419a4['toFixed'](0x4))[_0x34fdf0(0xe9)](',\x20');return _0x4b0a5b[_0x34fdf0(0xa1)]>0xc?'['+_0xa4d72c+_0x34fdf0(0xcb)+(_0x4b0a5b['length']-0xc)+_0x34fdf0(0xe8):'['+_0xa4d72c+']';},'viewPipeline'(){const _0x2479cb=_0x1404a6;_0x446368(_0x5f05f2,this[_0x2479cb(0x9e)]);},'_unsubs':[]}),async 'init'(_0x4133ca){const _0x42e25a=_0x1404a6;_0x4133ca[_0x42e25a(0xac)](()=>_0x4133ca[_0x42e25a(0xda)][_0x42e25a(0xb5)],async()=>{const _0x58a343=_0x42e25a;this[_0x58a343(0xa9)]=null,this[_0x58a343(0x9d)]=[],this[_0x58a343(0xeb)]=null,await Promise['all']([this[_0x58a343(0xe0)](),this['loadDocs']()]),_0x58a343(0xaa)===this['indexer']?.[_0x58a343(0xe4)]&&await this[_0x58a343(0xdc)]();}),await Promise[_0x42e25a(0x83)]([this['load'](),this[_0x42e25a(0x88)]()]),'queue'===this[_0x42e25a(0xe2)]?.[_0x42e25a(0xe4)]&&await this[_0x42e25a(0xdc)]();},'mount'(){const _0x1a404b=_0x1404a6,_0x5a7a1a=()=>this[_0x1a404b(0xb5)],_0x4e8ad9=_0x321c37=>{const _0x3d72bf=_0x1a404b;_0x321c37?.['engine']&&_0x321c37[_0x3d72bf(0x7f)]!==_0x5a7a1a()||this[_0x3d72bf(0xe0)]();},_0x52d2d7=_0x46af0e=>{const _0x28cea1=_0x1a404b;_0x46af0e?.[_0x28cea1(0x7f)]&&_0x46af0e[_0x28cea1(0x7f)]!==_0x5a7a1a()||this['loadDocs']();};this[_0x1a404b(0xad)]=[_0x5d5548['on'](_0x1a404b(0xd2),_0x4e8ad9),_0x5d5548['on'](_0x1a404b(0xe7),_0x4e8ad9),_0x5d5548['on'](_0x1a404b(0x78),_0x4e8ad9),_0x5d5548['on'](_0x1a404b(0xce),_0x4e8ad9),_0x5d5548['on']('engine:error',_0x4e8ad9),_0x5d5548['on']('embeddings:indexer:doc:done',_0x52d2d7),_0x5d5548['on'](_0x1a404b(0xdd),_0x52d2d7),_0x5d5548['on'](_0x1a404b(0x7b),_0x52d2d7)];},'unmount'(){const _0x2eda02=_0x1404a6;for(const _0x4ec963 of this[_0x2eda02(0xad)])_0x4ec963();this[_0x2eda02(0xad)]=[];},'template':_0x1404a6(0xc5),'style':d};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(function(_0x5d45a8,_0x588405){var _0x4611ba=_0x524b,_0x133f28=_0x5d45a8();while(!![]){try{var _0x3c011=parseInt(_0x4611ba(0xf3))/0x1+parseInt(_0x4611ba(0xed))/0x2*(-parseInt(_0x4611ba(0xea))/0x3)+-parseInt(_0x4611ba(0xec))/0x4+-parseInt(_0x4611ba(0xef))/0x5*(parseInt(_0x4611ba(0xee))/0x6)+-parseInt(_0x4611ba(0xf4))/0x7*(parseInt(_0x4611ba(0xeb))/0x8)+parseInt(_0x4611ba(0xf2))/0x9+-parseInt(_0x4611ba(0xf0))/0xa*(-parseInt(_0x4611ba(0xf1))/0xb);if(_0x3c011===_0x588405)break;else _0x133f28['push'](_0x133f28['shift']());}catch(_0x59f8e3){_0x133f28['push'](_0x133f28['shift']());}}}(_0x55dc,0xcbebc));import _0x17f9b4 from'../../engines/parts/engine-lifecycle-actions.ok.js';export default{..._0x17f9b4,'tag':'embed-lifecycle-bar'};function _0x524b(_0x3afada,_0xb885fc){_0x3afada=_0x3afada-0xea;var _0x55dc81=_0x55dc();var _0x524b62=_0x55dc81[_0x3afada];return _0x524b62;}function _0x55dc(){var _0x5f19aa=['2124TlzIWk','2430mqbhwS','1090eiuhvL','110011kAlGjP','14143455ocpNpt','1012445vHenjK','9926DfBTAC','1685763sMvtPR','4024EKkEUG','5566280YzGJdC','2VULUvq'];_0x55dc=function(){return _0x5f19aa;};return _0x55dc();}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const _0x26c4b1=_0x35b4;function _0x35b4(_0x3b430f,_0x1403e4){_0x3b430f=_0x3b430f-0x1e3;const _0x1a919f=_0x1a91();let _0x35b449=_0x1a919f[_0x3b430f];return _0x35b449;}(function(_0x1c48be,_0x5b94db){const _0x46f754=_0x35b4,_0x1dd83c=_0x1c48be();while(!![]){try{const _0x37dc3d=-parseInt(_0x46f754(0x1f3))/0x1+-parseInt(_0x46f754(0x1ff))/0x2*(parseInt(_0x46f754(0x1e4))/0x3)+-parseInt(_0x46f754(0x1fc))/0x4+-parseInt(_0x46f754(0x1e6))/0x5*(parseInt(_0x46f754(0x1fb))/0x6)+-parseInt(_0x46f754(0x1f0))/0x7*(parseInt(_0x46f754(0x1fa))/0x8)+-parseInt(_0x46f754(0x1ec))/0x9+-parseInt(_0x46f754(0x1e5))/0xa*(-parseInt(_0x46f754(0x1f6))/0xb);if(_0x37dc3d===_0x5b94db)break;else _0x1dd83c['push'](_0x1dd83c['shift']());}catch(_0x3754f1){_0x1dd83c['push'](_0x1dd83c['shift']());}}}(_0x1a91,0x6904e));import _0x4adafc from'../modals/register-model-modal.ok.js';function _0x1a91(){const _0x1ed4ea=['filterProvider','provider','\x0a<div\x20:style=\x22compactMode\x0a\x20\x20?\x20\x27display:flex;\x20flex-direction:column;\x20gap:14px;\x20width:min(900px,\x2078vw);\x20max-width:900px;\x27\x0a\x20\x20:\x20\x27display:flex;\x20flex-direction:column;\x20gap:16px;\x20max-width:860px;\x27\x22>\x0a\x0a\x20\x20<!--\x20Header\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:10px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20<div\x20:style=\x22compactMode\x20?\x20\x27font-weight:600;\x20font-size:16px;\x27\x20:\x20\x27font-weight:600;\x20font-size:18px;\x27\x22>Model\x20Catalog</div>\x0a\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x20opacity:.55;\x22>{{totalCount}}\x20models</span>\x0a\x20\x20\x20\x20<div\x20style=\x22margin-left:auto;\x20display:flex;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22load()\x22\x20:disabled=\x22busy\x22\x20style=\x22opacity:.8;\x22>↻</button>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22openAdd()\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20style=\x22background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2013%,\x20transparent);\x20border-color:var(--okdb-accent);\x20color:var(--okdb-accent);\x20font-weight:600;\x20padding:5px\x2014px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20+\x20Register\x20Model\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a\x0a\x20\x20<if\x20:=\x22error\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20font-size:13px;\x20padding:10px;\x20border:1px\x20solid\x20var(--okdb-danger);\x20border-radius:8px;\x22>{{error}}</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Provider\x20filter\x20pills\x20-->\x0a\x20\x20<if\x20:=\x22providers.length\x20>\x201\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-wrap:wrap;\x20gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22filterProvider\x20=\x20null\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20:class=\x22filterProvider\x20==\x20null\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20All\x20({{totalCount}})\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20<for\x20:=\x22providers\x22\x20let:p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22filterProvider\x20=\x20p\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:class=\x22filterProvider\x20===\x20p\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{p}}\x20({{(models[p]\x20||\x20[]).length}})\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20</for>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Table\x20-->\x0a\x20\x20<if\x20:=\x22filteredEntries.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22background:var(--okdb-app-surface);\x20border-radius:12px;\x20overflow:hidden;\x22>\x0a\x20\x20\x20\x20\x20\x20<table\x20style=\x22width:100%;\x20border-collapse:collapse;\x20font-size:13px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr\x20style=\x22border-bottom:1px\x20solid\x20var(--okdb-app-border);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20class=\x22th\x22>Provider</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20class=\x22th\x22>Model</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20class=\x22th\x22\x20style=\x22text-align:right;\x22>Dims</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20class=\x22th\x22>Description</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20class=\x22th\x22\x20style=\x22text-align:right;\x20width:80px;\x22></th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr\x20as=\x22repeat\x22\x20:of=\x22filteredEntries\x22\x20let:item=\x22m\x22\x20class=\x22tr\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20class=\x22td\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22padding:2px\x208px;\x20border-radius:999px;\x20font-size:11px;\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-accent)\x2033%,\x20transparent);\x20color:var(--okdb-accent);\x20background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x207%,\x20transparent);\x22>{{m.provider}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20class=\x22td\x22\x20style=\x22font-family:monospace;\x22>{{m.model}}</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20class=\x22td\x22\x20style=\x22text-align:right;\x20font-family:monospace;\x20color:var(--okdb-warning);\x22>{{m.dims}}</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20class=\x22td\x22\x20style=\x22opacity:.6;\x20font-size:12px;\x22>{{m.description\x20||\x20\x27—\x27}}</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20class=\x22td\x22\x20style=\x22text-align:right;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!m.builtin\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22remove(m)\x22\x20style=\x22font-size:11px;\x20padding:2px\x208px;\x20color:var(--okdb-danger);\x20opacity:.8;\x22>✕</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22m.builtin\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20opacity:.4;\x20font-style:italic;\x22>built-in</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</tbody>\x0a\x20\x20\x20\x20\x20\x20</table>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<if\x20:=\x22!busy\x20&&\x20filteredEntries.length\x20===\x200\x20&&\x20!error\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22opacity:.55;\x20font-size:13px;\x20line-height:1.8;\x22>\x0a\x20\x20\x20\x20\x20\x20No\x20models\x20in\x20catalog\x20for\x20the\x20selected\x20filter.<br>\x0a\x20\x20\x20\x20\x20\x20Register\x20a\x20custom\x20model\x20to\x20auto-resolve\x20its\x20dimensions\x20when\x20creating\x20engines.\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a</div>\x0a','onchanged','model','218526LSQBzn','20sChWjA','1715PbnWYF','initialprovider','json','/embeddings/models/','values','message','3565890vPEilM','modal','data','sort','7fkgvDt','error','Removed\x20\x22','617560tloIMQ','compact','$attr','20948631LCTKUp','map','push','shared','6273032ZAemQI','11412XcWKxd','1674020KcdKsN','DELETE','Failed\x20to\x20load\x20models','14fyrXba','info','reduce','<register-model-modal\x20:modal=\x22modal\x22\x20:initial-provider=\x22initialProvider\x22\x20:on-done=\x22onDone\x22\x20/>','/embeddings/models','$ok','</b>\x22\x20from\x20catalog?','models','builtin','open','load','busy','embed-model-catalog','keys','providers','includes','confirm'];_0x1a91=function(){return _0x1ed4ea;};return _0x1a91();}export default{'tag':_0x26c4b1(0x20b),'attr':{'initialprovider':{},'compact':{},'onchanged':{}},'dependencies':[_0x4adafc],'context':_0x2ac376=>({'busy':!0x1,'models':{},'error':null,'filterProvider':null,get 'initialProvider'(){const _0x722afd=_0x26c4b1;return _0x2ac376[_0x722afd(0x1f5)][_0x722afd(0x1e7)]||null;},get 'compactMode'(){const _0x4d3aac=_0x26c4b1;return!0x0===_0x2ac376['$attr'][_0x4d3aac(0x1f4)]||'true'===_0x2ac376[_0x4d3aac(0x1f5)][_0x4d3aac(0x1f4)];},async 'load'(){const _0x37775c=_0x26c4b1;this[_0x37775c(0x20a)]=!0x0,this[_0x37775c(0x1f1)]=null;try{const _0x10db35=await fetch(__ENV__['API']+_0x37775c(0x203)),_0x10d5db=await _0x10db35['json']();if(!_0x10db35['ok'])throw new Error(_0x10d5db?.[_0x37775c(0x1f1)]?.[_0x37775c(0x1eb)]||_0x37775c(0x1fe));this[_0x37775c(0x206)]=_0x10d5db[_0x37775c(0x1ee)]??{};}catch(_0x505633){this[_0x37775c(0x1f1)]=_0x505633?.[_0x37775c(0x1eb)]||String(_0x505633),this[_0x37775c(0x206)]={};}finally{this[_0x37775c(0x20a)]=!0x1;}},get 'providers'(){const _0x40efc4=_0x26c4b1;return Object[_0x40efc4(0x20c)](this[_0x40efc4(0x206)])[_0x40efc4(0x1ef)]();},get 'filteredEntries'(){const _0x8b65ca=_0x26c4b1,_0x5b9428=this[_0x8b65ca(0x210)];if(!_0x5b9428){const _0x217f67=[];for(const _0x5610fd of this[_0x8b65ca(0x20d)])for(const _0x2c8b8d of this[_0x8b65ca(0x206)][_0x5610fd]||[])_0x217f67[_0x8b65ca(0x1f8)]({..._0x2c8b8d,'provider':_0x2c8b8d[_0x8b65ca(0x211)]??_0x5610fd});return _0x217f67;}return(this[_0x8b65ca(0x206)][_0x5b9428]||[])[_0x8b65ca(0x1f7)](_0x2255ca=>({..._0x2255ca,'provider':_0x2255ca['provider']??_0x5b9428}));},get 'totalCount'(){const _0x1f80ca=_0x26c4b1;return Object[_0x1f80ca(0x1ea)](this[_0x1f80ca(0x206)])[_0x1f80ca(0x201)]((_0x170402,_0x13218d)=>_0x170402+_0x13218d['length'],0x0);},async 'openAdd'(){const _0x23b760=_0x26c4b1;await _0x2ac376[_0x23b760(0x204)][_0x23b760(0x1f9)][_0x23b760(0x1ed)][_0x23b760(0x208)]({'owner':_0x2ac376,'title':'Register\x20Model','content':_0x23b760(0x202),'context':_0x714c84=>({'modal':_0x714c84,'initialProvider':this[_0x23b760(0x210)]||'','onDone':async()=>{const _0x35444e=_0x23b760;await this[_0x35444e(0x209)](),await _0x2ac376['$attr']['onchanged']?.();}})});},async 'remove'(_0xbc9e9f){const _0x5bc408=_0x26c4b1;if(_0xbc9e9f[_0x5bc408(0x207)])return void _0x2ac376[_0x5bc408(0x204)][_0x5bc408(0x1f9)]?.['toast']?.[_0x5bc408(0x1f1)]?.('Built-in\x20models\x20cannot\x20be\x20deleted');const _0x170703=_0xbc9e9f[_0x5bc408(0x211)]+':'+_0xbc9e9f[_0x5bc408(0x1e3)];if(await _0x2ac376[_0x5bc408(0x204)][_0x5bc408(0x1f9)][_0x5bc408(0x1ed)][_0x5bc408(0x20f)]('Remove\x20model\x20\x22<b>'+_0x170703+_0x5bc408(0x205)))try{const _0xa4a3e3=await fetch(__ENV__['API']+_0x5bc408(0x1e9)+encodeURIComponent(_0x170703),{'method':_0x5bc408(0x1fd)});if(!_0xa4a3e3['ok']){const _0x3e4ff0=await _0xa4a3e3[_0x5bc408(0x1e8)]();throw new Error(_0x3e4ff0?.[_0x5bc408(0x1f1)]?.[_0x5bc408(0x1eb)]||'Delete\x20failed');}_0x2ac376[_0x5bc408(0x204)][_0x5bc408(0x1f9)]?.['toast']?.[_0x5bc408(0x200)]?.(_0x5bc408(0x1f2)+_0x170703+'\x22'),await this['load'](),await _0x2ac376[_0x5bc408(0x1f5)][_0x5bc408(0x213)]?.();}catch(_0x9639dc){_0x2ac376['$ok'][_0x5bc408(0x1f9)]?.['toast']?.[_0x5bc408(0x1f1)]?.(_0x9639dc?.['message']||'Delete\x20failed');}}}),async 'mount'(_0x5ac346){const _0x5446b7=_0x26c4b1;await this['load']();const _0x56f561=_0x5ac346[_0x5446b7(0x1f5)][_0x5446b7(0x1e7)]||null;_0x56f561&&this[_0x5446b7(0x20d)][_0x5446b7(0x20e)](_0x56f561)&&(this[_0x5446b7(0x210)]=_0x56f561);},'template':_0x26c4b1(0x212),'style':'.pill{border:1px\x20solid\x20var(--okdb-app-border);background:var(--okdb-app-surface);padding:4px\x2010px;border-radius:999px;font-size:12px;cursor:pointer}.pill--on{border-color:var(--okdb-accent)}.td,.th{padding:8px\x2012px}.th{text-align:left;font-weight:500;font-size:11px;text-transform:uppercase;letter-spacing:.04em;opacity:.55}.td{border-top:1px\x20solid\x20#1e2932}.tr:hover\x20.td{background:#ffffff06}'};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function _0x16d7(){const _0x5215d5=['toast','Indexer','key','every','modal','var(--okdb-app-fg-muted)','<br>','pipelineBusy','join','length','sort','embed-worker','filter','replace','15657UPXNfa','_pipelineUrl','Search','/type/','875367xUHGsR','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:20px;\x20max-width:860px;\x22>\x0a\x0a\x20\x20<!--\x20Header\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:12px;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-weight:600;\x20font-size:18px;\x22>Embeddings\x20Overview</div>\x0a\x20\x20\x20\x20<div\x20style=\x22margin-left:auto;\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22openCreate()\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20style=\x22background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2013%,\x20transparent);\x20border-color:var(--okdb-accent);\x20color:var(--okdb-accent);\x20font-weight:600;\x20padding:6px\x2016px;\x22\x0a\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20+\x20Create\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a\x0a\x0a\x20\x20<!--\x20No\x20engines\x20at\x20all\x20-->\x0a\x20\x20<if\x20:=\x22allEngines.length\x20===\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22opacity:.55;\x20font-size:14px;\x20line-height:1.8;\x22>\x0a\x20\x20\x20\x20\x20\x20No\x20engines\x20created\x20yet.<br>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Use\x20<b>+\x20Create</b>\x20to\x20set\x20up\x20a\x20pipeline\x20or\x20individual\x20engine.<br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<b>Embedder</b>\x20—\x20connection\x20to\x20an\x20ML\x20service\x20(Ollama,\x20OpenAI\x20…)<br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<b>Indexer</b>\x20—\x20watches\x20a\x20OKDB\x20type\x27s\x20change\x20log\x20and\x20creates\x20embeddings<br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<b>Worker</b>\x20—\x20queue\x20consumer\x20for\x20queue-mode\x20indexing<br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<b>Search</b>\x20—\x20nearest-neighbour\x20index\x20over\x20a\x20storage\x20key\x0a\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Pipeline\x20groups\x20-->\x0a\x20\x20<if\x20:=\x22groups.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20opacity:.45;\x20letter-spacing:.06em;\x20margin-bottom:8px;\x22>Pipelines</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:10px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22groups\x22\x20let:item=\x22g\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22\x27background:var(--okdb-app-surface);\x20border-radius:10px;\x20padding:14px\x2016px;\x20box-shadow:\x27\x20+\x20(focusPipeline\x20===\x20g.name\x20?\x20\x270\x200\x200\x202px\x20var(--okdb-accent),\x200\x200\x2012px\x20color-mix(in\x20srgb,\x20var(--okdb-accent)\x2020%,\x20transparent)\x27\x20:\x20\x270\x200\x205px\x20#ffffff1a\x27)\x20+\x20\x27;\x20transition:box-shadow\x20.3s;\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Group\x20header\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:10px;\x20margin-bottom:10px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22\x27width:8px;height:8px;border-radius:50%;flex-shrink:0;background:\x27\x20+\x20healthDot(g)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22healthTitle(g)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-weight:600;\x20font-size:14px;\x22>{{\x20g.name\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Vector\x20store\x20summary:\x20storage_key\x20+\x20persisted\x20count\x20from\x20indexer\x20stats\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22g.indexer?.meta?.pipeline\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20opacity:.6;\x20font-family:monospace;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22LMDB\x20vector\x20store\x20for\x20this\x20pipeline\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20~emb:vec:{{\x20g.indexer.config?.storage_key\x20??\x20g.name\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Pipeline-level\x20actions\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22margin-left:auto;\x20display:flex;\x20gap:6px;\x20align-items:center;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22[g.embedder,\x20g.indexer,\x20g.search,\x20g.worker].filter(Boolean).some(e\x20=>\x20e.isRunning)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22stopPipeline(g)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22pipelineBusy[g.name]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:3px\x2010px;\x20color:var(--okdb-warning);\x20border-color:var(--okdb-warning);\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Stop\x20all\x20engines\x20in\x20this\x20pipeline\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20pipelineBusy[g.name]\x20?\x20\x27…\x27\x20:\x20\x27⏹\x20Stop\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22deletePipeline(g)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22pipelineBusy[g.name]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:3px\x2010px;\x20color:var(--okdb-danger);\x20border-color:var(--okdb-danger);\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Stop\x20and\x20permanently\x20delete\x20all\x20engines\x20in\x20this\x20pipeline\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20pipelineBusy[g.name]\x20?\x20\x27…\x27\x20:\x20\x27✕\x20Delete\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Engine\x20rows\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:5px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22[g.embedder,\x20g.indexer,\x20g.search,\x20g.worker].filter(Boolean)\x22\x20let:item=\x22eng\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<engine-row-item\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:engine=\x22eng\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:label=\x22typeLabel[eng.type]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:label-color=\x22typeColor[eng.type]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:subtitle=\x22eng.status\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20action-label=\x22Open\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@select=\x22select($event.detail)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22eng.status\x20===\x20\x27error\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20color:var(--okdb-danger);\x20flex-shrink:0;\x22\x20:title=\x22eng.error\x20||\x20\x27error\x27\x22>⚠\x20error</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</engine-row-item>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Missing\x20role\x20indicators\x20for\x20pipeline\x20completeness\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!g.worker\x20&&\x20g.indexer?.config?.mode\x20===\x20\x27queue\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.5;\x20padding:3px\x208px;\x20color:var(--okdb-warning);\x22>⚠\x20queue\x20mode\x20—\x20no\x20worker\x20configured</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!g.search\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.5;\x20padding:3px\x208px;\x20color:var(--okdb-warning);\x22>⚠\x20no\x20vector-search\x20engine</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Standalone\x20engines\x20(don\x27t\x20form\x20a\x20group)\x20-->\x0a\x20\x20<if\x20:=\x22allEngines.length\x20>\x200\x20&&\x20(groups.length\x20>\x200\x20?\x20orphans.length\x20>\x200\x20:\x20true)\x22>\x0a\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20opacity:.45;\x20letter-spacing:.06em;\x20margin-bottom:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20{{\x20groups.length\x20>\x200\x20?\x20\x27Standalone\x20Engines\x27\x20:\x20\x27Engines\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22groups.length\x20>\x200\x20?\x20orphans\x20:\x20allEngines\x22\x20let:item=\x22eng\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<engine-row-item\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:engine=\x22eng\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:label=\x22typeLabel[eng.type]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:label-color=\x22typeColor[eng.type]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:subtitle=\x22eng.status\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20action-label=\x22Open\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@select=\x22select($event.detail)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22eng.status\x20===\x20\x27error\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20color:var(--okdb-danger);\x20flex-shrink:0;\x22\x20:title=\x22eng.error\x20||\x20\x27error\x27\x22>⚠\x20error</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</engine-row-item>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Summary\x20counts\x20-->\x0a\x20\x20<if\x20:=\x22allEngines.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:16px;\x20font-size:12px;\x20opacity:.5;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20<span>{{\x20allEngines.filter(e\x20=>\x20e.isRunning).length\x20}}\x20/\x20{{\x20allEngines.length\x20}}\x20running</span>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22allEngines.filter(e\x20=>\x20e.status\x20===\x20\x27error\x27).length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-danger);\x22>{{\x20allEngines.filter(e\x20=>\x20e.status\x20===\x20\x27error\x27).length\x20}}\x20error(s)</span>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a</div>\x0a','</b>\x22?<br><br>','error','all\x20running','set','/pipelines/','some','2542160EtZakY','171SpbAFn','DELETE','worker','show-create','add','embedder','var(--okdb-success)','vector-search','push','meta','embed-overview','pipeline','var(--okdb-accent)','Delete\x20the\x20entire\x20pipeline\x20\x22<b>','info','confirm','3106635hTWgdw','default','Pipeline\x20\x22','/env/','18332UKQnDc','API','engines','focusPipeline','$ok','storage_key','map','Stop\x20all\x20engines\x20in\x20pipeline\x20\x22','source_type','shared','_enginesOf','name','383510tiQzGo','66HPDaro','status','6599272LUSrad','search','var(--okdb-danger)','values','\x22\x20stopped','config','12EUmhqX','message','has\x20errors','indexer','created','<br><br>This\x20cannot\x20be\x20undone.','/stop','Worker','success','var(--okdb-purple)','select','isRunning','type','var(--okdb-warning)','$dispatch','pipelines','allEngines','Embedder'];_0x16d7=function(){return _0x5215d5;};return _0x16d7();}const _0x2f3408=_0x1c55;function _0x1c55(_0x58c317,_0x956c59){_0x58c317=_0x58c317-0xf1;const _0x16d726=_0x16d7();let _0x1c55b2=_0x16d726[_0x58c317];return _0x1c55b2;}(function(_0x2c83d2,_0x4a8f45){const _0x28bf90=_0x1c55,_0x269e74=_0x2c83d2();while(!![]){try{const _0x2199ac=-parseInt(_0x28bf90(0x125))/0x1*(parseInt(_0x28bf90(0xfd))/0x2)+-parseInt(_0x28bf90(0x129))/0x3+-parseInt(_0x28bf90(0x146))/0x4+parseInt(_0x28bf90(0x131))/0x5*(parseInt(_0x28bf90(0x105))/0x6)+parseInt(_0x28bf90(0x142))/0x7+-parseInt(_0x28bf90(0xff))/0x8+-parseInt(_0x28bf90(0x132))/0x9*(-parseInt(_0x28bf90(0xfc))/0xa);if(_0x2199ac===_0x4a8f45)break;else _0x269e74['push'](_0x269e74['shift']());}catch(_0x37d29b){_0x269e74['push'](_0x269e74['shift']());}}}(_0x16d7,0x869d0));import _0x4aae9c from'../../engines/parts/engine-row-item.ok.js';export default{'tag':_0x2f3408(0x13c),'dependencies':[_0x4aae9c],'attr':{'engines':{},'focusPipeline':{}},'context':_0x2a7cae=>({'pipelineBusy':{},get 'allEngines'(){const _0x323f3b=_0x2f3408;return _0x2a7cae['$attr'][_0x323f3b(0xf2)]??[];},get 'focusPipeline'(){const _0x161272=_0x2f3408;return _0x2a7cae['$attr'][_0x161272(0xf3)]??null;},get 'pipelines'(){const _0x21d827=_0x2f3408,_0xac2aac=new Map();for(const _0x3e672f of this[_0x21d827(0x115)]){const _0x3fba8d=_0x3e672f[_0x21d827(0x13b)]?.[_0x21d827(0x13d)]??_0x3e672f[_0x21d827(0xfb)][_0x21d827(0x124)](/-worker$/,'');_0xac2aac['has'](_0x3fba8d)||_0xac2aac[_0x21d827(0x12e)](_0x3fba8d,{'name':_0x3fba8d,'embedder':null,'indexer':null,'search':null,'worker':null});const _0x3e0795=_0xac2aac['get'](_0x3fba8d);_0x21d827(0x137)===_0x3e672f['type']?_0x3e0795[_0x21d827(0x137)]=_0x3e672f:'indexer'===_0x3e672f[_0x21d827(0x111)]?_0x3e0795['indexer']=_0x3e672f:_0x21d827(0x139)===_0x3e672f[_0x21d827(0x111)]?_0x3e0795[_0x21d827(0x100)]=_0x3e672f:_0x21d827(0x122)===_0x3e672f[_0x21d827(0x111)]&&(_0x3e0795['worker']=_0x3e672f);}return[..._0xac2aac[_0x21d827(0x102)]()][_0x21d827(0x121)]((_0x1b7151,_0x5b5144)=>_0x1b7151['name']['localeCompare'](_0x5b5144['name']));},get 'orphans'(){const _0x5e40d5=_0x2f3408,_0x1138c8=new Set();for(const _0x1221ef of this['pipelines'])for(const _0x5d89a3 of[_0x1221ef['embedder'],_0x1221ef[_0x5e40d5(0x108)],_0x1221ef[_0x5e40d5(0x100)],_0x1221ef['worker']])_0x5d89a3&&_0x1138c8[_0x5e40d5(0x136)](_0x5d89a3[_0x5e40d5(0x119)]);const _0x2a21cd=this['pipelines'][_0x5e40d5(0x123)](_0x2c045f=>0x1===[_0x2c045f[_0x5e40d5(0x137)],_0x2c045f[_0x5e40d5(0x108)],_0x2c045f[_0x5e40d5(0x100)],_0x2c045f[_0x5e40d5(0x134)]]['filter'](Boolean)[_0x5e40d5(0x120)]),_0x4e1ca1=[];for(const _0x188839 of _0x2a21cd){const _0x454631=_0x188839[_0x5e40d5(0x137)]??_0x188839['indexer']??_0x188839[_0x5e40d5(0x100)]??_0x188839['worker'];_0x454631&&_0x4e1ca1[_0x5e40d5(0x13a)](_0x454631);}return _0x4e1ca1;},get 'groups'(){const _0x41515d=_0x2f3408;return this[_0x41515d(0x114)]['filter'](_0xe526e=>[_0xe526e['embedder'],_0xe526e[_0x41515d(0x108)],_0xe526e[_0x41515d(0x100)],_0xe526e[_0x41515d(0x134)]][_0x41515d(0x123)](Boolean)[_0x41515d(0x120)]>0x1);},'healthDot'(_0x28e994){const _0x32ed21=_0x2f3408,_0x178160=[_0x28e994[_0x32ed21(0x137)],_0x28e994['indexer'],_0x28e994['search'],_0x28e994[_0x32ed21(0x134)]]['filter'](Boolean);return _0x178160[_0x32ed21(0x11a)](_0x1f15da=>_0x1f15da[_0x32ed21(0x110)])?_0x32ed21(0x138):_0x178160[_0x32ed21(0x130)](_0x76caaa=>_0x32ed21(0x12c)===_0x76caaa[_0x32ed21(0xfe)])?_0x32ed21(0x101):_0x32ed21(0x112);},'healthTitle'(_0x1f4fb9){const _0x1c3392=_0x2f3408,_0x56516a=[_0x1f4fb9[_0x1c3392(0x137)],_0x1f4fb9[_0x1c3392(0x108)],_0x1f4fb9[_0x1c3392(0x100)],_0x1f4fb9[_0x1c3392(0x134)]][_0x1c3392(0x123)](Boolean);return _0x56516a[_0x1c3392(0x11a)](_0x2fd9a3=>_0x2fd9a3[_0x1c3392(0x110)])?_0x1c3392(0x12d):_0x56516a[_0x1c3392(0x130)](_0x2d4613=>_0x1c3392(0x12c)===_0x2d4613[_0x1c3392(0xfe)])?_0x1c3392(0x107):'partially\x20running';},'typeColor':{'embedder':'var(--okdb-info)','indexer':_0x2f3408(0x10e),'vector-search':_0x2f3408(0x13e),'embed-worker':'var(--okdb-warning)'},'typeLabel':{'embedder':_0x2f3408(0x116),'indexer':_0x2f3408(0x118),'vector-search':_0x2f3408(0x127),'embed-worker':_0x2f3408(0x10c)},'statusDot':_0x495996=>_0x495996['isRunning']?'var(--okdb-success)':'error'===_0x495996['status']?'var(--okdb-danger)':_0x2f3408(0x11c),'select'(_0x282965){const _0x170c39=_0x2f3408;_0x2a7cae['$dispatch'](_0x170c39(0x10f),_0x282965);},'openCreate'(){const _0x1c1dea=_0x2f3408;_0x2a7cae[_0x1c1dea(0x113)](_0x1c1dea(0x135),null);},'_enginesOf':_0x341a3b=>[_0x341a3b[_0x2f3408(0x137)],_0x341a3b['indexer'],_0x341a3b[_0x2f3408(0x100)],_0x341a3b[_0x2f3408(0x134)]][_0x2f3408(0x123)](Boolean),'_pipelineUrl'(_0x36c436){const _0x43be15=_0x2f3408,_0x33a979=_0x36c436[_0x43be15(0x108)]??_0x36c436[_0x43be15(0x100)]??_0x36c436['worker'];if(!_0x33a979)return null;const _0x540b4a=_0x33a979[_0x43be15(0x104)]??{},_0x3331d1=encodeURIComponent(_0x540b4a['source_env']??_0x43be15(0x143)),_0x1b9e89=encodeURIComponent(_0x540b4a[_0x43be15(0xf8)]??''),_0x232679=encodeURIComponent(_0x540b4a[_0x43be15(0xf5)]??_0x36c436[_0x43be15(0xfb)]);return __ENV__[_0x43be15(0xf1)]+_0x43be15(0x145)+_0x3331d1+_0x43be15(0x128)+_0x1b9e89+_0x43be15(0x12f)+_0x232679;},async 'stopPipeline'(_0x53e06b){const _0x394b5e=_0x2f3408;if(await _0x2a7cae[_0x394b5e(0xf4)]['shared']['modal'][_0x394b5e(0x141)](_0x394b5e(0xf7)+_0x53e06b[_0x394b5e(0xfb)]+'\x22?')){this[_0x394b5e(0x11e)]={...this[_0x394b5e(0x11e)],[_0x53e06b[_0x394b5e(0xfb)]]:!0x0};try{const _0x4846cc=this[_0x394b5e(0x126)](_0x53e06b);_0x4846cc&&await fetch(_0x4846cc+_0x394b5e(0x10b),{'method':'POST'}),_0x2a7cae[_0x394b5e(0xf4)][_0x394b5e(0xf9)]?.[_0x394b5e(0x117)]?.[_0x394b5e(0x140)]?.(_0x394b5e(0x144)+_0x53e06b[_0x394b5e(0xfb)]+_0x394b5e(0x103)),_0x2a7cae['$dispatch'](_0x394b5e(0x109),null);}catch(_0x4c7b1c){_0x2a7cae['$ok'][_0x394b5e(0xf9)]?.['toast']?.[_0x394b5e(0x12c)]?.(_0x4c7b1c?.[_0x394b5e(0x106)]||'Stop\x20failed');}finally{this['pipelineBusy']={...this[_0x394b5e(0x11e)],[_0x53e06b['name']]:!0x1};}}},async 'deletePipeline'(_0x163ae9){const _0xc08691=_0x2f3408,_0x13fbd6=this[_0xc08691(0xfa)](_0x163ae9)[_0xc08691(0xf6)](_0x1d5e78=>'•\x20'+_0x1d5e78[_0xc08691(0x111)]+':\x20'+_0x1d5e78[_0xc08691(0xfb)])[_0xc08691(0x11f)](_0xc08691(0x11d));if(await _0x2a7cae['$ok'][_0xc08691(0xf9)][_0xc08691(0x11b)]['confirm'](_0xc08691(0x13f)+_0x163ae9[_0xc08691(0xfb)]+_0xc08691(0x12b)+_0x13fbd6+_0xc08691(0x10a))){this['pipelineBusy']={...this['pipelineBusy'],[_0x163ae9[_0xc08691(0xfb)]]:!0x0};try{const _0x543cac=this['_pipelineUrl'](_0x163ae9);_0x543cac&&await fetch(_0x543cac,{'method':_0xc08691(0x133)}),_0x2a7cae[_0xc08691(0xf4)][_0xc08691(0xf9)]?.[_0xc08691(0x117)]?.[_0xc08691(0x10d)]?.(_0xc08691(0x144)+_0x163ae9[_0xc08691(0xfb)]+'\x22\x20deleted'),_0x2a7cae[_0xc08691(0x113)](_0xc08691(0x109),null);}catch(_0x5d1983){_0x2a7cae[_0xc08691(0xf4)][_0xc08691(0xf9)]?.[_0xc08691(0x117)]?.[_0xc08691(0x12c)]?.(_0x5d1983?.[_0xc08691(0x106)]||'Delete\x20failed');}finally{this[_0xc08691(0x11e)]={...this[_0xc08691(0x11e)],[_0x163ae9[_0xc08691(0xfb)]]:!0x1};}}}}),'template':_0x2f3408(0x12a),'style':''};
|