@kedem/okdb 1.0.0 → 1.0.1

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.
Files changed (117) hide show
  1. package/README.md +1 -1
  2. package/bin/okdb.js +1 -1
  3. package/okdb-data/default/data.mdb +0 -0
  4. package/okdb-data/default/lock.mdb +0 -0
  5. package/okdb-data/~log/data.mdb +0 -0
  6. package/okdb-data/~log/lock.mdb +0 -0
  7. package/okdb-data/~system/data.mdb +0 -0
  8. package/okdb-data/~system/lock.mdb +0 -0
  9. package/okdb.js +1 -1
  10. package/package.json +1 -1
  11. package/public/admin-app.js +1 -1
  12. package/public/components/admin-route-host.ok.js +1 -1
  13. package/public/components/env-picker.ok.js +1 -1
  14. package/public/components/field-path-input.ok.js +1 -1
  15. package/public/components/geo-map.ok.js +1 -1
  16. package/public/components/ok-cron-input.ok.js +1 -1
  17. package/public/components/ok-dropzone.ok.js +1 -1
  18. package/public/components/ok-js-input.ok.js +1 -1
  19. package/public/components/ok-json-input.ok.js +1 -1
  20. package/public/components/ok-text-monaco-input.ok.js +1 -1
  21. package/public/components/theme-toggle.ok.js +1 -1
  22. package/public/login-app.js +1 -1
  23. package/public/modules/ok.js +1 -1
  24. package/public/sections/api/parts/api-endpoint.ok.js +1 -1
  25. package/public/sections/auth/modals/create-token-modal.ok.js +1 -1
  26. package/public/sections/auth/modals/edit-token-modal.ok.js +1 -1
  27. package/public/sections/auth/modals/perm-info-popover.ok.js +1 -1
  28. package/public/sections/auth/parts/token-detail.ok.js +1 -1
  29. package/public/sections/auth/parts/token-list.ok.js +1 -1
  30. package/public/sections/db/modals/add-item-modal.ok.js +1 -1
  31. package/public/sections/db/modals/create-env-modal.ok.js +1 -1
  32. package/public/sections/db/modals/create-fts-modal.ok.js +1 -1
  33. package/public/sections/db/modals/create-index-modal.ok.js +1 -1
  34. package/public/sections/db/modals/create-pipeline-modal.ok.js +1 -1
  35. package/public/sections/db/modals/demo-env-modal.ok.js +1 -1
  36. package/public/sections/db/modals/remove-env-modal.ok.js +1 -1
  37. package/public/sections/db/modals/schema-edit-modal.ok.js +1 -1
  38. package/public/sections/db/parts/db-overview.ok.js +1 -1
  39. package/public/sections/db/parts/db-pipelines-panel.ok.js +1 -1
  40. package/public/sections/db/parts/edit-row.ok.js +1 -1
  41. package/public/sections/db/parts/tm-timeline.ok.js +1 -1
  42. package/public/sections/db/parts/type-changelog.ok.js +1 -1
  43. package/public/sections/db/parts/type-list.ok.js +1 -1
  44. package/public/sections/db/parts/type-pipelines-tab.ok.js +1 -1
  45. package/public/sections/db/parts/type-schema-tab.ok.js +1 -1
  46. package/public/sections/db/parts/type-viewer.ok.js +1 -1
  47. package/public/sections/db/parts/type-violations-tab.ok.js +1 -1
  48. package/public/sections/embeddings/modals/register-model-modal.ok.js +1 -1
  49. package/public/sections/embeddings/parts/embed-create-panel.ok.js +1 -1
  50. package/public/sections/embeddings/parts/embed-embedder-panel.ok.js +1 -1
  51. package/public/sections/embeddings/parts/embed-engine-declaration-editor.ok.js +1 -1
  52. package/public/sections/embeddings/parts/embed-engine-list.ok.js +1 -1
  53. package/public/sections/embeddings/parts/embed-indexer-panel.ok.js +1 -1
  54. package/public/sections/embeddings/parts/embed-lifecycle-bar.ok.js +1 -1
  55. package/public/sections/embeddings/parts/embed-model-catalog.ok.js +1 -1
  56. package/public/sections/embeddings/parts/embed-overview.ok.js +1 -1
  57. package/public/sections/embeddings/parts/embed-search-panel.ok.js +1 -1
  58. package/public/sections/embeddings/parts/embed-worker-panel.ok.js +1 -1
  59. package/public/sections/embeddings/parts/embeddings-engine-panel.ok.js +1 -1
  60. package/public/sections/embeddings/parts/engines-overview.ok.js +1 -1
  61. package/public/sections/embeddings/parts/pipeline-create-panel.ok.js +1 -1
  62. package/public/sections/engines/engine-panel-shared-style.js +1 -1
  63. package/public/sections/engines/engine-ui-utils.js +1 -1
  64. package/public/sections/engines/modals/engine-modal.ok.js +1 -1
  65. package/public/sections/engines/parts/engine-declaration-editor.ok.js +1 -1
  66. package/public/sections/engines/parts/engine-lifecycle-actions.ok.js +1 -1
  67. package/public/sections/engines/parts/engine-panel-shell.ok.js +1 -1
  68. package/public/sections/engines/parts/engine-resource-card.ok.js +1 -1
  69. package/public/sections/engines/parts/engine-row-item.ok.js +1 -1
  70. package/public/sections/engines/parts/generic-engine-panel.ok.js +1 -1
  71. package/public/sections/files/parts/files-blob-status.ok.js +1 -1
  72. package/public/sections/files/parts/files-collection-list.ok.js +1 -1
  73. package/public/sections/files/parts/files-collection-panel.ok.js +1 -1
  74. package/public/sections/files/parts/files-file-list.ok.js +1 -1
  75. package/public/sections/files/parts/files-overview.ok.js +1 -1
  76. package/public/sections/files/parts/files-path-browser.ok.js +1 -1
  77. package/public/sections/files/parts/files-upload-panel.ok.js +1 -1
  78. package/public/sections/functions/modals/function-modal.ok.js +1 -1
  79. package/public/sections/functions/parts/function-detail.ok.js +1 -1
  80. package/public/sections/functions/parts/function-logs.ok.js +1 -1
  81. package/public/sections/functions/parts/function-runner.ok.js +1 -1
  82. package/public/sections/functions/parts/functions-list.ok.js +1 -1
  83. package/public/sections/license/parts/license-panel.ok.js +1 -1
  84. package/public/sections/queue/modals/create-bucket-modal.ok.js +1 -1
  85. package/public/sections/queue/modals/edit-bucket-modal.ok.js +1 -1
  86. package/public/sections/queue/modals/edit-job-modal.ok.js +1 -1
  87. package/public/sections/queue/modals/enqueue-job-modal.ok.js +1 -1
  88. package/public/sections/queue/modals/job-type-modal.ok.js +1 -1
  89. package/public/sections/queue/parts/ok-job-form.ok.js +1 -1
  90. package/public/sections/queue/parts/queue-buckets.ok.js +1 -1
  91. package/public/sections/queue/parts/queue-job-types.ok.js +1 -1
  92. package/public/sections/queue/parts/queue-jobs.ok.js +1 -1
  93. package/public/sections/queue/parts/queue-types.ok.js +1 -1
  94. package/public/sections/queue/parts/queue-workers.ok.js +1 -1
  95. package/public/sections/sync/parts/sync-node-detail.ok.js +1 -1
  96. package/public/sections/sync/parts/sync-retention.ok.js +1 -1
  97. package/public/sections/sync/parts/sync-topology.ok.js +1 -1
  98. package/public/sections/system/modals/data-ops-modal.ok.js +1 -1
  99. package/public/sections/system/parts/system-api-panel.ok.js +1 -1
  100. package/public/sections/system/parts/system-auth-panel.ok.js +1 -1
  101. package/public/sections/system/parts/system-log-history.ok.js +1 -1
  102. package/public/sections/system/parts/system-log.ok.js +1 -1
  103. package/public/sections/system/parts/system-status.ok.js +1 -1
  104. package/public/sections/system/parts/system-sync-panel.ok.js +1 -1
  105. package/public/sections/views/modals/create-view-modal.ok.js +1 -1
  106. package/public/sections/views/parts/view-detail.ok.js +1 -1
  107. package/public/sections/views/parts/views-list.ok.js +1 -1
  108. package/public/sections/views/parts/views-overview.ok.js +1 -1
  109. package/public/setup-app.js +1 -1
  110. package/public/stores/auth-store.js +1 -1
  111. package/public/stores/events-store.js +1 -1
  112. package/public/stores/functions-store.js +1 -1
  113. package/public/stores/okdb-store.js +1 -1
  114. package/public/stores/theme-store.js +1 -1
  115. package/public/util/permissions.js +1 -1
  116. package/public/util/sift-schema.js +1 -1
  117. package/public/view-models/type-query-vm.js +1 -1
