@kedem/okdb 1.0.0 → 1.0.3
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/README.md +1 -1
- package/bin/okdb.js +1 -1
- package/keys/public.pem +3 -0
- package/okdb.js +1 -1
- package/package.json +2 -2
- package/public/admin-app.js +1 -1
- package/public/components/admin-route-host.ok.js +1 -1
- package/public/components/env-picker.ok.js +1 -1
- package/public/components/field-path-input.ok.js +1 -1
- package/public/components/geo-map.ok.js +1 -1
- package/public/components/ok-cron-input.ok.js +1 -1
- package/public/components/ok-dropzone.ok.js +1 -1
- package/public/components/ok-js-input.ok.js +1 -1
- package/public/components/ok-json-input.ok.js +1 -1
- package/public/components/ok-text-monaco-input.ok.js +1 -1
- package/public/components/theme-toggle.ok.js +1 -1
- package/public/login-app.js +1 -1
- package/public/modules/ok.js +1 -1
- package/public/sections/api/parts/api-endpoint.ok.js +1 -1
- package/public/sections/auth/modals/create-token-modal.ok.js +1 -1
- package/public/sections/auth/modals/edit-token-modal.ok.js +1 -1
- package/public/sections/auth/modals/perm-info-popover.ok.js +1 -1
- package/public/sections/auth/parts/token-detail.ok.js +1 -1
- package/public/sections/auth/parts/token-list.ok.js +1 -1
- package/public/sections/db/modals/add-item-modal.ok.js +1 -1
- package/public/sections/db/modals/create-env-modal.ok.js +1 -1
- package/public/sections/db/modals/create-fts-modal.ok.js +1 -1
- package/public/sections/db/modals/create-index-modal.ok.js +1 -1
- package/public/sections/db/modals/create-pipeline-modal.ok.js +1 -1
- package/public/sections/db/modals/demo-env-modal.ok.js +1 -1
- package/public/sections/db/modals/remove-env-modal.ok.js +1 -1
- package/public/sections/db/modals/schema-edit-modal.ok.js +1 -1
- package/public/sections/db/parts/db-overview.ok.js +1 -1
- package/public/sections/db/parts/db-pipelines-panel.ok.js +1 -1
- package/public/sections/db/parts/edit-row.ok.js +1 -1
- package/public/sections/db/parts/tm-timeline.ok.js +1 -1
- package/public/sections/db/parts/type-changelog.ok.js +1 -1
- package/public/sections/db/parts/type-list.ok.js +1 -1
- package/public/sections/db/parts/type-pipelines-tab.ok.js +1 -1
- package/public/sections/db/parts/type-schema-tab.ok.js +1 -1
- package/public/sections/db/parts/type-viewer.ok.js +1 -1
- package/public/sections/db/parts/type-violations-tab.ok.js +1 -1
- package/public/sections/embeddings/modals/register-model-modal.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-create-panel.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-embedder-panel.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-engine-declaration-editor.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-engine-list.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-indexer-panel.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-lifecycle-bar.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-model-catalog.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-overview.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-search-panel.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-worker-panel.ok.js +1 -1
- package/public/sections/embeddings/parts/embeddings-engine-panel.ok.js +1 -1
- package/public/sections/embeddings/parts/engines-overview.ok.js +1 -1
- package/public/sections/embeddings/parts/pipeline-create-panel.ok.js +1 -1
- package/public/sections/engines/engine-panel-shared-style.js +1 -1
- package/public/sections/engines/engine-ui-utils.js +1 -1
- package/public/sections/engines/modals/engine-modal.ok.js +1 -1
- package/public/sections/engines/parts/engine-declaration-editor.ok.js +1 -1
- package/public/sections/engines/parts/engine-lifecycle-actions.ok.js +1 -1
- package/public/sections/engines/parts/engine-panel-shell.ok.js +1 -1
- package/public/sections/engines/parts/engine-resource-card.ok.js +1 -1
- package/public/sections/engines/parts/engine-row-item.ok.js +1 -1
- package/public/sections/engines/parts/generic-engine-panel.ok.js +1 -1
- package/public/sections/files/parts/files-blob-status.ok.js +1 -1
- package/public/sections/files/parts/files-collection-list.ok.js +1 -1
- package/public/sections/files/parts/files-collection-panel.ok.js +1 -1
- package/public/sections/files/parts/files-file-list.ok.js +1 -1
- package/public/sections/files/parts/files-overview.ok.js +1 -1
- package/public/sections/files/parts/files-path-browser.ok.js +1 -1
- package/public/sections/files/parts/files-upload-panel.ok.js +1 -1
- package/public/sections/functions/modals/function-modal.ok.js +1 -1
- package/public/sections/functions/parts/function-detail.ok.js +1 -1
- package/public/sections/functions/parts/function-logs.ok.js +1 -1
- package/public/sections/functions/parts/function-runner.ok.js +1 -1
- package/public/sections/functions/parts/functions-list.ok.js +1 -1
- package/public/sections/license/parts/license-panel.ok.js +1 -1
- package/public/sections/queue/modals/create-bucket-modal.ok.js +1 -1
- package/public/sections/queue/modals/edit-bucket-modal.ok.js +1 -1
- package/public/sections/queue/modals/edit-job-modal.ok.js +1 -1
- package/public/sections/queue/modals/enqueue-job-modal.ok.js +1 -1
- package/public/sections/queue/modals/job-type-modal.ok.js +1 -1
- package/public/sections/queue/parts/ok-job-form.ok.js +1 -1
- package/public/sections/queue/parts/queue-buckets.ok.js +1 -1
- package/public/sections/queue/parts/queue-job-types.ok.js +1 -1
- package/public/sections/queue/parts/queue-jobs.ok.js +1 -1
- package/public/sections/queue/parts/queue-types.ok.js +1 -1
- package/public/sections/queue/parts/queue-workers.ok.js +1 -1
- package/public/sections/sync/parts/sync-node-detail.ok.js +1 -1
- package/public/sections/sync/parts/sync-retention.ok.js +1 -1
- package/public/sections/sync/parts/sync-topology.ok.js +1 -1
- package/public/sections/system/modals/data-ops-modal.ok.js +1 -1
- package/public/sections/system/parts/system-api-panel.ok.js +1 -1
- package/public/sections/system/parts/system-auth-panel.ok.js +1 -1
- package/public/sections/system/parts/system-log-history.ok.js +1 -1
- package/public/sections/system/parts/system-log.ok.js +1 -1
- package/public/sections/system/parts/system-status.ok.js +1 -1
- package/public/sections/system/parts/system-sync-panel.ok.js +1 -1
- package/public/sections/views/modals/create-view-modal.ok.js +1 -1
- package/public/sections/views/parts/view-detail.ok.js +1 -1
- package/public/sections/views/parts/views-list.ok.js +1 -1
- package/public/sections/views/parts/views-overview.ok.js +1 -1
- package/public/setup-app.js +1 -1
- package/public/stores/auth-store.js +1 -1
- package/public/stores/events-store.js +1 -1
- package/public/stores/functions-store.js +1 -1
- package/public/stores/okdb-store.js +1 -1
- package/public/stores/theme-store.js +1 -1
- package/public/util/permissions.js +1 -1
- package/public/util/sift-schema.js +1 -1
- package/public/vendor/okjs/ok.esm.min.js +1 -2
- package/public/vendor/okjs/toolkit/behavior/async.ok.js +1 -1
- package/public/vendor/okjs/toolkit/components/ok-chart.ok.js +1 -1
- package/public/vendor/okjs/toolkit/components/ok-doc-viewer.ok.js +1 -1
- package/public/vendor/okjs/toolkit/components/ok-marked.ok.js +1 -1
- package/public/vendor/okjs/toolkit/components/ok-monaco.ok.js +1 -1
- package/public/vendor/okjs/toolkit/core/ok-layer-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/core/ok-layer.ok.js +1 -1
- package/public/vendor/okjs/toolkit/core/ok-overlay.ok.js +1 -1
- package/public/vendor/okjs/toolkit/core/ok-sandbox.ok.js +1 -1
- package/public/vendor/okjs/toolkit/core/transition.ok.js +1 -1
- package/public/vendor/okjs/toolkit/core/virtualized.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-console-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-console.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-fps-monitor-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-fps-monitor.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-inspector-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-inspector.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-js-tree.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-timeline-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-timeline.ok.js +1 -1
- package/public/vendor/okjs/toolkit/docs/doc-viewer.ok.js +1 -1
- package/public/vendor/okjs/toolkit/editor/ok-live-component.ok.js +1 -1
- package/public/vendor/okjs/toolkit/editor/ok-live-example.ok.js +1 -1
- package/public/vendor/okjs/toolkit/editor/ok-live-shell.ok.js +1 -1
- package/public/vendor/okjs/toolkit/elements/ok-dropdown.ok.js +1 -1
- package/public/vendor/okjs/toolkit/elements/ok-icon.ok.js +1 -1
- package/public/vendor/okjs/toolkit/elements/ok-select.ok.js +1 -1
- package/public/vendor/okjs/toolkit/elements/ok-table.ok.js +1 -1
- package/public/vendor/okjs/toolkit/errors/ok-crash-boundary.ok.js +1 -1
- package/public/vendor/okjs/toolkit/errors/ok-crash-info.ok.js +1 -1
- package/public/vendor/okjs/toolkit/i18n/i18n-editor-examples.ok.js +1 -1
- package/public/vendor/okjs/toolkit/i18n/i18n-editor.ok.js +1 -1
- package/public/vendor/okjs/toolkit/i18n/i18n-key-editor-tips.ok.js +1 -1
- package/public/vendor/okjs/toolkit/i18n/i18n-key-editor.ok.js +1 -1
- package/public/vendor/okjs/toolkit/i18n/i18n-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/i18n/ok-i18n.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-contextmenu.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-dismiss-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-draggable.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-flyover-panel.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-flyover.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-highlight-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-highlight.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-hotkeys-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-picker-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-popout-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-popout.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-portal-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-submenu.ok.js +1 -1
- package/public/vendor/okjs/toolkit/layout/ok-resizer.ok.js +1 -1
- package/public/vendor/okjs/toolkit/manifest.js +1 -1
- package/public/vendor/okjs/toolkit/modals/ok-modal-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/modals/ok-modal.ok.js +1 -1
- package/public/vendor/okjs/toolkit/modals/ok-toast-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/modals/ok-window.ok.js +1 -1
- package/public/vendor/okjs/toolkit/navigation/hash-router.ok.js +1 -1
- package/public/vendor/okjs/toolkit/navigation/history-router.ok.js +1 -1
- package/public/vendor/okjs/toolkit/navigation/router.ok.js +1 -1
- package/public/vendor/okjs/toolkit/sync/reactive-sync-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/sync/reactive-sync.js +1 -1
- package/public/vendor/okjs/toolkit/theming/blocks/ok-design-button.css.js +1 -1
- package/public/vendor/okjs/toolkit/theming/blocks/ok-design-input.css.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-design-style.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-design-vars.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-design.ok.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-input.ok.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-style.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-utils.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-variable.ok.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-vm.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor.ok.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme.ok.js +1 -1
- package/public/view-models/type-query-vm.js +1 -1
- package/public/images/logo.png +0 -0
- package/public/images/logo.svg +0 -333
|
@@ -1 +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)};
|
|
1
|
+
const _0x3d453b=_0x18cc;(function(_0x3f4803,_0x555ea6){const _0x2ecb39=_0x18cc,_0x57e7cb=_0x3f4803();while(!![]){try{const _0x2b2f89=parseInt(_0x2ecb39(0x22f))/0x1+parseInt(_0x2ecb39(0x26a))/0x2*(-parseInt(_0x2ecb39(0x205))/0x3)+-parseInt(_0x2ecb39(0x269))/0x4+parseInt(_0x2ecb39(0x1dc))/0x5*(-parseInt(_0x2ecb39(0x270))/0x6)+-parseInt(_0x2ecb39(0x1d5))/0x7*(parseInt(_0x2ecb39(0x245))/0x8)+parseInt(_0x2ecb39(0x216))/0x9+parseInt(_0x2ecb39(0x1c0))/0xa;if(_0x2b2f89===_0x555ea6)break;else _0x57e7cb['push'](_0x57e7cb['shift']());}catch(_0x2234ff){_0x57e7cb['push'](_0x57e7cb['shift']());}}}(_0x4089,0x2d577));import _0x50e09a from'../../../components/field-path-input.ok.js';function _0x18cc(_0x1c0202,_0x20e6d1){_0x1c0202=_0x1c0202-0x1be;const _0x40896d=_0x4089();let _0x18cc77=_0x40896d[_0x1c0202];return _0x18cc77;}import _0x5e0b9b from'./embed-model-catalog.ok.js';import _0x39e455 from'../modals/register-model-modal.ok.js';function _0x4089(){const _0x418950=['2753190xzzCLZ','lockembedder','job_type','\x20dims','Created!','typeMap','submitWorker','filter','split','submitPipeline','result','providers','all','Embedder\x20name\x20is\x20required','emb_custom_model','maybeSaveToCatalog','description','No\x20models\x20found\x20on\x20Ollama\x20server','Source\x20type\x20is\x20required','loadProviders','worker','API','busy','note','_post','244662xFgdxq','clearModelSelection','toString','fixed','modal','success','<register-model-modal\x20:modal=\x22modal\x22\x20:initial-provider=\x22initialProvider\x22\x20:on-done=\x22onDone\x22\x20/>','model','ollama','lockedStorageKey','flat','storage_key','types','30000','__custom__','includes','loading','stringify','off','geo','algorithmMap','Name\x20is\x20required','3056fqqDvW','some','baseUrl','/embeddings/providers','live','modelsForProvider','field','toast','dims','chunk','chunk_store_text','deepTypeMap','idx','Job\x20type\x20is\x20required','/embeddings/search','field_mode','refreshOllamaModels','message','source_type','emb_config','loadTypes','locktype','prepare_custom','algorithm_config','embedder','text','size','label','/env/','default','1000','get','concurrency','alg_config','type','\x20—\x20?\x20dims','1172196atbYKf','12gCUluG','?url=','w_concurrency','isInteger','chunk_strategy','Register\x20Model','42edyDpp','emb_model_sel','/embeddings/algorithms','number','liveOllamaError','/embeddings/embedders','modelCatalog','algorithms','trim','isArray','toFixed','ENGINE_ALREADY_EXISTS','refreshCatalogState','loadAlgorithms','Model\x20Catalog','submitIndexer','prepare','liveOllamaModels','paths','json','6433980vQLTVo','providerMap','buildProviderConfig','loadDeepForType','find','created','/embeddings/workers','buildAlgorithmConfig','\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','selectedEnv','emb_type','lockedEmbedder','<embed-model-catalog\x20:initialprovider=\x22initialProvider\x22\x20:compact=\x22true\x22\x20:onchanged=\x22onChanged\x22\x20/>','POST','map','open','chunk_custom','overlap','mode','num','submitEmbedder','7EdWQvz','Model\x20is\x20required','initialtab','length','liveOllamaLoading','Dims\x20is\x20required\x20for\x20custom\x20models','embed-create-panel','256160QMBHgd','emb','url','ttl','algorithmFields','keys','\x22\x20already\x20exists.','emb_model','srch','512','search','pipeline','/embeddings/models','/embeddings/probe-ollama-models','\x20—\x20','key','reconcileModelSelection','An\x20engine\x20named\x20\x22','sort','w_poll_interval','emb_dims_auto','fields','custom','submitSearch','/deep-properties','/types','$ok','string','defaultFieldMode','indexer','\x20is\x20required','chunk_overlap','none','required','effectiveModel','$dispatch','$attr','error','/type/','algorithm','tab','178098IUFQCf','effectiveDims','shared','lockstoragekey','lockedEnv','application/json','providerFields','findModelEntry','chunk_size','loadModelCatalog','pollInterval','emb_save_catalog','emb_custom','data','name','lockedType','emb_custom_dims'];_0x4089=function(){return _0x418950;};return _0x4089();}export default{'tag':_0x3d453b(0x1db),'attr':{'locktype':{},'lockenv':{},'initialtab':{},'lockstoragekey':{},'lockembedder':{}},'dependencies':[_0x50e09a,_0x39e455,_0x5e0b9b],'context':_0x1f25d8=>({'tab':_0x3d453b(0x1e7),'busy':!0x1,'error':null,'success':null,get 'lockedType'(){const _0x336f18=_0x3d453b;return _0x1f25d8[_0x336f18(0x200)][_0x336f18(0x25a)]||null;},get 'lockedEnv'(){const _0x465b3e=_0x3d453b;return _0x1f25d8[_0x465b3e(0x200)]['lockenv']||_0x1f25d8[_0x465b3e(0x1f6)]?.['stores']?.['okdb']?.[_0x465b3e(0x1c9)]||'default';},get 'lockedStorageKey'(){const _0x329288=_0x3d453b;return _0x1f25d8['$attr'][_0x329288(0x208)]||null;},get 'lockedEmbedder'(){const _0x42eb9b=_0x3d453b;return _0x1f25d8['$attr'][_0x42eb9b(0x217)]||null;},'types':[],'typeMap':{},'deepTypeMap':{},'modelCatalog':{},'liveOllamaModels':null,'liveOllamaLoading':!0x1,'liveOllamaError':null,'providers':[],'providerMap':{},'algorithms':[],'algorithmMap':{},async 'loadTypes'(){const _0x988433=_0x3d453b;try{const _0x154c1a=this[_0x988433(0x209)],_0x295ead=await fetch(__ENV__[_0x988433(0x22b)]+_0x988433(0x261)+encodeURIComponent(_0x154c1a)+_0x988433(0x1f5)),_0x29984a=(await _0x295ead[_0x988433(0x1bf)]())['data']||[];if(this[_0x988433(0x23b)]=Array[_0x988433(0x279)](_0x29984a)?_0x29984a['map'](_0x574d39=>_0x574d39[_0x988433(0x267)]??_0x574d39[_0x988433(0x213)]??_0x574d39)['filter'](Boolean)['sort']():Object[_0x988433(0x1e1)](_0x29984a)[_0x988433(0x1ee)](),this[_0x988433(0x21b)]={},Array[_0x988433(0x279)](_0x29984a)){for(const _0x2d365b of _0x29984a)_0x2d365b[_0x988433(0x267)]&&(this[_0x988433(0x21b)][_0x2d365b[_0x988433(0x267)]]=_0x2d365b['fields']||{});}else{for(const [_0x5ee1a9,_0x7246]of Object['entries'](_0x29984a))this[_0x988433(0x21b)][_0x5ee1a9]=_0x7246['fields']||{};}}catch{this[_0x988433(0x23b)]=[],this[_0x988433(0x21b)]={};}},async 'loadModelCatalog'(){const _0x47a4be=_0x3d453b;try{const _0x10bbd9=await fetch(__ENV__['API']+_0x47a4be(0x1e8)),_0x2ef9e8=await _0x10bbd9[_0x47a4be(0x1bf)]();this[_0x47a4be(0x276)]=_0x2ef9e8[_0x47a4be(0x212)]??{};}catch{this[_0x47a4be(0x276)]={};}},async 'loadProviders'(){const _0x4e27e8=_0x3d453b;try{const _0x4d6ab2=await fetch(__ENV__[_0x4e27e8(0x22b)]+_0x4e27e8(0x248)),_0x1e81de=await _0x4d6ab2[_0x4e27e8(0x1bf)]();this[_0x4e27e8(0x221)]=_0x1e81de[_0x4e27e8(0x212)]??[],this[_0x4e27e8(0x1c1)]={};for(const _0x487ee3 of this['providers'])this[_0x4e27e8(0x1c1)][_0x487ee3['key']]=_0x487ee3;}catch{this[_0x4e27e8(0x221)]=[],this[_0x4e27e8(0x1c1)]={};}},async 'loadAlgorithms'(){const _0x4edb49=_0x3d453b;try{const _0x471ce6=await fetch(__ENV__[_0x4edb49(0x22b)]+_0x4edb49(0x272)),_0x5f5be5=await _0x471ce6[_0x4edb49(0x1bf)]();this[_0x4edb49(0x277)]=_0x5f5be5[_0x4edb49(0x212)]??[],this[_0x4edb49(0x243)]={};for(const _0x27f4e1 of this[_0x4edb49(0x277)])this['algorithmMap'][_0x27f4e1[_0x4edb49(0x1eb)]]=_0x27f4e1;}catch{this['algorithms']=[],this[_0x4edb49(0x243)]={};}},async 'loadDeepForType'(_0x21cf50){const _0x3ded77=_0x3d453b;if(_0x21cf50&&void 0x0===this[_0x3ded77(0x250)][_0x21cf50]){this[_0x3ded77(0x250)]={...this['deepTypeMap'],[_0x21cf50]:{'paths':{},'loading':!0x0}};try{const _0x1f5287=this[_0x3ded77(0x209)],_0x380083=await fetch(__ENV__[_0x3ded77(0x22b)]+_0x3ded77(0x261)+encodeURIComponent(_0x1f5287)+_0x3ded77(0x202)+encodeURIComponent(_0x21cf50)+_0x3ded77(0x1f4)),_0x430813=await _0x380083[_0x3ded77(0x1bf)]();this[_0x3ded77(0x250)]={...this[_0x3ded77(0x250)],[_0x21cf50]:{'paths':(_0x430813[_0x3ded77(0x212)]??_0x430813[_0x3ded77(0x220)])?.[_0x3ded77(0x1be)]??{},'loading':!0x1}};}catch{this['deepTypeMap']={...this[_0x3ded77(0x250)],[_0x21cf50]:{'paths':{},'loading':!0x1}};}}},async 'refreshOllamaModels'(_0x24ca74){const _0x4a6f84=_0x3d453b;this[_0x4a6f84(0x1d9)]=!0x0,this['liveOllamaError']=null;const _0x573800=_0x24ca74?.['emb_config']?.[_0x4a6f84(0x1de)]??_0x24ca74?.['emb_config']?.[_0x4a6f84(0x247)]??'',_0x258e8=_0x573800?_0x4a6f84(0x26b)+encodeURIComponent(_0x573800):'';try{const _0x19ee95=await fetch(__ENV__[_0x4a6f84(0x22b)]+_0x4a6f84(0x1e9)+_0x258e8),_0x312824=await _0x19ee95[_0x4a6f84(0x1bf)](),_0x512dd6=_0x312824[_0x4a6f84(0x212)]??_0x312824['result']??{};if(_0x4a6f84(0x201)!==_0x512dd6['source']&&_0x512dd6['models']?.[_0x4a6f84(0x1d8)]){const _0x49471f=new Map((this[_0x4a6f84(0x276)][_0x4a6f84(0x237)]??[])[_0x4a6f84(0x1ce)](_0x2ec7ee=>[_0x2ec7ee[_0x4a6f84(0x236)],_0x2ec7ee]));this[_0x4a6f84(0x281)]=_0x512dd6['models']['map'](_0x5bd2cc=>{const _0x587eb5=_0x4a6f84,_0x23eaaf=_0x5bd2cc['model']['split'](':')[0x0],_0x29068b=_0x49471f[_0x587eb5(0x264)](_0x5bd2cc[_0x587eb5(0x236)])??_0x49471f['get'](_0x23eaaf);return{'model':_0x5bd2cc[_0x587eb5(0x236)],'dims':_0x29068b?.[_0x587eb5(0x24d)]??null,'description':_0x5bd2cc['size']?(_0x5bd2cc[_0x587eb5(0x25f)]/0x3b9aca00)[_0x587eb5(0x27a)](0x1)+'\x20GB':null,'builtin':!0x1,'live':!0x0};}),this['liveOllamaError']=null;}else this[_0x4a6f84(0x281)]=[],this[_0x4a6f84(0x274)]=_0x512dd6[_0x4a6f84(0x201)]??_0x4a6f84(0x227);}catch(_0x16dbfd){this[_0x4a6f84(0x281)]=[],this['liveOllamaError']=_0x16dbfd[_0x4a6f84(0x256)];}finally{this['liveOllamaLoading']=!0x1;for(const _0x20072e of[this['pl'],this[_0x4a6f84(0x1dd)]])_0x4a6f84(0x237)===_0x20072e?.[_0x4a6f84(0x1ca)]&&this[_0x4a6f84(0x1ec)](_0x20072e);}},'modelLabel'(_0x580e57){const _0x1b55cb=_0x3d453b;let _0x5a6da1=_0x580e57[_0x1b55cb(0x249)]?'●\x20'+_0x580e57['model']:_0x580e57[_0x1b55cb(0x236)];return _0x580e57[_0x1b55cb(0x24d)]?_0x5a6da1+=_0x1b55cb(0x1ea)+_0x580e57[_0x1b55cb(0x24d)]+_0x1b55cb(0x219):_0x580e57[_0x1b55cb(0x226)]?_0x5a6da1+=_0x1b55cb(0x1ea)+_0x580e57[_0x1b55cb(0x226)]:_0x580e57[_0x1b55cb(0x249)]&&(_0x5a6da1+=_0x1b55cb(0x268)),_0x5a6da1;},'modelsForProvider'(_0x24e008){const _0x407d54=_0x3d453b;return _0x407d54(0x237)===_0x24e008&&Array[_0x407d54(0x279)](this[_0x407d54(0x281)])&&this[_0x407d54(0x281)][_0x407d54(0x1d8)]?this['liveOllamaModels']:this[_0x407d54(0x276)][_0x24e008]??[];},'findModelEntry'(_0x509d44,_0x26be19){const _0x902042=_0x3d453b;if(!_0x26be19||_0x902042(0x23d)===_0x26be19)return null;const _0xe1247c=this[_0x902042(0x24a)](_0x509d44),_0x52f821=_0xe1247c[_0x902042(0x1c4)](_0x2a3568=>_0x2a3568[_0x902042(0x236)]===_0x26be19);if(_0x52f821)return _0x52f821;const _0x41f5d7=String(_0x26be19)['split'](':')[0x0];return _0xe1247c[_0x902042(0x1c4)](_0x6a3b0e=>_0x6a3b0e['model']===_0x41f5d7||String(_0x6a3b0e['model']||'')[_0x902042(0x21e)](':')[0x0]===_0x41f5d7)??null;},'clearModelSelection'(_0x5ab81c){const _0x474760=_0x3d453b;_0x5ab81c[_0x474760(0x271)]='',_0x5ab81c[_0x474760(0x1e3)]='',_0x5ab81c[_0x474760(0x1f0)]=null,_0x5ab81c[_0x474760(0x211)]=!0x1;},'reconcileModelSelection'(_0x7c603){const _0x2608dd=_0x3d453b;if(!_0x7c603)return;if(_0x2608dd(0x23d)===_0x7c603['emb_model_sel'])return _0x7c603[_0x2608dd(0x211)]=!0x0,_0x7c603[_0x2608dd(0x1e3)]='',void(_0x7c603[_0x2608dd(0x1f0)]=null);if(!_0x7c603[_0x2608dd(0x271)])return void this['clearModelSelection'](_0x7c603);const _0x553f49=this['findModelEntry'](_0x7c603[_0x2608dd(0x1ca)],_0x7c603[_0x2608dd(0x271)]);_0x553f49?(_0x7c603[_0x2608dd(0x271)]=_0x553f49[_0x2608dd(0x236)],_0x7c603['emb_model']=_0x553f49[_0x2608dd(0x236)],_0x7c603[_0x2608dd(0x1f0)]=_0x553f49['dims']??null,_0x7c603['emb_custom']=!0x1):this[_0x2608dd(0x230)](_0x7c603);},'providerFields'(_0x3a39f1){const _0x401462=_0x3d453b;return this[_0x401462(0x1c1)][_0x3a39f1]?.[_0x401462(0x1f1)]??[];},'providerNote'(_0x5d3d71){const _0x4dcc36=_0x3d453b;return this[_0x4dcc36(0x1c1)][_0x5d3d71]?.[_0x4dcc36(0x22d)]??null;},'algorithmFields'(_0x20f43d){return this['algorithmMap'][_0x20f43d]?.['fields']??[];},'algorithmNote'(_0x475a35){const _0x5d8ae3=_0x3d453b;return this[_0x5d8ae3(0x243)][_0x475a35]?.[_0x5d8ae3(0x22d)]??null;},'onAlgorithmChange'(_0xaf2614,_0x4fbf5b){const _0x543053=_0x3d453b;_0xaf2614['algorithm']=_0x4fbf5b,_0xaf2614['alg_config']={};for(const _0x56ab16 of this['algorithmFields'](_0x4fbf5b))void 0x0!==_0x56ab16['default']&&(_0xaf2614[_0x543053(0x266)][_0x56ab16['key']]=_0x56ab16[_0x543053(0x262)]);},'buildAlgorithmConfig'(_0x349a3d){const _0x5886e1=_0x3d453b,_0x58593c=this['algorithmFields'](_0x349a3d[_0x5886e1(0x203)]??_0x5886e1(0x239)),_0x13ab2c={};for(const _0x2af840 of _0x58593c){const _0x2e6f0f=_0x349a3d[_0x5886e1(0x266)]?.[_0x2af840['key']];if(void 0x0===_0x2e6f0f||''===_0x2e6f0f)void 0x0!==_0x2af840[_0x5886e1(0x262)]&&(_0x13ab2c[_0x2af840[_0x5886e1(0x1eb)]]=_0x2af840['default']);else{const _0x1183e7=_0x5886e1(0x273)===_0x2af840[_0x5886e1(0x267)]?Number(_0x2e6f0f):String(_0x2e6f0f);if(_0x5886e1(0x273)===_0x2af840['type']&&isNaN(_0x1183e7))continue;_0x13ab2c[_0x2af840[_0x5886e1(0x1eb)]]=_0x1183e7;}}return _0x13ab2c;},'buildProviderConfig'(_0x13bbe5){const _0x2633b9=_0x3d453b,_0x770386=this['providerFields'](_0x13bbe5['emb_type']??''),_0x6e78c0={};for(const _0x2ed732 of _0x770386){const _0x1264b1=_0x13bbe5[_0x2633b9(0x258)]?.[_0x2ed732[_0x2633b9(0x1eb)]];void 0x0===_0x1264b1||''===_0x1264b1?void 0x0!==_0x2ed732['default']&&(_0x6e78c0[_0x2ed732[_0x2633b9(0x1eb)]]=_0x2ed732[_0x2633b9(0x262)]):_0x6e78c0[_0x2ed732[_0x2633b9(0x1eb)]]=_0x2633b9(0x273)===_0x2ed732[_0x2633b9(0x267)]?Number(_0x1264b1):String(_0x1264b1);}return _0x6e78c0;},'getFields'(_0x2dbcce,_0x1dbb91){const _0xa46158=_0x3d453b,_0x1cc8f5=this[_0xa46158(0x250)][_0x2dbcce];if(_0x1cc8f5&&!_0x1cc8f5[_0xa46158(0x23f)]&&Object[_0xa46158(0x1e1)](_0x1cc8f5[_0xa46158(0x1be)])['length']>0x0){const _0x119f8c=Object[_0xa46158(0x1e1)](_0x1cc8f5['paths']);return _0xa46158(0x25e)===_0x1dbb91?_0x119f8c['filter'](_0x572108=>_0x1cc8f5[_0xa46158(0x1be)][_0x572108]['includes']('string'))[_0xa46158(0x1ee)]():_0x119f8c['sort']();}const _0x35f7ce=this[_0xa46158(0x21b)][_0x2dbcce]||{},_0x5d295a=Object[_0xa46158(0x1e1)](_0x35f7ce);return _0xa46158(0x25e)===_0x1dbb91?_0x5d295a[_0xa46158(0x21d)](_0x2eb54c=>_0x35f7ce[_0x2eb54c]['includes'](_0xa46158(0x1f7))):_0x5d295a[_0xa46158(0x1ee)]();},'defaultFieldMode'(_0x31f336){const _0x1b9003=_0x3d453b,_0x9774fc=this['deepTypeMap'][_0x31f336];if(_0x9774fc&&!_0x9774fc[_0x1b9003(0x23f)]&&Object[_0x1b9003(0x1e1)](_0x9774fc[_0x1b9003(0x1be)])[_0x1b9003(0x1d8)]>0x0){const _0x53c5aa=Object[_0x1b9003(0x1e1)](_0x9774fc[_0x1b9003(0x1be)]);return _0x53c5aa[_0x1b9003(0x1d8)]?_0x53c5aa[_0x1b9003(0x246)](_0x35bdae=>_0x9774fc[_0x1b9003(0x1be)][_0x35bdae][_0x1b9003(0x23e)](_0x1b9003(0x1f7)))?_0x1b9003(0x25e):_0x1b9003(0x222):_0x1b9003(0x1f2);}const _0x34c789=this['typeMap'][_0x31f336]||{},_0xb8103b=Object[_0x1b9003(0x1e1)](_0x34c789);return _0xb8103b['length']?_0xb8103b['some'](_0x5259dd=>_0x34c789[_0x5259dd][_0x1b9003(0x23e)](_0x1b9003(0x1f7)))?'text':'all':_0x1b9003(0x1f2);},'getFieldItems'(_0x4ebc1a,_0xe9d0e0){const _0x516e69=_0x3d453b,_0x332e29=this['deepTypeMap'][_0x4ebc1a];let _0x3b05d3;return _0x3b05d3=_0x332e29&&!_0x332e29[_0x516e69(0x23f)]&&Object['keys'](_0x332e29[_0x516e69(0x1be)])[_0x516e69(0x1d8)]>0x0?Object['entries'](_0x332e29[_0x516e69(0x1be)]):Object['entries'](this[_0x516e69(0x21b)][_0x4ebc1a]||{})[_0x516e69(0x1ce)](([_0x40850e,_0x3467df])=>[_0x40850e,_0x3467df]),_0x516e69(0x25e)===_0xe9d0e0&&(_0x3b05d3=_0x3b05d3['filter'](([,_0x46df03])=>_0x46df03[_0x516e69(0x23e)](_0x516e69(0x1f7)))),_0x3b05d3[_0x516e69(0x1ce)](([_0x36d078,_0x29c28a])=>({'path':_0x36d078,'types':Array[_0x516e69(0x279)](_0x29c28a)?_0x29c28a:[_0x29c28a],'hint':Array[_0x516e69(0x279)](_0x29c28a)&&_0x29c28a[_0x516e69(0x23e)]('geo')?_0x516e69(0x242):null}));},'onProviderChange'(_0x4dbef1,_0xeec0cb){const _0x5d85bd=_0x3d453b;_0x4dbef1[_0x5d85bd(0x1ca)]=_0xeec0cb,_0x4dbef1[_0x5d85bd(0x258)]={};for(const _0x3ae94a of this['providerFields'](_0xeec0cb))void 0x0!==_0x3ae94a[_0x5d85bd(0x262)]&&(_0x4dbef1[_0x5d85bd(0x258)][_0x3ae94a[_0x5d85bd(0x1eb)]]=_0x3ae94a['default']);_0x5d85bd(0x237)!==_0xeec0cb||null!==this[_0x5d85bd(0x281)]||this[_0x5d85bd(0x1d9)]||this['refreshOllamaModels'](_0x4dbef1),this[_0x5d85bd(0x230)](_0x4dbef1),_0x4dbef1[_0x5d85bd(0x224)]='',_0x4dbef1['emb_custom_dims']='',_0x4dbef1[_0x5d85bd(0x210)]=!0x1;},'onModelSelChange'(_0x48b0bf,_0x39112e){const _0x1538cc=_0x3d453b;if(_0x48b0bf['emb_model_sel']=_0x39112e,_0x39112e){if(_0x1538cc(0x23d)===_0x39112e)_0x48b0bf[_0x1538cc(0x211)]=!0x0,_0x48b0bf[_0x1538cc(0x1e3)]='',_0x48b0bf[_0x1538cc(0x1f0)]=null;else{_0x48b0bf[_0x1538cc(0x211)]=!0x1,_0x48b0bf[_0x1538cc(0x1e3)]=_0x39112e;const _0x9be4c4=this[_0x1538cc(0x20c)](_0x48b0bf['emb_type'],_0x39112e);_0x48b0bf[_0x1538cc(0x1f0)]=_0x9be4c4?.[_0x1538cc(0x24d)]??null,_0x48b0bf['emb_custom_model']='',_0x48b0bf[_0x1538cc(0x215)]='',_0x48b0bf[_0x1538cc(0x210)]=!0x1;}}else this[_0x1538cc(0x230)](_0x48b0bf);},'effectiveModel':_0x220bbe=>_0x220bbe[_0x3d453b(0x211)]?_0x220bbe[_0x3d453b(0x224)][_0x3d453b(0x278)]():_0x220bbe['emb_model'],'effectiveDims'(_0x3abb05){const _0x348be2=_0x3d453b;if(_0x3abb05[_0x348be2(0x211)]){const _0x38fea7=Number(_0x3abb05['emb_custom_dims']);return Number[_0x348be2(0x26d)](_0x38fea7)&&_0x38fea7>0x0?_0x38fea7:null;}return _0x3abb05[_0x348be2(0x1f0)]??null;},async 'maybeSaveToCatalog'(_0x5f7acb){const _0x406bca=_0x3d453b;if(!_0x5f7acb[_0x406bca(0x211)]||!_0x5f7acb['emb_save_catalog'])return!0x0;const _0x3b8845=_0x5f7acb[_0x406bca(0x224)][_0x406bca(0x278)](),_0x1b4869=Number(_0x5f7acb[_0x406bca(0x215)]);if(!_0x3b8845||!_0x1b4869)return!0x0;try{await fetch(__ENV__[_0x406bca(0x22b)]+_0x406bca(0x1e8),{'method':'POST','headers':{'Content-Type':_0x406bca(0x20a)},'body':JSON[_0x406bca(0x240)]({'provider':_0x5f7acb[_0x406bca(0x1ca)],'model':_0x3b8845,'dims':_0x1b4869})}),await this[_0x406bca(0x20e)]();}catch{}return!0x0;},async 'openRegisterModel'(_0x391aa2){const _0xa1cca=_0x3d453b;await _0x1f25d8[_0xa1cca(0x1f6)][_0xa1cca(0x207)][_0xa1cca(0x233)]['open']({'owner':_0x1f25d8,'title':_0xa1cca(0x26f),'content':_0xa1cca(0x235),'context':_0x4be9fb=>({'modal':_0x4be9fb,'initialProvider':_0x391aa2?.[_0xa1cca(0x1ca)]??'','onDone':async()=>{const _0x165ec5=_0xa1cca;await this[_0x165ec5(0x27c)](_0x391aa2);}})});},async 'refreshCatalogState'(_0x3ff8b3){const _0x887ef5=_0x3d453b;await this[_0x887ef5(0x20e)](),_0x3ff8b3&&(_0x887ef5(0x237)===(_0x3ff8b3?.['emb_type']??'')&&Array[_0x887ef5(0x279)](this[_0x887ef5(0x281)])&&this[_0x887ef5(0x281)][_0x887ef5(0x1d8)]||_0x3ff8b3['emb_model_sel'])&&this[_0x887ef5(0x1ec)](_0x3ff8b3);},async 'openModelCatalog'(_0x1921e5){const _0x177a6c=_0x3d453b;await _0x1f25d8[_0x177a6c(0x1f6)][_0x177a6c(0x207)][_0x177a6c(0x233)][_0x177a6c(0x1cf)]({'owner':_0x1f25d8,'title':_0x177a6c(0x27e),'content':_0x177a6c(0x1cc),'context':()=>({'initialProvider':_0x1921e5?.[_0x177a6c(0x1ca)]??'','onChanged':async()=>{await this['refreshCatalogState'](_0x1921e5);}})});},'pl':{'name':'','source_type':'','field':'','field_mode':'custom','mode':'inline','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':'1000','algorithm':_0x3d453b(0x239),'alg_config':{},'prepare':_0x3d453b(0x1fc),'prepare_custom':'','chunk_strategy':_0x3d453b(0x241),'chunk_custom':'','chunk_size':_0x3d453b(0x1e5),'chunk_overlap':'64','chunk_store_text':!0x0},'onPlSourceTypeChange'(_0x52220d){const _0x54dd97=_0x3d453b;this['pl'][_0x54dd97(0x257)]=_0x52220d,this['pl'][_0x54dd97(0x24b)]='',this['pl']['field_mode']=this[_0x54dd97(0x1f8)](_0x52220d),this[_0x54dd97(0x1c3)](_0x52220d);},'setPlFieldMode'(_0x3d3a85){const _0x1e0afe=_0x3d453b;this['pl'][_0x1e0afe(0x254)]=_0x3d3a85,this['pl']['field']='';},'idx':{'name':'','source_type':'','embedder':'','storage_key':'','field':'','field_mode':_0x3d453b(0x1f2),'dims':'','mode':'inline','job_type':''},'onIdxSourceTypeChange'(_0x1ab4a4){const _0x1361b9=_0x3d453b;this[_0x1361b9(0x251)][_0x1361b9(0x257)]=_0x1ab4a4,this[_0x1361b9(0x251)]['field']='',this[_0x1361b9(0x251)]['field_mode']=this[_0x1361b9(0x1f8)](_0x1ab4a4),this[_0x1361b9(0x1c3)](_0x1ab4a4);},'setIdxFieldMode'(_0x3bdc20){const _0x124809=_0x3d453b;this[_0x124809(0x251)][_0x124809(0x254)]=_0x3bdc20,this['idx']['field']='';},'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':_0x3d453b(0x239),'alg_config':{}},'wkr':{'name':'','job_type':'','indexer':'','embedder':'','concurrency':'1','pollInterval':_0x3d453b(0x263),'ttl':_0x3d453b(0x23c)},'setTab'(_0x2b1f7e){const _0x237b15=_0x3d453b;this[_0x237b15(0x204)]=_0x2b1f7e,this[_0x237b15(0x201)]=null,this[_0x237b15(0x234)]=null;},'num'(_0xa23a7d){const _0x382f10=Number(_0xa23a7d);return isNaN(_0x382f10)||''===_0xa23a7d?void 0x0:_0x382f10;},async 'submitPipeline'(){const _0x2c420f=_0x3d453b,_0x5c5f78=this['pl'];if(!_0x5c5f78['name'][_0x2c420f(0x278)]())return this[_0x2c420f(0x201)]=_0x2c420f(0x244);if(!_0x5c5f78[_0x2c420f(0x257)]['trim']())return this[_0x2c420f(0x201)]=_0x2c420f(0x228);const _0x4e5092=this['effectiveModel'](_0x5c5f78),_0x331152=this[_0x2c420f(0x206)](_0x5c5f78);if(!_0x4e5092)return this[_0x2c420f(0x201)]=_0x2c420f(0x1d6);if(_0x5c5f78[_0x2c420f(0x211)]&&!_0x331152)return this[_0x2c420f(0x201)]=_0x2c420f(0x1da);for(const _0x179d71 of this[_0x2c420f(0x20b)](_0x5c5f78[_0x2c420f(0x1ca)]))if(_0x179d71[_0x2c420f(0x1fd)]&&!_0x5c5f78['emb_config'][_0x179d71['key']]?.[_0x2c420f(0x231)]()[_0x2c420f(0x278)]())return this['error']=_0x179d71[_0x2c420f(0x260)]+_0x2c420f(0x1fa);await this[_0x2c420f(0x225)](_0x5c5f78);const _0x2b1d24=this[_0x2c420f(0x209)],_0x5dca95=_0x5c5f78['source_type'][_0x2c420f(0x278)](),_0x32324={'name':_0x5c5f78[_0x2c420f(0x213)]['trim'](),'field':_0x5c5f78[_0x2c420f(0x24b)]['trim']()||void 0x0,'dims':_0x331152??void 0x0,'mode':_0x5c5f78[_0x2c420f(0x1d2)],'embedder':{'type':_0x5c5f78[_0x2c420f(0x1ca)],'model':_0x4e5092||void 0x0,...this[_0x2c420f(0x1c2)](_0x5c5f78)},'algorithm':_0x5c5f78[_0x2c420f(0x203)]},_0x2a7701=this[_0x2c420f(0x1c7)](_0x5c5f78);if(Object[_0x2c420f(0x1e1)](_0x2a7701)[_0x2c420f(0x1d8)]&&(_0x32324[_0x2c420f(0x25c)]=_0x2a7701),'queue'===_0x5c5f78[_0x2c420f(0x1d2)]&&(_0x32324[_0x2c420f(0x22a)]={'concurrency':this[_0x2c420f(0x1d3)](_0x5c5f78[_0x2c420f(0x26c)]),'pollInterval':this[_0x2c420f(0x1d3)](_0x5c5f78[_0x2c420f(0x1ef)])}),_0x5c5f78['field'][_0x2c420f(0x278)]()&&'none'!==_0x5c5f78[_0x2c420f(0x280)]&&(_0x32324[_0x2c420f(0x280)]=_0x2c420f(0x1f2)===_0x5c5f78[_0x2c420f(0x280)]?_0x5c5f78[_0x2c420f(0x25b)][_0x2c420f(0x278)]():_0x5c5f78['prepare']),_0x5c5f78[_0x2c420f(0x24b)]['trim']()&&_0x2c420f(0x241)!==_0x5c5f78[_0x2c420f(0x26e)]){const _0xc9aa0f=_0x2c420f(0x1f2)===_0x5c5f78[_0x2c420f(0x26e)]?_0x5c5f78[_0x2c420f(0x1d0)][_0x2c420f(0x278)]():_0x5c5f78[_0x2c420f(0x26e)];_0x32324['chunk']={'strategy':_0xc9aa0f,'size':this[_0x2c420f(0x1d3)](_0x5c5f78[_0x2c420f(0x20d)])??0x200,'overlap':_0x2c420f(0x232)===_0x5c5f78[_0x2c420f(0x26e)]?this['num'](_0x5c5f78[_0x2c420f(0x1fb)])??0x40:void 0x0,'storeText':_0x5c5f78[_0x2c420f(0x24f)]},void 0x0===_0x32324[_0x2c420f(0x24e)][_0x2c420f(0x1d1)]&&delete _0x32324[_0x2c420f(0x24e)][_0x2c420f(0x1d1)];}await this[_0x2c420f(0x22e)]('/env/'+encodeURIComponent(_0x2b1d24)+_0x2c420f(0x202)+encodeURIComponent(_0x5dca95)+'/pipelines',_0x32324);},async 'submitEmbedder'(){const _0x30c441=_0x3d453b,_0x9d9c58=this[_0x30c441(0x1dd)];if(!_0x9d9c58[_0x30c441(0x213)]['trim']())return this[_0x30c441(0x201)]=_0x30c441(0x244);const _0x159a74=this[_0x30c441(0x1fe)](_0x9d9c58);if(!_0x159a74)return this[_0x30c441(0x201)]=_0x30c441(0x1d6);for(const _0x58d6be of this[_0x30c441(0x20b)](_0x9d9c58[_0x30c441(0x1ca)]))if(_0x58d6be[_0x30c441(0x1fd)]&&!_0x9d9c58[_0x30c441(0x258)][_0x58d6be[_0x30c441(0x1eb)]]?.[_0x30c441(0x231)]()[_0x30c441(0x278)]())return this[_0x30c441(0x201)]=_0x58d6be[_0x30c441(0x260)]+_0x30c441(0x1fa);await this[_0x30c441(0x225)](_0x9d9c58);const _0x52a870={'name':_0x9d9c58[_0x30c441(0x213)]['trim'](),'type':_0x9d9c58[_0x30c441(0x1ca)],'model':_0x159a74||void 0x0,...this[_0x30c441(0x1c2)](_0x9d9c58)};await this[_0x30c441(0x22e)](_0x30c441(0x275),_0x52a870);},async 'submitIndexer'(){const _0x31fdae=_0x3d453b,_0x69094d=this[_0x31fdae(0x251)];if(!_0x69094d['name'][_0x31fdae(0x278)]())return this[_0x31fdae(0x201)]=_0x31fdae(0x244);if(!_0x69094d[_0x31fdae(0x257)][_0x31fdae(0x278)]())return this['error']='Source\x20type\x20is\x20required';if(!_0x69094d[_0x31fdae(0x25d)][_0x31fdae(0x278)]())return this[_0x31fdae(0x201)]=_0x31fdae(0x223);const _0x2c96d4={'name':_0x69094d[_0x31fdae(0x213)][_0x31fdae(0x278)](),'source_env':this[_0x31fdae(0x209)],'source_type':_0x69094d[_0x31fdae(0x257)][_0x31fdae(0x278)](),'embedder':_0x69094d[_0x31fdae(0x25d)][_0x31fdae(0x278)](),'storage_key':_0x69094d[_0x31fdae(0x23a)][_0x31fdae(0x278)]()||void 0x0,'field':_0x69094d[_0x31fdae(0x24b)][_0x31fdae(0x278)]()||void 0x0,'dims':this[_0x31fdae(0x1d3)](_0x69094d[_0x31fdae(0x24d)]),'mode':_0x69094d[_0x31fdae(0x1d2)],'job_type':_0x69094d[_0x31fdae(0x218)][_0x31fdae(0x278)]()||void 0x0};await this[_0x31fdae(0x22e)]('/embeddings/indexers',_0x2c96d4);},async 'submitSearch'(){const _0x3ea7d8=_0x3d453b,_0xfad978=this[_0x3ea7d8(0x1e4)];if(!_0xfad978[_0x3ea7d8(0x213)][_0x3ea7d8(0x278)]())return this[_0x3ea7d8(0x201)]='Name\x20is\x20required';const _0x425bc2=(this[_0x3ea7d8(0x214)]??_0xfad978[_0x3ea7d8(0x257)]??'')[_0x3ea7d8(0x278)]();if(!_0x425bc2)return this['error']=_0x3ea7d8(0x228);if(!_0xfad978[_0x3ea7d8(0x23a)][_0x3ea7d8(0x278)]())return this[_0x3ea7d8(0x201)]='Storage\x20key\x20is\x20required';const _0x4e98ea={'name':_0xfad978['name'][_0x3ea7d8(0x278)](),'source_type':_0x425bc2,'source_env':this['lockedEnv'],'storage_key':_0xfad978['storage_key']['trim'](),'dims':_0xfad978[_0x3ea7d8(0x24d)]?Number(_0xfad978[_0x3ea7d8(0x24d)]):void 0x0,'embedder':_0xfad978[_0x3ea7d8(0x25d)][_0x3ea7d8(0x278)]()||void 0x0,'algorithm':_0xfad978[_0x3ea7d8(0x203)]},_0x374ac5=this[_0x3ea7d8(0x1c7)](_0xfad978);Object[_0x3ea7d8(0x1e1)](_0x374ac5)[_0x3ea7d8(0x1d8)]&&(_0x4e98ea[_0x3ea7d8(0x25c)]=_0x374ac5),await this[_0x3ea7d8(0x22e)](_0x3ea7d8(0x253),_0x4e98ea);},async 'submitWorker'(){const _0x3a1496=_0x3d453b,_0x489a9c=this['wkr'];if(!_0x489a9c[_0x3a1496(0x213)][_0x3a1496(0x278)]())return this[_0x3a1496(0x201)]=_0x3a1496(0x244);if(!_0x489a9c[_0x3a1496(0x218)][_0x3a1496(0x278)]())return this[_0x3a1496(0x201)]=_0x3a1496(0x252);if(!_0x489a9c[_0x3a1496(0x1f9)]['trim']())return this[_0x3a1496(0x201)]='Indexer\x20name\x20is\x20required';if(!_0x489a9c['embedder'][_0x3a1496(0x278)]())return this[_0x3a1496(0x201)]='Embedder\x20name\x20is\x20required';const _0x1b360e={'name':_0x489a9c[_0x3a1496(0x213)][_0x3a1496(0x278)](),'job_type':_0x489a9c[_0x3a1496(0x218)][_0x3a1496(0x278)](),'indexer':_0x489a9c[_0x3a1496(0x1f9)][_0x3a1496(0x278)](),'embedder':_0x489a9c[_0x3a1496(0x25d)][_0x3a1496(0x278)](),'concurrency':this[_0x3a1496(0x1d3)](_0x489a9c[_0x3a1496(0x265)]),'pollInterval':this['num'](_0x489a9c[_0x3a1496(0x20f)]),'ttl':this['num'](_0x489a9c[_0x3a1496(0x1df)])};await this[_0x3a1496(0x22e)](_0x3a1496(0x1c6),_0x1b360e);},async '_post'(_0x5c5443,_0x2ad0b3){const _0x32d9c9=_0x3d453b;this['busy']=!0x0,this[_0x32d9c9(0x201)]=null,this[_0x32d9c9(0x234)]=null;try{const _0x3d163a=await fetch(''+__ENV__[_0x32d9c9(0x22b)]+_0x5c5443,{'method':_0x32d9c9(0x1cd),'headers':{'Content-Type':_0x32d9c9(0x20a)},'body':JSON[_0x32d9c9(0x240)](_0x2ad0b3)}),_0x17d504=await _0x3d163a[_0x32d9c9(0x1bf)]();if(!_0x3d163a['ok']){const _0x5e6646=_0x17d504?.[_0x32d9c9(0x201)]?.[_0x32d9c9(0x256)]||_0x17d504?.['message']||'HTTP\x20'+_0x3d163a['status'];return void(this['error']=_0x5e6646[_0x32d9c9(0x23e)](_0x32d9c9(0x27b))?_0x32d9c9(0x1ed)+_0x2ad0b3[_0x32d9c9(0x213)]+_0x32d9c9(0x1e2):_0x5e6646);}this[_0x32d9c9(0x234)]=_0x17d504['data'],_0x1f25d8['$ok'][_0x32d9c9(0x207)]?.[_0x32d9c9(0x24c)]?.[_0x32d9c9(0x234)]?.(_0x32d9c9(0x21a)),_0x1f25d8[_0x32d9c9(0x1ff)](_0x32d9c9(0x1c5),_0x17d504[_0x32d9c9(0x212)]);}catch(_0x3d9d75){this['error']=_0x3d9d75?.[_0x32d9c9(0x256)]||String(_0x3d9d75);}finally{this[_0x32d9c9(0x22c)]=!0x1;}},'handleSubmit'(){const _0x4f09ec=_0x3d453b;switch(this['tab']){case _0x4f09ec(0x1e7):return this[_0x4f09ec(0x21f)]();case'embedder':return this[_0x4f09ec(0x1d4)]();case _0x4f09ec(0x1f9):return this[_0x4f09ec(0x27f)]();case _0x4f09ec(0x1e6):return this[_0x4f09ec(0x1f3)]();case'worker':return this[_0x4f09ec(0x21c)]();}}}),async 'init'(_0x347c30){const _0x45cd26=_0x3d453b;await Promise['all']([this[_0x45cd26(0x259)](),this[_0x45cd26(0x20e)](),this[_0x45cd26(0x229)](),this[_0x45cd26(0x27d)]()]);const _0x736239=_0x347c30[_0x45cd26(0x200)][_0x45cd26(0x1d7)];_0x736239&&[_0x45cd26(0x1e7),_0x45cd26(0x25d),_0x45cd26(0x1f9),_0x45cd26(0x1e6),_0x45cd26(0x22a)][_0x45cd26(0x23e)](_0x736239)&&(this[_0x45cd26(0x204)]=_0x736239);const _0x3c7d7c=_0x347c30[_0x45cd26(0x200)][_0x45cd26(0x25a)];_0x3c7d7c&&(this['pl'][_0x45cd26(0x257)]=_0x3c7d7c,this['pl'][_0x45cd26(0x254)]=this[_0x45cd26(0x1f8)](_0x3c7d7c),this[_0x45cd26(0x251)][_0x45cd26(0x257)]=_0x3c7d7c,this['idx'][_0x45cd26(0x254)]=this[_0x45cd26(0x1f8)](_0x3c7d7c),this[_0x45cd26(0x1e4)][_0x45cd26(0x257)]=_0x3c7d7c,this[_0x45cd26(0x1c3)](_0x3c7d7c)),this[_0x45cd26(0x238)]&&(this[_0x45cd26(0x1e4)][_0x45cd26(0x23a)]=this[_0x45cd26(0x238)]),this[_0x45cd26(0x1cb)]&&(this['srch'][_0x45cd26(0x25d)]=this['lockedEmbedder']);const _0x47ab93=this[_0x45cd26(0x221)][0x0]?.[_0x45cd26(0x1eb)]??'';for(const _0x1d8125 of[this['pl'],this[_0x45cd26(0x1dd)]]){_0x1d8125[_0x45cd26(0x1ca)]=_0x47ab93,_0x1d8125['emb_config']={};for(const _0x91acca of this[_0x45cd26(0x20b)](_0x47ab93))void 0x0!==_0x91acca[_0x45cd26(0x262)]&&(_0x1d8125[_0x45cd26(0x258)][_0x91acca['key']]=_0x91acca[_0x45cd26(0x262)]);this[_0x45cd26(0x230)](_0x1d8125);}_0x45cd26(0x237)===_0x47ab93&&this[_0x45cd26(0x255)](this['pl']);for(const _0x3f5fdf of[this['pl'],this[_0x45cd26(0x1e4)]])for(const _0xca8287 of this[_0x45cd26(0x1e0)](_0x3f5fdf[_0x45cd26(0x203)]))void 0x0!==_0xca8287[_0x45cd26(0x262)]&&(_0x3f5fdf[_0x45cd26(0x266)][_0xca8287[_0x45cd26(0x1eb)]]=_0xca8287['default']);},'template':'\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','style':_0x3d453b(0x1c8)};
|
|
@@ -1 +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};
|
|
1
|
+
const _0x57b877=_0x5d0b;(function(_0x515384,_0x6de5e4){const _0x3e2915=_0x5d0b,_0x139b03=_0x515384();while(!![]){try{const _0x5bf4ce=-parseInt(_0x3e2915(0x1aa))/0x1*(parseInt(_0x3e2915(0x19b))/0x2)+-parseInt(_0x3e2915(0x18c))/0x3*(-parseInt(_0x3e2915(0x1a2))/0x4)+parseInt(_0x3e2915(0x1a9))/0x5*(parseInt(_0x3e2915(0x1a3))/0x6)+parseInt(_0x3e2915(0x194))/0x7*(-parseInt(_0x3e2915(0x197))/0x8)+parseInt(_0x3e2915(0x195))/0x9+-parseInt(_0x3e2915(0x1ad))/0xa+parseInt(_0x3e2915(0x1a5))/0xb;if(_0x5bf4ce===_0x6de5e4)break;else _0x139b03['push'](_0x139b03['shift']());}catch(_0x4ad636){_0x139b03['push'](_0x139b03['shift']());}}}(_0x4d95,0xf2d44));import _0xc42294 from'../../engines/parts/engine-panel-shell.ok.js';function _0x4d95(){const _0x5eea1b=['busy','3992330lbbxuV','checkHealth','54vCgooP','message','$watch','filter','/health','includes','/embeddings/embedders/','latency','7cIxwGY','4941459jtKHtL','config','12275528VqfJtu','model','API','embed-embedder-panel','770782CvgJEj','data','health','isRunning','name','engine','$attr','203460rdSLdO','120SYlUiS','entries','22375694aiMwNU','health\x20check\x20failed','fmtConfig','error','146425ZccLbT','3WQZQUC','eng'];_0x4d95=function(){return _0x5eea1b;};return _0x4d95();}import{ENGINE_PANEL_SHARED_STYLE as _0x5eed62}from'../../engines/engine-panel-shared-style.js';import{dispatchEnginePipelineSelection as _0xa95b58,maskSensitiveConfig as _0x4e7cd1}from'../../engines/engine-ui-utils.js';function _0x5d0b(_0x59df5c,_0x56044c){_0x59df5c=_0x59df5c-0x18c;const _0x4d957c=_0x4d95();let _0x5d0bc9=_0x4d957c[_0x59df5c];return _0x5d0bc9;}const s=_0x5eed62;export default{'tag':_0x57b877(0x19a),'dependencies':[_0xc42294],'attr':{'name':{},'engine':{}},'context':_0x224bcd=>({'busy':!0x1,'health':null,'error':null,get 'eng'(){const _0x272955=_0x57b877;return _0x224bcd['$attr'][_0x272955(0x1a0)]??{};},get 'name'(){const _0xa39a05=_0x57b877;return _0x224bcd[_0xa39a05(0x1a1)][_0xa39a05(0x19f)];},get 'config'(){const _0x1163ad=_0x57b877;return this[_0x1163ad(0x1ab)][_0x1163ad(0x196)]??{};},get 'providerType'(){return this['health']?.['type']||this['config']['type']||'—';},get 'modelName'(){const _0x513dd2=_0x57b877;return this[_0x513dd2(0x19d)]?.[_0x513dd2(0x198)]||this[_0x513dd2(0x196)][_0x513dd2(0x198)]||'—';},get 'dimsValue'(){const _0x153c35=_0x57b877;return this[_0x153c35(0x19d)]?.['dims']??this[_0x153c35(0x196)]['dimensions']??'—';},get 'latencyValue'(){const _0x1e42de=_0x57b877;return null!=this[_0x1e42de(0x19d)]?.['latency']?this[_0x1e42de(0x19d)][_0x1e42de(0x193)]+'ms':'—';},get 'configEntries'(){const _0x1a3713=_0x57b877;return Object[_0x1a3713(0x1a4)](this[_0x1a3713(0x1a7)](this['config']))[_0x1a3713(0x18f)](([_0x4454ce])=>!['type',_0x1a3713(0x198)][_0x1a3713(0x191)](_0x4454ce));},async 'checkHealth'(){const _0x7e84e1=_0x57b877;this[_0x7e84e1(0x1ac)]=!0x0,this[_0x7e84e1(0x1a8)]=null;try{const _0x428871=await fetch(__ENV__[_0x7e84e1(0x199)]+_0x7e84e1(0x192)+encodeURIComponent(this[_0x7e84e1(0x19f)])+_0x7e84e1(0x190)),_0x3df558=await _0x428871['json']();if(!_0x428871['ok'])throw new Error(_0x3df558?.['error']?.[_0x7e84e1(0x18d)]||_0x7e84e1(0x1a6));this[_0x7e84e1(0x19d)]=_0x3df558[_0x7e84e1(0x19c)];}catch(_0xf2a177){this['error']=_0xf2a177?.['message']||String(_0xf2a177),this['health']=null;}finally{this[_0x7e84e1(0x1ac)]=!0x1;}},'fmtConfig':_0x4e7cd1,'viewPipeline'(){const _0x3c8454=_0x57b877;_0xa95b58(_0x224bcd,this[_0x3c8454(0x1ab)]);},async 'reloadPanel'(){const _0x3e2d07=_0x57b877;this[_0x3e2d07(0x19d)]=null,this[_0x3e2d07(0x1a8)]=null,this[_0x3e2d07(0x1ab)][_0x3e2d07(0x19e)]&&await this[_0x3e2d07(0x1ae)]();}}),async 'init'(_0x80fa47){const _0x3e64bb=_0x57b877;_0x80fa47[_0x3e64bb(0x18e)](()=>_0x80fa47[_0x3e64bb(0x1a1)]['name'],async()=>{const _0x1ece9e=_0x3e64bb;this[_0x1ece9e(0x19d)]=null,this[_0x1ece9e(0x1a8)]=null,this['eng'][_0x1ece9e(0x19e)]&&await this[_0x1ece9e(0x1ae)]();}),this[_0x3e64bb(0x1ab)][_0x3e64bb(0x19e)]&&await this['checkHealth']();},'template':'\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','style':s};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
var _0x584fa8=_0x17cd;(function(_0x18985a,_0xf951ae){var _0x5dd5fe=_0x17cd,_0x181175=_0x18985a();while(!![]){try{var _0x195351=-parseInt(_0x5dd5fe(0x13f))/0x1*(parseInt(_0x5dd5fe(0x142))/0x2)+-parseInt(_0x5dd5fe(0x13e))/0x3+-parseInt(_0x5dd5fe(0x13a))/0x4*(-parseInt(_0x5dd5fe(0x13d))/0x5)+-parseInt(_0x5dd5fe(0x13c))/0x6+parseInt(_0x5dd5fe(0x141))/0x7*(-parseInt(_0x5dd5fe(0x138))/0x8)+-parseInt(_0x5dd5fe(0x140))/0x9*(parseInt(_0x5dd5fe(0x137))/0xa)+-parseInt(_0x5dd5fe(0x139))/0xb*(-parseInt(_0x5dd5fe(0x13b))/0xc);if(_0x195351===_0xf951ae)break;else _0x181175['push'](_0x181175['shift']());}catch(_0xddef2c){_0x181175['push'](_0x181175['shift']());}}}(_0x3625,0xf146c));import _0x20240f from'../../engines/parts/engine-declaration-editor.ok.js';function _0x17cd(_0x51e6e5,_0x373396){_0x51e6e5=_0x51e6e5-0x136;var _0x362527=_0x3625();var _0x17cd98=_0x362527[_0x51e6e5];return _0x17cd98;}function _0x3625(){var _0xab1625=['7slhgop','2zUJIjv','embed-engine-declaration-editor','2205550IDPcCS','9089624BIpFCX','850366pZNnVy','4LJLnYb','744XNSucp','11130714qmqYWb','5212380TezCjm','984726iTPWZs','424841IBKndL','45fmlWHP'];_0x3625=function(){return _0xab1625;};return _0x3625();}export default{..._0x20240f,'tag':_0x584fa8(0x136)};
|