@kedem/okdb 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/bin/okdb.js +1 -1
  2. package/keys/public.pem +3 -0
  3. package/okdb.js +1 -1
  4. package/package.json +2 -2
  5. package/public/admin-app.js +1 -1
  6. package/public/components/admin-route-host.ok.js +1 -1
  7. package/public/components/env-picker.ok.js +1 -1
  8. package/public/components/field-path-input.ok.js +1 -1
  9. package/public/components/geo-map.ok.js +1 -1
  10. package/public/components/ok-cron-input.ok.js +1 -1
  11. package/public/components/ok-dropzone.ok.js +1 -1
  12. package/public/components/ok-js-input.ok.js +1 -1
  13. package/public/components/ok-json-input.ok.js +1 -1
  14. package/public/components/ok-text-monaco-input.ok.js +1 -1
  15. package/public/components/theme-toggle.ok.js +1 -1
  16. package/public/login-app.js +1 -1
  17. package/public/modules/ok.js +1 -1
  18. package/public/sections/api/parts/api-endpoint.ok.js +1 -1
  19. package/public/sections/auth/modals/create-token-modal.ok.js +1 -1
  20. package/public/sections/auth/modals/edit-token-modal.ok.js +1 -1
  21. package/public/sections/auth/modals/perm-info-popover.ok.js +1 -1
  22. package/public/sections/auth/parts/token-detail.ok.js +1 -1
  23. package/public/sections/auth/parts/token-list.ok.js +1 -1
  24. package/public/sections/db/modals/add-item-modal.ok.js +1 -1
  25. package/public/sections/db/modals/create-env-modal.ok.js +1 -1
  26. package/public/sections/db/modals/create-fts-modal.ok.js +1 -1
  27. package/public/sections/db/modals/create-index-modal.ok.js +1 -1
  28. package/public/sections/db/modals/create-pipeline-modal.ok.js +1 -1
  29. package/public/sections/db/modals/demo-env-modal.ok.js +1 -1
  30. package/public/sections/db/modals/remove-env-modal.ok.js +1 -1
  31. package/public/sections/db/modals/schema-edit-modal.ok.js +1 -1
  32. package/public/sections/db/parts/db-overview.ok.js +1 -1
  33. package/public/sections/db/parts/db-pipelines-panel.ok.js +1 -1
  34. package/public/sections/db/parts/edit-row.ok.js +1 -1
  35. package/public/sections/db/parts/tm-timeline.ok.js +1 -1
  36. package/public/sections/db/parts/type-changelog.ok.js +1 -1
  37. package/public/sections/db/parts/type-list.ok.js +1 -1
  38. package/public/sections/db/parts/type-pipelines-tab.ok.js +1 -1
  39. package/public/sections/db/parts/type-schema-tab.ok.js +1 -1
  40. package/public/sections/db/parts/type-viewer.ok.js +1 -1
  41. package/public/sections/db/parts/type-violations-tab.ok.js +1 -1
  42. package/public/sections/embeddings/modals/register-model-modal.ok.js +1 -1
  43. package/public/sections/embeddings/parts/embed-create-panel.ok.js +1 -1
  44. package/public/sections/embeddings/parts/embed-embedder-panel.ok.js +1 -1
  45. package/public/sections/embeddings/parts/embed-engine-declaration-editor.ok.js +1 -1
  46. package/public/sections/embeddings/parts/embed-engine-list.ok.js +1 -1
  47. package/public/sections/embeddings/parts/embed-indexer-panel.ok.js +1 -1
  48. package/public/sections/embeddings/parts/embed-lifecycle-bar.ok.js +1 -1
  49. package/public/sections/embeddings/parts/embed-model-catalog.ok.js +1 -1
  50. package/public/sections/embeddings/parts/embed-overview.ok.js +1 -1
  51. package/public/sections/embeddings/parts/embed-search-panel.ok.js +1 -1
  52. package/public/sections/embeddings/parts/embed-worker-panel.ok.js +1 -1
  53. package/public/sections/embeddings/parts/embeddings-engine-panel.ok.js +1 -1
  54. package/public/sections/embeddings/parts/engines-overview.ok.js +1 -1
  55. package/public/sections/embeddings/parts/pipeline-create-panel.ok.js +1 -1
  56. package/public/sections/engines/engine-panel-shared-style.js +1 -1
  57. package/public/sections/engines/engine-ui-utils.js +1 -1
  58. package/public/sections/engines/modals/engine-modal.ok.js +1 -1
  59. package/public/sections/engines/parts/engine-declaration-editor.ok.js +1 -1
  60. package/public/sections/engines/parts/engine-lifecycle-actions.ok.js +1 -1
  61. package/public/sections/engines/parts/engine-panel-shell.ok.js +1 -1
  62. package/public/sections/engines/parts/engine-resource-card.ok.js +1 -1
  63. package/public/sections/engines/parts/engine-row-item.ok.js +1 -1
  64. package/public/sections/engines/parts/generic-engine-panel.ok.js +1 -1
  65. package/public/sections/files/parts/files-blob-status.ok.js +1 -1
  66. package/public/sections/files/parts/files-collection-list.ok.js +1 -1
  67. package/public/sections/files/parts/files-collection-panel.ok.js +1 -1
  68. package/public/sections/files/parts/files-file-list.ok.js +1 -1
  69. package/public/sections/files/parts/files-overview.ok.js +1 -1
  70. package/public/sections/files/parts/files-path-browser.ok.js +1 -1
  71. package/public/sections/files/parts/files-upload-panel.ok.js +1 -1
  72. package/public/sections/functions/modals/function-modal.ok.js +1 -1
  73. package/public/sections/functions/parts/function-detail.ok.js +1 -1
  74. package/public/sections/functions/parts/function-logs.ok.js +1 -1
  75. package/public/sections/functions/parts/function-runner.ok.js +1 -1
  76. package/public/sections/functions/parts/functions-list.ok.js +1 -1
  77. package/public/sections/license/parts/license-panel.ok.js +1 -1
  78. package/public/sections/queue/modals/create-bucket-modal.ok.js +1 -1
  79. package/public/sections/queue/modals/edit-bucket-modal.ok.js +1 -1
  80. package/public/sections/queue/modals/edit-job-modal.ok.js +1 -1
  81. package/public/sections/queue/modals/enqueue-job-modal.ok.js +1 -1
  82. package/public/sections/queue/modals/job-type-modal.ok.js +1 -1
  83. package/public/sections/queue/parts/ok-job-form.ok.js +1 -1
  84. package/public/sections/queue/parts/queue-buckets.ok.js +1 -1
  85. package/public/sections/queue/parts/queue-job-types.ok.js +1 -1
  86. package/public/sections/queue/parts/queue-jobs.ok.js +1 -1
  87. package/public/sections/queue/parts/queue-types.ok.js +1 -1
  88. package/public/sections/queue/parts/queue-workers.ok.js +1 -1
  89. package/public/sections/sync/parts/sync-node-detail.ok.js +1 -1
  90. package/public/sections/sync/parts/sync-retention.ok.js +1 -1
  91. package/public/sections/sync/parts/sync-topology.ok.js +1 -1
  92. package/public/sections/system/modals/data-ops-modal.ok.js +1 -1
  93. package/public/sections/system/parts/system-api-panel.ok.js +1 -1
  94. package/public/sections/system/parts/system-auth-panel.ok.js +1 -1
  95. package/public/sections/system/parts/system-log-history.ok.js +1 -1
  96. package/public/sections/system/parts/system-log.ok.js +1 -1
  97. package/public/sections/system/parts/system-status.ok.js +1 -1
  98. package/public/sections/system/parts/system-sync-panel.ok.js +1 -1
  99. package/public/sections/views/modals/create-view-modal.ok.js +1 -1
  100. package/public/sections/views/parts/view-detail.ok.js +1 -1
  101. package/public/sections/views/parts/views-list.ok.js +1 -1
  102. package/public/sections/views/parts/views-overview.ok.js +1 -1
  103. package/public/setup-app.js +1 -1
  104. package/public/stores/auth-store.js +1 -1
  105. package/public/stores/events-store.js +1 -1
  106. package/public/stores/functions-store.js +1 -1
  107. package/public/stores/okdb-store.js +1 -1
  108. package/public/stores/theme-store.js +1 -1
  109. package/public/util/permissions.js +1 -1
  110. package/public/util/sift-schema.js +1 -1
  111. package/public/vendor/okjs/ok.esm.min.js +1 -2
  112. package/public/vendor/okjs/toolkit/behavior/async.ok.js +1 -1
  113. package/public/vendor/okjs/toolkit/components/ok-chart.ok.js +1 -1
  114. package/public/vendor/okjs/toolkit/components/ok-doc-viewer.ok.js +1 -1
  115. package/public/vendor/okjs/toolkit/components/ok-marked.ok.js +1 -1
  116. package/public/vendor/okjs/toolkit/components/ok-monaco.ok.js +1 -1
  117. package/public/vendor/okjs/toolkit/core/ok-layer-service.ok.js +1 -1
  118. package/public/vendor/okjs/toolkit/core/ok-layer.ok.js +1 -1
  119. package/public/vendor/okjs/toolkit/core/ok-overlay.ok.js +1 -1
  120. package/public/vendor/okjs/toolkit/core/ok-sandbox.ok.js +1 -1
  121. package/public/vendor/okjs/toolkit/core/transition.ok.js +1 -1
  122. package/public/vendor/okjs/toolkit/core/virtualized.ok.js +1 -1
  123. package/public/vendor/okjs/toolkit/devtools/ok-console-service.ok.js +1 -1
  124. package/public/vendor/okjs/toolkit/devtools/ok-console.ok.js +1 -1
  125. package/public/vendor/okjs/toolkit/devtools/ok-fps-monitor-service.ok.js +1 -1
  126. package/public/vendor/okjs/toolkit/devtools/ok-fps-monitor.ok.js +1 -1
  127. package/public/vendor/okjs/toolkit/devtools/ok-inspector-service.ok.js +1 -1
  128. package/public/vendor/okjs/toolkit/devtools/ok-inspector.ok.js +1 -1
  129. package/public/vendor/okjs/toolkit/devtools/ok-js-tree.ok.js +1 -1
  130. package/public/vendor/okjs/toolkit/devtools/ok-timeline-service.ok.js +1 -1
  131. package/public/vendor/okjs/toolkit/devtools/ok-timeline.ok.js +1 -1
  132. package/public/vendor/okjs/toolkit/docs/doc-viewer.ok.js +1 -1
  133. package/public/vendor/okjs/toolkit/editor/ok-live-component.ok.js +1 -1
  134. package/public/vendor/okjs/toolkit/editor/ok-live-example.ok.js +1 -1
  135. package/public/vendor/okjs/toolkit/editor/ok-live-shell.ok.js +1 -1
  136. package/public/vendor/okjs/toolkit/elements/ok-dropdown.ok.js +1 -1
  137. package/public/vendor/okjs/toolkit/elements/ok-icon.ok.js +1 -1
  138. package/public/vendor/okjs/toolkit/elements/ok-select.ok.js +1 -1
  139. package/public/vendor/okjs/toolkit/elements/ok-table.ok.js +1 -1
  140. package/public/vendor/okjs/toolkit/errors/ok-crash-boundary.ok.js +1 -1
  141. package/public/vendor/okjs/toolkit/errors/ok-crash-info.ok.js +1 -1
  142. package/public/vendor/okjs/toolkit/i18n/i18n-editor-examples.ok.js +1 -1
  143. package/public/vendor/okjs/toolkit/i18n/i18n-editor.ok.js +1 -1
  144. package/public/vendor/okjs/toolkit/i18n/i18n-key-editor-tips.ok.js +1 -1
  145. package/public/vendor/okjs/toolkit/i18n/i18n-key-editor.ok.js +1 -1
  146. package/public/vendor/okjs/toolkit/i18n/i18n-service.ok.js +1 -1
  147. package/public/vendor/okjs/toolkit/i18n/ok-i18n.js +1 -1
  148. package/public/vendor/okjs/toolkit/interaction/ok-contextmenu.ok.js +1 -1
  149. package/public/vendor/okjs/toolkit/interaction/ok-dismiss-service.ok.js +1 -1
  150. package/public/vendor/okjs/toolkit/interaction/ok-draggable.ok.js +1 -1
  151. package/public/vendor/okjs/toolkit/interaction/ok-flyover-panel.ok.js +1 -1
  152. package/public/vendor/okjs/toolkit/interaction/ok-flyover.ok.js +1 -1
  153. package/public/vendor/okjs/toolkit/interaction/ok-highlight-service.ok.js +1 -1
  154. package/public/vendor/okjs/toolkit/interaction/ok-highlight.ok.js +1 -1
  155. package/public/vendor/okjs/toolkit/interaction/ok-hotkeys-service.ok.js +1 -1
  156. package/public/vendor/okjs/toolkit/interaction/ok-picker-service.ok.js +1 -1
  157. package/public/vendor/okjs/toolkit/interaction/ok-popout-service.ok.js +1 -1
  158. package/public/vendor/okjs/toolkit/interaction/ok-popout.ok.js +1 -1
  159. package/public/vendor/okjs/toolkit/interaction/ok-portal-service.ok.js +1 -1
  160. package/public/vendor/okjs/toolkit/interaction/ok-submenu.ok.js +1 -1
  161. package/public/vendor/okjs/toolkit/layout/ok-resizer.ok.js +1 -1
  162. package/public/vendor/okjs/toolkit/manifest.js +1 -1
  163. package/public/vendor/okjs/toolkit/modals/ok-modal-service.ok.js +1 -1
  164. package/public/vendor/okjs/toolkit/modals/ok-modal.ok.js +1 -1
  165. package/public/vendor/okjs/toolkit/modals/ok-toast-service.ok.js +1 -1
  166. package/public/vendor/okjs/toolkit/modals/ok-window.ok.js +1 -1
  167. package/public/vendor/okjs/toolkit/navigation/hash-router.ok.js +1 -1
  168. package/public/vendor/okjs/toolkit/navigation/history-router.ok.js +1 -1
  169. package/public/vendor/okjs/toolkit/navigation/router.ok.js +1 -1
  170. package/public/vendor/okjs/toolkit/sync/reactive-sync-service.ok.js +1 -1
  171. package/public/vendor/okjs/toolkit/sync/reactive-sync.js +1 -1
  172. package/public/vendor/okjs/toolkit/theming/blocks/ok-design-button.css.js +1 -1
  173. package/public/vendor/okjs/toolkit/theming/blocks/ok-design-input.css.js +1 -1
  174. package/public/vendor/okjs/toolkit/theming/ok-design-style.js +1 -1
  175. package/public/vendor/okjs/toolkit/theming/ok-design-vars.js +1 -1
  176. package/public/vendor/okjs/toolkit/theming/ok-design.ok.js +1 -1
  177. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-input.ok.js +1 -1
  178. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-service.ok.js +1 -1
  179. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-style.js +1 -1
  180. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-utils.js +1 -1
  181. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-variable.ok.js +1 -1
  182. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-vm.js +1 -1
  183. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor.ok.js +1 -1
  184. package/public/vendor/okjs/toolkit/theming/ok-theme.ok.js +1 -1
  185. package/public/view-models/type-query-vm.js +1 -1
  186. package/okdb-data/default/data.mdb +0 -0
  187. package/okdb-data/default/lock.mdb +0 -0
  188. package/okdb-data/~log/data.mdb +0 -0
  189. package/okdb-data/~log/lock.mdb +0 -0
  190. package/okdb-data/~system/data.mdb +0 -0
  191. package/okdb-data/~system/lock.mdb +0 -0
  192. package/public/images/logo.png +0 -0
  193. package/public/images/logo.svg +0 -333