@@ -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&amp;\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 _0x2524d7=_0x340a;(function(_0x3f9e42,_0x30a9e4){const _0x403a15=_0x340a,_0xdc9a86=_0x3f9e42();while(!![]){try{const _0x1c04c2=-parseInt(_0x403a15(0x23e))/0x1+-parseInt(_0x403a15(0x1c6))/0x2+-parseInt(_0x403a15(0x259))/0x3*(parseInt(_0x403a15(0x21c))/0x4)+parseInt(_0x403a15(0x202))/0x5*(parseInt(_0x403a15(0x25d))/0x6)+parseInt(_0x403a15(0x241))/0x7*(parseInt(_0x403a15(0x25a))/0x8)+parseInt(_0x403a15(0x1b7))/0x9+-parseInt(_0x403a15(0x26b))/0xa*(parseInt(_0x403a15(0x213))/0xb);if(_0x1c04c2===_0x30a9e4)break;else _0xdc9a86['push'](_0xdc9a86['shift']());}catch(_0x41953d){_0xdc9a86['push'](_0xdc9a86['shift']());}}}(_0x3dec,0x57538));import _0x2dd769 from'../../../components/field-path-input.ok.js';function _0x3dec(){const _0x16b6b5=['/deep-properties','emb_dims_auto','Model\x20Catalog','field_mode','search','required','$ok','tab','lockedStorageKey','fields','number','emb_custom_model','baseUrl','embedder','emb_save_catalog','Source\x20type\x20is\x20required','field','length','Name\x20is\x20required','\x20—\x20?\x20dims','submitWorker','203738ixqmlB','toast','overlap','1512833ynRUZZ','locktype','algorithm_config','buildProviderConfig','label','live','/embeddings/models','get','submitEmbedder','chunk_size','model','/embeddings/search','w_poll_interval','ttl','busy','emb_custom_dims','pipeline','keys','models','name','\x20is\x20required','/embeddings/probe-ollama-models','<embed-model-catalog\x20:initialprovider=\x22initialProvider\x22\x20:compact=\x22true\x22\x20:onchanged=\x22onChanged\x22\x20/>','error','6906pDCcLt','24QjgGDJ','trim','modelCatalog','3318cATBjM','liveOllamaError','/embeddings/indexers','description','srch','algorithm','isInteger','storage_key','isArray','toFixed','API','\x20—\x20','includes','shared','2299970rCzJHG','custom','providerMap','stringify','map','lockembedder','An\x20engine\x20named\x20\x22','text','off','3262419IAFACH','algorithms','application/json','alg_config','chunk_strategy','okdb','pollInterval','split','emb_type','find','toString','embed-create-panel','dims','chunk_overlap','_post','1080670bXepFn','geo','Created!','entries','__custom__','mode','algorithmFields','string','Register\x20Model','clearModelSelection','note','flat','deepTypeMap','\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&amp;\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','emb_model','POST','prepare_custom','worker','indexer','providerFields','/type/','data','source_type','prepare','types','source','success','open','emb_model_sel','submitSearch','buildAlgorithmConfig','submitIndexer','filter','num','modal','/embeddings/workers','providers','ENGINE_ALREADY_EXISTS','message','job_type','Embedder\x20name\x20is\x20required','effectiveDims','maybeSaveToCatalog','lockstoragekey','default','lockedType','lockedEmbedder','algorithmMap','chunk_store_text','Dims\x20is\x20required\x20for\x20custom\x20models','initialtab','/embeddings/embedders','size','<register-model-modal\x20:modal=\x22modal\x22\x20:initial-provider=\x22initialProvider\x22\x20:on-done=\x22onDone\x22\x20/>','1000','chunk_custom','sort','w_concurrency','key','$attr','5420HVKDQn','inline','loadModelCatalog','result','\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','refreshOllamaModels','typeMap','status','defaultFieldMode','modelsForProvider','emb_custom','emb_config','idx','/embeddings/algorithms','ollama','refreshCatalogState','loadDeepForType','11hKzuIl','liveOllamaModels','\x20GB','concurrency','chunk','emb','30000','liveOllamaLoading','512','484yJVEiG','reconcileModelSelection','loadProviders','findModelEntry','type','json','effectiveModel','none','paths','lockedEnv','/env/','Model\x20is\x20required','loading'];_0x3dec=function(){return _0x16b6b5;};return _0x3dec();}function _0x340a(_0x9141ee,_0x41614d){_0x9141ee=_0x9141ee-0x1b0;const _0x3dece4=_0x3dec();let _0x340a47=_0x3dece4[_0x9141ee];return _0x340a47;}import _0x27ed36 from'./embed-model-catalog.ok.js';import _0x2e611b from'../modals/register-model-modal.ok.js';export default{'tag':_0x2524d7(0x1c2),'attr':{'locktype':{},'lockenv':{},'initialtab':{},'lockstoragekey':{},'lockembedder':{}},'dependencies':[_0x2dd769,_0x2e611b,_0x27ed36],'context':_0x3635a9=>({'tab':_0x2524d7(0x251),'busy':!0x1,'error':null,'success':null,get 'lockedType'(){const _0x5eeb8e=_0x2524d7;return _0x3635a9[_0x5eeb8e(0x201)][_0x5eeb8e(0x242)]||null;},get 'lockedEnv'(){const _0x15ddb7=_0x2524d7;return _0x3635a9[_0x15ddb7(0x201)]['lockenv']||_0x3635a9['$ok']?.['stores']?.[_0x15ddb7(0x1bc)]?.['selectedEnv']||'default';},get 'lockedStorageKey'(){const _0x104b27=_0x2524d7;return _0x3635a9['$attr'][_0x104b27(0x1f1)]||null;},get 'lockedEmbedder'(){const _0x4ce62d=_0x2524d7;return _0x3635a9[_0x4ce62d(0x201)][_0x4ce62d(0x1b3)]||null;},'types':[],'typeMap':{},'deepTypeMap':{},'modelCatalog':{},'liveOllamaModels':null,'liveOllamaLoading':!0x1,'liveOllamaError':null,'providers':[],'providerMap':{},'algorithms':[],'algorithmMap':{},async 'loadTypes'(){const _0x1bb188=_0x2524d7;try{const _0x438f00=this[_0x1bb188(0x225)],_0x42e015=await fetch(__ENV__['API']+'/env/'+encodeURIComponent(_0x438f00)+'/types'),_0x1b7249=(await _0x42e015[_0x1bb188(0x221)]())['data']||[];if(this['types']=Array[_0x1bb188(0x265)](_0x1b7249)?_0x1b7249['map'](_0x1ac5ba=>_0x1ac5ba[_0x1bb188(0x220)]??_0x1ac5ba[_0x1bb188(0x254)]??_0x1ac5ba)[_0x1bb188(0x1e6)](Boolean)[_0x1bb188(0x1fe)]():Object[_0x1bb188(0x252)](_0x1b7249)[_0x1bb188(0x1fe)](),this[_0x1bb188(0x208)]={},Array['isArray'](_0x1b7249)){for(const _0x1071db of _0x1b7249)_0x1071db['type']&&(this['typeMap'][_0x1071db[_0x1bb188(0x220)]]=_0x1071db[_0x1bb188(0x232)]||{});}else{for(const [_0x3ce8b9,_0x53ce2a]of Object[_0x1bb188(0x1c9)](_0x1b7249))this[_0x1bb188(0x208)][_0x3ce8b9]=_0x53ce2a[_0x1bb188(0x232)]||{};}}catch{this[_0x1bb188(0x1de)]=[],this['typeMap']={};}},async 'loadModelCatalog'(){const _0xaec7cb=_0x2524d7;try{const _0x1845f5=await fetch(__ENV__[_0xaec7cb(0x267)]+_0xaec7cb(0x247)),_0x32d05c=await _0x1845f5[_0xaec7cb(0x221)]();this[_0xaec7cb(0x25c)]=_0x32d05c[_0xaec7cb(0x1db)]??{};}catch{this[_0xaec7cb(0x25c)]={};}},async 'loadProviders'(){const _0x33e896=_0x2524d7;try{const _0x959b77=await fetch(__ENV__[_0x33e896(0x267)]+'/embeddings/providers'),_0x4531fd=await _0x959b77[_0x33e896(0x221)]();this[_0x33e896(0x1ea)]=_0x4531fd[_0x33e896(0x1db)]??[],this[_0x33e896(0x1b0)]={};for(const _0x2edf66 of this[_0x33e896(0x1ea)])this[_0x33e896(0x1b0)][_0x2edf66[_0x33e896(0x200)]]=_0x2edf66;}catch{this['providers']=[],this[_0x33e896(0x1b0)]={};}},async 'loadAlgorithms'(){const _0x21fcf5=_0x2524d7;try{const _0x14dc7f=await fetch(__ENV__['API']+_0x21fcf5(0x20f)),_0x4ec92c=await _0x14dc7f['json']();this['algorithms']=_0x4ec92c[_0x21fcf5(0x1db)]??[],this[_0x21fcf5(0x1f5)]={};for(const _0x3c0150 of this['algorithms'])this[_0x21fcf5(0x1f5)][_0x3c0150[_0x21fcf5(0x200)]]=_0x3c0150;}catch{this[_0x21fcf5(0x1b8)]=[],this['algorithmMap']={};}},async 'loadDeepForType'(_0x1373c8){const _0x39c5f2=_0x2524d7;if(_0x1373c8&&void 0x0===this[_0x39c5f2(0x1d2)][_0x1373c8]){this[_0x39c5f2(0x1d2)]={...this[_0x39c5f2(0x1d2)],[_0x1373c8]:{'paths':{},'loading':!0x0}};try{const _0x28bb05=this[_0x39c5f2(0x225)],_0x273ebe=await fetch(__ENV__[_0x39c5f2(0x267)]+_0x39c5f2(0x226)+encodeURIComponent(_0x28bb05)+_0x39c5f2(0x1da)+encodeURIComponent(_0x1373c8)+_0x39c5f2(0x229)),_0x569db6=await _0x273ebe[_0x39c5f2(0x221)]();this['deepTypeMap']={...this['deepTypeMap'],[_0x1373c8]:{'paths':(_0x569db6[_0x39c5f2(0x1db)]??_0x569db6[_0x39c5f2(0x205)])?.[_0x39c5f2(0x224)]??{},'loading':!0x1}};}catch{this[_0x39c5f2(0x1d2)]={...this['deepTypeMap'],[_0x1373c8]:{'paths':{},'loading':!0x1}};}}},async 'refreshOllamaModels'(_0x6a0bc){const _0x2ac73c=_0x2524d7;this[_0x2ac73c(0x21a)]=!0x0,this['liveOllamaError']=null;const _0x49d2c1=_0x6a0bc?.[_0x2ac73c(0x20d)]?.['url']??_0x6a0bc?.[_0x2ac73c(0x20d)]?.[_0x2ac73c(0x235)]??'',_0x3b479d=_0x49d2c1?'?url='+encodeURIComponent(_0x49d2c1):'';try{const _0x50a0f0=await fetch(__ENV__[_0x2ac73c(0x267)]+_0x2ac73c(0x256)+_0x3b479d),_0x19b3c0=await _0x50a0f0[_0x2ac73c(0x221)](),_0x268ab5=_0x19b3c0[_0x2ac73c(0x1db)]??_0x19b3c0[_0x2ac73c(0x205)]??{};if('error'!==_0x268ab5[_0x2ac73c(0x1df)]&&_0x268ab5[_0x2ac73c(0x253)]?.['length']){const _0x2a151c=new Map((this[_0x2ac73c(0x25c)][_0x2ac73c(0x210)]??[])[_0x2ac73c(0x1b2)](_0x1e4c93=>[_0x1e4c93[_0x2ac73c(0x24b)],_0x1e4c93]));this[_0x2ac73c(0x214)]=_0x268ab5[_0x2ac73c(0x253)][_0x2ac73c(0x1b2)](_0x100886=>{const _0x4d0b7a=_0x2ac73c,_0x5f2c2d=_0x100886[_0x4d0b7a(0x24b)]['split'](':')[0x0],_0x36965f=_0x2a151c[_0x4d0b7a(0x248)](_0x100886[_0x4d0b7a(0x24b)])??_0x2a151c[_0x4d0b7a(0x248)](_0x5f2c2d);return{'model':_0x100886[_0x4d0b7a(0x24b)],'dims':_0x36965f?.[_0x4d0b7a(0x1c3)]??null,'description':_0x100886['size']?(_0x100886[_0x4d0b7a(0x1fa)]/0x3b9aca00)[_0x4d0b7a(0x266)](0x1)+_0x4d0b7a(0x215):null,'builtin':!0x1,'live':!0x0};}),this['liveOllamaError']=null;}else this[_0x2ac73c(0x214)]=[],this[_0x2ac73c(0x25e)]=_0x268ab5['error']??'No\x20models\x20found\x20on\x20Ollama\x20server';}catch(_0x2e6844){this[_0x2ac73c(0x214)]=[],this['liveOllamaError']=_0x2e6844[_0x2ac73c(0x1ec)];}finally{this[_0x2ac73c(0x21a)]=!0x1;for(const _0x10db38 of[this['pl'],this[_0x2ac73c(0x218)]])_0x2ac73c(0x210)===_0x10db38?.[_0x2ac73c(0x1bf)]&&this[_0x2ac73c(0x21d)](_0x10db38);}},'modelLabel'(_0x1d2068){const _0x5cf7e4=_0x2524d7;let _0x55036f=_0x1d2068['live']?'●\x20'+_0x1d2068['model']:_0x1d2068[_0x5cf7e4(0x24b)];return _0x1d2068[_0x5cf7e4(0x1c3)]?_0x55036f+=_0x5cf7e4(0x268)+_0x1d2068['dims']+'\x20dims':_0x1d2068[_0x5cf7e4(0x260)]?_0x55036f+='\x20—\x20'+_0x1d2068[_0x5cf7e4(0x260)]:_0x1d2068[_0x5cf7e4(0x246)]&&(_0x55036f+=_0x5cf7e4(0x23c)),_0x55036f;},'modelsForProvider'(_0x46b489){const _0x3cc5a9=_0x2524d7;return'ollama'===_0x46b489&&Array['isArray'](this['liveOllamaModels'])&&this[_0x3cc5a9(0x214)][_0x3cc5a9(0x23a)]?this[_0x3cc5a9(0x214)]:this[_0x3cc5a9(0x25c)][_0x46b489]??[];},'findModelEntry'(_0x3158bf,_0x51c8cb){const _0x39e551=_0x2524d7;if(!_0x51c8cb||_0x39e551(0x1ca)===_0x51c8cb)return null;const _0xf1d542=this[_0x39e551(0x20b)](_0x3158bf),_0x5c5ae7=_0xf1d542[_0x39e551(0x1c0)](_0x573609=>_0x573609[_0x39e551(0x24b)]===_0x51c8cb);if(_0x5c5ae7)return _0x5c5ae7;const _0x11abdb=String(_0x51c8cb)[_0x39e551(0x1be)](':')[0x0];return _0xf1d542[_0x39e551(0x1c0)](_0x463090=>_0x463090['model']===_0x11abdb||String(_0x463090['model']||'')[_0x39e551(0x1be)](':')[0x0]===_0x11abdb)??null;},'clearModelSelection'(_0xbeedc4){const _0x2b032b=_0x2524d7;_0xbeedc4[_0x2b032b(0x1e2)]='',_0xbeedc4[_0x2b032b(0x1d4)]='',_0xbeedc4[_0x2b032b(0x22a)]=null,_0xbeedc4['emb_custom']=!0x1;},'reconcileModelSelection'(_0x8341f6){const _0x232fc6=_0x2524d7;if(!_0x8341f6)return;if('__custom__'===_0x8341f6[_0x232fc6(0x1e2)])return _0x8341f6[_0x232fc6(0x20c)]=!0x0,_0x8341f6[_0x232fc6(0x1d4)]='',void(_0x8341f6[_0x232fc6(0x22a)]=null);if(!_0x8341f6[_0x232fc6(0x1e2)])return void this[_0x232fc6(0x1cf)](_0x8341f6);const _0x3bfc07=this[_0x232fc6(0x21f)](_0x8341f6[_0x232fc6(0x1bf)],_0x8341f6[_0x232fc6(0x1e2)]);_0x3bfc07?(_0x8341f6[_0x232fc6(0x1e2)]=_0x3bfc07['model'],_0x8341f6[_0x232fc6(0x1d4)]=_0x3bfc07['model'],_0x8341f6[_0x232fc6(0x22a)]=_0x3bfc07['dims']??null,_0x8341f6[_0x232fc6(0x20c)]=!0x1):this[_0x232fc6(0x1cf)](_0x8341f6);},'providerFields'(_0x51094d){const _0x3e5e34=_0x2524d7;return this[_0x3e5e34(0x1b0)][_0x51094d]?.[_0x3e5e34(0x232)]??[];},'providerNote'(_0x5247d6){const _0x55d508=_0x2524d7;return this[_0x55d508(0x1b0)][_0x5247d6]?.['note']??null;},'algorithmFields'(_0x37bf8){const _0x5a7952=_0x2524d7;return this[_0x5a7952(0x1f5)][_0x37bf8]?.['fields']??[];},'algorithmNote'(_0x59a04f){const _0x2f92a1=_0x2524d7;return this[_0x2f92a1(0x1f5)][_0x59a04f]?.[_0x2f92a1(0x1d0)]??null;},'onAlgorithmChange'(_0x3fa23d,_0x44930f){const _0x41d205=_0x2524d7;_0x3fa23d[_0x41d205(0x262)]=_0x44930f,_0x3fa23d['alg_config']={};for(const _0x131bfa of this[_0x41d205(0x1cc)](_0x44930f))void 0x0!==_0x131bfa[_0x41d205(0x1f2)]&&(_0x3fa23d[_0x41d205(0x1ba)][_0x131bfa[_0x41d205(0x200)]]=_0x131bfa[_0x41d205(0x1f2)]);},'buildAlgorithmConfig'(_0x419327){const _0x4dcfb7=_0x2524d7,_0x18f352=this[_0x4dcfb7(0x1cc)](_0x419327[_0x4dcfb7(0x262)]??_0x4dcfb7(0x1d1)),_0x294141={};for(const _0x3f0475 of _0x18f352){const _0x2898c9=_0x419327['alg_config']?.[_0x3f0475[_0x4dcfb7(0x200)]];if(void 0x0===_0x2898c9||''===_0x2898c9)void 0x0!==_0x3f0475[_0x4dcfb7(0x1f2)]&&(_0x294141[_0x3f0475['key']]=_0x3f0475[_0x4dcfb7(0x1f2)]);else{const _0x39881c='number'===_0x3f0475[_0x4dcfb7(0x220)]?Number(_0x2898c9):String(_0x2898c9);if('number'===_0x3f0475[_0x4dcfb7(0x220)]&&isNaN(_0x39881c))continue;_0x294141[_0x3f0475[_0x4dcfb7(0x200)]]=_0x39881c;}}return _0x294141;},'buildProviderConfig'(_0x2b0739){const _0x5eebaf=_0x2524d7,_0x579891=this[_0x5eebaf(0x1d9)](_0x2b0739[_0x5eebaf(0x1bf)]??''),_0x30cfe6={};for(const _0x9dc3ee of _0x579891){const _0x8a3f95=_0x2b0739['emb_config']?.[_0x9dc3ee[_0x5eebaf(0x200)]];void 0x0===_0x8a3f95||''===_0x8a3f95?void 0x0!==_0x9dc3ee['default']&&(_0x30cfe6[_0x9dc3ee[_0x5eebaf(0x200)]]=_0x9dc3ee[_0x5eebaf(0x1f2)]):_0x30cfe6[_0x9dc3ee[_0x5eebaf(0x200)]]=_0x5eebaf(0x233)===_0x9dc3ee['type']?Number(_0x8a3f95):String(_0x8a3f95);}return _0x30cfe6;},'getFields'(_0x5e6dbb,_0xe603b4){const _0x2a8ffc=_0x2524d7,_0x4cb98c=this[_0x2a8ffc(0x1d2)][_0x5e6dbb];if(_0x4cb98c&&!_0x4cb98c[_0x2a8ffc(0x228)]&&Object['keys'](_0x4cb98c[_0x2a8ffc(0x224)])[_0x2a8ffc(0x23a)]>0x0){const _0x54c199=Object[_0x2a8ffc(0x252)](_0x4cb98c[_0x2a8ffc(0x224)]);return'text'===_0xe603b4?_0x54c199[_0x2a8ffc(0x1e6)](_0x2690da=>_0x4cb98c[_0x2a8ffc(0x224)][_0x2690da][_0x2a8ffc(0x269)](_0x2a8ffc(0x1cd)))['sort']():_0x54c199[_0x2a8ffc(0x1fe)]();}const _0x5aa313=this['typeMap'][_0x5e6dbb]||{},_0x2942ed=Object['keys'](_0x5aa313);return'text'===_0xe603b4?_0x2942ed['filter'](_0x320b87=>_0x5aa313[_0x320b87][_0x2a8ffc(0x269)]('string')):_0x2942ed[_0x2a8ffc(0x1fe)]();},'defaultFieldMode'(_0x53d64f){const _0x26c112=_0x2524d7,_0x5bd6e6=this[_0x26c112(0x1d2)][_0x53d64f];if(_0x5bd6e6&&!_0x5bd6e6[_0x26c112(0x228)]&&Object[_0x26c112(0x252)](_0x5bd6e6[_0x26c112(0x224)])[_0x26c112(0x23a)]>0x0){const _0x2f4c36=Object['keys'](_0x5bd6e6[_0x26c112(0x224)]);return _0x2f4c36['length']?_0x2f4c36['some'](_0x32ac69=>_0x5bd6e6[_0x26c112(0x224)][_0x32ac69]['includes']('string'))?_0x26c112(0x1b5):'all':_0x26c112(0x26c);}const _0x17962a=this[_0x26c112(0x208)][_0x53d64f]||{},_0x28ab71=Object['keys'](_0x17962a);return _0x28ab71[_0x26c112(0x23a)]?_0x28ab71['some'](_0x4747b4=>_0x17962a[_0x4747b4][_0x26c112(0x269)](_0x26c112(0x1cd)))?'text':'all':_0x26c112(0x26c);},'getFieldItems'(_0x110e14,_0x33b160){const _0xc88d9f=_0x2524d7,_0x15bf1a=this[_0xc88d9f(0x1d2)][_0x110e14];let _0x1317d6;return _0x1317d6=_0x15bf1a&&!_0x15bf1a['loading']&&Object['keys'](_0x15bf1a[_0xc88d9f(0x224)])[_0xc88d9f(0x23a)]>0x0?Object[_0xc88d9f(0x1c9)](_0x15bf1a[_0xc88d9f(0x224)]):Object[_0xc88d9f(0x1c9)](this[_0xc88d9f(0x208)][_0x110e14]||{})[_0xc88d9f(0x1b2)](([_0x51672d,_0xea0746])=>[_0x51672d,_0xea0746]),_0xc88d9f(0x1b5)===_0x33b160&&(_0x1317d6=_0x1317d6['filter'](([,_0x46b1f4])=>_0x46b1f4['includes']('string'))),_0x1317d6[_0xc88d9f(0x1b2)](([_0x3294e2,_0x5010f9])=>({'path':_0x3294e2,'types':Array['isArray'](_0x5010f9)?_0x5010f9:[_0x5010f9],'hint':Array[_0xc88d9f(0x265)](_0x5010f9)&&_0x5010f9[_0xc88d9f(0x269)](_0xc88d9f(0x1c7))?_0xc88d9f(0x1c7):null}));},'onProviderChange'(_0x2613f2,_0x1a3fd3){const _0x3a2ac1=_0x2524d7;_0x2613f2[_0x3a2ac1(0x1bf)]=_0x1a3fd3,_0x2613f2['emb_config']={};for(const _0x9097d7 of this[_0x3a2ac1(0x1d9)](_0x1a3fd3))void 0x0!==_0x9097d7[_0x3a2ac1(0x1f2)]&&(_0x2613f2[_0x3a2ac1(0x20d)][_0x9097d7['key']]=_0x9097d7['default']);_0x3a2ac1(0x210)!==_0x1a3fd3||null!==this[_0x3a2ac1(0x214)]||this[_0x3a2ac1(0x21a)]||this[_0x3a2ac1(0x207)](_0x2613f2),this[_0x3a2ac1(0x1cf)](_0x2613f2),_0x2613f2[_0x3a2ac1(0x234)]='',_0x2613f2[_0x3a2ac1(0x250)]='',_0x2613f2[_0x3a2ac1(0x237)]=!0x1;},'onModelSelChange'(_0x46870b,_0x40ae33){const _0x3f3518=_0x2524d7;if(_0x46870b[_0x3f3518(0x1e2)]=_0x40ae33,_0x40ae33){if('__custom__'===_0x40ae33)_0x46870b[_0x3f3518(0x20c)]=!0x0,_0x46870b[_0x3f3518(0x1d4)]='',_0x46870b[_0x3f3518(0x22a)]=null;else{_0x46870b[_0x3f3518(0x20c)]=!0x1,_0x46870b[_0x3f3518(0x1d4)]=_0x40ae33;const _0x3b0ef3=this[_0x3f3518(0x21f)](_0x46870b[_0x3f3518(0x1bf)],_0x40ae33);_0x46870b['emb_dims_auto']=_0x3b0ef3?.['dims']??null,_0x46870b[_0x3f3518(0x234)]='',_0x46870b[_0x3f3518(0x250)]='',_0x46870b['emb_save_catalog']=!0x1;}}else this[_0x3f3518(0x1cf)](_0x46870b);},'effectiveModel':_0x3ed400=>_0x3ed400['emb_custom']?_0x3ed400[_0x2524d7(0x234)]['trim']():_0x3ed400['emb_model'],'effectiveDims'(_0x64e640){const _0x5e465e=_0x2524d7;if(_0x64e640[_0x5e465e(0x20c)]){const _0xc4fe8f=Number(_0x64e640['emb_custom_dims']);return Number[_0x5e465e(0x263)](_0xc4fe8f)&&_0xc4fe8f>0x0?_0xc4fe8f:null;}return _0x64e640['emb_dims_auto']??null;},async 'maybeSaveToCatalog'(_0x3f38f4){const _0x731c36=_0x2524d7;if(!_0x3f38f4[_0x731c36(0x20c)]||!_0x3f38f4[_0x731c36(0x237)])return!0x0;const _0x42e0d6=_0x3f38f4['emb_custom_model']['trim'](),_0x56f7b9=Number(_0x3f38f4[_0x731c36(0x250)]);if(!_0x42e0d6||!_0x56f7b9)return!0x0;try{await fetch(__ENV__['API']+_0x731c36(0x247),{'method':'POST','headers':{'Content-Type':_0x731c36(0x1b9)},'body':JSON[_0x731c36(0x1b1)]({'provider':_0x3f38f4[_0x731c36(0x1bf)],'model':_0x42e0d6,'dims':_0x56f7b9})}),await this['loadModelCatalog']();}catch{}return!0x0;},async 'openRegisterModel'(_0x1493df){const _0xbd2dee=_0x2524d7;await _0x3635a9[_0xbd2dee(0x22f)][_0xbd2dee(0x26a)][_0xbd2dee(0x1e8)][_0xbd2dee(0x1e1)]({'owner':_0x3635a9,'title':_0xbd2dee(0x1ce),'content':_0xbd2dee(0x1fb),'context':_0x3aa070=>({'modal':_0x3aa070,'initialProvider':_0x1493df?.['emb_type']??'','onDone':async()=>{const _0x482bbf=_0xbd2dee;await this[_0x482bbf(0x211)](_0x1493df);}})});},async 'refreshCatalogState'(_0x33711d){const _0x59f50f=_0x2524d7;await this[_0x59f50f(0x204)](),_0x33711d&&(_0x59f50f(0x210)===(_0x33711d?.[_0x59f50f(0x1bf)]??'')&&Array[_0x59f50f(0x265)](this[_0x59f50f(0x214)])&&this[_0x59f50f(0x214)]['length']||_0x33711d[_0x59f50f(0x1e2)])&&this[_0x59f50f(0x21d)](_0x33711d);},async 'openModelCatalog'(_0x4ab23a){const _0x199edc=_0x2524d7;await _0x3635a9['$ok'][_0x199edc(0x26a)][_0x199edc(0x1e8)][_0x199edc(0x1e1)]({'owner':_0x3635a9,'title':_0x199edc(0x22b),'content':_0x199edc(0x257),'context':()=>({'initialProvider':_0x4ab23a?.[_0x199edc(0x1bf)]??'','onChanged':async()=>{await this['refreshCatalogState'](_0x4ab23a);}})});},'pl':{'name':'','source_type':'','field':'','field_mode':_0x2524d7(0x26c),'mode':_0x2524d7(0x203),'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':_0x2524d7(0x1fc),'algorithm':_0x2524d7(0x1d1),'alg_config':{},'prepare':_0x2524d7(0x223),'prepare_custom':'','chunk_strategy':_0x2524d7(0x1b6),'chunk_custom':'','chunk_size':_0x2524d7(0x21b),'chunk_overlap':'64','chunk_store_text':!0x0},'onPlSourceTypeChange'(_0x4ee9f6){const _0x43e438=_0x2524d7;this['pl'][_0x43e438(0x1dc)]=_0x4ee9f6,this['pl']['field']='',this['pl'][_0x43e438(0x22c)]=this['defaultFieldMode'](_0x4ee9f6),this[_0x43e438(0x212)](_0x4ee9f6);},'setPlFieldMode'(_0x4aac98){const _0xbd4b10=_0x2524d7;this['pl'][_0xbd4b10(0x22c)]=_0x4aac98,this['pl'][_0xbd4b10(0x239)]='';},'idx':{'name':'','source_type':'','embedder':'','storage_key':'','field':'','field_mode':_0x2524d7(0x26c),'dims':'','mode':_0x2524d7(0x203),'job_type':''},'onIdxSourceTypeChange'(_0x4a5888){const _0x45357f=_0x2524d7;this[_0x45357f(0x20e)][_0x45357f(0x1dc)]=_0x4a5888,this['idx'][_0x45357f(0x239)]='',this[_0x45357f(0x20e)][_0x45357f(0x22c)]=this[_0x45357f(0x20a)](_0x4a5888),this[_0x45357f(0x212)](_0x4a5888);},'setIdxFieldMode'(_0x195a0b){const _0x3164d7=_0x2524d7;this[_0x3164d7(0x20e)][_0x3164d7(0x22c)]=_0x195a0b,this[_0x3164d7(0x20e)]['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':_0x2524d7(0x1d1),'alg_config':{}},'wkr':{'name':'','job_type':'','indexer':'','embedder':'','concurrency':'1','pollInterval':'1000','ttl':_0x2524d7(0x219)},'setTab'(_0x8e4704){const _0x1629cb=_0x2524d7;this[_0x1629cb(0x230)]=_0x8e4704,this['error']=null,this['success']=null;},'num'(_0x239eb6){const _0x165c74=Number(_0x239eb6);return isNaN(_0x165c74)||''===_0x239eb6?void 0x0:_0x165c74;},async 'submitPipeline'(){const _0x2406c1=_0x2524d7,_0x1bb2a8=this['pl'];if(!_0x1bb2a8['name'][_0x2406c1(0x25b)]())return this[_0x2406c1(0x258)]=_0x2406c1(0x23b);if(!_0x1bb2a8[_0x2406c1(0x1dc)]['trim']())return this[_0x2406c1(0x258)]=_0x2406c1(0x238);const _0x1c5d73=this['effectiveModel'](_0x1bb2a8),_0x3fd7f3=this[_0x2406c1(0x1ef)](_0x1bb2a8);if(!_0x1c5d73)return this[_0x2406c1(0x258)]=_0x2406c1(0x227);if(_0x1bb2a8[_0x2406c1(0x20c)]&&!_0x3fd7f3)return this['error']=_0x2406c1(0x1f7);for(const _0x4cc434 of this[_0x2406c1(0x1d9)](_0x1bb2a8[_0x2406c1(0x1bf)]))if(_0x4cc434[_0x2406c1(0x22e)]&&!_0x1bb2a8['emb_config'][_0x4cc434[_0x2406c1(0x200)]]?.['toString']()[_0x2406c1(0x25b)]())return this[_0x2406c1(0x258)]=_0x4cc434[_0x2406c1(0x245)]+_0x2406c1(0x255);await this[_0x2406c1(0x1f0)](_0x1bb2a8);const _0x299cf1=this[_0x2406c1(0x225)],_0x214b19=_0x1bb2a8[_0x2406c1(0x1dc)]['trim'](),_0x5289ff={'name':_0x1bb2a8[_0x2406c1(0x254)][_0x2406c1(0x25b)](),'field':_0x1bb2a8['field'][_0x2406c1(0x25b)]()||void 0x0,'dims':_0x3fd7f3??void 0x0,'mode':_0x1bb2a8[_0x2406c1(0x1cb)],'embedder':{'type':_0x1bb2a8[_0x2406c1(0x1bf)],'model':_0x1c5d73||void 0x0,...this[_0x2406c1(0x244)](_0x1bb2a8)},'algorithm':_0x1bb2a8[_0x2406c1(0x262)]},_0x5862a5=this['buildAlgorithmConfig'](_0x1bb2a8);if(Object[_0x2406c1(0x252)](_0x5862a5)[_0x2406c1(0x23a)]&&(_0x5289ff[_0x2406c1(0x243)]=_0x5862a5),'queue'===_0x1bb2a8[_0x2406c1(0x1cb)]&&(_0x5289ff[_0x2406c1(0x1d7)]={'concurrency':this['num'](_0x1bb2a8[_0x2406c1(0x1ff)]),'pollInterval':this[_0x2406c1(0x1e7)](_0x1bb2a8[_0x2406c1(0x24d)])}),_0x1bb2a8[_0x2406c1(0x239)][_0x2406c1(0x25b)]()&&_0x2406c1(0x223)!==_0x1bb2a8[_0x2406c1(0x1dd)]&&(_0x5289ff['prepare']=_0x2406c1(0x26c)===_0x1bb2a8[_0x2406c1(0x1dd)]?_0x1bb2a8[_0x2406c1(0x1d6)][_0x2406c1(0x25b)]():_0x1bb2a8[_0x2406c1(0x1dd)]),_0x1bb2a8[_0x2406c1(0x239)][_0x2406c1(0x25b)]()&&'off'!==_0x1bb2a8[_0x2406c1(0x1bb)]){const _0x556b30=_0x2406c1(0x26c)===_0x1bb2a8[_0x2406c1(0x1bb)]?_0x1bb2a8[_0x2406c1(0x1fd)][_0x2406c1(0x25b)]():_0x1bb2a8['chunk_strategy'];_0x5289ff[_0x2406c1(0x217)]={'strategy':_0x556b30,'size':this[_0x2406c1(0x1e7)](_0x1bb2a8[_0x2406c1(0x24a)])??0x200,'overlap':'fixed'===_0x1bb2a8[_0x2406c1(0x1bb)]?this['num'](_0x1bb2a8[_0x2406c1(0x1c4)])??0x40:void 0x0,'storeText':_0x1bb2a8[_0x2406c1(0x1f6)]},void 0x0===_0x5289ff[_0x2406c1(0x217)][_0x2406c1(0x240)]&&delete _0x5289ff['chunk'][_0x2406c1(0x240)];}await this[_0x2406c1(0x1c5)](_0x2406c1(0x226)+encodeURIComponent(_0x299cf1)+_0x2406c1(0x1da)+encodeURIComponent(_0x214b19)+'/pipelines',_0x5289ff);},async 'submitEmbedder'(){const _0x37c3e0=_0x2524d7,_0x3bc832=this[_0x37c3e0(0x218)];if(!_0x3bc832[_0x37c3e0(0x254)]['trim']())return this[_0x37c3e0(0x258)]=_0x37c3e0(0x23b);const _0x26e2a2=this[_0x37c3e0(0x222)](_0x3bc832);if(!_0x26e2a2)return this[_0x37c3e0(0x258)]=_0x37c3e0(0x227);for(const _0xe54a5d of this['providerFields'](_0x3bc832[_0x37c3e0(0x1bf)]))if(_0xe54a5d['required']&&!_0x3bc832[_0x37c3e0(0x20d)][_0xe54a5d['key']]?.[_0x37c3e0(0x1c1)]()[_0x37c3e0(0x25b)]())return this['error']=_0xe54a5d[_0x37c3e0(0x245)]+_0x37c3e0(0x255);await this[_0x37c3e0(0x1f0)](_0x3bc832);const _0x3941e5={'name':_0x3bc832[_0x37c3e0(0x254)][_0x37c3e0(0x25b)](),'type':_0x3bc832['emb_type'],'model':_0x26e2a2||void 0x0,...this[_0x37c3e0(0x244)](_0x3bc832)};await this[_0x37c3e0(0x1c5)](_0x37c3e0(0x1f9),_0x3941e5);},async 'submitIndexer'(){const _0x1c4b17=_0x2524d7,_0x5ee57a=this[_0x1c4b17(0x20e)];if(!_0x5ee57a[_0x1c4b17(0x254)]['trim']())return this[_0x1c4b17(0x258)]='Name\x20is\x20required';if(!_0x5ee57a[_0x1c4b17(0x1dc)][_0x1c4b17(0x25b)]())return this[_0x1c4b17(0x258)]=_0x1c4b17(0x238);if(!_0x5ee57a[_0x1c4b17(0x236)][_0x1c4b17(0x25b)]())return this[_0x1c4b17(0x258)]=_0x1c4b17(0x1ee);const _0x3dd45c={'name':_0x5ee57a[_0x1c4b17(0x254)][_0x1c4b17(0x25b)](),'source_env':this[_0x1c4b17(0x225)],'source_type':_0x5ee57a[_0x1c4b17(0x1dc)]['trim'](),'embedder':_0x5ee57a[_0x1c4b17(0x236)][_0x1c4b17(0x25b)](),'storage_key':_0x5ee57a[_0x1c4b17(0x264)][_0x1c4b17(0x25b)]()||void 0x0,'field':_0x5ee57a[_0x1c4b17(0x239)][_0x1c4b17(0x25b)]()||void 0x0,'dims':this[_0x1c4b17(0x1e7)](_0x5ee57a['dims']),'mode':_0x5ee57a[_0x1c4b17(0x1cb)],'job_type':_0x5ee57a[_0x1c4b17(0x1ed)][_0x1c4b17(0x25b)]()||void 0x0};await this[_0x1c4b17(0x1c5)](_0x1c4b17(0x25f),_0x3dd45c);},async 'submitSearch'(){const _0x49976f=_0x2524d7,_0xc12934=this['srch'];if(!_0xc12934[_0x49976f(0x254)]['trim']())return this[_0x49976f(0x258)]=_0x49976f(0x23b);const _0x1db11a=(this[_0x49976f(0x1f3)]??_0xc12934['source_type']??'')[_0x49976f(0x25b)]();if(!_0x1db11a)return this['error']=_0x49976f(0x238);if(!_0xc12934['storage_key'][_0x49976f(0x25b)]())return this[_0x49976f(0x258)]='Storage\x20key\x20is\x20required';const _0x5844f9={'name':_0xc12934[_0x49976f(0x254)][_0x49976f(0x25b)](),'source_type':_0x1db11a,'source_env':this[_0x49976f(0x225)],'storage_key':_0xc12934[_0x49976f(0x264)][_0x49976f(0x25b)](),'dims':_0xc12934['dims']?Number(_0xc12934['dims']):void 0x0,'embedder':_0xc12934[_0x49976f(0x236)][_0x49976f(0x25b)]()||void 0x0,'algorithm':_0xc12934[_0x49976f(0x262)]},_0xa61829=this[_0x49976f(0x1e4)](_0xc12934);Object['keys'](_0xa61829)[_0x49976f(0x23a)]&&(_0x5844f9[_0x49976f(0x243)]=_0xa61829),await this[_0x49976f(0x1c5)](_0x49976f(0x24c),_0x5844f9);},async 'submitWorker'(){const _0x2bd81e=_0x2524d7,_0x4d82ce=this['wkr'];if(!_0x4d82ce[_0x2bd81e(0x254)]['trim']())return this[_0x2bd81e(0x258)]=_0x2bd81e(0x23b);if(!_0x4d82ce[_0x2bd81e(0x1ed)][_0x2bd81e(0x25b)]())return this[_0x2bd81e(0x258)]='Job\x20type\x20is\x20required';if(!_0x4d82ce['indexer'][_0x2bd81e(0x25b)]())return this[_0x2bd81e(0x258)]='Indexer\x20name\x20is\x20required';if(!_0x4d82ce[_0x2bd81e(0x236)][_0x2bd81e(0x25b)]())return this[_0x2bd81e(0x258)]='Embedder\x20name\x20is\x20required';const _0x1d17e3={'name':_0x4d82ce[_0x2bd81e(0x254)][_0x2bd81e(0x25b)](),'job_type':_0x4d82ce[_0x2bd81e(0x1ed)][_0x2bd81e(0x25b)](),'indexer':_0x4d82ce[_0x2bd81e(0x1d8)][_0x2bd81e(0x25b)](),'embedder':_0x4d82ce['embedder']['trim'](),'concurrency':this['num'](_0x4d82ce[_0x2bd81e(0x216)]),'pollInterval':this[_0x2bd81e(0x1e7)](_0x4d82ce[_0x2bd81e(0x1bd)]),'ttl':this[_0x2bd81e(0x1e7)](_0x4d82ce[_0x2bd81e(0x24e)])};await this['_post'](_0x2bd81e(0x1e9),_0x1d17e3);},async '_post'(_0x4652f1,_0x29b2c6){const _0x56fced=_0x2524d7;this[_0x56fced(0x24f)]=!0x0,this['error']=null,this[_0x56fced(0x1e0)]=null;try{const _0x155d81=await fetch(''+__ENV__['API']+_0x4652f1,{'method':_0x56fced(0x1d5),'headers':{'Content-Type':_0x56fced(0x1b9)},'body':JSON[_0x56fced(0x1b1)](_0x29b2c6)}),_0x35cd60=await _0x155d81[_0x56fced(0x221)]();if(!_0x155d81['ok']){const _0x1d0209=_0x35cd60?.[_0x56fced(0x258)]?.[_0x56fced(0x1ec)]||_0x35cd60?.[_0x56fced(0x1ec)]||'HTTP\x20'+_0x155d81[_0x56fced(0x209)];return void(this[_0x56fced(0x258)]=_0x1d0209[_0x56fced(0x269)](_0x56fced(0x1eb))?_0x56fced(0x1b4)+_0x29b2c6['name']+'\x22\x20already\x20exists.':_0x1d0209);}this['success']=_0x35cd60[_0x56fced(0x1db)],_0x3635a9[_0x56fced(0x22f)][_0x56fced(0x26a)]?.[_0x56fced(0x23f)]?.[_0x56fced(0x1e0)]?.(_0x56fced(0x1c8)),_0x3635a9['$dispatch']('created',_0x35cd60[_0x56fced(0x1db)]);}catch(_0x2fceff){this[_0x56fced(0x258)]=_0x2fceff?.[_0x56fced(0x1ec)]||String(_0x2fceff);}finally{this['busy']=!0x1;}},'handleSubmit'(){const _0x170baa=_0x2524d7;switch(this[_0x170baa(0x230)]){case'pipeline':return this['submitPipeline']();case'embedder':return this[_0x170baa(0x249)]();case _0x170baa(0x1d8):return this[_0x170baa(0x1e5)]();case _0x170baa(0x22d):return this[_0x170baa(0x1e3)]();case'worker':return this[_0x170baa(0x23d)]();}}}),async 'init'(_0x580459){const _0x57b607=_0x2524d7;await Promise['all']([this['loadTypes'](),this[_0x57b607(0x204)](),this[_0x57b607(0x21e)](),this['loadAlgorithms']()]);const _0x2bc962=_0x580459['$attr'][_0x57b607(0x1f8)];_0x2bc962&&[_0x57b607(0x251),'embedder',_0x57b607(0x1d8),_0x57b607(0x22d),_0x57b607(0x1d7)][_0x57b607(0x269)](_0x2bc962)&&(this[_0x57b607(0x230)]=_0x2bc962);const _0x4d2f12=_0x580459['$attr'][_0x57b607(0x242)];_0x4d2f12&&(this['pl'][_0x57b607(0x1dc)]=_0x4d2f12,this['pl'][_0x57b607(0x22c)]=this[_0x57b607(0x20a)](_0x4d2f12),this[_0x57b607(0x20e)]['source_type']=_0x4d2f12,this[_0x57b607(0x20e)][_0x57b607(0x22c)]=this[_0x57b607(0x20a)](_0x4d2f12),this[_0x57b607(0x261)][_0x57b607(0x1dc)]=_0x4d2f12,this[_0x57b607(0x212)](_0x4d2f12)),this[_0x57b607(0x231)]&&(this[_0x57b607(0x261)][_0x57b607(0x264)]=this[_0x57b607(0x231)]),this[_0x57b607(0x1f4)]&&(this['srch'][_0x57b607(0x236)]=this[_0x57b607(0x1f4)]);const _0x29958d=this[_0x57b607(0x1ea)][0x0]?.['key']??'';for(const _0x26511e of[this['pl'],this[_0x57b607(0x218)]]){_0x26511e[_0x57b607(0x1bf)]=_0x29958d,_0x26511e[_0x57b607(0x20d)]={};for(const _0x2b2eda of this['providerFields'](_0x29958d))void 0x0!==_0x2b2eda[_0x57b607(0x1f2)]&&(_0x26511e[_0x57b607(0x20d)][_0x2b2eda[_0x57b607(0x200)]]=_0x2b2eda[_0x57b607(0x1f2)]);this[_0x57b607(0x1cf)](_0x26511e);}_0x57b607(0x210)===_0x29958d&&this['refreshOllamaModels'](this['pl']);for(const _0x2276d3 of[this['pl'],this[_0x57b607(0x261)]])for(const _0x45e0a5 of this[_0x57b607(0x1cc)](_0x2276d3[_0x57b607(0x262)]))void 0x0!==_0x45e0a5['default']&&(_0x2276d3[_0x57b607(0x1ba)][_0x45e0a5[_0x57b607(0x200)]]=_0x45e0a5[_0x57b607(0x1f2)]);},'template':_0x2524d7(0x1d3),'style':_0x2524d7(0x206)};
@@ -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 _0x5ae01f=_0x5ba6;(function(_0x218c85,_0x67a654){const _0x2dd9bc=_0x5ba6,_0x1f5f67=_0x218c85();while(!![]){try{const _0x1b1088=parseInt(_0x2dd9bc(0x1c5))/0x1*(-parseInt(_0x2dd9bc(0x1b7))/0x2)+parseInt(_0x2dd9bc(0x1c7))/0x3+parseInt(_0x2dd9bc(0x1c3))/0x4+-parseInt(_0x2dd9bc(0x1c0))/0x5*(-parseInt(_0x2dd9bc(0x1ce))/0x6)+parseInt(_0x2dd9bc(0x1c1))/0x7*(parseInt(_0x2dd9bc(0x1ae))/0x8)+-parseInt(_0x2dd9bc(0x1d0))/0x9*(-parseInt(_0x2dd9bc(0x1b0))/0xa)+parseInt(_0x2dd9bc(0x1b8))/0xb*(-parseInt(_0x2dd9bc(0x1c9))/0xc);if(_0x1b1088===_0x67a654)break;else _0x1f5f67['push'](_0x1f5f67['shift']());}catch(_0x47c734){_0x1f5f67['push'](_0x1f5f67['shift']());}}}(_0x2195,0x3f74d));import _0x12b764 from'../../engines/parts/engine-panel-shell.ok.js';import{ENGINE_PANEL_SHARED_STYLE as _0x105abf}from'../../engines/engine-panel-shared-style.js';import{dispatchEnginePipelineSelection as _0x269c4e,maskSensitiveConfig as _0x14628d}from'../../engines/engine-ui-utils.js';const s=_0x105abf;function _0x2195(){const _0x20b69a=['5121XGSeJq','error','fmtConfig','eng','81976dEyhXl','API','7770OzoGZj','type','config','checkHealth','/health','$attr','isRunning','2znyCzT','185834HEabGR','filter','busy','message','entries','/embeddings/embedders/','model','engine','10UDDIQj','21DPcowl','$watch','1830732ikuHHk','includes','493231vGEwsU','latency','1216797zXlFbe','data','780iolRBi','name','dims','health','health\x20check\x20failed','1545366FNdGOF','\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'];_0x2195=function(){return _0x20b69a;};return _0x2195();}function _0x5ba6(_0xc4b18f,_0x4de371){_0xc4b18f=_0xc4b18f-0x1ad;const _0x2195b8=_0x2195();let _0x5ba636=_0x2195b8[_0xc4b18f];return _0x5ba636;}export default{'tag':'embed-embedder-panel','dependencies':[_0x12b764],'attr':{'name':{},'engine':{}},'context':_0x48ed67=>({'busy':!0x1,'health':null,'error':null,get 'eng'(){const _0x1e13a0=_0x5ba6;return _0x48ed67[_0x1e13a0(0x1b5)][_0x1e13a0(0x1bf)]??{};},get 'name'(){const _0x415130=_0x5ba6;return _0x48ed67[_0x415130(0x1b5)]['name'];},get 'config'(){const _0x4a214d=_0x5ba6;return this['eng'][_0x4a214d(0x1b2)]??{};},get 'providerType'(){const _0xd31223=_0x5ba6;return this[_0xd31223(0x1cc)]?.[_0xd31223(0x1b1)]||this[_0xd31223(0x1b2)][_0xd31223(0x1b1)]||'—';},get 'modelName'(){const _0x5d8063=_0x5ba6;return this[_0x5d8063(0x1cc)]?.[_0x5d8063(0x1be)]||this[_0x5d8063(0x1b2)][_0x5d8063(0x1be)]||'—';},get 'dimsValue'(){const _0x23358c=_0x5ba6;return this[_0x23358c(0x1cc)]?.[_0x23358c(0x1cb)]??this['config']['dimensions']??'—';},get 'latencyValue'(){const _0x168361=_0x5ba6;return null!=this[_0x168361(0x1cc)]?.[_0x168361(0x1c6)]?this[_0x168361(0x1cc)][_0x168361(0x1c6)]+'ms':'—';},get 'configEntries'(){const _0x34a366=_0x5ba6;return Object[_0x34a366(0x1bc)](this[_0x34a366(0x1d2)](this[_0x34a366(0x1b2)]))[_0x34a366(0x1b9)](([_0x55dad7])=>![_0x34a366(0x1b1),_0x34a366(0x1be)][_0x34a366(0x1c4)](_0x55dad7));},async 'checkHealth'(){const _0x54fe9c=_0x5ba6;this[_0x54fe9c(0x1ba)]=!0x0,this[_0x54fe9c(0x1d1)]=null;try{const _0xf89f7a=await fetch(__ENV__[_0x54fe9c(0x1af)]+_0x54fe9c(0x1bd)+encodeURIComponent(this['name'])+_0x54fe9c(0x1b4)),_0x1c531e=await _0xf89f7a['json']();if(!_0xf89f7a['ok'])throw new Error(_0x1c531e?.[_0x54fe9c(0x1d1)]?.[_0x54fe9c(0x1bb)]||_0x54fe9c(0x1cd));this[_0x54fe9c(0x1cc)]=_0x1c531e[_0x54fe9c(0x1c8)];}catch(_0x22ecf9){this[_0x54fe9c(0x1d1)]=_0x22ecf9?.[_0x54fe9c(0x1bb)]||String(_0x22ecf9),this[_0x54fe9c(0x1cc)]=null;}finally{this[_0x54fe9c(0x1ba)]=!0x1;}},'fmtConfig':_0x14628d,'viewPipeline'(){_0x269c4e(_0x48ed67,this['eng']);},async 'reloadPanel'(){const _0x4f72af=_0x5ba6;this[_0x4f72af(0x1cc)]=null,this[_0x4f72af(0x1d1)]=null,this['eng'][_0x4f72af(0x1b6)]&&await this[_0x4f72af(0x1b3)]();}}),async 'init'(_0x3f0f3d){const _0x4eb6d9=_0x5ba6;_0x3f0f3d[_0x4eb6d9(0x1c2)](()=>_0x3f0f3d['$attr'][_0x4eb6d9(0x1ca)],async()=>{const _0xa4db3c=_0x4eb6d9;this['health']=null,this[_0xa4db3c(0x1d1)]=null,this[_0xa4db3c(0x1ad)][_0xa4db3c(0x1b6)]&&await this['checkHealth']();}),this[_0x4eb6d9(0x1ad)][_0x4eb6d9(0x1b6)]&&await this[_0x4eb6d9(0x1b3)]();},'template':_0x5ae01f(0x1cf),'style':s};
@@ -1 +1 @@
1
- function _0x4fe0(_0x15295f,_0x1dd41b){_0x15295f=_0x15295f-0x10b;var _0x4ddbe5=_0x4ddb();var _0x4fe09d=_0x4ddbe5[_0x15295f];return _0x4fe09d;}(function(_0x4168bc,_0x5710e9){var _0xfce2f5=_0x4fe0,_0x1b2b16=_0x4168bc();while(!![]){try{var _0x2bc089=-parseInt(_0xfce2f5(0x10e))/0x1*(-parseInt(_0xfce2f5(0x110))/0x2)+parseInt(_0xfce2f5(0x10f))/0x3+parseInt(_0xfce2f5(0x112))/0x4*(parseInt(_0xfce2f5(0x115))/0x5)+-parseInt(_0xfce2f5(0x10b))/0x6+parseInt(_0xfce2f5(0x113))/0x7+-parseInt(_0xfce2f5(0x111))/0x8*(-parseInt(_0xfce2f5(0x10c))/0x9)+parseInt(_0xfce2f5(0x10d))/0xa*(-parseInt(_0xfce2f5(0x114))/0xb);if(_0x2bc089===_0x5710e9)break;else _0x1b2b16['push'](_0x1b2b16['shift']());}catch(_0xc82d02){_0x1b2b16['push'](_0x1b2b16['shift']());}}}(_0x4ddb,0xce517));function _0x4ddb(){var _0x279dee=['2081094vVRjJI','153SJuuvY','6840cvKoYa','615qOOIWA','574725ZGzDLr','3862RdOXce','390408dxvTCN','4WlzIMf','11557686hiktfH','51755IBDnxD','2751465WxVgLC'];_0x4ddb=function(){return _0x279dee;};return _0x4ddb();}import _0x514d1f from'../../engines/parts/engine-declaration-editor.ok.js';export default{..._0x514d1f,'tag':'embed-engine-declaration-editor'};
1
+ var _0x220fa0=_0x4a6a;function _0x572b(){var _0x1d7b39=['401417cOCiyb','721NzzkjO','embed-engine-declaration-editor','9OfivtO','55079695xECPUy','765395DgjVbI','2457970YICqsy','6nVnLpi','2157231Gowbdz','118840qpjlFI','4168020XglyCC','4GhGoly'];_0x572b=function(){return _0x1d7b39;};return _0x572b();}function _0x4a6a(_0x2cadcf,_0x56c1fe){_0x2cadcf=_0x2cadcf-0xb4;var _0x572b8f=_0x572b();var _0x4a6a0c=_0x572b8f[_0x2cadcf];return _0x4a6a0c;}(function(_0x54bb65,_0x310393){var _0x5761c6=_0x4a6a,_0x377168=_0x54bb65();while(!![]){try{var _0x23e7bc=parseInt(_0x5761c6(0xbc))/0x1*(-parseInt(_0x5761c6(0xb7))/0x2)+-parseInt(_0x5761c6(0xb8))/0x3*(parseInt(_0x5761c6(0xbb))/0x4)+-parseInt(_0x5761c6(0xb5))/0x5+-parseInt(_0x5761c6(0xba))/0x6+-parseInt(_0x5761c6(0xbd))/0x7*(parseInt(_0x5761c6(0xb9))/0x8)+parseInt(_0x5761c6(0xbf))/0x9*(parseInt(_0x5761c6(0xb6))/0xa)+parseInt(_0x5761c6(0xb4))/0xb;if(_0x23e7bc===_0x310393)break;else _0x377168['push'](_0x377168['shift']());}catch(_0x5c589b){_0x377168['push'](_0x377168['shift']());}}}(_0x572b,0xe865c));import _0x53ba5f from'../../engines/parts/engine-declaration-editor.ok.js';export default{..._0x53ba5f,'tag':_0x220fa0(0xbe)};