@@ -1 +1 @@
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
+ const _0x3d453b=_0x18cc;(function(_0x3f4803,_0x555ea6){const _0x2ecb39=_0x18cc,_0x57e7cb=_0x3f4803();while(!![]){try{const _0x2b2f89=parseInt(_0x2ecb39(0x22f))/0x1+parseInt(_0x2ecb39(0x26a))/0x2*(-parseInt(_0x2ecb39(0x205))/0x3)+-parseInt(_0x2ecb39(0x269))/0x4+parseInt(_0x2ecb39(0x1dc))/0x5*(-parseInt(_0x2ecb39(0x270))/0x6)+-parseInt(_0x2ecb39(0x1d5))/0x7*(parseInt(_0x2ecb39(0x245))/0x8)+parseInt(_0x2ecb39(0x216))/0x9+parseInt(_0x2ecb39(0x1c0))/0xa;if(_0x2b2f89===_0x555ea6)break;else _0x57e7cb['push'](_0x57e7cb['shift']());}catch(_0x2234ff){_0x57e7cb['push'](_0x57e7cb['shift']());}}}(_0x4089,0x2d577));import _0x50e09a from'../../../components/field-path-input.ok.js';function _0x18cc(_0x1c0202,_0x20e6d1){_0x1c0202=_0x1c0202-0x1be;const _0x40896d=_0x4089();let _0x18cc77=_0x40896d[_0x1c0202];return _0x18cc77;}import _0x5e0b9b from'./embed-model-catalog.ok.js';import _0x39e455 from'../modals/register-model-modal.ok.js';function _0x4089(){const _0x418950=['2753190xzzCLZ','lockembedder','job_type','\x20dims','Created!','typeMap','submitWorker','filter','split','submitPipeline','result','providers','all','Embedder\x20name\x20is\x20required','emb_custom_model','maybeSaveToCatalog','description','No\x20models\x20found\x20on\x20Ollama\x20server','Source\x20type\x20is\x20required','loadProviders','worker','API','busy','note','_post','244662xFgdxq','clearModelSelection','toString','fixed','modal','success','<register-model-modal\x20:modal=\x22modal\x22\x20:initial-provider=\x22initialProvider\x22\x20:on-done=\x22onDone\x22\x20/>','model','ollama','lockedStorageKey','flat','storage_key','types','30000','__custom__','includes','loading','stringify','off','geo','algorithmMap','Name\x20is\x20required','3056fqqDvW','some','baseUrl','/embeddings/providers','live','modelsForProvider','field','toast','dims','chunk','chunk_store_text','deepTypeMap','idx','Job\x20type\x20is\x20required','/embeddings/search','field_mode','refreshOllamaModels','message','source_type','emb_config','loadTypes','locktype','prepare_custom','algorithm_config','embedder','text','size','label','/env/','default','1000','get','concurrency','alg_config','type','\x20—\x20?\x20dims','1172196atbYKf','12gCUluG','?url=','w_concurrency','isInteger','chunk_strategy','Register\x20Model','42edyDpp','emb_model_sel','/embeddings/algorithms','number','liveOllamaError','/embeddings/embedders','modelCatalog','algorithms','trim','isArray','toFixed','ENGINE_ALREADY_EXISTS','refreshCatalogState','loadAlgorithms','Model\x20Catalog','submitIndexer','prepare','liveOllamaModels','paths','json','6433980vQLTVo','providerMap','buildProviderConfig','loadDeepForType','find','created','/embeddings/workers','buildAlgorithmConfig','\x0a\x20\x20.card\x20{\x20background:var(--okdb-app-surface);\x20border-radius:12px;\x20padding:16px;\x20box-shadow:0\x200\x205px\x20#ffffff1a;\x20}\x0a\x20\x20.card-title\x20{\x20font-weight:600;\x20margin-bottom:12px;\x20font-size:14px;\x20}\x0a\x20\x20.form-grid\x20{\x20display:grid;\x20grid-template-columns:140px\x201fr;\x20gap:8px\x2012px;\x20align-items:center;\x20font-size:13px;\x20}\x0a\x20\x20.form-label\x20{\x20opacity:.7;\x20text-align:right;\x20}\x0a\x20\x20.form-input\x20{\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:6px;\x20padding:6px\x208px;\x20color:inherit;\x20font-size:13px;\x20width:100%;\x20box-sizing:border-box;\x20}\x0a\x20\x20.form-input:focus\x20{\x20outline:none;\x20border-color:var(--okdb-accent);\x20}\x0a\x20\x20.form-select\x20{\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:6px;\x20padding:6px\x208px;\x20color:inherit;\x20font-size:13px;\x20width:100%;\x20box-sizing:border-box;\x20}\x0a\x20\x20.tab-bar\x20{\x20display:flex;\x20gap:2px;\x20border-bottom:1px\x20solid\x20var(--okdb-app-border);\x20margin-bottom:16px;\x20}\x0a\x20\x20.tab\x20{\x20padding:7px\x2014px;\x20border-radius:6px\x206px\x200\x200;\x20cursor:pointer;\x20font-size:13px;\x20border:1px\x20solid\x20transparent;\x20border-bottom:none;\x20background:transparent;\x20}\x0a\x20\x20.tab:hover\x20{\x20background:var(--okdb-app-surface);\x20}\x0a\x20\x20.tab--on\x20{\x20background:var(--okdb-app-surface);\x20border-color:var(--okdb-app-border);\x20color:var(--okdb-accent);\x20}\x0a\x20\x20.section-title\x20{\x20font-size:11px;\x20text-transform:uppercase;\x20opacity:.45;\x20letter-spacing:.06em;\x20margin:14px\x200\x206px;\x20grid-column:1/-1;\x20}\x0a\x20\x20.hint\x20{\x20font-size:11px;\x20opacity:.5;\x20font-style:italic;\x20}\x0a\x20\x20.error-box\x20{\x20color:var(--okdb-danger);\x20font-size:13px;\x20padding:8px\x2012px;\x20border:1px\x20solid\x20var(--okdb-danger);\x20border-radius:6px;\x20}\x0a\x20\x20.mode-pills\x20{\x20display:flex;\x20gap:3px;\x20}\x0a\x20\x20.mode-pill\x20{\x20padding:2px\x208px;\x20border-radius:999px;\x20font-size:11px;\x20border:1px\x20solid\x20var(--okdb-app-border);\x20background:transparent;\x20cursor:pointer;\x20color:inherit;\x20opacity:.7;\x20}\x0a\x20\x20.mode-pill:hover\x20{\x20opacity:1;\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2027%,\x20transparent);\x20}\x0a\x20\x20.mode-pill--on\x20{\x20border-color:var(--okdb-accent);\x20color:var(--okdb-accent);\x20opacity:1;\x20background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x207%,\x20transparent);\x20}\x0a\x20\x20.field-hint\x20{\x20font-size:11px;\x20opacity:.45;\x20font-style:italic;\x20margin-top:2px;\x20grid-column:2;\x20}\x0a\x20\x20.dims-badge\x20{\x20display:inline-flex;\x20align-items:center;\x20gap:6px;\x20font-size:12px;\x20color:var(--okdb-accent);\x20background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x207%,\x20transparent);\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-accent)\x2027%,\x20transparent);\x20border-radius:6px;\x20padding:3px\x2010px;\x20}\x0a\x20\x20.dims-badge-muted\x20{\x20color:#888;\x20border-color:var(--okdb-app-border);\x20background:transparent;\x20}\x0a\x20\x20.custom-model-box\x20{\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:8px;\x20padding:10px\x2012px;\x20margin-top:4px;\x20display:flex;\x20flex-direction:column;\x20gap:8px;\x20}\x0a\x20\x20.custom-model-box\x20.row\x20{\x20display:flex;\x20gap:8px;\x20align-items:center;\x20}\x0a\x20\x20.custom-model-box\x20label\x20{\x20font-size:12px;\x20opacity:.6;\x20white-space:nowrap;\x20}\x0a\x20\x20.save-to-catalog\x20{\x20display:flex;\x20align-items:center;\x20gap:6px;\x20font-size:12px;\x20opacity:.7;\x20cursor:pointer;\x20}\x0a\x20\x20.save-to-catalog\x20input\x20{\x20cursor:pointer;\x20}\x0a','selectedEnv','emb_type','lockedEmbedder','<embed-model-catalog\x20:initialprovider=\x22initialProvider\x22\x20:compact=\x22true\x22\x20:onchanged=\x22onChanged\x22\x20/>','POST','map','open','chunk_custom','overlap','mode','num','submitEmbedder','7EdWQvz','Model\x20is\x20required','initialtab','length','liveOllamaLoading','Dims\x20is\x20required\x20for\x20custom\x20models','embed-create-panel','256160QMBHgd','emb','url','ttl','algorithmFields','keys','\x22\x20already\x20exists.','emb_model','srch','512','search','pipeline','/embeddings/models','/embeddings/probe-ollama-models','\x20—\x20','key','reconcileModelSelection','An\x20engine\x20named\x20\x22','sort','w_poll_interval','emb_dims_auto','fields','custom','submitSearch','/deep-properties','/types','$ok','string','defaultFieldMode','indexer','\x20is\x20required','chunk_overlap','none','required','effectiveModel','$dispatch','$attr','error','/type/','algorithm','tab','178098IUFQCf','effectiveDims','shared','lockstoragekey','lockedEnv','application/json','providerFields','findModelEntry','chunk_size','loadModelCatalog','pollInterval','emb_save_catalog','emb_custom','data','name','lockedType','emb_custom_dims'];_0x4089=function(){return _0x418950;};return _0x4089();}export default{'tag':_0x3d453b(0x1db),'attr':{'locktype':{},'lockenv':{},'initialtab':{},'lockstoragekey':{},'lockembedder':{}},'dependencies':[_0x50e09a,_0x39e455,_0x5e0b9b],'context':_0x1f25d8=>({'tab':_0x3d453b(0x1e7),'busy':!0x1,'error':null,'success':null,get 'lockedType'(){const _0x336f18=_0x3d453b;return _0x1f25d8[_0x336f18(0x200)][_0x336f18(0x25a)]||null;},get 'lockedEnv'(){const _0x465b3e=_0x3d453b;return _0x1f25d8[_0x465b3e(0x200)]['lockenv']||_0x1f25d8[_0x465b3e(0x1f6)]?.['stores']?.['okdb']?.[_0x465b3e(0x1c9)]||'default';},get 'lockedStorageKey'(){const _0x329288=_0x3d453b;return _0x1f25d8['$attr'][_0x329288(0x208)]||null;},get 'lockedEmbedder'(){const _0x42eb9b=_0x3d453b;return _0x1f25d8['$attr'][_0x42eb9b(0x217)]||null;},'types':[],'typeMap':{},'deepTypeMap':{},'modelCatalog':{},'liveOllamaModels':null,'liveOllamaLoading':!0x1,'liveOllamaError':null,'providers':[],'providerMap':{},'algorithms':[],'algorithmMap':{},async 'loadTypes'(){const _0x988433=_0x3d453b;try{const _0x154c1a=this[_0x988433(0x209)],_0x295ead=await fetch(__ENV__[_0x988433(0x22b)]+_0x988433(0x261)+encodeURIComponent(_0x154c1a)+_0x988433(0x1f5)),_0x29984a=(await _0x295ead[_0x988433(0x1bf)]())['data']||[];if(this[_0x988433(0x23b)]=Array[_0x988433(0x279)](_0x29984a)?_0x29984a['map'](_0x574d39=>_0x574d39[_0x988433(0x267)]??_0x574d39[_0x988433(0x213)]??_0x574d39)['filter'](Boolean)['sort']():Object[_0x988433(0x1e1)](_0x29984a)[_0x988433(0x1ee)](),this[_0x988433(0x21b)]={},Array[_0x988433(0x279)](_0x29984a)){for(const _0x2d365b of _0x29984a)_0x2d365b[_0x988433(0x267)]&&(this[_0x988433(0x21b)][_0x2d365b[_0x988433(0x267)]]=_0x2d365b['fields']||{});}else{for(const [_0x5ee1a9,_0x7246]of Object['entries'](_0x29984a))this[_0x988433(0x21b)][_0x5ee1a9]=_0x7246['fields']||{};}}catch{this[_0x988433(0x23b)]=[],this[_0x988433(0x21b)]={};}},async 'loadModelCatalog'(){const _0x47a4be=_0x3d453b;try{const _0x10bbd9=await fetch(__ENV__['API']+_0x47a4be(0x1e8)),_0x2ef9e8=await _0x10bbd9[_0x47a4be(0x1bf)]();this[_0x47a4be(0x276)]=_0x2ef9e8[_0x47a4be(0x212)]??{};}catch{this[_0x47a4be(0x276)]={};}},async 'loadProviders'(){const _0x4e27e8=_0x3d453b;try{const _0x4d6ab2=await fetch(__ENV__[_0x4e27e8(0x22b)]+_0x4e27e8(0x248)),_0x1e81de=await _0x4d6ab2[_0x4e27e8(0x1bf)]();this[_0x4e27e8(0x221)]=_0x1e81de[_0x4e27e8(0x212)]??[],this[_0x4e27e8(0x1c1)]={};for(const _0x487ee3 of this['providers'])this[_0x4e27e8(0x1c1)][_0x487ee3['key']]=_0x487ee3;}catch{this[_0x4e27e8(0x221)]=[],this[_0x4e27e8(0x1c1)]={};}},async 'loadAlgorithms'(){const _0x4edb49=_0x3d453b;try{const _0x471ce6=await fetch(__ENV__[_0x4edb49(0x22b)]+_0x4edb49(0x272)),_0x5f5be5=await _0x471ce6[_0x4edb49(0x1bf)]();this[_0x4edb49(0x277)]=_0x5f5be5[_0x4edb49(0x212)]??[],this[_0x4edb49(0x243)]={};for(const _0x27f4e1 of this[_0x4edb49(0x277)])this['algorithmMap'][_0x27f4e1[_0x4edb49(0x1eb)]]=_0x27f4e1;}catch{this['algorithms']=[],this[_0x4edb49(0x243)]={};}},async 'loadDeepForType'(_0x21cf50){const _0x3ded77=_0x3d453b;if(_0x21cf50&&void 0x0===this[_0x3ded77(0x250)][_0x21cf50]){this[_0x3ded77(0x250)]={...this['deepTypeMap'],[_0x21cf50]:{'paths':{},'loading':!0x0}};try{const _0x1f5287=this[_0x3ded77(0x209)],_0x380083=await fetch(__ENV__[_0x3ded77(0x22b)]+_0x3ded77(0x261)+encodeURIComponent(_0x1f5287)+_0x3ded77(0x202)+encodeURIComponent(_0x21cf50)+_0x3ded77(0x1f4)),_0x430813=await _0x380083[_0x3ded77(0x1bf)]();this[_0x3ded77(0x250)]={...this[_0x3ded77(0x250)],[_0x21cf50]:{'paths':(_0x430813[_0x3ded77(0x212)]??_0x430813[_0x3ded77(0x220)])?.[_0x3ded77(0x1be)]??{},'loading':!0x1}};}catch{this['deepTypeMap']={...this[_0x3ded77(0x250)],[_0x21cf50]:{'paths':{},'loading':!0x1}};}}},async 'refreshOllamaModels'(_0x24ca74){const _0x4a6f84=_0x3d453b;this[_0x4a6f84(0x1d9)]=!0x0,this['liveOllamaError']=null;const _0x573800=_0x24ca74?.['emb_config']?.[_0x4a6f84(0x1de)]??_0x24ca74?.['emb_config']?.[_0x4a6f84(0x247)]??'',_0x258e8=_0x573800?_0x4a6f84(0x26b)+encodeURIComponent(_0x573800):'';try{const _0x19ee95=await fetch(__ENV__[_0x4a6f84(0x22b)]+_0x4a6f84(0x1e9)+_0x258e8),_0x312824=await _0x19ee95[_0x4a6f84(0x1bf)](),_0x512dd6=_0x312824[_0x4a6f84(0x212)]??_0x312824['result']??{};if(_0x4a6f84(0x201)!==_0x512dd6['source']&&_0x512dd6['models']?.[_0x4a6f84(0x1d8)]){const _0x49471f=new Map((this[_0x4a6f84(0x276)][_0x4a6f84(0x237)]??[])[_0x4a6f84(0x1ce)](_0x2ec7ee=>[_0x2ec7ee[_0x4a6f84(0x236)],_0x2ec7ee]));this[_0x4a6f84(0x281)]=_0x512dd6['models']['map'](_0x5bd2cc=>{const _0x587eb5=_0x4a6f84,_0x23eaaf=_0x5bd2cc['model']['split'](':')[0x0],_0x29068b=_0x49471f[_0x587eb5(0x264)](_0x5bd2cc[_0x587eb5(0x236)])??_0x49471f['get'](_0x23eaaf);return{'model':_0x5bd2cc[_0x587eb5(0x236)],'dims':_0x29068b?.[_0x587eb5(0x24d)]??null,'description':_0x5bd2cc['size']?(_0x5bd2cc[_0x587eb5(0x25f)]/0x3b9aca00)[_0x587eb5(0x27a)](0x1)+'\x20GB':null,'builtin':!0x1,'live':!0x0};}),this['liveOllamaError']=null;}else this[_0x4a6f84(0x281)]=[],this[_0x4a6f84(0x274)]=_0x512dd6[_0x4a6f84(0x201)]??_0x4a6f84(0x227);}catch(_0x16dbfd){this[_0x4a6f84(0x281)]=[],this['liveOllamaError']=_0x16dbfd[_0x4a6f84(0x256)];}finally{this['liveOllamaLoading']=!0x1;for(const _0x20072e of[this['pl'],this[_0x4a6f84(0x1dd)]])_0x4a6f84(0x237)===_0x20072e?.[_0x4a6f84(0x1ca)]&&this[_0x4a6f84(0x1ec)](_0x20072e);}},'modelLabel'(_0x580e57){const _0x1b55cb=_0x3d453b;let _0x5a6da1=_0x580e57[_0x1b55cb(0x249)]?'●\x20'+_0x580e57['model']:_0x580e57[_0x1b55cb(0x236)];return _0x580e57[_0x1b55cb(0x24d)]?_0x5a6da1+=_0x1b55cb(0x1ea)+_0x580e57[_0x1b55cb(0x24d)]+_0x1b55cb(0x219):_0x580e57[_0x1b55cb(0x226)]?_0x5a6da1+=_0x1b55cb(0x1ea)+_0x580e57[_0x1b55cb(0x226)]:_0x580e57[_0x1b55cb(0x249)]&&(_0x5a6da1+=_0x1b55cb(0x268)),_0x5a6da1;},'modelsForProvider'(_0x24e008){const _0x407d54=_0x3d453b;return _0x407d54(0x237)===_0x24e008&&Array[_0x407d54(0x279)](this[_0x407d54(0x281)])&&this[_0x407d54(0x281)][_0x407d54(0x1d8)]?this['liveOllamaModels']:this[_0x407d54(0x276)][_0x24e008]??[];},'findModelEntry'(_0x509d44,_0x26be19){const _0x902042=_0x3d453b;if(!_0x26be19||_0x902042(0x23d)===_0x26be19)return null;const _0xe1247c=this[_0x902042(0x24a)](_0x509d44),_0x52f821=_0xe1247c[_0x902042(0x1c4)](_0x2a3568=>_0x2a3568[_0x902042(0x236)]===_0x26be19);if(_0x52f821)return _0x52f821;const _0x41f5d7=String(_0x26be19)['split'](':')[0x0];return _0xe1247c[_0x902042(0x1c4)](_0x6a3b0e=>_0x6a3b0e['model']===_0x41f5d7||String(_0x6a3b0e['model']||'')[_0x902042(0x21e)](':')[0x0]===_0x41f5d7)??null;},'clearModelSelection'(_0x5ab81c){const _0x474760=_0x3d453b;_0x5ab81c[_0x474760(0x271)]='',_0x5ab81c[_0x474760(0x1e3)]='',_0x5ab81c[_0x474760(0x1f0)]=null,_0x5ab81c[_0x474760(0x211)]=!0x1;},'reconcileModelSelection'(_0x7c603){const _0x2608dd=_0x3d453b;if(!_0x7c603)return;if(_0x2608dd(0x23d)===_0x7c603['emb_model_sel'])return _0x7c603[_0x2608dd(0x211)]=!0x0,_0x7c603[_0x2608dd(0x1e3)]='',void(_0x7c603[_0x2608dd(0x1f0)]=null);if(!_0x7c603[_0x2608dd(0x271)])return void this['clearModelSelection'](_0x7c603);const _0x553f49=this['findModelEntry'](_0x7c603[_0x2608dd(0x1ca)],_0x7c603[_0x2608dd(0x271)]);_0x553f49?(_0x7c603[_0x2608dd(0x271)]=_0x553f49[_0x2608dd(0x236)],_0x7c603['emb_model']=_0x553f49[_0x2608dd(0x236)],_0x7c603[_0x2608dd(0x1f0)]=_0x553f49['dims']??null,_0x7c603['emb_custom']=!0x1):this[_0x2608dd(0x230)](_0x7c603);},'providerFields'(_0x3a39f1){const _0x401462=_0x3d453b;return this[_0x401462(0x1c1)][_0x3a39f1]?.[_0x401462(0x1f1)]??[];},'providerNote'(_0x5d3d71){const _0x4dcc36=_0x3d453b;return this[_0x4dcc36(0x1c1)][_0x5d3d71]?.[_0x4dcc36(0x22d)]??null;},'algorithmFields'(_0x20f43d){return this['algorithmMap'][_0x20f43d]?.['fields']??[];},'algorithmNote'(_0x475a35){const _0x5d8ae3=_0x3d453b;return this[_0x5d8ae3(0x243)][_0x475a35]?.[_0x5d8ae3(0x22d)]??null;},'onAlgorithmChange'(_0xaf2614,_0x4fbf5b){const _0x543053=_0x3d453b;_0xaf2614['algorithm']=_0x4fbf5b,_0xaf2614['alg_config']={};for(const _0x56ab16 of this['algorithmFields'](_0x4fbf5b))void 0x0!==_0x56ab16['default']&&(_0xaf2614[_0x543053(0x266)][_0x56ab16['key']]=_0x56ab16[_0x543053(0x262)]);},'buildAlgorithmConfig'(_0x349a3d){const _0x5886e1=_0x3d453b,_0x58593c=this['algorithmFields'](_0x349a3d[_0x5886e1(0x203)]??_0x5886e1(0x239)),_0x13ab2c={};for(const _0x2af840 of _0x58593c){const _0x2e6f0f=_0x349a3d[_0x5886e1(0x266)]?.[_0x2af840['key']];if(void 0x0===_0x2e6f0f||''===_0x2e6f0f)void 0x0!==_0x2af840[_0x5886e1(0x262)]&&(_0x13ab2c[_0x2af840[_0x5886e1(0x1eb)]]=_0x2af840['default']);else{const _0x1183e7=_0x5886e1(0x273)===_0x2af840[_0x5886e1(0x267)]?Number(_0x2e6f0f):String(_0x2e6f0f);if(_0x5886e1(0x273)===_0x2af840['type']&&isNaN(_0x1183e7))continue;_0x13ab2c[_0x2af840[_0x5886e1(0x1eb)]]=_0x1183e7;}}return _0x13ab2c;},'buildProviderConfig'(_0x13bbe5){const _0x2633b9=_0x3d453b,_0x770386=this['providerFields'](_0x13bbe5['emb_type']??''),_0x6e78c0={};for(const _0x2ed732 of _0x770386){const _0x1264b1=_0x13bbe5[_0x2633b9(0x258)]?.[_0x2ed732[_0x2633b9(0x1eb)]];void 0x0===_0x1264b1||''===_0x1264b1?void 0x0!==_0x2ed732['default']&&(_0x6e78c0[_0x2ed732[_0x2633b9(0x1eb)]]=_0x2ed732[_0x2633b9(0x262)]):_0x6e78c0[_0x2ed732[_0x2633b9(0x1eb)]]=_0x2633b9(0x273)===_0x2ed732[_0x2633b9(0x267)]?Number(_0x1264b1):String(_0x1264b1);}return _0x6e78c0;},'getFields'(_0x2dbcce,_0x1dbb91){const _0xa46158=_0x3d453b,_0x1cc8f5=this[_0xa46158(0x250)][_0x2dbcce];if(_0x1cc8f5&&!_0x1cc8f5[_0xa46158(0x23f)]&&Object[_0xa46158(0x1e1)](_0x1cc8f5[_0xa46158(0x1be)])['length']>0x0){const _0x119f8c=Object[_0xa46158(0x1e1)](_0x1cc8f5['paths']);return _0xa46158(0x25e)===_0x1dbb91?_0x119f8c['filter'](_0x572108=>_0x1cc8f5[_0xa46158(0x1be)][_0x572108]['includes']('string'))[_0xa46158(0x1ee)]():_0x119f8c['sort']();}const _0x35f7ce=this[_0xa46158(0x21b)][_0x2dbcce]||{},_0x5d295a=Object[_0xa46158(0x1e1)](_0x35f7ce);return _0xa46158(0x25e)===_0x1dbb91?_0x5d295a[_0xa46158(0x21d)](_0x2eb54c=>_0x35f7ce[_0x2eb54c]['includes'](_0xa46158(0x1f7))):_0x5d295a[_0xa46158(0x1ee)]();},'defaultFieldMode'(_0x31f336){const _0x1b9003=_0x3d453b,_0x9774fc=this['deepTypeMap'][_0x31f336];if(_0x9774fc&&!_0x9774fc[_0x1b9003(0x23f)]&&Object[_0x1b9003(0x1e1)](_0x9774fc[_0x1b9003(0x1be)])[_0x1b9003(0x1d8)]>0x0){const _0x53c5aa=Object[_0x1b9003(0x1e1)](_0x9774fc[_0x1b9003(0x1be)]);return _0x53c5aa[_0x1b9003(0x1d8)]?_0x53c5aa[_0x1b9003(0x246)](_0x35bdae=>_0x9774fc[_0x1b9003(0x1be)][_0x35bdae][_0x1b9003(0x23e)](_0x1b9003(0x1f7)))?_0x1b9003(0x25e):_0x1b9003(0x222):_0x1b9003(0x1f2);}const _0x34c789=this['typeMap'][_0x31f336]||{},_0xb8103b=Object[_0x1b9003(0x1e1)](_0x34c789);return _0xb8103b['length']?_0xb8103b['some'](_0x5259dd=>_0x34c789[_0x5259dd][_0x1b9003(0x23e)](_0x1b9003(0x1f7)))?'text':'all':_0x1b9003(0x1f2);},'getFieldItems'(_0x4ebc1a,_0xe9d0e0){const _0x516e69=_0x3d453b,_0x332e29=this['deepTypeMap'][_0x4ebc1a];let _0x3b05d3;return _0x3b05d3=_0x332e29&&!_0x332e29[_0x516e69(0x23f)]&&Object['keys'](_0x332e29[_0x516e69(0x1be)])[_0x516e69(0x1d8)]>0x0?Object['entries'](_0x332e29[_0x516e69(0x1be)]):Object['entries'](this[_0x516e69(0x21b)][_0x4ebc1a]||{})[_0x516e69(0x1ce)](([_0x40850e,_0x3467df])=>[_0x40850e,_0x3467df]),_0x516e69(0x25e)===_0xe9d0e0&&(_0x3b05d3=_0x3b05d3['filter'](([,_0x46df03])=>_0x46df03[_0x516e69(0x23e)](_0x516e69(0x1f7)))),_0x3b05d3[_0x516e69(0x1ce)](([_0x36d078,_0x29c28a])=>({'path':_0x36d078,'types':Array[_0x516e69(0x279)](_0x29c28a)?_0x29c28a:[_0x29c28a],'hint':Array[_0x516e69(0x279)](_0x29c28a)&&_0x29c28a[_0x516e69(0x23e)]('geo')?_0x516e69(0x242):null}));},'onProviderChange'(_0x4dbef1,_0xeec0cb){const _0x5d85bd=_0x3d453b;_0x4dbef1[_0x5d85bd(0x1ca)]=_0xeec0cb,_0x4dbef1[_0x5d85bd(0x258)]={};for(const _0x3ae94a of this['providerFields'](_0xeec0cb))void 0x0!==_0x3ae94a[_0x5d85bd(0x262)]&&(_0x4dbef1[_0x5d85bd(0x258)][_0x3ae94a[_0x5d85bd(0x1eb)]]=_0x3ae94a['default']);_0x5d85bd(0x237)!==_0xeec0cb||null!==this[_0x5d85bd(0x281)]||this[_0x5d85bd(0x1d9)]||this['refreshOllamaModels'](_0x4dbef1),this[_0x5d85bd(0x230)](_0x4dbef1),_0x4dbef1[_0x5d85bd(0x224)]='',_0x4dbef1['emb_custom_dims']='',_0x4dbef1[_0x5d85bd(0x210)]=!0x1;},'onModelSelChange'(_0x48b0bf,_0x39112e){const _0x1538cc=_0x3d453b;if(_0x48b0bf['emb_model_sel']=_0x39112e,_0x39112e){if(_0x1538cc(0x23d)===_0x39112e)_0x48b0bf[_0x1538cc(0x211)]=!0x0,_0x48b0bf[_0x1538cc(0x1e3)]='',_0x48b0bf[_0x1538cc(0x1f0)]=null;else{_0x48b0bf[_0x1538cc(0x211)]=!0x1,_0x48b0bf[_0x1538cc(0x1e3)]=_0x39112e;const _0x9be4c4=this[_0x1538cc(0x20c)](_0x48b0bf['emb_type'],_0x39112e);_0x48b0bf[_0x1538cc(0x1f0)]=_0x9be4c4?.[_0x1538cc(0x24d)]??null,_0x48b0bf['emb_custom_model']='',_0x48b0bf[_0x1538cc(0x215)]='',_0x48b0bf[_0x1538cc(0x210)]=!0x1;}}else this[_0x1538cc(0x230)](_0x48b0bf);},'effectiveModel':_0x220bbe=>_0x220bbe[_0x3d453b(0x211)]?_0x220bbe[_0x3d453b(0x224)][_0x3d453b(0x278)]():_0x220bbe['emb_model'],'effectiveDims'(_0x3abb05){const _0x348be2=_0x3d453b;if(_0x3abb05[_0x348be2(0x211)]){const _0x38fea7=Number(_0x3abb05['emb_custom_dims']);return Number[_0x348be2(0x26d)](_0x38fea7)&&_0x38fea7>0x0?_0x38fea7:null;}return _0x3abb05[_0x348be2(0x1f0)]??null;},async 'maybeSaveToCatalog'(_0x5f7acb){const _0x406bca=_0x3d453b;if(!_0x5f7acb[_0x406bca(0x211)]||!_0x5f7acb['emb_save_catalog'])return!0x0;const _0x3b8845=_0x5f7acb[_0x406bca(0x224)][_0x406bca(0x278)](),_0x1b4869=Number(_0x5f7acb[_0x406bca(0x215)]);if(!_0x3b8845||!_0x1b4869)return!0x0;try{await fetch(__ENV__[_0x406bca(0x22b)]+_0x406bca(0x1e8),{'method':'POST','headers':{'Content-Type':_0x406bca(0x20a)},'body':JSON[_0x406bca(0x240)]({'provider':_0x5f7acb[_0x406bca(0x1ca)],'model':_0x3b8845,'dims':_0x1b4869})}),await this[_0x406bca(0x20e)]();}catch{}return!0x0;},async 'openRegisterModel'(_0x391aa2){const _0xa1cca=_0x3d453b;await _0x1f25d8[_0xa1cca(0x1f6)][_0xa1cca(0x207)][_0xa1cca(0x233)]['open']({'owner':_0x1f25d8,'title':_0xa1cca(0x26f),'content':_0xa1cca(0x235),'context':_0x4be9fb=>({'modal':_0x4be9fb,'initialProvider':_0x391aa2?.[_0xa1cca(0x1ca)]??'','onDone':async()=>{const _0x165ec5=_0xa1cca;await this[_0x165ec5(0x27c)](_0x391aa2);}})});},async 'refreshCatalogState'(_0x3ff8b3){const _0x887ef5=_0x3d453b;await this[_0x887ef5(0x20e)](),_0x3ff8b3&&(_0x887ef5(0x237)===(_0x3ff8b3?.['emb_type']??'')&&Array[_0x887ef5(0x279)](this[_0x887ef5(0x281)])&&this[_0x887ef5(0x281)][_0x887ef5(0x1d8)]||_0x3ff8b3['emb_model_sel'])&&this[_0x887ef5(0x1ec)](_0x3ff8b3);},async 'openModelCatalog'(_0x1921e5){const _0x177a6c=_0x3d453b;await _0x1f25d8[_0x177a6c(0x1f6)][_0x177a6c(0x207)][_0x177a6c(0x233)][_0x177a6c(0x1cf)]({'owner':_0x1f25d8,'title':_0x177a6c(0x27e),'content':_0x177a6c(0x1cc),'context':()=>({'initialProvider':_0x1921e5?.[_0x177a6c(0x1ca)]??'','onChanged':async()=>{await this['refreshCatalogState'](_0x1921e5);}})});},'pl':{'name':'','source_type':'','field':'','field_mode':'custom','mode':'inline','emb_type':'','emb_model_sel':'','emb_model':'','emb_dims_auto':null,'emb_custom':!0x1,'emb_custom_model':'','emb_custom_dims':'','emb_save_catalog':!0x1,'emb_config':{},'w_concurrency':'1','w_poll_interval':'1000','algorithm':_0x3d453b(0x239),'alg_config':{},'prepare':_0x3d453b(0x1fc),'prepare_custom':'','chunk_strategy':_0x3d453b(0x241),'chunk_custom':'','chunk_size':_0x3d453b(0x1e5),'chunk_overlap':'64','chunk_store_text':!0x0},'onPlSourceTypeChange'(_0x52220d){const _0x54dd97=_0x3d453b;this['pl'][_0x54dd97(0x257)]=_0x52220d,this['pl'][_0x54dd97(0x24b)]='',this['pl']['field_mode']=this[_0x54dd97(0x1f8)](_0x52220d),this[_0x54dd97(0x1c3)](_0x52220d);},'setPlFieldMode'(_0x3d3a85){const _0x1e0afe=_0x3d453b;this['pl'][_0x1e0afe(0x254)]=_0x3d3a85,this['pl']['field']='';},'idx':{'name':'','source_type':'','embedder':'','storage_key':'','field':'','field_mode':_0x3d453b(0x1f2),'dims':'','mode':'inline','job_type':''},'onIdxSourceTypeChange'(_0x1ab4a4){const _0x1361b9=_0x3d453b;this[_0x1361b9(0x251)][_0x1361b9(0x257)]=_0x1ab4a4,this[_0x1361b9(0x251)]['field']='',this[_0x1361b9(0x251)]['field_mode']=this[_0x1361b9(0x1f8)](_0x1ab4a4),this[_0x1361b9(0x1c3)](_0x1ab4a4);},'setIdxFieldMode'(_0x3bdc20){const _0x124809=_0x3d453b;this[_0x124809(0x251)][_0x124809(0x254)]=_0x3bdc20,this['idx']['field']='';},'emb':{'name':'','emb_type':'','emb_model_sel':'','emb_model':'','emb_dims_auto':null,'emb_custom':!0x1,'emb_custom_model':'','emb_custom_dims':'','emb_save_catalog':!0x1,'emb_config':{}},'srch':{'name':'','source_type':'','storage_key':'','dims':'','embedder':'','algorithm':_0x3d453b(0x239),'alg_config':{}},'wkr':{'name':'','job_type':'','indexer':'','embedder':'','concurrency':'1','pollInterval':_0x3d453b(0x263),'ttl':_0x3d453b(0x23c)},'setTab'(_0x2b1f7e){const _0x237b15=_0x3d453b;this[_0x237b15(0x204)]=_0x2b1f7e,this[_0x237b15(0x201)]=null,this[_0x237b15(0x234)]=null;},'num'(_0xa23a7d){const _0x382f10=Number(_0xa23a7d);return isNaN(_0x382f10)||''===_0xa23a7d?void 0x0:_0x382f10;},async 'submitPipeline'(){const _0x2c420f=_0x3d453b,_0x5c5f78=this['pl'];if(!_0x5c5f78['name'][_0x2c420f(0x278)]())return this[_0x2c420f(0x201)]=_0x2c420f(0x244);if(!_0x5c5f78[_0x2c420f(0x257)]['trim']())return this[_0x2c420f(0x201)]=_0x2c420f(0x228);const _0x4e5092=this['effectiveModel'](_0x5c5f78),_0x331152=this[_0x2c420f(0x206)](_0x5c5f78);if(!_0x4e5092)return this[_0x2c420f(0x201)]=_0x2c420f(0x1d6);if(_0x5c5f78[_0x2c420f(0x211)]&&!_0x331152)return this[_0x2c420f(0x201)]=_0x2c420f(0x1da);for(const _0x179d71 of this[_0x2c420f(0x20b)](_0x5c5f78[_0x2c420f(0x1ca)]))if(_0x179d71[_0x2c420f(0x1fd)]&&!_0x5c5f78['emb_config'][_0x179d71['key']]?.[_0x2c420f(0x231)]()[_0x2c420f(0x278)]())return this['error']=_0x179d71[_0x2c420f(0x260)]+_0x2c420f(0x1fa);await this[_0x2c420f(0x225)](_0x5c5f78);const _0x2b1d24=this[_0x2c420f(0x209)],_0x5dca95=_0x5c5f78['source_type'][_0x2c420f(0x278)](),_0x32324={'name':_0x5c5f78[_0x2c420f(0x213)]['trim'](),'field':_0x5c5f78[_0x2c420f(0x24b)]['trim']()||void 0x0,'dims':_0x331152??void 0x0,'mode':_0x5c5f78[_0x2c420f(0x1d2)],'embedder':{'type':_0x5c5f78[_0x2c420f(0x1ca)],'model':_0x4e5092||void 0x0,...this[_0x2c420f(0x1c2)](_0x5c5f78)},'algorithm':_0x5c5f78[_0x2c420f(0x203)]},_0x2a7701=this[_0x2c420f(0x1c7)](_0x5c5f78);if(Object[_0x2c420f(0x1e1)](_0x2a7701)[_0x2c420f(0x1d8)]&&(_0x32324[_0x2c420f(0x25c)]=_0x2a7701),'queue'===_0x5c5f78[_0x2c420f(0x1d2)]&&(_0x32324[_0x2c420f(0x22a)]={'concurrency':this[_0x2c420f(0x1d3)](_0x5c5f78[_0x2c420f(0x26c)]),'pollInterval':this[_0x2c420f(0x1d3)](_0x5c5f78[_0x2c420f(0x1ef)])}),_0x5c5f78['field'][_0x2c420f(0x278)]()&&'none'!==_0x5c5f78[_0x2c420f(0x280)]&&(_0x32324[_0x2c420f(0x280)]=_0x2c420f(0x1f2)===_0x5c5f78[_0x2c420f(0x280)]?_0x5c5f78[_0x2c420f(0x25b)][_0x2c420f(0x278)]():_0x5c5f78['prepare']),_0x5c5f78[_0x2c420f(0x24b)]['trim']()&&_0x2c420f(0x241)!==_0x5c5f78[_0x2c420f(0x26e)]){const _0xc9aa0f=_0x2c420f(0x1f2)===_0x5c5f78[_0x2c420f(0x26e)]?_0x5c5f78[_0x2c420f(0x1d0)][_0x2c420f(0x278)]():_0x5c5f78[_0x2c420f(0x26e)];_0x32324['chunk']={'strategy':_0xc9aa0f,'size':this[_0x2c420f(0x1d3)](_0x5c5f78[_0x2c420f(0x20d)])??0x200,'overlap':_0x2c420f(0x232)===_0x5c5f78[_0x2c420f(0x26e)]?this['num'](_0x5c5f78[_0x2c420f(0x1fb)])??0x40:void 0x0,'storeText':_0x5c5f78[_0x2c420f(0x24f)]},void 0x0===_0x32324[_0x2c420f(0x24e)][_0x2c420f(0x1d1)]&&delete _0x32324[_0x2c420f(0x24e)][_0x2c420f(0x1d1)];}await this[_0x2c420f(0x22e)]('/env/'+encodeURIComponent(_0x2b1d24)+_0x2c420f(0x202)+encodeURIComponent(_0x5dca95)+'/pipelines',_0x32324);},async 'submitEmbedder'(){const _0x30c441=_0x3d453b,_0x9d9c58=this[_0x30c441(0x1dd)];if(!_0x9d9c58[_0x30c441(0x213)]['trim']())return this[_0x30c441(0x201)]=_0x30c441(0x244);const _0x159a74=this[_0x30c441(0x1fe)](_0x9d9c58);if(!_0x159a74)return this[_0x30c441(0x201)]=_0x30c441(0x1d6);for(const _0x58d6be of this[_0x30c441(0x20b)](_0x9d9c58[_0x30c441(0x1ca)]))if(_0x58d6be[_0x30c441(0x1fd)]&&!_0x9d9c58[_0x30c441(0x258)][_0x58d6be[_0x30c441(0x1eb)]]?.[_0x30c441(0x231)]()[_0x30c441(0x278)]())return this[_0x30c441(0x201)]=_0x58d6be[_0x30c441(0x260)]+_0x30c441(0x1fa);await this[_0x30c441(0x225)](_0x9d9c58);const _0x52a870={'name':_0x9d9c58[_0x30c441(0x213)]['trim'](),'type':_0x9d9c58[_0x30c441(0x1ca)],'model':_0x159a74||void 0x0,...this[_0x30c441(0x1c2)](_0x9d9c58)};await this[_0x30c441(0x22e)](_0x30c441(0x275),_0x52a870);},async 'submitIndexer'(){const _0x31fdae=_0x3d453b,_0x69094d=this[_0x31fdae(0x251)];if(!_0x69094d['name'][_0x31fdae(0x278)]())return this[_0x31fdae(0x201)]=_0x31fdae(0x244);if(!_0x69094d[_0x31fdae(0x257)][_0x31fdae(0x278)]())return this['error']='Source\x20type\x20is\x20required';if(!_0x69094d[_0x31fdae(0x25d)][_0x31fdae(0x278)]())return this[_0x31fdae(0x201)]=_0x31fdae(0x223);const _0x2c96d4={'name':_0x69094d[_0x31fdae(0x213)][_0x31fdae(0x278)](),'source_env':this[_0x31fdae(0x209)],'source_type':_0x69094d[_0x31fdae(0x257)][_0x31fdae(0x278)](),'embedder':_0x69094d[_0x31fdae(0x25d)][_0x31fdae(0x278)](),'storage_key':_0x69094d[_0x31fdae(0x23a)][_0x31fdae(0x278)]()||void 0x0,'field':_0x69094d[_0x31fdae(0x24b)][_0x31fdae(0x278)]()||void 0x0,'dims':this[_0x31fdae(0x1d3)](_0x69094d[_0x31fdae(0x24d)]),'mode':_0x69094d[_0x31fdae(0x1d2)],'job_type':_0x69094d[_0x31fdae(0x218)][_0x31fdae(0x278)]()||void 0x0};await this[_0x31fdae(0x22e)]('/embeddings/indexers',_0x2c96d4);},async 'submitSearch'(){const _0x3ea7d8=_0x3d453b,_0xfad978=this[_0x3ea7d8(0x1e4)];if(!_0xfad978[_0x3ea7d8(0x213)][_0x3ea7d8(0x278)]())return this[_0x3ea7d8(0x201)]='Name\x20is\x20required';const _0x425bc2=(this[_0x3ea7d8(0x214)]??_0xfad978[_0x3ea7d8(0x257)]??'')[_0x3ea7d8(0x278)]();if(!_0x425bc2)return this['error']=_0x3ea7d8(0x228);if(!_0xfad978[_0x3ea7d8(0x23a)][_0x3ea7d8(0x278)]())return this[_0x3ea7d8(0x201)]='Storage\x20key\x20is\x20required';const _0x4e98ea={'name':_0xfad978['name'][_0x3ea7d8(0x278)](),'source_type':_0x425bc2,'source_env':this['lockedEnv'],'storage_key':_0xfad978['storage_key']['trim'](),'dims':_0xfad978[_0x3ea7d8(0x24d)]?Number(_0xfad978[_0x3ea7d8(0x24d)]):void 0x0,'embedder':_0xfad978[_0x3ea7d8(0x25d)][_0x3ea7d8(0x278)]()||void 0x0,'algorithm':_0xfad978[_0x3ea7d8(0x203)]},_0x374ac5=this[_0x3ea7d8(0x1c7)](_0xfad978);Object[_0x3ea7d8(0x1e1)](_0x374ac5)[_0x3ea7d8(0x1d8)]&&(_0x4e98ea[_0x3ea7d8(0x25c)]=_0x374ac5),await this[_0x3ea7d8(0x22e)](_0x3ea7d8(0x253),_0x4e98ea);},async 'submitWorker'(){const _0x3a1496=_0x3d453b,_0x489a9c=this['wkr'];if(!_0x489a9c[_0x3a1496(0x213)][_0x3a1496(0x278)]())return this[_0x3a1496(0x201)]=_0x3a1496(0x244);if(!_0x489a9c[_0x3a1496(0x218)][_0x3a1496(0x278)]())return this[_0x3a1496(0x201)]=_0x3a1496(0x252);if(!_0x489a9c[_0x3a1496(0x1f9)]['trim']())return this[_0x3a1496(0x201)]='Indexer\x20name\x20is\x20required';if(!_0x489a9c['embedder'][_0x3a1496(0x278)]())return this[_0x3a1496(0x201)]='Embedder\x20name\x20is\x20required';const _0x1b360e={'name':_0x489a9c[_0x3a1496(0x213)][_0x3a1496(0x278)](),'job_type':_0x489a9c[_0x3a1496(0x218)][_0x3a1496(0x278)](),'indexer':_0x489a9c[_0x3a1496(0x1f9)][_0x3a1496(0x278)](),'embedder':_0x489a9c[_0x3a1496(0x25d)][_0x3a1496(0x278)](),'concurrency':this[_0x3a1496(0x1d3)](_0x489a9c[_0x3a1496(0x265)]),'pollInterval':this['num'](_0x489a9c[_0x3a1496(0x20f)]),'ttl':this['num'](_0x489a9c[_0x3a1496(0x1df)])};await this[_0x3a1496(0x22e)](_0x3a1496(0x1c6),_0x1b360e);},async '_post'(_0x5c5443,_0x2ad0b3){const _0x32d9c9=_0x3d453b;this['busy']=!0x0,this[_0x32d9c9(0x201)]=null,this[_0x32d9c9(0x234)]=null;try{const _0x3d163a=await fetch(''+__ENV__[_0x32d9c9(0x22b)]+_0x5c5443,{'method':_0x32d9c9(0x1cd),'headers':{'Content-Type':_0x32d9c9(0x20a)},'body':JSON[_0x32d9c9(0x240)](_0x2ad0b3)}),_0x17d504=await _0x3d163a[_0x32d9c9(0x1bf)]();if(!_0x3d163a['ok']){const _0x5e6646=_0x17d504?.[_0x32d9c9(0x201)]?.[_0x32d9c9(0x256)]||_0x17d504?.['message']||'HTTP\x20'+_0x3d163a['status'];return void(this['error']=_0x5e6646[_0x32d9c9(0x23e)](_0x32d9c9(0x27b))?_0x32d9c9(0x1ed)+_0x2ad0b3[_0x32d9c9(0x213)]+_0x32d9c9(0x1e2):_0x5e6646);}this[_0x32d9c9(0x234)]=_0x17d504['data'],_0x1f25d8['$ok'][_0x32d9c9(0x207)]?.[_0x32d9c9(0x24c)]?.[_0x32d9c9(0x234)]?.(_0x32d9c9(0x21a)),_0x1f25d8[_0x32d9c9(0x1ff)](_0x32d9c9(0x1c5),_0x17d504[_0x32d9c9(0x212)]);}catch(_0x3d9d75){this['error']=_0x3d9d75?.[_0x32d9c9(0x256)]||String(_0x3d9d75);}finally{this[_0x32d9c9(0x22c)]=!0x1;}},'handleSubmit'(){const _0x4f09ec=_0x3d453b;switch(this['tab']){case _0x4f09ec(0x1e7):return this[_0x4f09ec(0x21f)]();case'embedder':return this[_0x4f09ec(0x1d4)]();case _0x4f09ec(0x1f9):return this[_0x4f09ec(0x27f)]();case _0x4f09ec(0x1e6):return this[_0x4f09ec(0x1f3)]();case'worker':return this[_0x4f09ec(0x21c)]();}}}),async 'init'(_0x347c30){const _0x45cd26=_0x3d453b;await Promise['all']([this[_0x45cd26(0x259)](),this[_0x45cd26(0x20e)](),this[_0x45cd26(0x229)](),this[_0x45cd26(0x27d)]()]);const _0x736239=_0x347c30[_0x45cd26(0x200)][_0x45cd26(0x1d7)];_0x736239&&[_0x45cd26(0x1e7),_0x45cd26(0x25d),_0x45cd26(0x1f9),_0x45cd26(0x1e6),_0x45cd26(0x22a)][_0x45cd26(0x23e)](_0x736239)&&(this[_0x45cd26(0x204)]=_0x736239);const _0x3c7d7c=_0x347c30[_0x45cd26(0x200)][_0x45cd26(0x25a)];_0x3c7d7c&&(this['pl'][_0x45cd26(0x257)]=_0x3c7d7c,this['pl'][_0x45cd26(0x254)]=this[_0x45cd26(0x1f8)](_0x3c7d7c),this[_0x45cd26(0x251)][_0x45cd26(0x257)]=_0x3c7d7c,this['idx'][_0x45cd26(0x254)]=this[_0x45cd26(0x1f8)](_0x3c7d7c),this[_0x45cd26(0x1e4)][_0x45cd26(0x257)]=_0x3c7d7c,this[_0x45cd26(0x1c3)](_0x3c7d7c)),this[_0x45cd26(0x238)]&&(this[_0x45cd26(0x1e4)][_0x45cd26(0x23a)]=this[_0x45cd26(0x238)]),this[_0x45cd26(0x1cb)]&&(this['srch'][_0x45cd26(0x25d)]=this['lockedEmbedder']);const _0x47ab93=this[_0x45cd26(0x221)][0x0]?.[_0x45cd26(0x1eb)]??'';for(const _0x1d8125 of[this['pl'],this[_0x45cd26(0x1dd)]]){_0x1d8125[_0x45cd26(0x1ca)]=_0x47ab93,_0x1d8125['emb_config']={};for(const _0x91acca of this[_0x45cd26(0x20b)](_0x47ab93))void 0x0!==_0x91acca[_0x45cd26(0x262)]&&(_0x1d8125[_0x45cd26(0x258)][_0x91acca['key']]=_0x91acca[_0x45cd26(0x262)]);this[_0x45cd26(0x230)](_0x1d8125);}_0x45cd26(0x237)===_0x47ab93&&this[_0x45cd26(0x255)](this['pl']);for(const _0x3f5fdf of[this['pl'],this[_0x45cd26(0x1e4)]])for(const _0xca8287 of this[_0x45cd26(0x1e0)](_0x3f5fdf[_0x45cd26(0x203)]))void 0x0!==_0xca8287[_0x45cd26(0x262)]&&(_0x3f5fdf[_0x45cd26(0x266)][_0xca8287[_0x45cd26(0x1eb)]]=_0xca8287['default']);},'template':'\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:0;\x20width:min(700px,\x2078vw);\x20max-height:76vh;\x20min-height:0;\x22>\x0a\x0a\x0a\x20\x20<!--\x20Tab\x20bar\x20-->\x0a\x20\x20<div\x20class=\x22tab-bar\x22>\x0a\x20\x20\x20\x20<button\x20:class=\x22tab\x20===\x20\x27pipeline\x27\x20?\x20\x27tab\x20tab--on\x27\x20:\x20\x27tab\x27\x22\x20@click=\x22setTab(\x27pipeline\x27)\x22>Pipeline</button>\x0a\x20\x20\x20\x20<button\x20:class=\x22tab\x20===\x20\x27embedder\x27\x20?\x20\x27tab\x20tab--on\x27\x20:\x20\x27tab\x27\x22\x20@click=\x22setTab(\x27embedder\x27)\x22>Embedder</button>\x0a\x20\x20\x20\x20<button\x20:class=\x22tab\x20===\x20\x27indexer\x27\x20\x20?\x20\x27tab\x20tab--on\x27\x20:\x20\x27tab\x27\x22\x20@click=\x22setTab(\x27indexer\x27)\x22>Indexer</button>\x0a\x20\x20\x20\x20<button\x20:class=\x22tab\x20===\x20\x27search\x27\x20\x20\x20?\x20\x27tab\x20tab--on\x27\x20:\x20\x27tab\x27\x22\x20@click=\x22setTab(\x27search\x27)\x22>Search</button>\x0a\x20\x20\x20\x20<button\x20:class=\x22tab\x20===\x20\x27worker\x27\x20\x20\x20?\x20\x27tab\x20tab--on\x27\x20:\x20\x27tab\x27\x22\x20@click=\x22setTab(\x27worker\x27)\x22>Worker</button>\x0a\x20\x20</div>\x0a\x0a\x20\x20<div\x20style=\x22overflow:auto;\x20flex:1;\x20min-height:0;\x20padding-right:4px;\x22>\x0a\x0a\x20\x20\x20\x20<!--\x20──\x20Pipeline\x20────────────────────────────────────────────────────\x20-->\x0a\x20\x20\x20\x20<if\x20:=\x22tab\x20===\x20\x27pipeline\x27\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22>New\x20Pipeline\x20<span\x20style=\x22font-weight:400;\x20opacity:.5;\x20font-size:12px;\x22>(creates\x20embedder\x20+\x20indexer\x20+\x20search\x20in\x20one\x20step)</span></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22form-grid\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22section-title\x22>General</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Name\x20*</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20:value=\x22pl.name\x22\x20@input=\x22pl.name\x20=\x20$el.value\x22\x20placeholder=\x22articles-body\x22\x20/>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Source\x20type\x20*</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!lockedType\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20class=\x22form-select\x22\x20:value=\x22pl.source_type\x22\x20@change=\x22onPlSourceTypeChange($el.value)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22\x22>—\x20select\x20a\x20type\x20—</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22types\x22\x20let:item=\x22t\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20:value=\x22t\x22>{{\x20t\x20}}</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22lockedType\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22form-input\x22\x20style=\x22background:color-mix(in\x20srgb,\x20var(--okdb-app-bg-deep)\x2033%,\x20transparent);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2027%,\x20transparent);\x20color:var(--okdb-accent);\x20cursor:default;\x22>{{\x20lockedType\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Field</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22mode-pills\x22\x20style=\x22margin-bottom:5px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20:class=\x22pl.field_mode\x20===\x20\x27text\x27\x20\x20\x20?\x20\x27mode-pill\x20mode-pill--on\x27\x20:\x20\x27mode-pill\x27\x22\x20@click=\x22setPlFieldMode(\x27text\x27)\x22>text</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20:class=\x22pl.field_mode\x20===\x20\x27all\x27\x20\x20\x20\x20?\x20\x27mode-pill\x20mode-pill--on\x27\x20:\x20\x27mode-pill\x27\x22\x20@click=\x22setPlFieldMode(\x27all\x27)\x22>all</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20:class=\x22pl.field_mode\x20===\x20\x27custom\x27\x20?\x20\x27mode-pill\x20mode-pill--on\x27\x20:\x20\x27mode-pill\x27\x22\x20@click=\x22setPlFieldMode(\x27custom\x27)\x22>custom</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22pl.source_type\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<field-path-input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22pl.field\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:items=\x22getFieldItems(pl.source_type,\x20pl.field_mode)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:allow-custom=\x22pl.field_mode\x20===\x20\x27custom\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x22blank\x20=\x20whole\x20record\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@change=\x22pl.field\x20=\x20$event.detail\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!pl.source_type\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.45;\x20font-style:italic;\x22>Select\x20a\x20source\x20type\x20first.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Mode</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20class=\x22form-select\x22\x20:value=\x22pl.mode\x22\x20@change=\x22pl.mode\x20=\x20$el.value\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22inline\x22>inline\x20—\x20embed\x20immediately\x20(local/fast\x20models)</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22queue\x22>queue\x20—\x20async\x20via\x20worker\x20(remote\x20APIs,\x20scale)</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22section-title\x22>Embedder</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Provider</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20class=\x22form-select\x22\x20:value=\x22pl.emb_type\x22\x20@change=\x22onProviderChange(pl,\x20$el.value)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22providers\x22\x20let:item=\x22p\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20:value=\x22p.key\x22>{{\x20p.label\x20}}</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Model</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20justify-content:space-between;\x20gap:8px;\x20margin-bottom:5px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20opacity:.5;\x22>Choose\x20a\x20known\x20model\x20or\x20register\x20a\x20custom\x20one\x20inline.</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22openModelCatalog(pl)\x22\x20style=\x22font-size:11px;\x20padding:2px\x208px;\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2033%,\x20transparent);\x20color:var(--okdb-accent);\x20background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x206%,\x20transparent);\x22>Browse\x20catalog</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22openRegisterModel(pl)\x22\x20style=\x22font-size:11px;\x20padding:2px\x208px;\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-purple)\x2033%,\x20transparent);\x20color:var(--okdb-purple);\x20background:color-mix(in\x20srgb,\x20var(--okdb-purple)\x206%,\x20transparent);\x22>+\x20Register\x20model</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22pl.emb_type\x20===\x20\x27ollama\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:8px;\x20margin-bottom:5px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22refreshOllamaModels(pl)\x22\x20:disabled=\x22liveOllamaLoading\x22\x20style=\x22font-size:11px;\x20padding:2px\x208px;\x22>{{\x20liveOllamaLoading\x20?\x20\x27…\x27\x20:\x20\x27↺\x20Refresh\x27\x20}}</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20opacity:.55;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22liveOllamaModels\x20===\x20null\x22>○\x20catalog\x20(not\x20yet\x20probed)</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22Array.isArray(liveOllamaModels)\x20&&\x20liveOllamaModels.length\x22>●\x20live\x20—\x20{{\x20liveOllamaModels.length\x20}}\x20installed</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22Array.isArray(liveOllamaModels)\x20&&\x20!liveOllamaModels.length\x20&&\x20!liveOllamaError\x22>○\x20catalog\x20(none\x20found\x20on\x20server)</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22liveOllamaError\x20&&\x20(!Array.isArray(liveOllamaModels)\x20||\x20!liveOllamaModels.length)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20color:var(--okdb-danger);\x20max-width:260px;\x20white-space:nowrap;\x20overflow:hidden;\x20text-overflow:ellipsis;\x22\x20:title=\x22liveOllamaError\x22>⚠\x20{{\x20liveOllamaError\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20class=\x22form-select\x22\x20:value=\x22pl.emb_model_sel\x22\x20@change=\x22onModelSelChange(pl,\x20$el.value)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22\x22>—\x20Select\x20model\x20—</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22modelsForProvider(pl.emb_type)\x22\x20let:item=\x22m\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20:value=\x22m.model\x22>{{\x20modelLabel(m)\x20}}</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22__custom__\x22>──\x20Custom\x20model…\x20──</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!pl.emb_custom\x20&&\x20pl.emb_dims_auto\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22margin-top:5px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22dims-badge\x22>{{\x20pl.emb_dims_auto\x20}}\x20dims\x20(auto)</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22pl.emb_custom\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22custom-model-box\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22row\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label>Model\x20name</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20style=\x22flex:1;\x22\x20:value=\x22pl.emb_custom_model\x22\x20@input=\x22pl.emb_custom_model\x20=\x20$el.value\x22\x20placeholder=\x22e.g.\x20my-fine-tuned-embed\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22row\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label>Dims\x20*</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20style=\x22width:90px;\x22\x20type=\x22number\x22\x20:value=\x22pl.emb_custom_dims\x22\x20@input=\x22pl.emb_custom_dims\x20=\x20$el.value\x22\x20placeholder=\x22e.g.\x20768\x22\x20min=\x221\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20opacity:.45;\x20font-style:italic;\x22>Leave\x20blank\x20to\x20auto-probe\x20on\x20start</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22save-to-catalog\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22pl.emb_save_catalog\x22\x20@change=\x22pl.emb_save_catalog\x20=\x20$el.checked\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Save\x20this\x20model\x20to\x20the\x20catalog\x20for\x20future\x20use\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Dynamic\x20provider\x20config\x20fields\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22providerFields(pl.emb_type)\x22\x20let:item=\x22f\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>{{\x20f.label\x20}}{{\x20f.required\x20?\x20\x27\x20*\x27\x20:\x20\x27\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:type=\x22f.type\x20===\x20\x27password\x27\x20?\x20\x27password\x27\x20:\x20f.type\x20===\x20\x27number\x27\x20?\x20\x27number\x27\x20:\x20\x27text\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20class=\x22form-input\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22pl.emb_config[f.key]\x20??\x20\x27\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@input=\x22pl.emb_config[f.key]\x20=\x20$el.value\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:placeholder=\x22f.placeholder\x20??\x20\x27\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22f.hint\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-hint\x22>{{\x20f.hint\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22providerNote(pl.emb_type)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22grid-column:1/-1;\x20opacity:.5;\x20font-style:italic;\x20font-size:11px;\x22>{{\x20providerNote(pl.emb_type)\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22pl.mode\x20===\x20\x27queue\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22section-title\x22>Worker\x20(queue\x20mode)</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Concurrency</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20type=\x22number\x22\x20:value=\x22pl.w_concurrency\x22\x20@input=\x22pl.w_concurrency\x20=\x20$el.value\x22\x20placeholder=\x221\x22\x20min=\x221\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Poll\x20interval\x20(ms)</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20type=\x22number\x22\x20:value=\x22pl.w_poll_interval\x22\x20@input=\x22pl.w_poll_interval\x20=\x20$el.value\x22\x20placeholder=\x221000\x22\x20min=\x22100\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20──\x20Prepare\x20+\x20Chunk\x20(only\x20relevant\x20when\x20a\x20specific\x20field\x20is\x20selected)\x20──\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22pl.field.trim()\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22section-title\x22>Text\x20Processing</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Prepare</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20class=\x22form-select\x22\x20:value=\x22pl.prepare\x22\x20@change=\x22pl.prepare\x20=\x20$el.value\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22none\x22>none\x20—\x20use\x20field\x20value\x20as-is</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22html\x22>html\x20—\x20strip\x20tags,\x20decode\x20entities</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22markdown\x22>markdown\x20—\x20strip\x20syntax,\x20keep\x20text</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22json-text\x22>json-text\x20—\x20extract\x20string\x20values\x20from\x20JSON</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22custom\x22>custom\x20—\x20use\x20a\x20registered\x20preparer</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22pl.prepare\x20===\x20\x27custom\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20style=\x22margin-top:5px;\x22\x20:value=\x22pl.prepare_custom\x22\x20@input=\x22pl.prepare_custom\x20=\x20$el.value\x22\x20placeholder=\x22name\x20passed\x20to\x20okdb.embeddings.registerPreparer()\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-hint\x22>Register\x20server-side:\x20<code>okdb.embeddings.registerPreparer(\x27name\x27,\x20fn)</code></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22pl.prepare\x20!==\x20\x27custom\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-hint\x22>Cleans\x20the\x20field\x20text\x20before\x20chunking\x20and\x20embedding.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22form-label\x22>Chunking</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20class=\x22form-select\x22\x20:value=\x22pl.chunk_strategy\x22\x20@change=\x22pl.chunk_strategy\x20=\x20$el.value\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22off\x22>off\x20—\x20embed\x20whole\x20field\x20as\x20one\x20vector</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22fixed\x22>fixed\x20—\x20split\x20by\x20character\x20count</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22sentence\x22>sentence\x20—\x20split\x20on\x20sentence\x20boundaries</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22paragraph\x22>paragraph\x20—\x20split\x20on\x20paragraph\x20breaks</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22custom\x22>custom\x20—\x20use\x20a\x20registered\x20strategy</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22pl.chunk_strategy\x20===\x20\x27custom\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20style=\x22margin-top:5px;\x22\x20:value=\x22pl.chunk_custom\x22\x20@input=\x22pl.chunk_custom\x20=\x20$el.value\x22\x20placeholder=\x22name\x20passed\x20to\x20okdb.embeddings.registerChunkStrategy()\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-hint\x22>Register\x20server-side:\x20<code>okdb.embeddings.registerChunkStrategy(\x27name\x27,\x20fn)</code></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22pl.chunk_strategy\x20!==\x20\x27off\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:grid;\x20grid-template-columns:auto\x201fr\x20auto\x201fr;\x20gap:6px\x208px;\x20align-items:center;\x20margin-top:8px;\x20font-size:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.6;\x22>Size</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20type=\x22number\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22pl.chunk_size\x22\x20@input=\x22pl.chunk_size\x20=\x20$el.value\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x22512\x22\x20min=\x2232\x22\x20style=\x22width:80px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Max\x20characters\x20per\x20chunk\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22pl.chunk_strategy\x20===\x20\x27fixed\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.6;\x22>Overlap</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22form-input\x22\x20type=\x22number\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22pl.chunk_overlap\x22\x20@input=\x22pl.chunk_overlap\x20=\x20$el.value\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x2264\x22\x20min=\x220\x22\x20style=\x22width:80px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Overlap\x20characters\x20between\x20consecutive\x20chunks\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x20margin-top:8px;\x20font-size:12px;\x20cursor:pointer;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22pl.chunk_store_text\x22\x20@change=\x22pl.chunk_store_text\x20=\x20$el.checked\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Store\x20chunk\x20text\x20in\x20doc_status\x20<span\x20style=\x22opacity:.45;\x22>(enables\x20preview\x20in\x20search\x20results)</span></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-hint\x22\x20style=\x22margin-top:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Each\x20chunk\x20is\x20identified\x20by\x20a\x20content\x20hash\x20—\x20unchanged\x20chunks\x20are\x20never\x20re-embedded\x20on\x20update.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!pl.field.trim()\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22section-title\x22>Text\x20Processing</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22grid-column:1/-1;\x20font-size:11px;\x20opacity:.4;\x20font-style:italic;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Select\x20a\x20specific\x20field\x20above\x20to\x20enable\x20prepare\x20&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','style':_0x3d453b(0x1c8)};
@@ -1 +1 @@
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
+ const _0x57b877=_0x5d0b;(function(_0x515384,_0x6de5e4){const _0x3e2915=_0x5d0b,_0x139b03=_0x515384();while(!![]){try{const _0x5bf4ce=-parseInt(_0x3e2915(0x1aa))/0x1*(parseInt(_0x3e2915(0x19b))/0x2)+-parseInt(_0x3e2915(0x18c))/0x3*(-parseInt(_0x3e2915(0x1a2))/0x4)+parseInt(_0x3e2915(0x1a9))/0x5*(parseInt(_0x3e2915(0x1a3))/0x6)+parseInt(_0x3e2915(0x194))/0x7*(-parseInt(_0x3e2915(0x197))/0x8)+parseInt(_0x3e2915(0x195))/0x9+-parseInt(_0x3e2915(0x1ad))/0xa+parseInt(_0x3e2915(0x1a5))/0xb;if(_0x5bf4ce===_0x6de5e4)break;else _0x139b03['push'](_0x139b03['shift']());}catch(_0x4ad636){_0x139b03['push'](_0x139b03['shift']());}}}(_0x4d95,0xf2d44));import _0xc42294 from'../../engines/parts/engine-panel-shell.ok.js';function _0x4d95(){const _0x5eea1b=['busy','3992330lbbxuV','checkHealth','54vCgooP','message','$watch','filter','/health','includes','/embeddings/embedders/','latency','7cIxwGY','4941459jtKHtL','config','12275528VqfJtu','model','API','embed-embedder-panel','770782CvgJEj','data','health','isRunning','name','engine','$attr','203460rdSLdO','120SYlUiS','entries','22375694aiMwNU','health\x20check\x20failed','fmtConfig','error','146425ZccLbT','3WQZQUC','eng'];_0x4d95=function(){return _0x5eea1b;};return _0x4d95();}import{ENGINE_PANEL_SHARED_STYLE as _0x5eed62}from'../../engines/engine-panel-shared-style.js';import{dispatchEnginePipelineSelection as _0xa95b58,maskSensitiveConfig as _0x4e7cd1}from'../../engines/engine-ui-utils.js';function _0x5d0b(_0x59df5c,_0x56044c){_0x59df5c=_0x59df5c-0x18c;const _0x4d957c=_0x4d95();let _0x5d0bc9=_0x4d957c[_0x59df5c];return _0x5d0bc9;}const s=_0x5eed62;export default{'tag':_0x57b877(0x19a),'dependencies':[_0xc42294],'attr':{'name':{},'engine':{}},'context':_0x224bcd=>({'busy':!0x1,'health':null,'error':null,get 'eng'(){const _0x272955=_0x57b877;return _0x224bcd['$attr'][_0x272955(0x1a0)]??{};},get 'name'(){const _0xa39a05=_0x57b877;return _0x224bcd[_0xa39a05(0x1a1)][_0xa39a05(0x19f)];},get 'config'(){const _0x1163ad=_0x57b877;return this[_0x1163ad(0x1ab)][_0x1163ad(0x196)]??{};},get 'providerType'(){return this['health']?.['type']||this['config']['type']||'—';},get 'modelName'(){const _0x513dd2=_0x57b877;return this[_0x513dd2(0x19d)]?.[_0x513dd2(0x198)]||this[_0x513dd2(0x196)][_0x513dd2(0x198)]||'—';},get 'dimsValue'(){const _0x153c35=_0x57b877;return this[_0x153c35(0x19d)]?.['dims']??this[_0x153c35(0x196)]['dimensions']??'—';},get 'latencyValue'(){const _0x1e42de=_0x57b877;return null!=this[_0x1e42de(0x19d)]?.['latency']?this[_0x1e42de(0x19d)][_0x1e42de(0x193)]+'ms':'—';},get 'configEntries'(){const _0x1a3713=_0x57b877;return Object[_0x1a3713(0x1a4)](this[_0x1a3713(0x1a7)](this['config']))[_0x1a3713(0x18f)](([_0x4454ce])=>!['type',_0x1a3713(0x198)][_0x1a3713(0x191)](_0x4454ce));},async 'checkHealth'(){const _0x7e84e1=_0x57b877;this[_0x7e84e1(0x1ac)]=!0x0,this[_0x7e84e1(0x1a8)]=null;try{const _0x428871=await fetch(__ENV__[_0x7e84e1(0x199)]+_0x7e84e1(0x192)+encodeURIComponent(this[_0x7e84e1(0x19f)])+_0x7e84e1(0x190)),_0x3df558=await _0x428871['json']();if(!_0x428871['ok'])throw new Error(_0x3df558?.['error']?.[_0x7e84e1(0x18d)]||_0x7e84e1(0x1a6));this[_0x7e84e1(0x19d)]=_0x3df558[_0x7e84e1(0x19c)];}catch(_0xf2a177){this['error']=_0xf2a177?.['message']||String(_0xf2a177),this['health']=null;}finally{this[_0x7e84e1(0x1ac)]=!0x1;}},'fmtConfig':_0x4e7cd1,'viewPipeline'(){const _0x3c8454=_0x57b877;_0xa95b58(_0x224bcd,this[_0x3c8454(0x1ab)]);},async 'reloadPanel'(){const _0x3e2d07=_0x57b877;this[_0x3e2d07(0x19d)]=null,this[_0x3e2d07(0x1a8)]=null,this[_0x3e2d07(0x1ab)][_0x3e2d07(0x19e)]&&await this[_0x3e2d07(0x1ae)]();}}),async 'init'(_0x80fa47){const _0x3e64bb=_0x57b877;_0x80fa47[_0x3e64bb(0x18e)](()=>_0x80fa47[_0x3e64bb(0x1a1)]['name'],async()=>{const _0x1ece9e=_0x3e64bb;this[_0x1ece9e(0x19d)]=null,this[_0x1ece9e(0x1a8)]=null,this['eng'][_0x1ece9e(0x19e)]&&await this[_0x1ece9e(0x1ae)]();}),this[_0x3e64bb(0x1ab)][_0x3e64bb(0x19e)]&&await this['checkHealth']();},'template':'\x0a<engine-panel-shell\x0a\x20\x20:engine=\x22eng\x22\x0a\x20\x20:title=\x22name\x22\x0a\x20\x20type-label=\x22embedder\x22\x0a\x20\x20type-color=\x22var(--okdb-info)\x22\x0a\x20\x20show-refresh=\x22true\x22\x0a\x20\x20:refresh-busy=\x22busy\x22\x0a\x20\x20:on-refresh=\x22reloadPanel\x22\x0a\x20\x20:on-pipeline=\x22viewPipeline\x22\x0a\x20\x20@engine-updated=\x22$dispatch(\x27engine-updated\x27,\x20$event.detail)\x22\x0a\x20\x20@refresh=\x22$dispatch(\x27refresh\x27)\x22\x0a\x20\x20@deleted=\x22$dispatch(\x27deleted\x27,\x20$event.detail)\x22\x0a>\x0a\x20\x20<div\x20class=\x22stack-compact\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:8px;min-width:0;flex:1;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22pill-row\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Embedding\x20provider\x20type.\x22>{{\x20providerType\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Active\x20model.\x22>{{\x20modelName\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22health?.ok\x20===\x20true\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20style=\x22border-color:color-mix(in\x20srgb,\x20var(--okdb-success)\x2033%,\x20transparent);color:var(--okdb-success);background:color-mix(in\x20srgb,\x20var(--okdb-success)\x207%,\x20transparent);\x22>healthy</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22health?.ok\x20===\x20false\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20style=\x22border-color:color-mix(in\x20srgb,\x20var(--okdb-danger)\x2033%,\x20transparent);color:var(--okdb-danger);background:color-mix(in\x20srgb,\x20var(--okdb-danger)\x207%,\x20transparent);\x22>unhealthy</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22story-lead\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Live\x20embedding\x20connection\x20for\x20<strong>{{\x20modelName\x20}}</strong>\x20on\x20<strong>{{\x20providerType\x20}}</strong>.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Indexers\x20and\x20workers\x20depend\x20on\x20this\x20engine\x20to\x20turn\x20content\x20into\x20vectors.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22story-note\x22>Use\x20health\x20checks\x20to\x20confirm\x20the\x20provider\x20is\x20reachable\x20and\x20returning\x20the\x20expected\x20vector\x20shape\x20before\x20debugging\x20downstream\x20pipelines.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-grid\x20metric-grid--compact\x22\x20style=\x22min-width:min(100%,\x20340px);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Dims</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20style=\x22color:var(--okdb-accent);\x22>{{\x20dimsValue\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Latency</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20style=\x22color:var(--okdb-app-fg);\x22>{{\x20latencyValue\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:10px;flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22checkHealth\x22\x20:disabled=\x22busy\x20||\x20!eng.isRunning\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20busy\x20?\x20\x27Checking…\x27\x20:\x20\x27Check\x20Health\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!eng.isRunning\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22story-note\x22>Start\x20the\x20engine\x20to\x20run\x20a\x20live\x20health\x20probe.</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22alert\x20alert--error\x22>{{\x20error\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<div\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Connection\x20details</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22kv-grid\x20kv-grid--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>provider</span><span\x20class=\x22kv-val\x22>{{\x20providerType\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>model</span><span\x20class=\x22kv-val\x22>{{\x20modelName\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>dims</span><span\x20class=\x22kv-val\x22>{{\x20dimsValue\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22health\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>health</span><span\x20:style=\x22\x27color:\x27\x20+\x20(health.ok\x20?\x20\x27var(--okdb-success)\x27\x20:\x20\x27var(--okdb-danger)\x27)\x22>{{\x20health.ok\x20?\x20\x27ok\x27\x20:\x20\x27error\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22configEntries.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22kv-grid\x20kv-grid--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22configEntries\x22\x20let:item=\x22pair\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>{{\x20pair[0]\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-val\x22>{{\x20pair[1]\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a</engine-panel-shell>\x0a','style':s};
@@ -1 +1 @@
1
- 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)};
1
+ var _0x584fa8=_0x17cd;(function(_0x18985a,_0xf951ae){var _0x5dd5fe=_0x17cd,_0x181175=_0x18985a();while(!![]){try{var _0x195351=-parseInt(_0x5dd5fe(0x13f))/0x1*(parseInt(_0x5dd5fe(0x142))/0x2)+-parseInt(_0x5dd5fe(0x13e))/0x3+-parseInt(_0x5dd5fe(0x13a))/0x4*(-parseInt(_0x5dd5fe(0x13d))/0x5)+-parseInt(_0x5dd5fe(0x13c))/0x6+parseInt(_0x5dd5fe(0x141))/0x7*(-parseInt(_0x5dd5fe(0x138))/0x8)+-parseInt(_0x5dd5fe(0x140))/0x9*(parseInt(_0x5dd5fe(0x137))/0xa)+-parseInt(_0x5dd5fe(0x139))/0xb*(-parseInt(_0x5dd5fe(0x13b))/0xc);if(_0x195351===_0xf951ae)break;else _0x181175['push'](_0x181175['shift']());}catch(_0xddef2c){_0x181175['push'](_0x181175['shift']());}}}(_0x3625,0xf146c));import _0x20240f from'../../engines/parts/engine-declaration-editor.ok.js';function _0x17cd(_0x51e6e5,_0x373396){_0x51e6e5=_0x51e6e5-0x136;var _0x362527=_0x3625();var _0x17cd98=_0x362527[_0x51e6e5];return _0x17cd98;}function _0x3625(){var _0xab1625=['7slhgop','2zUJIjv','embed-engine-declaration-editor','2205550IDPcCS','9089624BIpFCX','850366pZNnVy','4LJLnYb','744XNSucp','11130714qmqYWb','5212380TezCjm','984726iTPWZs','424841IBKndL','45fmlWHP'];_0x3625=function(){return _0xab1625;};return _0x3625();}export default{..._0x20240f,'tag':_0x584fa8(0x136)};