{"version":3,"file":"discourse-ai.js","names":["define","_exports","Object","defineProperty","value","default","resource","path","map","this","route","resetNamespace","_rest","Adapter","jsonMode","basePath","pathFor","store","type","findArgs","pluralize","apiNameFor","appendQueryParams","AiToolAdapter","_ajax","AiEmbedding","createProperties","getProperties","updateProperties","attrs","id","testConfig","ajax","data","ai_embedding","workingCopy","createRecord","AiLlm","llm_quotas","llmConfig","ai_llm","_tracking","CREATE_ATTRIBUTES","SYSTEM_ATTRIBUTES","ToolOption","static","dt7948","g","prototype","tracked","i","AiPersona","init","properties","forcedTools","tools","tool","toolId","options","force","optionId","hasOwnProperty","getToolOption","push","super","createUser","result","user","user_id","toolOptions","populateToolOptions","toolsWithOptions","forEach","includes","optionsWithValues","option","system","persona","create","slice","forced_tool_count","_trackedBuiltIns","AiTool","trackParameters","parameters","TrackedArray","p","parameter","TrackedObject","enum","length","_component","_component2","_getUrl","_templateFactory","__COLOCATED_TEMPLATE__","createTemplateFactory","block","moduleName","isStrictMode","AdminReportEmotion","c","todayLink","date","moment","format","_filterURL","yesterdayLink","subtract","lastSevenDaysLink","lastThirtyDaysLink","_baseFilter","_model","model","attributeBindings","classNames","setComponentTemplate","_object","_service","_dButton","_htmlClass","AiArtifactComponent","service","siteSettings","expanded","showingArtifact","constructor","arguments","keydownHandler","handleKeydown","bind","popStateHandler","handlePopState","window","addEventListener","willDestroy","removeEventListener","event","key","history","back","n","action","state","artifactId","args","requireClickToRun","ai_artifact_security","artifactUrl","url","artifactVersion","showArtifact","toggleView","pushState","location","href","wrapperClasses","scope","_i18n","_aiBotHelper","AiBotHeaderIcon","currentUser","composer","bots","availableBots","ai_enabled_chat_bots","filter","bot","is_persosna","Boolean","model_name","showHeaderButton","ai_bot_add_to_header","compose","composeAiBotMessage","_owner","_discourseI18n","_dToast","_dToastInstance","_aiHelperOptionsList","_diffModal","_thumbnailSuggestions","AiComposerHelperMenu","modal","site","newSelectedText","diff","customPromptValue","noContentError","prompts","promptTypes","toolbarEvent","getText","helperOptions","ai_helper_prompts","name","siteLocale","default_locale","locale","JSON","parse","available_locales","find","l","translatedName","i18n","language","translated_name","customPromptIndex","findIndex","customPrompt","splice","unshift","can_use_custom_prompts","reduce","memo","prompt_type","toast","owner","getOwner","close","duration","theme","icon","message","suggestChanges","show","mode","selectedText","thumbnails","thumbnailSuggestions","revert","undoAiAction","closeMenu","_helper","_modifier","_didInsert","_didUpdate","_runloop","_backButton","_dIcon","_ajaxError","_adminSectionLandingItem","_adminSectionLandingWrapper","_comboBox","_dTooltip","_not","AiEmbeddingEditor","toasts","router","dialog","isSaving","selectedPreset","testRunning","testResult","testError","apiKeySecret","editingModel","selectedProviders","embeddings","resultSetMeta","providers","prov","provName","distanceFunctions","t","df","distance_functions","iconName","presets","preset","display_name","preset_id","provider","unshiftObject","showPresets","isNew","metaProviderParams","provider_params","computed","testErrorMessage","error","displayTestResult","configurePreset","findBy","updateModel","makeApiKeySecret","toggleApiKeySecret","save","addObject","transitionTo","success","e","popupAjaxError","later","test","configTestResult","confirm","didConfirm","destroyRecord","then","llms","removeObject","catch","resetForm","concat","fn","Input","on","Textarea","get","_dBreadcrumbsItem","_dPageSubheader","_adminConfigAreaEmptyList","_aiEmbeddingEditor","AiEmbeddingsListEditor","adminPluginNavManager","hasEmbeddingElements","extend","content","count","selectKitOptions","filterable","_dToggleSwitch","_fullPageSearch","_concatClass","_search","_aiIndicatorWave","AI_RESULTS_TOGGLED","AiFullPageSearch","appEvents","searchPreferencesManager","searching","AiResults","showingAiResults","sortOrder","initialSearchTerm","searchTerm","onSearch","off","searchEnabled","resetAiResults","performHyDESearch","disableToggleSwitch","validSearchOrder","searchStateText","settled","noResults","undefined","searchType","SEARCH_TYPE_DEFAULT","isValidSearchTerm","searchClass","tooltipText","toggleAiResults","trigger","enabled","addSearchResults","q","async","translateResults","results","posts","post","generatedByAi","finally","sortChanged","_dropdownMenu","_bodyClass","_dMenu","_eq","AiGistToggle","gists","buttons","label","description","selectedOptionId","currentButton","button","onRegisterApi","api","dMenu","onSelect","setPreference","_withEventValue","AiHelperCustomPrompt","sendInput","submit","promptArgs","_templateOnly","AiHelperLoading","_truthHelpers","_keyboardShortcuts","_utilities","_aiHelperCustomPrompt","AiHelperOptionsList","showShortcut","desktopView","shortcutVisible","shortcut","translateModKey","PLATFORM_KEY_MODIFIER","and","indicatorDots","AiIndicatorWave","_routing","_conditionalLoadingSpinner","_form","_boundAvatarTemplate","_adminUser","_aiQuotaDurationSelector","_aiLlmQuotaModal","AiLlmEditorForm","formData","llmTemplate","modelName","split","info","modelInfo","models","params","max_prompt_tokens","tokens","tokenizer","endpoint","fromEntries","entries","_ref","k","v","api_key","enabled_chat_bot","vision_enabled","cached","sort","a","b","localeCompare","tokenizers","adminUser","canEditURL","modulesUsingModel","usedBy","used_by","m","join","seeded","inUseWarning","settings","showAddQuotaButton","openAddQuotaModal","addItemToCollection","llm","acc","_ref2","field","values","eq","LinkTo","gt","_aiLlmEditorForm","AiLlmEditor","_object2","_selectKit","AiLlmSelector","_modelDisabledChanged","selectKit","set","observes","blankName","_aiLlmEditor","isPreseeded","AiLlmsListEditor","modelDescription","replace","lookup","ignoreMissing","preseededDescription","sanitizedTranslationKey","hasLlmElements","preconfiguredTitle","preConfiguredLlms","llmsContent","some","transitionToLlmEditor","queryParams","localizeUsage","usage","_dTextarea","_group","_groupChooser","_aiForcedToolStrategySelector","_aiLlmSelector","_aiPersonaToolOptions","_aiToolSelector","_ragOptions","_ragUploader","PersonaEditor","allGroups","showDelete","maxPixelsValue","ragIndexingStatuses","selectedTools","selectedToolNames","forcedToolNames","hasDefaultLlm","chatPluginEnabled","chat_enabled","allowForceTools","hasForcedTools","forcedToolsChanged","toolsChanged","personas","indexOf","default_llm","findClosestPixelValue","vision_max_pixels","pixels","maxPixelValues","updateAllGroups","findAll","backupModel","setProperties","sortPersonas","rag_uploads","showTemperature","temperature","showTopP","top_p","mappedQuestionConsolidatorLlm","question_consolidator_llm","mappedDefaultLlm","onChangeMaxPixels","entry","updateAllowedGroups","ids","toggleEnabled","toggleField","togglePriority","updateUploads","uploads","removeUpload","upload","update","sorted","toArray","priority","clear","setObjects","_aiPersonaEditor","AiPersonaListEditor","oldValue","newValue","err","AiPersonaToolOptionEditor","isBoolean","isEnum","isLlm","selectedValue","selectedLlm","onCheckboxChange","target","checked","onSelectOption","_aiPersonaToolOptionEditor","AiPersonaToolOptions","showToolOptions","allTools","toolNames","any","toolName","mappedOptions","keys","assign","_willDestroy","_emberModifier","_cookText","_fastEdit","_fastEdit2","_text","_decorators","_aiHelperLoading","AiPostHelperMenu","messageBus","menu","tooltip","MENU_STATES","menuState","loading","suggestion","copyButtonIcon","copyButtonLabel","showFastEdit","showAiButtons","streaming","lastSelectedOption","isSavingFootnote","supportsFastEdit","supportsAddFootnote","showFootnoteTooltip","modifier","element","instance","register","identifier","placement","triggers","destroy","_activeAiRequest","footnoteDisabled","item","_showUserCustomPrompts","canEditPost","highlightedTextToggleIcon","showHighlightedText","allowInsertFootnote","enable_markdown_footnotes","display_footnotes_inline","_sanitizeForFootnote","text","trim","sanitize","subscribe","channel","quoteState","postId","_updateResult","unsubscribe","done","toggleHighlightedTextPreview","performAiSuggestion","_handleStreamedResult","method","buffer","custom_prompt","suggestions","_handleProofreadOption","getByIdentifier","post_id","initialValue","closeFastEdit","cancelAiAction","abort","copySuggestion","clipboardCopy","setTimeout","mobileView","hideToolbar","insertFootnote","sanitizedSuggestion","credits","withFootnote","newRaw","raw","DURATION_PRESETS","seconds","nameKey","DurationSelector","selectedPresetId","customHours","Math","round","presetOptions","isCustom","currentDurationSeconds","parseInt","onPresetChange","updateValue","onCustomHoursChange","onChange","_dStatTiles","_adminConfigAreaCard","_spamTestModal","AiSpam","scanned_count","spam_detected","false_positives","false_negatives","daily_data","stats","isEnabled","selectedLLM","customInstructions","errors","initializeFromModel","spam_scanning_user","admin","fixScanUserNotAdmin","spamScanningUser","reload","is_enabled","llm_id","availableLLMs","autoSelectedLLM","custom_instructions","available_llms","llm_model_id","llmId","response","toString","updateLLM","showTestModal","metrics","detected","falsePositives","falseNegatives","flagging_username","spam_score_type","_categoryBadge","AiSplitTopicSuggester","SUGGESTION_TYPES","title","category","tag","input","selectedPosts","cooked","disabled","loadSuggestions","assistant","s","suggestedCategories","categories","toLowerCase","applySuggestion","updateAction","currentValue","Array","isArray","updatedTags","Set","_later","Block","shown","blinking","AiSummarySkeleton","blocks","from","nextBlockBlinkingTimer","blockBlinkingTimer","blockShownTimer","setupAnimation","firstObject","onBlinking","nextBlock","onShowing","lastObject","teardownAnimation","cancel","currentBlock","objectAt","_aceEditor","_aiToolParameterEditor","_aiToolTestModal","AiToolEditor","preset_name","presetId","pushObject","openTestModal","AiToolListEditor","PARAMETER_TYPES","AiToolParameterEditor","addParameter","required","removeParameter","index","toggleRequired","toggleEnum","addEnumValue","removeEnumValue","updateEnumValue","_computed","_multiSelect","AiToolSelector","readOnly","_template","AiTopicGist","shouldShow","preference","hasGist","gist","topic","escapedExcerpt","htmlSafe","_dateTimeInputRange","_avatar","_formatter","_chart","AiUsage","toDate","startDate","Date","endDate","selectedFeature","selectedModel","selectedPeriod","isCustomDateActive","loadingData","fetchData","start_date","end_date","feature","_cachedFeatures","_cachedModels","onFilterChange","onFeatureChanged","onModelChanged","takeUsers","start","end","users","normalizeTimeSeriesData","normalized","interval","period","dataMap","Map","d","currentMoment","isSameOrBefore","add","dateKey","existingData","total_tokens","total_cached_tokens","total_request_tokens","total_response_tokens","summary","total_requests","chartConfig","normalizedData","chartEl","document","querySelector","computedStyle","getComputedStyle","colors","getPropertyValue","request","labels","row","datasets","backgroundColor","responsive","scales","x","stacked","y","beginAtZero","availableFeatures","features","f","feature_name","availableModels","periodOptions","setPeriodDates","now","clone","onPeriodSelect","onCustomDateClick","onDateChange","onChangeDateRange","to","_startDate","_endDate","onRefreshDateRange","hash","number","lt","_dModal","AiLlmQuotaModal","quota","group_name","groups","group_id","closeModal","onSave","availableGroups","existingQuotaGroupIds","group","max_tokens","max_usages","duration_seconds","asSeconds","setGroupId","validateForm","addError","removeError","_aiSummarySkeleton","AiSummaryModal","summarizedOn","summarizedBy","newPostsSinceSummary","outdated","canRegenerate","isStreaming","streamedText","currentIndex","typingTimer","streamedTextLength","outdatedSummaryWarningText","outdatedText","topRepliesSummaryEnabled","resetSummary","_channel","postStream","topicId","baseSummarizationURL","_updateSummary","generateSummary","fetchURL","_requestSummary","regenerateSummary","ai_topic_summary","summarized_text","typeCharacter","charAt","onTextUpdate","topicSummary","newText","displayedTextLength","shortDateNoYear","updated_at","algorithm","new_posts_since_summary","can_regenerate","handleClose","triggerElement","not","array","AiToolTestModal","isLoading","parameterValues","updateParameter","runTest","stringify","ai_tool","contentType","jsonToHtml","output","_conditionalLoadingSection","_dModalCancel","ChatModalChannelSummary","chatApi","sinceHours","availableSummaries","sinceOptions","hours","channelId","summarize","since","_utilities2","DebugAiModal","justCopiedText","activeTab","next","loadApiRequestInfo","htmlContext","parsed","formattedResponse","raw_response_payload","raw_request_payload","safe","line","escapeExpression","copyRequest","copy","copyResponse","loadLog","logId","prevLog","prev_log_id","nextLog","next_log_id","requestActive","responseActive","requestClicked","preventDefault","responseClicked","ModalDiffModal","force_default_locale","triggerConfirmChanges","replaceText","ShareModal","shareKey","share_key","context","username","generateShareURL","topic_id","getAbsoluteURL","Blob","primaryLabel","deleteLink","share","clipboardCopyAsync","_copyConversation","contextValue","maxContext","allPosts","postNumbers","post_number","postNumber","findPostIdForPostNumber","findLoadedPost","updateHtmlContext","copyContext","shareConversationModal","showShareConversationModal","SpamTestModal","postUrl","scanLog","isSpam","post_url","is_spam","log","_thumbnailSuggestionItem","ThumbnailSuggestions","selectedImages","findThumbnails","isDisabled","addSelection","selection","thumbnailMarkdown","original_filename","width","height","short_url","removeSelection","thumbnail","appendSelectedImages","imageMarkdown","dEditorInput","setSelectionRange","focus","execCommand","AiCancelStreamingButton","cancelStreaming","classList","remove","_debugAiModal","AiDebugButton","shouldRender","isPostFromAiBot","debugAiResponse","_shareModal","shareAiResponse","showFeedback","RagOptions","showIndexingOptions","toggleIndexingOptions","stopPropagation","indexingOptionsText","RagUploadProgress","updatedProgress","trackProgress","onIndexingUpdate","left","total","indexed","calculateProgress","progress","ceil","fullyIndexed","_uppyUpload","_debounce","_ragUploadProgress","RagUploader","term","filteredUploads","ragUploads","uppyUpload","maxFiles","uploadUrl","preventDirectS3Uploads","uploadDone","uploadedFile","newUpload","status","statusText","debouncedSearch","config","didReceiveAttrs","inProgressUploads","cancelAllUploads","targetName","statuses","_updateTargetWithUploads","submitFiles","openPicker","cancelUploading","cancelSingleUpload","fileId","search","u","toUpperCase","onRemove","_chatChannel","ReviewableAiChatMessage","chatChannel","reviewable","chat_channel","_aiHelperSuggestions","AiCategorySuggester","untriggers","triggerIcon","topicContent","reply","fetchTopicContent","buffered","post_stream","showSuggestionButton","composerFields","showTrigger","MIN_CHARACTER_COUNT","ai_embeddings_enabled","onClose","_discourseTag","AiTagSuggester","showDropdown","tagSelectorHasValues","class","removedAppliedTag","maxTags","max_tags_per_topic","tags","AiTitleSuggester","editTopicTitleField","ThumbnailSuggestionItem","selected","selectIcon","selectLabel","toggleSelection","AISentimentDashboard","_outletArgs","helper","ai_sentiment_enabled","_aiCategorySuggester","_showAiHelper","AiCategorySuggestion","outletArgs","showComposerAiHelper","_aiTagSuggester","AiTagSuggestion","_aiTitleSuggester","AiTitleSuggestion","_default","composerModel","renderChatWarning","ai_bot_enable_chat_warning","aiBotClasses","isAiBotChat","targetRecipients","recipients","SearchResultDecoration","_aiGistToggle","topicThumbnails","enabledForRoute","_loadingSpinner","AiImageCaptionLoader","imageCaptionPopup","_keyValueStore","_dropdownSelectBox","BotSelector","container","ai_enabled_personas","reciepients","isBotMessage","allowLLMSelector","STORE_NAMESPACE","LLM_STORE_NAMESPACE","preferredPersonaStore","preferredLlmStore","botOptions","personaId","getObject","_value","metaData","ai_persona_id","setAllowLLMSelector","hasLlmSelector","llmOption","llmOptions","innerLlmOption","currentLlm","resetTargetRecipients","is_persona","enabledPersonas","setObject","innerPersona","force_default_llm","botUsername","_autoFocus","AiImageCaptionContainer","updateCaption","newCaption","saveCaption","hidePopup","resizeTextarea","style","borderTopWidth","borderBottomWidth","scrollTop","scrollHeight","showPopup","_request","toggleLoadingState","AiEditSuggestionButton","showPostAIHelper","_activeAIRequest","prompt","suggest","_aiFullPageSearch","AiFullPageSearchConnector","_args","ai_embeddings_semantic_search_enabled","_virtualElementFromTextRange","_aiPostHelperMenu","AiPostHelperTrigger","showMainButtons","originalPostHTML","postHighlighted","currentMenu","removeHighlightedText","highlightSelectedText","postElement","innerHTML","getSelection","rangeCount","range","getRangeAt","startContainer","nodeType","Node","TEXT_NODE","startOffset","newStartNode","splitText","setStart","endContainer","endOffset","walker","createTreeWalker","commonAncestorContainer","NodeFilter","SHOW_TEXT","acceptNode","node","intersectsNode","FILTER_ACCEPT","FILTER_REJECT","textNodes","currentNode","nextNode","textNode","highlight","createElement","cloneNode","appendChild","parentNode","replaceChild","removeAllRanges","showAiPostHelperMenu","component","inline","interactive","shouldRenderUnder","fallbackPlacements","trapTab","closeOnScroll","modalForMobile","menuData","opts","AiQuickSearchLoader","quickSearch","_assistantItem","_search3","AiQuickSemanticSearch","ai_embeddings_semantic_quick_search_enabled","searchTermChanged","activeGlobalSearchTerm","invalidTerm","performSearch","searchResults","resultTypes","AiQuickSearchInfo","termTooShort","_aiSplitTopicSuggester","_aiTopicGist","AiTopicGistPlacement","discourse_ai_enabled","ai_summarization_enabled","_aiSummaryModal","AiSummaryTrigger","openAiSummaryModal","AutoImageCaptionSetting","aiHelperEnabledFeatures","ai_helper_enabled_features","user_allowed_ai_auto_image_captions","ai_helper_enabled","showAiPreferences","_adminDashboardTab","AdminDashboardSentiment","filters","emotionFilters","emotions","_controller","_environment","AI_ATTRS","PreferencesAiController","saved","showAutoImageCaptionSetting","isTesting","_composer","_shareFullTopicModal","targetBot","focusComposer","fallbackToNewTopic","openOpts","PRIVATE_MESSAGE","topicTitle","archetypeId","draftKey","hasGroups","warningsDisabled","skipDraftCheck","MAX_PERSONA_USER_ID","payload","_postUpdater","MIN_LETTERS_PER_INTERVAL","addProgressDot","lastBlock","lastChild","lastNonEmptyChild","ELEMENT_NODE","dotElement","applyProgress","updaterClass","updaterInstance","progressTimer","PROGRESS_INTERVAL","streamPostText","noop","aiStreamingStatus","ensureProgress","GIVE_UP_INTERVAL","MAX_FLUSH_TIME","textContent","previousSibling","updater","startTime","oldRaw","letters","floor","substring","setRaw","setCooked","keepPolling","promises","postStatus","postUpdater","Promise","all","handleProgress","_loadMorphlex","_progressHandlers","_streamUpdater","PostUpdater","morphingOptions","beforeAttributeUpdated","attributeName","tagName","cook","offsetWidth","cookedElement","morphInner","_text3","AiTopicSummary","regenerated","showSummaryBox","canCollapseSummary","loadingSummary","processUpdate","summarized_on","collapse","fromPostNumber","toPostNumber","stream","postIds","post_ids","include_raw","generateClipboard","_helperEnabled","featureType","enableHelper","enableAssistant","can_use_assistant","canShowInPM","ai_helper_allowed_in_pm","enableFeature","privateMessage","can_use_assistant_in_post","json","html","caretCoords","offset","VirtualElementFromCaretCoords","updateRect","xOffset","yOffset","rect","top","right","bottom","toJSON","getBoundingClientRect","getClientRects","clientWidth","clientHeight","_discourse","DiscourseAiSharedConversationShowRoute","beforeModel","transition","user_option","external_links_in_new_tab","open","intent","redirect","_restrictedUser","PreferencesAiRoute","setupController","controller","defaultHomepage","Gists","localStorage","getItem","currentRoute","attributes","list","topics","ai_topic_gist","setItem","_uploads","ImageCaptionPopup","imageIndex","imageSrc","popupTrigger","showAutoCaptionLoader","matchingPlaceholder","match","IMAGE_MARKDOWN_REGEX","replacement","QuickSearch","_pluginApi","initialize","withPluginApi","addAdminPluginConfigurationNav","_adminReportEmotion","registerReportModeComponent","_aiArtifact","initializeAiArtifacts","decorateCookedElement","renderGlimmer","querySelectorAll","artifactElement","getAttribute","onlyStream","_renderGlimmer","_deprecated","_aiBotHeaderIcon","_aiCancelStreamingButton","_aiDebugButton","_aiShareButton","enabledChatBotIds","allowDebug","isGPTBot","attachHeaderIcon","headerIcons","initializeAIBotReplies","transformerRegistered","registerValueTransformer","dag","firstButtonKey","before","after","silencedKey","withSilencedDeprecations","addPostMenuButton","className","position","attachWidgetAction","initializePauseWidgetButton","initializePauseButton","modifyClass","pluginId","onAIBotStreamedReply","_super","isPrivateMessage","details","allowed_users","initializePersonaDecorator","topicController","decorateWidget","dec","widget","attach","registerWidgetShim","initializeDebugButton","getCurrentUser","_ref3","archetype","_ref4","initializeDebugWidgetButton","initializeShareButton","_ref5","_ref6","initializeShareWidgetButton","can_debug_ai_bot_conversations","registerTopicFooterButton","dependentKeys","displayed","can_share_ai_bot_conversations","ai_persona_name","initializeShareTopicButton","_api","_chatModalChannelSummary","apiInitializer","chatService","canSummarize","can_summarize","userCanChat","registerChatComposerButton","translatedLabel","activeChannel","_aiComposerHelperMenu","onToolbarCreate","toolbar","composerContent","addButton","preventFocus","shortcutAction","condition","sendAction","initializeAiHelperTrigger","buttonAttrs","needsImprovedCaption","caption","fetchImageCaption","imageUrl","urlType","image_url","image_url_type","extractError","addSaveableUserOptionField","addComposerImageWrapperButton","contains","buttonWrapper","closest","autoCaptionAllowedGroups","ai_auto_image_caption_allowed_groups","groupId","addComposerUploadMarkdownResolver","isImage","getUploadMarkdown","thumbnail_width","thumbnail_height","composerBeforeSave","resolve","reject","localePrefix","autoCaptionEnabled","imageUploads","imagesToCaption","image","needsBetterCaptions","keyValueStore","autoCaptionPromptKey","seenAutoCaptionPrompt","confirmButtonLabel","cancelButtonLabel","markdown","getUploadUrlFromMarkdown","regex","RegExp","newReply","didCancel","classNameBindings","_basicTopicList","RelatedTopics","ai_embeddings_semantic_related_topics_enabled","registerMoreTopicsTab","relatedTopics","Superclass","related_topics","relatedTopicsCache","_setSuggestedTopics","setup","allowList"],"sources":["discourse/plugins/discourse-ai/discourse/admin-discourse-ai-plugin-route-map.js","discourse/plugins/discourse-ai/discourse/admin-discourse-ai-route-map.js","discourse/plugins/discourse-ai/discourse/admin/adapters/ai-embedding.js","discourse/plugins/discourse-ai/discourse/admin/adapters/ai-llm.js","discourse/plugins/discourse-ai/discourse/admin/adapters/ai-persona.js","discourse/plugins/discourse-ai/discourse/admin/adapters/ai-tool.js","discourse/plugins/discourse-ai/discourse/admin/models/ai-embedding.js","discourse/plugins/discourse-ai/discourse/admin/models/ai-llm.js","discourse/plugins/discourse-ai/discourse/admin/models/ai-persona.js","discourse/plugins/discourse-ai/discourse/admin/models/ai-tool.js","discourse/plugins/discourse-ai/discourse/components/admin-report-emotion.js","discourse/plugins/discourse-ai/discourse/components/ai-artifact.js","discourse/plugins/discourse-ai/discourse/components/ai-bot-header-icon.js","discourse/plugins/discourse-ai/discourse/components/ai-composer-helper-menu.js","discourse/plugins/discourse-ai/discourse/components/ai-embedding-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-embeddings-list-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-forced-tool-strategy-selector.js","discourse/plugins/discourse-ai/discourse/components/ai-full-page-search.js","discourse/plugins/discourse-ai/discourse/components/ai-gist-toggle.js","discourse/plugins/discourse-ai/discourse/components/ai-helper-custom-prompt.js","discourse/plugins/discourse-ai/discourse/components/ai-helper-loading.js","discourse/plugins/discourse-ai/discourse/components/ai-helper-options-list.js","discourse/plugins/discourse-ai/discourse/components/ai-indicator-wave.js","discourse/plugins/discourse-ai/discourse/components/ai-llm-editor-form.js","discourse/plugins/discourse-ai/discourse/components/ai-llm-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-llm-selector.js","discourse/plugins/discourse-ai/discourse/components/ai-llms-list-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-persona-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-persona-list-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-persona-tool-option-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-persona-tool-options.js","discourse/plugins/discourse-ai/discourse/components/ai-post-helper-menu.js","discourse/plugins/discourse-ai/discourse/components/ai-quota-duration-selector.js","discourse/plugins/discourse-ai/discourse/components/ai-spam.js","discourse/plugins/discourse-ai/discourse/components/ai-split-topic-suggester.js","discourse/plugins/discourse-ai/discourse/components/ai-summary-skeleton.js","discourse/plugins/discourse-ai/discourse/components/ai-tool-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-tool-list-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-tool-parameter-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-tool-selector.js","discourse/plugins/discourse-ai/discourse/components/ai-topic-gist.js","discourse/plugins/discourse-ai/discourse/components/ai-usage.js","discourse/plugins/discourse-ai/discourse/components/modal/ai-llm-quota-modal.js","discourse/plugins/discourse-ai/discourse/components/modal/ai-summary-modal.js","discourse/plugins/discourse-ai/discourse/components/modal/ai-tool-test-modal.js","discourse/plugins/discourse-ai/discourse/components/modal/chat-modal-channel-summary.js","discourse/plugins/discourse-ai/discourse/components/modal/debug-ai-modal.js","discourse/plugins/discourse-ai/discourse/components/modal/diff-modal.js","discourse/plugins/discourse-ai/discourse/components/modal/share-full-topic-modal.js","discourse/plugins/discourse-ai/discourse/components/modal/share-modal.js","discourse/plugins/discourse-ai/discourse/components/modal/spam-test-modal.js","discourse/plugins/discourse-ai/discourse/components/modal/thumbnail-suggestions.js","discourse/plugins/discourse-ai/discourse/components/model-accuracies.js","discourse/plugins/discourse-ai/discourse/components/post-menu/ai-cancel-streaming-button.js","discourse/plugins/discourse-ai/discourse/components/post-menu/ai-debug-button.js","discourse/plugins/discourse-ai/discourse/components/post-menu/ai-share-button.js","discourse/plugins/discourse-ai/discourse/components/rag-options.js","discourse/plugins/discourse-ai/discourse/components/rag-upload-progress.js","discourse/plugins/discourse-ai/discourse/components/rag-uploader.js","discourse/plugins/discourse-ai/discourse/components/reviewable-ai-chat-message.js","discourse/plugins/discourse-ai/discourse/components/reviewable-ai-post.js","discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-category-suggester.js","discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-tag-suggester.js","discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-title-suggester.js","discourse/plugins/discourse-ai/discourse/components/thumbnail-suggestion-item.js","discourse/plugins/discourse-ai/discourse/connectors/admin-dashboard-tabs-after/admin-sentiment-dashbboard.js","discourse/plugins/discourse-ai/discourse/connectors/after-composer-category-input/ai-category-suggestion.js","discourse/plugins/discourse-ai/discourse/connectors/after-composer-tag-input/ai-tag-suggestion.js","discourse/plugins/discourse-ai/discourse/connectors/after-composer-title-input/ai-title-suggestion.js","discourse/plugins/discourse-ai/discourse/connectors/after-d-editor/composer-open.js","discourse/plugins/discourse-ai/discourse/connectors/after-search-result-entry/search-result-decoration.js","discourse/plugins/discourse-ai/discourse/connectors/before-create-topic-button/topic-list-gist-toggle.js","discourse/plugins/discourse-ai/discourse/connectors/composer-after-save-or-cancel/ai-image-caption-loader.js","discourse/plugins/discourse-ai/discourse/connectors/composer-fields/persona-llm-selector.js","discourse/plugins/discourse-ai/discourse/connectors/edit-topic-category__after/ai-category-suggestion.js","discourse/plugins/discourse-ai/discourse/connectors/edit-topic-tags__after/ai-tag-suggestion.js","discourse/plugins/discourse-ai/discourse/connectors/edit-topic-title__after/ai-title-suggestion.js","discourse/plugins/discourse-ai/discourse/connectors/editor-preview/ai-image-caption-container.js","discourse/plugins/discourse-ai/discourse/connectors/fast-edit-footer-after/ai-edit-suggestion-button.js","discourse/plugins/discourse-ai/discourse/connectors/full-page-search-below-search-header/ai-full-page-search.js","discourse/plugins/discourse-ai/discourse/connectors/post-text-buttons/ai-post-helper-trigger.js","discourse/plugins/discourse-ai/discourse/connectors/search-menu-before-advanced-search/ai-quick-search-loader.js","discourse/plugins/discourse-ai/discourse/connectors/search-menu-initial-options/ai-quick-semantic-search.js","discourse/plugins/discourse-ai/discourse/connectors/search-menu-results-top/ai-quick-search-info.js","discourse/plugins/discourse-ai/discourse/connectors/split-new-topic-category-after/ai-category-suggestion.js","discourse/plugins/discourse-ai/discourse/connectors/split-new-topic-tag-after/ai-tag-suggestion.js","discourse/plugins/discourse-ai/discourse/connectors/split-new-topic-title-after/ai-title-suggestion.js","discourse/plugins/discourse-ai/discourse/connectors/topic-list-before-category/ai-topic-gist-placement.js","discourse/plugins/discourse-ai/discourse/connectors/topic-map-expanded-after/ai-summary-trigger.js","discourse/plugins/discourse-ai/discourse/connectors/user-preferences-nav/ai-preferences.js","discourse/plugins/discourse-ai/discourse/controllers/admin-dashboard-sentiment.js","discourse/plugins/discourse-ai/discourse/controllers/preferences-ai.js","discourse/plugins/discourse-ai/discourse/discourse-ai-shared-conversation-show-route-map.js","discourse/plugins/discourse-ai/discourse/lib/ai-bot-helper.js","discourse/plugins/discourse-ai/discourse/lib/ai-helper-suggestions.js","discourse/plugins/discourse-ai/discourse/lib/ai-streamer/progress-handlers.js","discourse/plugins/discourse-ai/discourse/lib/ai-streamer/updaters/post-updater.js","discourse/plugins/discourse-ai/discourse/lib/ai-streamer/updaters/stream-updater.js","discourse/plugins/discourse-ai/discourse/lib/ai-topic-summary.js","discourse/plugins/discourse-ai/discourse/lib/copy-conversation.js","discourse/plugins/discourse-ai/discourse/lib/show-ai-helper.js","discourse/plugins/discourse-ai/discourse/lib/utilities.js","discourse/plugins/discourse-ai/discourse/lib/virtual-element-from-caret-coords.js","discourse/plugins/discourse-ai/discourse/preferences-ai-route-map.js","discourse/plugins/discourse-ai/discourse/routes/discourse-ai-shared-conversation-show.js","discourse/plugins/discourse-ai/discourse/routes/preferences-ai.js","discourse/plugins/discourse-ai/discourse/services/gists.js","discourse/plugins/discourse-ai/discourse/services/image-caption-popup.js","discourse/plugins/discourse-ai/discourse/services/quick-search.js","discourse/plugins/discourse-ai/discourse/templates/admin-dashboard-sentiment.js","discourse/plugins/discourse-ai/discourse/templates/connectors/after-d-editor/composer-open.js","discourse/plugins/discourse-ai/discourse/templates/preferences/ai.js","discourse/plugins/discourse-ai/initializers/admin-plugin-configuration-nav.js","discourse/plugins/discourse-ai/initializers/admin-reports.js","discourse/plugins/discourse-ai/initializers/ai-artifacts.js","discourse/plugins/discourse-ai/initializers/ai-bot-replies.js","discourse/plugins/discourse-ai/initializers/ai-chat-summarization.js","discourse/plugins/discourse-ai/initializers/ai-helper.js","discourse/plugins/discourse-ai/initializers/ai-image-caption.js","discourse/plugins/discourse-ai/initializers/ai-semantic-search.js","discourse/plugins/discourse-ai/initializers/related-topics.js","discourse/plugins/discourse-ai/lib/discourse-markdown/ai-tags.js"],"sourcesContent":["define(\"discourse/plugins/discourse-ai/discourse/admin-discourse-ai-plugin-route-map\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = {\n    resource: \"admin.adminPlugins.show\",\n    path: \"/plugins\",\n    map() {\n      this.route(\"discourse-ai-personas\", {\n        path: \"ai-personas\"\n      }, function () {\n        this.route(\"new\");\n        this.route(\"edit\", {\n          path: \"/:id/edit\"\n        });\n      });\n      this.route(\"discourse-ai-llms\", {\n        path: \"ai-llms\"\n      }, function () {\n        this.route(\"new\");\n        this.route(\"edit\", {\n          path: \"/:id/edit\"\n        });\n      });\n      this.route(\"discourse-ai-tools\", {\n        path: \"ai-tools\"\n      }, function () {\n        this.route(\"new\");\n        this.route(\"edit\", {\n          path: \"/:id/edit\"\n        });\n      });\n      this.route(\"discourse-ai-spam\", {\n        path: \"ai-spam\"\n      });\n      this.route(\"discourse-ai-usage\", {\n        path: \"ai-usage\"\n      });\n      this.route(\"discourse-ai-embeddings\", {\n        path: \"ai-embeddings\"\n      }, function () {\n        this.route(\"new\");\n        this.route(\"edit\", {\n          path: \"/:id/edit\"\n        });\n      });\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/discourse/admin-discourse-ai-route-map\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = {\n    resource: \"admin.dashboard\",\n    path: \"/dashboard\",\n    map() {\n      this.route(\"admin.dashboardSentiment\", {\n        path: \"/dashboard/sentiment\",\n        resetNamespace: true\n      });\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/discourse/admin/adapters/ai-embedding\", [\"exports\", \"discourse/adapters/rest\"], function (_exports, _rest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class Adapter extends _rest.default {\n    jsonMode = true;\n    basePath() {\n      return \"/admin/plugins/discourse-ai/\";\n    }\n    pathFor(store, type, findArgs) {\n      // removes underscores which are implemented in base\n      let path = this.basePath(store, type, findArgs) + store.pluralize(this.apiNameFor(type));\n      return this.appendQueryParams(path, findArgs);\n    }\n    apiNameFor() {\n      return \"ai-embedding\";\n    }\n  }\n  _exports.default = Adapter;\n});","define(\"discourse/plugins/discourse-ai/discourse/admin/adapters/ai-llm\", [\"exports\", \"discourse/adapters/rest\"], function (_exports, _rest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class Adapter extends _rest.default {\n    jsonMode = true;\n    basePath() {\n      return \"/admin/plugins/discourse-ai/\";\n    }\n    pathFor(store, type, findArgs) {\n      // removes underscores which are implemented in base\n      let path = this.basePath(store, type, findArgs) + store.pluralize(this.apiNameFor(type));\n      return this.appendQueryParams(path, findArgs);\n    }\n    apiNameFor() {\n      return \"ai-llm\";\n    }\n  }\n  _exports.default = Adapter;\n});","define(\"discourse/plugins/discourse-ai/discourse/admin/adapters/ai-persona\", [\"exports\", \"discourse/adapters/rest\"], function (_exports, _rest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class Adapter extends _rest.default {\n    jsonMode = true;\n    basePath() {\n      return \"/admin/plugins/discourse-ai/\";\n    }\n    pathFor(store, type, findArgs) {\n      // removes underscores which are implemented in base\n      let path = this.basePath(store, type, findArgs) + store.pluralize(this.apiNameFor(type));\n      return this.appendQueryParams(path, findArgs);\n    }\n    apiNameFor() {\n      return \"ai-persona\";\n    }\n  }\n  _exports.default = Adapter;\n});","define(\"discourse/plugins/discourse-ai/discourse/admin/adapters/ai-tool\", [\"exports\", \"discourse/adapters/rest\"], function (_exports, _rest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiToolAdapter extends _rest.default {\n    jsonMode = true;\n    basePath() {\n      return \"/admin/plugins/discourse-ai/\";\n    }\n    pathFor(store, type, findArgs) {\n      // removes underscores which are implemented in base\n      let path = this.basePath(store, type, findArgs) + store.pluralize(this.apiNameFor(type));\n      return this.appendQueryParams(path, findArgs);\n    }\n    apiNameFor() {\n      return \"ai-tool\";\n    }\n  }\n  _exports.default = AiToolAdapter;\n});","define(\"discourse/plugins/discourse-ai/discourse/admin/models/ai-embedding\", [\"exports\", \"discourse/lib/ajax\", \"discourse/models/rest\"], function (_exports, _ajax, _rest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiEmbedding extends _rest.default {\n    createProperties() {\n      return this.getProperties(\"id\", \"display_name\", \"dimensions\", \"provider\", \"tokenizer_class\", \"dimensions\", \"url\", \"api_key\", \"max_sequence_length\", \"provider_params\", \"pg_function\", \"embed_prompt\", \"search_prompt\", \"matryoshka_dimensions\");\n    }\n    updateProperties() {\n      const attrs = this.createProperties();\n      attrs.id = this.id;\n      return attrs;\n    }\n    async testConfig() {\n      return await (0, _ajax.ajax)(`/admin/plugins/discourse-ai/ai-embeddings/test.json`, {\n        data: {\n          ai_embedding: this.createProperties()\n        }\n      });\n    }\n    workingCopy() {\n      const attrs = this.createProperties();\n      return this.store.createRecord(\"ai-embedding\", attrs);\n    }\n  }\n  _exports.default = AiEmbedding;\n});","define(\"discourse/plugins/discourse-ai/discourse/admin/models/ai-llm\", [\"exports\", \"discourse/lib/ajax\", \"discourse/models/rest\"], function (_exports, _ajax, _rest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiLlm extends _rest.default {\n    createProperties() {\n      return this.getProperties(\"id\", \"display_name\", \"name\", \"provider\", \"tokenizer\", \"max_prompt_tokens\", \"url\", \"api_key\", \"enabled_chat_bot\", \"provider_params\", \"vision_enabled\");\n    }\n    updateProperties() {\n      const attrs = this.createProperties();\n      attrs.id = this.id;\n      attrs.llm_quotas = this.llm_quotas;\n      return attrs;\n    }\n    async testConfig(llmConfig) {\n      return await (0, _ajax.ajax)(\"/admin/plugins/discourse-ai/ai-llms/test.json\", {\n        data: {\n          ai_llm: llmConfig ?? this.createProperties()\n        }\n      });\n    }\n  }\n  _exports.default = AiLlm;\n});","define(\"discourse/plugins/discourse-ai/discourse/admin/models/ai-persona\", [\"exports\", \"@glimmer/tracking\", \"discourse/lib/ajax\", \"discourse/models/rest\"], function (_exports, _tracking, _ajax, _rest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const CREATE_ATTRIBUTES = [\"id\", \"name\", \"description\", \"tools\", \"system_prompt\", \"allowed_group_ids\", \"enabled\", \"system\", \"priority\", \"top_p\", \"temperature\", \"user_id\", \"default_llm\", \"force_default_llm\", \"user\", \"max_context_posts\", \"vision_enabled\", \"vision_max_pixels\", \"rag_uploads\", \"rag_chunk_tokens\", \"rag_chunk_overlap_tokens\", \"rag_conversation_chunks\", \"question_consolidator_llm\", \"allow_chat\", \"tool_details\", \"forced_tool_count\", \"allow_personal_messages\", \"allow_topic_mentions\", \"allow_chat_channel_mentions\", \"allow_chat_direct_messages\"];\n  const SYSTEM_ATTRIBUTES = [\"id\", \"allowed_group_ids\", \"enabled\", \"system\", \"priority\", \"tools\", \"user_id\", \"default_llm\", \"force_default_llm\", \"user\", \"max_context_posts\", \"vision_enabled\", \"vision_max_pixels\", \"rag_uploads\", \"rag_chunk_tokens\", \"rag_chunk_overlap_tokens\", \"rag_conversation_chunks\", \"question_consolidator_llm\", \"tool_details\", \"allow_personal_messages\", \"allow_topic_mentions\", \"allow_chat_channel_mentions\", \"allow_chat_direct_messages\"];\n  class ToolOption {\n    static #_ = (() => dt7948.g(this.prototype, \"value\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #value = (() => (dt7948.i(this, \"value\"), void 0))();\n  }\n  class AiPersona extends _rest.default {\n    // this code is here to convert the wire schema to easier to work with object\n    // on the wire we pass in/out tools as an Array.\n    // [[ToolName, {option1: value, option2: value}, force], ToolName2, ToolName3]\n    // So we rework this into a \"tools\" property and nested toolOptions\n    init(properties) {\n      this.forcedTools = [];\n      if (properties.tools) {\n        properties.tools = properties.tools.map(tool => {\n          if (typeof tool === \"string\") {\n            return tool;\n          } else {\n            let [toolId, options, force] = tool;\n            for (let optionId in options) {\n              if (!options.hasOwnProperty(optionId)) {\n                continue;\n              }\n              this.getToolOption(toolId, optionId).value = options[optionId];\n            }\n            if (force) {\n              this.forcedTools.push(toolId);\n            }\n            return toolId;\n          }\n        });\n      }\n      super.init(properties);\n      this.tools = properties.tools;\n    }\n    async createUser() {\n      const result = await (0, _ajax.ajax)(`/admin/plugins/discourse-ai/ai-personas/${this.id}/create-user.json`, {\n        type: \"POST\"\n      });\n      this.user = result.user;\n      this.user_id = this.user.id;\n      return this.user;\n    }\n    getToolOption(toolId, optionId) {\n      this.toolOptions ||= {};\n      this.toolOptions[toolId] ||= {};\n      return this.toolOptions[toolId][optionId] ||= new ToolOption();\n    }\n    populateToolOptions(attrs) {\n      if (!attrs.tools) {\n        return;\n      }\n      let toolsWithOptions = [];\n      attrs.tools.forEach(toolId => {\n        if (typeof toolId !== \"string\") {\n          toolId = toolId[0];\n        }\n        let force = this.forcedTools.includes(toolId);\n        if (this.toolOptions && this.toolOptions[toolId]) {\n          let options = this.toolOptions[toolId];\n          let optionsWithValues = {};\n          for (let optionId in options) {\n            if (!options.hasOwnProperty(optionId)) {\n              continue;\n            }\n            let option = options[optionId];\n            optionsWithValues[optionId] = option.value;\n          }\n          toolsWithOptions.push([toolId, optionsWithValues, force]);\n        } else {\n          toolsWithOptions.push([toolId, {}, force]);\n        }\n      });\n      attrs.tools = toolsWithOptions;\n    }\n    updateProperties() {\n      let attrs = this.system ? this.getProperties(SYSTEM_ATTRIBUTES) : this.getProperties(CREATE_ATTRIBUTES);\n      attrs.id = this.id;\n      this.populateToolOptions(attrs);\n      return attrs;\n    }\n    createProperties() {\n      let attrs = this.getProperties(CREATE_ATTRIBUTES);\n      this.populateToolOptions(attrs);\n      return attrs;\n    }\n    workingCopy() {\n      let attrs = this.getProperties(CREATE_ATTRIBUTES);\n      this.populateToolOptions(attrs);\n      const persona = AiPersona.create(attrs);\n      persona.forcedTools = (this.forcedTools || []).slice();\n      persona.forced_tool_count = this.forced_tool_count || -1;\n      return persona;\n    }\n  }\n  _exports.default = AiPersona;\n});","define(\"discourse/plugins/discourse-ai/discourse/admin/models/ai-tool\", [\"exports\", \"@ember-compat/tracked-built-ins\", \"discourse/models/rest\"], function (_exports, _trackedBuiltIns, _rest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const CREATE_ATTRIBUTES = [\"id\", \"name\", \"description\", \"parameters\", \"script\", \"summary\", \"rag_uploads\", \"rag_chunk_tokens\", \"rag_chunk_overlap_tokens\", \"enabled\"];\n  class AiTool extends _rest.default {\n    createProperties() {\n      return this.getProperties(CREATE_ATTRIBUTES);\n    }\n    updateProperties() {\n      return this.getProperties(CREATE_ATTRIBUTES);\n    }\n    trackParameters(parameters) {\n      return new _trackedBuiltIns.TrackedArray(parameters?.map(p => {\n        const parameter = new _trackedBuiltIns.TrackedObject(p);\n        if (parameter.enum && parameter.enum.length) {\n          parameter.enum = new _trackedBuiltIns.TrackedArray(parameter.enum);\n        } else {\n          parameter.enum = null;\n        }\n        return parameter;\n      }));\n    }\n    workingCopy() {\n      const attrs = this.getProperties(CREATE_ATTRIBUTES);\n      attrs.parameters = this.trackParameters(attrs.parameters);\n      return this.store.createRecord(\"ai-tool\", attrs);\n    }\n  }\n  _exports.default = AiTool;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/admin-report-emotion\", [\"exports\", \"@ember/component\", \"@ember-decorators/component\", \"discourse-common/lib/get-url\", \"@ember/template-factory\"], function (_exports, _component, _component2, _getUrl, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"cell title\">\n    {{#if this.model.icon}}\n      {{d-icon this.model.icon}}\n    {{/if}}\n    {{this.model.title}}\n  </div>\n  \n  <div class=\"cell value today-count\">\n    <a href={{this.todayLink}}>\n      {{number this.model.todayCount}}\n    </a>\n  </div>\n  \n  <div\n    class=\"cell value yesterday-count {{this.model.yesterdayTrend}}\"\n    title={{this.model.yesterdayCountTitle}}\n  >\n    <a href={{this.yesterdayLink}}>\n      {{number this.model.yesterdayCount}}\n    </a>\n    {{d-icon this.model.yesterdayTrendIcon}}\n  </div>\n  \n  <div\n    class=\"cell value sevendays-count {{this.model.sevenDaysTrend}}\"\n    title={{this.model.sevenDaysCountTitle}}\n  >\n    <a href={{this.lastSevenDaysLink}}>\n      {{number this.model.lastSevenDaysCount}}\n    </a>\n    {{d-icon this.model.sevenDaysTrendIcon}}\n  </div>\n  \n  <div\n    class=\"cell value thirty-days-count {{this.model.thirtyDaysTrend}}\"\n    title={{this.model.thirtyDaysCountTitle}}\n  >\n  \n    <a href={{this.lastThirtyDaysLink}}>\n      {{number this.model.lastThirtyDaysCount}}\n    </a>\n    {{#if this.model.canDisplayTrendIcon}}\n      {{d-icon this.model.thirtyDaysTrendIcon}}\n    {{/if}}\n  </div>\n  */\n  {\n    \"id\": \"6OhgoeVo\",\n    \"block\": \"[[[10,0],[14,0,\\\"cell title\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"model\\\",\\\"icon\\\"]],[[[1,\\\"    \\\"],[1,[28,[35,2],[[30,0,[\\\"model\\\",\\\"icon\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[1,[30,0,[\\\"model\\\",\\\"title\\\"]]],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[10,0],[14,0,\\\"cell value today-count\\\"],[12],[1,\\\"\\\\n  \\\"],[10,3],[15,6,[30,0,[\\\"todayLink\\\"]]],[12],[1,\\\"\\\\n    \\\"],[1,[28,[35,4],[[30,0,[\\\"model\\\",\\\"todayCount\\\"]]],null]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[10,0],[15,0,[29,[\\\"cell value yesterday-count \\\",[30,0,[\\\"model\\\",\\\"yesterdayTrend\\\"]]]]],[15,\\\"title\\\",[30,0,[\\\"model\\\",\\\"yesterdayCountTitle\\\"]]],[12],[1,\\\"\\\\n  \\\"],[10,3],[15,6,[30,0,[\\\"yesterdayLink\\\"]]],[12],[1,\\\"\\\\n    \\\"],[1,[28,[35,4],[[30,0,[\\\"model\\\",\\\"yesterdayCount\\\"]]],null]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[1,[28,[35,2],[[30,0,[\\\"model\\\",\\\"yesterdayTrendIcon\\\"]]],null]],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[10,0],[15,0,[29,[\\\"cell value sevendays-count \\\",[30,0,[\\\"model\\\",\\\"sevenDaysTrend\\\"]]]]],[15,\\\"title\\\",[30,0,[\\\"model\\\",\\\"sevenDaysCountTitle\\\"]]],[12],[1,\\\"\\\\n  \\\"],[10,3],[15,6,[30,0,[\\\"lastSevenDaysLink\\\"]]],[12],[1,\\\"\\\\n    \\\"],[1,[28,[35,4],[[30,0,[\\\"model\\\",\\\"lastSevenDaysCount\\\"]]],null]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[1,[28,[35,2],[[30,0,[\\\"model\\\",\\\"sevenDaysTrendIcon\\\"]]],null]],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[10,0],[15,0,[29,[\\\"cell value thirty-days-count \\\",[30,0,[\\\"model\\\",\\\"thirtyDaysTrend\\\"]]]]],[15,\\\"title\\\",[30,0,[\\\"model\\\",\\\"thirtyDaysCountTitle\\\"]]],[12],[1,\\\"\\\\n\\\\n  \\\"],[10,3],[15,6,[30,0,[\\\"lastThirtyDaysLink\\\"]]],[12],[1,\\\"\\\\n    \\\"],[1,[28,[35,4],[[30,0,[\\\"model\\\",\\\"lastThirtyDaysCount\\\"]]],null]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"model\\\",\\\"canDisplayTrendIcon\\\"]],[[[1,\\\"    \\\"],[1,[28,[35,2],[[30,0,[\\\"model\\\",\\\"thirtyDaysTrendIcon\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]],null],[13]],[],false,[\\\"div\\\",\\\"if\\\",\\\"d-icon\\\",\\\"a\\\",\\\"number\\\"]]\",\n    \"moduleName\": \"discourse/plugins/discourse-ai/discourse/components/admin-report-emotion.hbs\",\n    \"isStrictMode\": false\n  });\n  const AdminReportEmotion = dt7948.c(class AdminReportEmotion extends _component.default {\n    get todayLink() {\n      let date = moment().format(\"YYYY-MM-DD\");\n      return this._filterURL(date);\n    }\n    get yesterdayLink() {\n      let date = moment().subtract(1, \"day\").format(\"YYYY-MM-DD\");\n      return this._filterURL(date);\n    }\n    get lastSevenDaysLink() {\n      let date = moment().subtract(1, \"week\").format(\"YYYY-MM-DD\");\n      return this._filterURL(date);\n    }\n    get lastThirtyDaysLink() {\n      let date = moment().subtract(1, \"month\").format(\"YYYY-MM-DD\");\n      return this._filterURL(date);\n    }\n    _baseFilter() {\n      return \"/filter?q=activity-after%3A\";\n    }\n    _model() {\n      return \"%20order%3A\" + this.model.type;\n    }\n    _filterURL(date) {\n      return (0, _getUrl.default)(`${this._baseFilter()}${date}${this._model()}`);\n    }\n  }, [(0, _component2.attributeBindings)(\"model.description:title\"), (0, _component2.classNames)(\"admin-report-counters\")]);\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AdminReportEmotion);\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-artifact\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/helpers/html-class\", \"discourse-common/lib/get-url\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _service, _dButton, _htmlClass, _getUrl, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // note the panel for artifact full screen can not be at position 0,0\n  // otherwise this hack will not activate.\n  // https://github.com/discourse/discourse/blob/b8325f2190a8c0a9022405c219faeac6f0f98ca5/app/assets/javascripts/discourse/app/components/scrolling-post-stream.js#L77-L77\n  // this will cause post stream to navigate to a different post\n  class AiArtifactComponent extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"expanded\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #expanded = (() => (dt7948.i(this, \"expanded\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"showingArtifact\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showingArtifact = (() => (dt7948.i(this, \"showingArtifact\"), void 0))();\n    constructor() {\n      super(...arguments);\n      this.keydownHandler = this.handleKeydown.bind(this);\n      this.popStateHandler = this.handlePopState.bind(this);\n      window.addEventListener(\"popstate\", this.popStateHandler);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      window.removeEventListener(\"keydown\", this.keydownHandler);\n      window.removeEventListener(\"popstate\", this.popStateHandler);\n    }\n    handleKeydown(event) {\n      if (event.key === \"Escape\" || event.key === \"Esc\") {\n        history.back();\n      }\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"handleKeydown\", [_object.action]))();\n    handlePopState(event) {\n      const state = event.state;\n      this.expanded = state?.artifactId === this.args.artifactId;\n      if (!this.expanded) {\n        window.removeEventListener(\"keydown\", this.keydownHandler);\n      }\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"handlePopState\", [_object.action]))();\n    get requireClickToRun() {\n      if (this.showingArtifact) {\n        return false;\n      }\n      return this.siteSettings.ai_artifact_security === \"strict\";\n    }\n    get artifactUrl() {\n      let url = (0, _getUrl.default)(`/discourse-ai/ai-bot/artifacts/${this.args.artifactId}`);\n      if (this.args.artifactVersion) {\n        url = `${url}/${this.args.artifactVersion}`;\n      }\n      return url;\n    }\n    showArtifact() {\n      this.showingArtifact = true;\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"showArtifact\", [_object.action]))();\n    toggleView() {\n      if (!this.expanded) {\n        window.history.pushState({\n          artifactId: this.args.artifactId\n        }, \"\", window.location.href + \"#artifact-fullscreen\");\n        window.addEventListener(\"keydown\", this.keydownHandler);\n      } else {\n        history.back();\n      }\n      this.expanded = !this.expanded;\n    }\n    static #_7 = (() => dt7948.n(this.prototype, \"toggleView\", [_object.action]))();\n    get wrapperClasses() {\n      return `ai-artifact__wrapper ${this.expanded ? \"ai-artifact__expanded\" : \"\"}`;\n    }\n    static #_8 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.expanded}}\n          {{htmlClass \"ai-artifact-expanded\"}}\n        {{/if}}\n        <div class={{this.wrapperClasses}}>\n          <div class=\"ai-artifact__panel--wrapper\">\n            <div class=\"ai-artifact__panel\">\n              <DButton\n                class=\"btn-flat btn-icon-text\"\n                @icon=\"discourse-compress\"\n                @label=\"discourse_ai.ai_artifact.collapse_view_label\"\n                @action={{this.toggleView}}\n              />\n            </div>\n          </div>\n          {{#if this.requireClickToRun}}\n            <div class=\"ai-artifact__click-to-run\">\n              <DButton\n                class=\"btn btn-primary\"\n                @icon=\"play\"\n                @label=\"discourse_ai.ai_artifact.click_to_run_label\"\n                @action={{this.showArtifact}}\n              />\n            </div>\n          {{else}}\n            <iframe\n              title=\"AI Artifact\"\n              src={{this.artifactUrl}}\n              width=\"100%\"\n              frameborder=\"0\"\n            ></iframe>\n          {{/if}}\n          {{#unless this.requireClickToRun}}\n            <div class=\"ai-artifact__footer\">\n              <DButton\n                class=\"btn-flat btn-icon-text ai-artifact__expand-button\"\n                @icon=\"discourse-expand\"\n                @label=\"discourse_ai.ai_artifact.expand_view_label\"\n                @action={{this.toggleView}}\n              />\n            </div>\n          {{/unless}}\n        </div>\n      \n    */\n    {\n      \"id\": \"0mlyY9nU\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"expanded\\\"]],[[[1,\\\"      \\\"],[1,[28,[32,0],[\\\"ai-artifact-expanded\\\"],null]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,0],[15,0,[30,0,[\\\"wrapperClasses\\\"]]],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"ai-artifact__panel--wrapper\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-artifact__panel\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,1],[[24,0,\\\"btn-flat btn-icon-text\\\"]],[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\"],[\\\"discourse-compress\\\",\\\"discourse_ai.ai_artifact.collapse_view_label\\\",[30,0,[\\\"toggleView\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"requireClickToRun\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"ai-artifact__click-to-run\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,1],[[24,0,\\\"btn btn-primary\\\"]],[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\"],[\\\"play\\\",\\\"discourse_ai.ai_artifact.click_to_run_label\\\",[30,0,[\\\"showArtifact\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,\\\"iframe\\\"],[14,\\\"title\\\",\\\"AI Artifact\\\"],[15,\\\"src\\\",[30,0,[\\\"artifactUrl\\\"]]],[14,\\\"width\\\",\\\"100%\\\"],[14,\\\"frameborder\\\",\\\"0\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]]],[41,[51,[30,0,[\\\"requireClickToRun\\\"]]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"ai-artifact__footer\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,1],[[24,0,\\\"btn-flat btn-icon-text ai-artifact__expand-button\\\"]],[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\"],[\\\"discourse-expand\\\",\\\"discourse_ai.ai_artifact.expand_view_label\\\",[30,0,[\\\"toggleView\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[],false,[\\\"if\\\",\\\"unless\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-artifact.js\",\n      \"scope\": () => [_htmlClass.default, _dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiArtifactComponent;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-bot-header-icon\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse-common/helpers/i18n\", \"discourse/plugins/discourse-ai/discourse/lib/ai-bot-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _dButton, _i18n, _aiBotHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiBotHeaderIcon extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"composer\", [_service.service]))();\n    #composer = (() => (dt7948.i(this, \"composer\"), void 0))();\n    get bots() {\n      const availableBots = this.currentUser.ai_enabled_chat_bots.filter(bot => !bot.is_persosna).filter(Boolean);\n      return availableBots ? availableBots.map(bot => bot.model_name) : [];\n    }\n    get showHeaderButton() {\n      return this.bots.length > 0 && this.siteSettings.ai_bot_add_to_header;\n    }\n    compose() {\n      (0, _aiBotHelper.composeAiBotMessage)(this.bots[0], this.composer);\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"compose\", [_object.action]))();\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.showHeaderButton}}\n          <li>\n            <DButton\n              @action={{this.compose}}\n              @icon=\"robot\"\n              title={{i18n \"discourse_ai.ai_bot.shortcut_title\"}}\n              class=\"ai-bot-button icon btn-flat\"\n            />\n          </li>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"NL7Zjh9n\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showHeaderButton\\\"]],[[[1,\\\"      \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[32,0],[[16,\\\"title\\\",[28,[32,1],[\\\"discourse_ai.ai_bot.shortcut_title\\\"],null]],[24,0,\\\"ai-bot-button icon btn-flat\\\"]],[[\\\"@action\\\",\\\"@icon\\\"],[[30,0,[\\\"compose\\\"]],\\\"robot\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-bot-header-icon.js\",\n      \"scope\": () => [_dButton.default, _i18n.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiBotHeaderIcon;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-composer-helper-menu\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/owner\", \"@ember/service\", \"discourse-i18n\", \"float-kit/components/d-toast\", \"float-kit/lib/d-toast-instance\", \"discourse/plugins/discourse-ai/discourse/components/ai-helper-options-list\", \"discourse/plugins/discourse-ai/discourse/components/modal/diff-modal\", \"discourse/plugins/discourse-ai/discourse/components/modal/thumbnail-suggestions\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _owner, _service, _discourseI18n, _dToast, _dToastInstance, _aiHelperOptionsList, _diffModal, _thumbnailSuggestions, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiComposerHelperMenu extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"site\", [_service.service]))();\n    #site = (() => (dt7948.i(this, \"site\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"newSelectedText\", [_tracking.tracked]))();\n    #newSelectedText = (() => (dt7948.i(this, \"newSelectedText\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"diff\", [_tracking.tracked]))();\n    #diff = (() => (dt7948.i(this, \"diff\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"customPromptValue\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #customPromptValue = (() => (dt7948.i(this, \"customPromptValue\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"noContentError\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #noContentError = (() => (dt7948.i(this, \"noContentError\"), void 0))();\n    prompts = [];\n    promptTypes = {};\n    constructor() {\n      super(...arguments);\n      if (this.args.data.toolbarEvent.getText().length === 0) {\n        this.noContentError = true;\n      }\n    }\n    get helperOptions() {\n      let prompts = this.currentUser?.ai_helper_prompts;\n      prompts = prompts.filter(p => p.location.includes(\"composer\")).filter(p => p.name !== \"generate_titles\").map(p => {\n        // AI helper by default returns interface locale on translations\n        // Since we want site default translations (and we are using: force_default_locale)\n        // we need to replace the translated_name with the site default locale name\n        const siteLocale = this.siteSettings.default_locale;\n        const availableLocales = JSON.parse(this.siteSettings.available_locales);\n        const locale = availableLocales.find(l => l.value === siteLocale);\n        const translatedName = (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.context_menu.translate_prompt\", {\n          language: locale.name\n        });\n        if (p.name === \"translate\") {\n          return {\n            ...p,\n            translated_name: translatedName\n          };\n        }\n        return p;\n      });\n      // Find the custom_prompt object and move it to the beginning of the array\n      const customPromptIndex = prompts.findIndex(p => p.name === \"custom_prompt\");\n      if (customPromptIndex !== -1) {\n        const customPrompt = prompts.splice(customPromptIndex, 1)[0];\n        prompts.unshift(customPrompt);\n      }\n      if (!this.currentUser?.can_use_custom_prompts) {\n        prompts = prompts.filter(p => p.name !== \"custom_prompt\");\n      }\n      prompts.forEach(p => {\n        this.prompts[p.id] = p;\n      });\n      this.promptTypes = prompts.reduce((memo, p) => {\n        memo[p.name] = p.prompt_type;\n        return memo;\n      }, {});\n      return prompts;\n    }\n    get toast() {\n      const owner = (0, _owner.getOwner)(this);\n      const options = {\n        close: () => this.args.close(),\n        duration: 3000,\n        data: {\n          theme: \"error\",\n          icon: \"triangle-exclamation\",\n          message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.no_content_error\")\n        }\n      };\n      const custom = class CustomToastInstance extends _dToastInstance.default {\n        constructor() {\n          super(owner, options);\n        }\n        close() {\n          this.options.close();\n        }\n        static #_ = (() => dt7948.n(this.prototype, \"close\", [_object.action]))();\n      };\n      return new custom(owner, options);\n    }\n    async suggestChanges(option) {\n      await this.args.close();\n      if (option.name === \"illustrate_post\") {\n        return this.modal.show(_thumbnailSuggestions.default, {\n          model: {\n            mode: option.id,\n            selectedText: this.args.data.selectedText,\n            thumbnails: this.thumbnailSuggestions\n          }\n        });\n      }\n      return this.modal.show(_diffModal.default, {\n        model: {\n          mode: option.id,\n          selectedText: this.args.data.selectedText,\n          revert: this.undoAiAction,\n          toolbarEvent: this.args.data.toolbarEvent,\n          customPromptValue: this.customPromptValue\n        }\n      });\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"suggestChanges\", [_object.action]))();\n    closeMenu() {\n      this.customPromptValue = \"\";\n      this.args.close();\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"closeMenu\", [_object.action]))();\n    static #_11 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.noContentError}}\n          <DToast @toast={{this.toast}} />\n        {{else}}\n          <div class=\"ai-composer-helper-menu\">\n            {{#if this.site.mobileView}}\n              <div class=\"ai-composer-helper-menu__selected-text\">\n                {{@data.selectedText}}\n              </div>\n            {{/if}}\n    \n            <AiHelperOptionsList\n              @options={{this.helperOptions}}\n              @customPromptValue={{this.customPromptValue}}\n              @performAction={{this.suggestChanges}}\n              @shortcutVisible={{true}}\n            />\n          </div>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"2ahoy4kS\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"noContentError\\\"]],[[[1,\\\"      \\\"],[8,[32,0],null,[[\\\"@toast\\\"],[[30,0,[\\\"toast\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"ai-composer-helper-menu\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"site\\\",\\\"mobileView\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"ai-composer-helper-menu__selected-text\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[30,1,[\\\"selectedText\\\"]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n        \\\"],[8,[32,1],null,[[\\\"@options\\\",\\\"@customPromptValue\\\",\\\"@performAction\\\",\\\"@shortcutVisible\\\"],[[30,0,[\\\"helperOptions\\\"]],[30,0,[\\\"customPromptValue\\\"]],[30,0,[\\\"suggestChanges\\\"]],true]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"  \\\"]],[\\\"@data\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-composer-helper-menu.js\",\n      \"scope\": () => [_dToast.default, _aiHelperOptionsList.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiComposerHelperMenu;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-embedding-editor\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/component\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/render-modifiers/modifiers/did-update\", \"@ember/runloop\", \"@ember/service\", \"discourse/components/back-button\", \"discourse/components/d-button\", \"discourse/helpers/d-icon\", \"discourse/lib/ajax-error\", \"discourse-i18n\", \"admin/components/admin-section-landing-item\", \"admin/components/admin-section-landing-wrapper\", \"select-kit/components/combo-box\", \"float-kit/components/d-tooltip\", \"truth-helpers/helpers/not\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _component2, _helper, _modifier, _object, _didInsert, _didUpdate, _runloop, _service, _backButton, _dButton, _dIcon, _ajaxError, _discourseI18n, _adminSectionLandingItem, _adminSectionLandingWrapper, _comboBox, _dTooltip, _not, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiEmbeddingEditor extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"toasts\", [_service.service]))();\n    #toasts = (() => (dt7948.i(this, \"toasts\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"dialog\", [_service.service]))();\n    #dialog = (() => (dt7948.i(this, \"dialog\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"store\", [_service.service]))();\n    #store = (() => (dt7948.i(this, \"store\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"isSaving\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isSaving = (() => (dt7948.i(this, \"isSaving\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"selectedPreset\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #selectedPreset = (() => (dt7948.i(this, \"selectedPreset\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"testRunning\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #testRunning = (() => (dt7948.i(this, \"testRunning\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"testResult\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #testResult = (() => (dt7948.i(this, \"testResult\"), void 0))();\n    static #_9 = (() => dt7948.g(this.prototype, \"testError\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #testError = (() => (dt7948.i(this, \"testError\"), void 0))();\n    static #_10 = (() => dt7948.g(this.prototype, \"apiKeySecret\", [_tracking.tracked], function () {\n      return true;\n    }))();\n    #apiKeySecret = (() => (dt7948.i(this, \"apiKeySecret\"), void 0))();\n    static #_11 = (() => dt7948.g(this.prototype, \"editingModel\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #editingModel = (() => (dt7948.i(this, \"editingModel\"), void 0))();\n    get selectedProviders() {\n      const t = provName => {\n        return (0, _discourseI18n.i18n)(`discourse_ai.embeddings.providers.${provName}`);\n      };\n      return this.args.embeddings.resultSetMeta.providers.map(prov => {\n        return {\n          id: prov,\n          name: t(prov)\n        };\n      });\n    }\n    get distanceFunctions() {\n      const t = df => {\n        return (0, _discourseI18n.i18n)(`discourse_ai.embeddings.distance_functions.${df}`);\n      };\n      return this.args.embeddings.resultSetMeta.distance_functions.map(df => {\n        let iconName;\n        if (df === \"<=>\") {\n          iconName = \"discourse-spaceship-operator\";\n        } else if (df === \"<#>\") {\n          iconName = \"discourse-negative-inner-product\";\n        }\n        return {\n          id: df,\n          name: t(df),\n          icon: iconName\n        };\n      });\n    }\n    get presets() {\n      const presets = this.args.embeddings.resultSetMeta.presets.map(preset => {\n        return {\n          name: preset.display_name,\n          id: preset.preset_id,\n          provider: preset.provider\n        };\n      });\n      presets.unshiftObject({\n        name: (0, _discourseI18n.i18n)(\"discourse_ai.embeddings.configure_manually\"),\n        id: \"manual\",\n        provider: \"fake\"\n      });\n      return presets;\n    }\n    get showPresets() {\n      return !this.selectedPreset && this.args.model.isNew;\n    }\n    get metaProviderParams() {\n      return this.args.embeddings.resultSetMeta.provider_params[this.editingModel?.provider] || {};\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"metaProviderParams\", [(0, _object.computed)(\"editingModel.provider\")]))();\n    get testErrorMessage() {\n      return (0, _discourseI18n.i18n)(\"discourse_ai.llms.tests.failure\", {\n        error: this.testError\n      });\n    }\n    get displayTestResult() {\n      return this.testRunning || this.testResult !== null;\n    }\n    configurePreset(preset) {\n      this.selectedPreset = this.args.embeddings.resultSetMeta.presets.findBy(\"preset_id\", preset.id) || {};\n      this.editingModel = this.store.createRecord(\"ai-embedding\", this.selectedPreset).workingCopy();\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"configurePreset\", [_object.action]))();\n    updateModel() {\n      this.editingModel = this.args.model.workingCopy();\n    }\n    static #_14 = (() => dt7948.n(this.prototype, \"updateModel\", [_object.action]))();\n    makeApiKeySecret() {\n      this.apiKeySecret = true;\n    }\n    static #_15 = (() => dt7948.n(this.prototype, \"makeApiKeySecret\", [_object.action]))();\n    toggleApiKeySecret() {\n      this.apiKeySecret = !this.apiKeySecret;\n    }\n    static #_16 = (() => dt7948.n(this.prototype, \"toggleApiKeySecret\", [_object.action]))();\n    async save() {\n      this.isSaving = true;\n      const isNew = this.args.model.isNew;\n      try {\n        await this.editingModel.save();\n        if (isNew) {\n          this.args.embeddings.addObject(this.editingModel);\n          this.router.transitionTo(\"adminPlugins.show.discourse-ai-embeddings.index\");\n        } else {\n          this.toasts.success({\n            data: {\n              message: (0, _discourseI18n.i18n)(\"discourse_ai.embeddings.saved\")\n            },\n            duration: 2000\n          });\n        }\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      } finally {\n        (0, _runloop.later)(() => {\n          this.isSaving = false;\n        }, 1000);\n      }\n    }\n    static #_17 = (() => dt7948.n(this.prototype, \"save\", [_object.action]))();\n    async test() {\n      this.testRunning = true;\n      try {\n        const configTestResult = await this.editingModel.testConfig();\n        this.testResult = configTestResult.success;\n        if (this.testResult) {\n          this.testError = null;\n        } else {\n          this.testError = configTestResult.error;\n        }\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      } finally {\n        (0, _runloop.later)(() => {\n          this.testRunning = false;\n        }, 1000);\n      }\n    }\n    static #_18 = (() => dt7948.n(this.prototype, \"test\", [_object.action]))();\n    delete() {\n      return this.dialog.confirm({\n        message: (0, _discourseI18n.i18n)(\"discourse_ai.embeddings.confirm_delete\"),\n        didConfirm: () => {\n          return this.args.model.destroyRecord().then(() => {\n            this.args.llms.removeObject(this.args.model);\n            this.router.transitionTo(\"adminPlugins.show.discourse-ai-embeddings.index\");\n          }).catch(_ajaxError.popupAjaxError);\n        }\n      });\n    }\n    static #_19 = (() => dt7948.n(this.prototype, \"delete\", [_object.action]))();\n    resetForm() {\n      this.selectedPreset = null;\n      this.editingModel = null;\n    }\n    static #_20 = (() => dt7948.n(this.prototype, \"resetForm\", [_object.action]))();\n    static #_21 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <form\n          {{didInsert this.updateModel @model.id}}\n          {{didUpdate this.updateModel @model.id}}\n          class=\"form-horizontal ai-embedding-editor\"\n        >\n          {{#if this.showPresets}}\n            <BackButton\n              @route=\"adminPlugins.show.discourse-ai-embeddings\"\n              @label=\"discourse_ai.embeddings.back\"\n            />\n            <div class=\"control-group\">\n              <h2>{{i18n \"discourse_ai.embeddings.presets\"}}</h2>\n              <AdminSectionLandingWrapper>\n                {{#each this.presets as |preset|}}\n                  <AdminSectionLandingItem\n                    @titleLabelTranslated={{preset.name}}\n                    @taglineLabel={{concat\n                      \"discourse_ai.embeddings.providers.\"\n                      preset.provider\n                    }}\n                    data-preset-id={{preset.id}}\n                    class=\"ai-llms-list-editor__templates-list-item\"\n                  >\n                    <:buttons as |buttons|>\n                      <buttons.Default\n                        @action={{fn this.configurePreset preset}}\n                        @icon=\"gear\"\n                        @label=\"discourse_ai.llms.preconfigured.button\"\n                      />\n                    </:buttons>\n                  </AdminSectionLandingItem>\n    \n                {{/each}}\n              </AdminSectionLandingWrapper>\n    \n            </div>\n    \n          {{else}}\n            {{#if this.editingModel.isNew}}\n              <DButton\n                @action={{this.resetForm}}\n                @label=\"back_button\"\n                @icon=\"chevron-left\"\n                class=\"btn-flat back-button\"\n              />\n            {{else}}\n              <BackButton\n                @route=\"adminPlugins.show.discourse-ai-embeddings\"\n                @label=\"discourse_ai.embeddings.back\"\n              />\n            {{/if}}\n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.embeddings.display_name\"}}</label>\n              <Input\n                class=\"ai-embedding-editor-input ai-embedding-editor__display-name\"\n                @type=\"text\"\n                @value={{this.editingModel.display_name}}\n              />\n            </div>\n    \n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.embeddings.provider\"}}</label>\n              <ComboBox\n                @value={{this.editingModel.provider}}\n                @content={{this.selectedProviders}}\n                @class=\"ai-embedding-editor__provider\"\n              />\n            </div>\n    \n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.embeddings.url\"}}</label>\n              <Input\n                class=\"ai-embedding-editor-input ai-embedding-editor__url\"\n                @type=\"text\"\n                @value={{this.editingModel.url}}\n                required=\"true\"\n              />\n            </div>\n    \n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.embeddings.api_key\"}}</label>\n              <div class=\"ai-embedding-editor__secret-api-key-group\">\n                <Input\n                  @value={{this.editingModel.api_key}}\n                  class=\"ai-embedding-editor-input ai-embedding-editor__api-key\"\n                  @type={{if this.apiKeySecret \"password\" \"text\"}}\n                  required=\"true\"\n                  {{on \"focusout\" this.makeApiKeySecret}}\n                />\n                <DButton\n                  @action={{this.toggleApiKeySecret}}\n                  @icon=\"far-eye-slash\"\n                />\n              </div>\n            </div>\n    \n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.embeddings.tokenizer\"}}</label>\n              <ComboBox\n                @value={{this.editingModel.tokenizer_class}}\n                @content={{@embeddings.resultSetMeta.tokenizers}}\n                @class=\"ai-embedding-editor__tokenizer\"\n              />\n            </div>\n    \n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.embeddings.dimensions\"}}</label>\n              <Input\n                @type=\"number\"\n                class=\"ai-embedding-editor-input ai-embedding-editor__dimensions\"\n                step=\"any\"\n                min=\"0\"\n                lang=\"en\"\n                @value={{this.editingModel.dimensions}}\n                required=\"true\"\n                disabled={{not this.editingModel.isNew}}\n              />\n              {{#if this.editingModel.isNew}}\n                <DTooltip\n                  @icon=\"circle-exclamation\"\n                  @content={{i18n\n                    \"discourse_ai.embeddings.hints.dimensions_warning\"\n                  }}\n                />\n              {{/if}}\n            </div>\n    \n            <div class=\"control-group ai-embedding-editor__matryoshka_dimensions\">\n              <Input\n                @type=\"checkbox\"\n                @checked={{this.editingModel.matryoshka_dimensions}}\n              />\n              <label>{{i18n \"discourse_ai.embeddings.matryoshka_dimensions\"}}\n              </label>\n              <DTooltip\n                @icon=\"circle-question\"\n                @content={{i18n\n                  \"discourse_ai.embeddings.hints.matryoshka_dimensions\"\n                }}\n              />\n            </div>\n    \n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.embeddings.embed_prompt\"}}</label>\n              <Textarea\n                class=\"ai-embedding-editor-input ai-embedding-editor__embed_prompt\"\n                @value={{this.editingModel.embed_prompt}}\n              />\n              <DTooltip\n                @icon=\"circle-question\"\n                @content={{i18n \"discourse_ai.embeddings.hints.embed_prompt\"}}\n              />\n            </div>\n    \n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.embeddings.search_prompt\"}}</label>\n              <Textarea\n                class=\"ai-embedding-editor-input ai-embedding-editor__search_prompt\"\n                @value={{this.editingModel.search_prompt}}\n              />\n              <DTooltip\n                @icon=\"circle-question\"\n                @content={{i18n \"discourse_ai.embeddings.hints.search_prompt\"}}\n              />\n            </div>\n    \n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.embeddings.max_sequence_length\"}}</label>\n              <Input\n                @type=\"number\"\n                class=\"ai-embedding-editor-input ai-embedding-editor__max_sequence_length\"\n                step=\"any\"\n                min=\"0\"\n                lang=\"en\"\n                @value={{this.editingModel.max_sequence_length}}\n                required=\"true\"\n              />\n              <DTooltip\n                @icon=\"circle-question\"\n                @content={{i18n \"discourse_ai.embeddings.hints.sequence_length\"}}\n              />\n            </div>\n    \n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.embeddings.distance_function\"}}</label>\n              <ComboBox\n                @value={{this.editingModel.pg_function}}\n                @content={{this.distanceFunctions}}\n                @class=\"ai-embedding-editor__distance_functions\"\n              />\n              <DTooltip\n                @icon=\"circle-question\"\n                @content={{i18n \"discourse_ai.embeddings.hints.distance_function\"}}\n              />\n            </div>\n    \n            {{#each-in this.metaProviderParams as |field type|}}\n              <div\n                class=\"control-group ai-embedding-editor-provider-param__{{type}}\"\n              >\n                <label>\n                  {{i18n (concat \"discourse_ai.embeddings.provider_fields.\" field)}}\n                </label>\n                <Input\n                  @type=\"text\"\n                  class=\"ai-embedding-editor-input ai-embedding-editor__{{field}}\"\n                  @value={{mut (get this.editingModel.provider_params field)}}\n                />\n              </div>\n            {{/each-in}}\n    \n            <div class=\"control-group ai-embedding-editor__action_panel\">\n              <DButton\n                class=\"ai-embedding-editor__test\"\n                @action={{this.test}}\n                @disabled={{this.testRunning}}\n                @label=\"discourse_ai.embeddings.tests.title\"\n              />\n    \n              <DButton\n                class=\"btn-primary ai-embedding-editor__save\"\n                @action={{this.save}}\n                @disabled={{this.isSaving}}\n                @label=\"discourse_ai.embeddings.save\"\n              />\n              {{#unless this.editingModel.isNew}}\n                <DButton\n                  @action={{this.delete}}\n                  class=\"btn-danger ai-embedding-editor__delete\"\n                  @label=\"discourse_ai.embeddings.delete\"\n                />\n              {{/unless}}\n    \n              <div class=\"control-group ai-embedding-editor-tests\">\n                {{#if this.displayTestResult}}\n                  {{#if this.testRunning}}\n                    <div class=\"spinner small\"></div>\n                    {{i18n \"discourse_ai.embeddings.tests.running\"}}\n                  {{else}}\n                    {{#if this.testResult}}\n                      <div class=\"ai-embedding-editor-tests__success\">\n                        {{icon \"check\"}}\n                        {{i18n \"discourse_ai.embeddings.tests.success\"}}\n                      </div>\n                    {{else}}\n                      <div class=\"ai-embedding-editor-tests__failure\">\n                        {{icon \"xmark\"}}\n                        {{this.testErrorMessage}}\n                      </div>\n                    {{/if}}\n                  {{/if}}\n                {{/if}}\n              </div>\n            </div>\n          {{/if}}\n        </form>\n      \n    */\n    {\n      \"id\": \"2SjrnrXv\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[11,\\\"form\\\"],[24,0,\\\"form-horizontal ai-embedding-editor\\\"],[4,[32,0],[[30,0,[\\\"updateModel\\\"]],[30,1,[\\\"id\\\"]]],null],[4,[32,1],[[30,0,[\\\"updateModel\\\"]],[30,1,[\\\"id\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showPresets\\\"]],[[[1,\\\"        \\\"],[8,[32,2],null,[[\\\"@route\\\",\\\"@label\\\"],[\\\"adminPlugins.show.discourse-ai-embeddings\\\",\\\"discourse_ai.embeddings.back\\\"]],null],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"h2\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.embeddings.presets\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,4],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"presets\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[32,5],[[16,\\\"data-preset-id\\\",[30,2,[\\\"id\\\"]]],[24,0,\\\"ai-llms-list-editor__templates-list-item\\\"]],[[\\\"@titleLabelTranslated\\\",\\\"@taglineLabel\\\"],[[30,2,[\\\"name\\\"]],[28,[32,6],[\\\"discourse_ai.embeddings.providers.\\\",[30,2,[\\\"provider\\\"]]],null]]],[[\\\"buttons\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[30,3,[\\\"Default\\\"]],null,[[\\\"@action\\\",\\\"@icon\\\",\\\"@label\\\"],[[28,[32,7],[[30,0,[\\\"configurePreset\\\"]],[30,2]],null],\\\"gear\\\",\\\"discourse_ai.llms.preconfigured.button\\\"]],null],[1,\\\"\\\\n                \\\"]],[3]]]]],[1,\\\"\\\\n\\\\n\\\"]],[2]],null],[1,\\\"          \\\"]],[]]]]],[1,\\\"\\\\n\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n\\\"]],[]],[[[41,[30,0,[\\\"editingModel\\\",\\\"isNew\\\"]],[[[1,\\\"          \\\"],[8,[32,8],[[24,0,\\\"btn-flat back-button\\\"]],[[\\\"@action\\\",\\\"@label\\\",\\\"@icon\\\"],[[30,0,[\\\"resetForm\\\"]],\\\"back_button\\\",\\\"chevron-left\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[8,[32,2],null,[[\\\"@route\\\",\\\"@label\\\"],[\\\"adminPlugins.show.discourse-ai-embeddings\\\",\\\"discourse_ai.embeddings.back\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.embeddings.display_name\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,9],[[24,0,\\\"ai-embedding-editor-input ai-embedding-editor__display-name\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"editingModel\\\",\\\"display_name\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.embeddings.provider\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,10],null,[[\\\"@value\\\",\\\"@content\\\",\\\"@class\\\"],[[30,0,[\\\"editingModel\\\",\\\"provider\\\"]],[30,0,[\\\"selectedProviders\\\"]],\\\"ai-embedding-editor__provider\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.embeddings.url\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,9],[[24,0,\\\"ai-embedding-editor-input ai-embedding-editor__url\\\"],[24,\\\"required\\\",\\\"true\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"editingModel\\\",\\\"url\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.embeddings.api_key\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"ai-embedding-editor__secret-api-key-group\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[32,9],[[24,0,\\\"ai-embedding-editor-input ai-embedding-editor__api-key\\\"],[24,\\\"required\\\",\\\"true\\\"],[4,[32,11],[\\\"focusout\\\",[30,0,[\\\"makeApiKeySecret\\\"]]],null]],[[\\\"@value\\\",\\\"@type\\\"],[[30,0,[\\\"editingModel\\\",\\\"api_key\\\"]],[52,[30,0,[\\\"apiKeySecret\\\"]],\\\"password\\\",\\\"text\\\"]]],null],[1,\\\"\\\\n            \\\"],[8,[32,8],null,[[\\\"@action\\\",\\\"@icon\\\"],[[30,0,[\\\"toggleApiKeySecret\\\"]],\\\"far-eye-slash\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.embeddings.tokenizer\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,10],null,[[\\\"@value\\\",\\\"@content\\\",\\\"@class\\\"],[[30,0,[\\\"editingModel\\\",\\\"tokenizer_class\\\"]],[30,4,[\\\"resultSetMeta\\\",\\\"tokenizers\\\"]],\\\"ai-embedding-editor__tokenizer\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.embeddings.dimensions\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,9],[[24,0,\\\"ai-embedding-editor-input ai-embedding-editor__dimensions\\\"],[24,\\\"step\\\",\\\"any\\\"],[24,\\\"min\\\",\\\"0\\\"],[24,\\\"lang\\\",\\\"en\\\"],[24,\\\"required\\\",\\\"true\\\"],[16,\\\"disabled\\\",[28,[32,12],[[30,0,[\\\"editingModel\\\",\\\"isNew\\\"]]],null]]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"editingModel\\\",\\\"dimensions\\\"]]]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"editingModel\\\",\\\"isNew\\\"]],[[[1,\\\"            \\\"],[8,[32,13],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-exclamation\\\",[28,[32,3],[\\\"discourse_ai.embeddings.hints.dimensions_warning\\\"],null]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"control-group ai-embedding-editor__matryoshka_dimensions\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,9],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"editingModel\\\",\\\"matryoshka_dimensions\\\"]]]],null],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.embeddings.matryoshka_dimensions\\\"],null]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[8,[32,13],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,3],[\\\"discourse_ai.embeddings.hints.matryoshka_dimensions\\\"],null]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.embeddings.embed_prompt\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,14],[[24,0,\\\"ai-embedding-editor-input ai-embedding-editor__embed_prompt\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"editingModel\\\",\\\"embed_prompt\\\"]]]],null],[1,\\\"          \\\"],[8,[32,13],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,3],[\\\"discourse_ai.embeddings.hints.embed_prompt\\\"],null]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.embeddings.search_prompt\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,14],[[24,0,\\\"ai-embedding-editor-input ai-embedding-editor__search_prompt\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"editingModel\\\",\\\"search_prompt\\\"]]]],null],[1,\\\"          \\\"],[8,[32,13],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,3],[\\\"discourse_ai.embeddings.hints.search_prompt\\\"],null]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.embeddings.max_sequence_length\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,9],[[24,0,\\\"ai-embedding-editor-input ai-embedding-editor__max_sequence_length\\\"],[24,\\\"step\\\",\\\"any\\\"],[24,\\\"min\\\",\\\"0\\\"],[24,\\\"lang\\\",\\\"en\\\"],[24,\\\"required\\\",\\\"true\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"editingModel\\\",\\\"max_sequence_length\\\"]]]],null],[1,\\\"\\\\n          \\\"],[8,[32,13],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,3],[\\\"discourse_ai.embeddings.hints.sequence_length\\\"],null]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.embeddings.distance_function\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,10],null,[[\\\"@value\\\",\\\"@content\\\",\\\"@class\\\"],[[30,0,[\\\"editingModel\\\",\\\"pg_function\\\"]],[30,0,[\\\"distanceFunctions\\\"]],\\\"ai-embedding-editor__distance_functions\\\"]],null],[1,\\\"\\\\n          \\\"],[8,[32,13],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,3],[\\\"discourse_ai.embeddings.hints.distance_function\\\"],null]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[42,[28,[31,3],[[30,0,[\\\"metaProviderParams\\\"]]],null],null,[[[1,\\\"          \\\"],[10,0],[15,0,[29,[\\\"control-group ai-embedding-editor-provider-param__\\\",[30,5]]]],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[28,[32,3],[[28,[32,6],[\\\"discourse_ai.embeddings.provider_fields.\\\",[30,6]],null]],null]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[8,[32,9],[[16,0,[29,[\\\"ai-embedding-editor-input ai-embedding-editor__\\\",[30,6]]]]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[28,[31,4],[[28,[32,15],[[30,0,[\\\"editingModel\\\",\\\"provider_params\\\"]],[30,6]],null]],null]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[5,6]],null],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"control-group ai-embedding-editor__action_panel\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,8],[[24,0,\\\"ai-embedding-editor__test\\\"]],[[\\\"@action\\\",\\\"@disabled\\\",\\\"@label\\\"],[[30,0,[\\\"test\\\"]],[30,0,[\\\"testRunning\\\"]],\\\"discourse_ai.embeddings.tests.title\\\"]],null],[1,\\\"\\\\n\\\\n          \\\"],[8,[32,8],[[24,0,\\\"btn-primary ai-embedding-editor__save\\\"]],[[\\\"@action\\\",\\\"@disabled\\\",\\\"@label\\\"],[[30,0,[\\\"save\\\"]],[30,0,[\\\"isSaving\\\"]],\\\"discourse_ai.embeddings.save\\\"]],null],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"editingModel\\\",\\\"isNew\\\"]]],[[[1,\\\"            \\\"],[8,[32,8],[[24,0,\\\"btn-danger ai-embedding-editor__delete\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"delete\\\"]],\\\"discourse_ai.embeddings.delete\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"control-group ai-embedding-editor-tests\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"displayTestResult\\\"]],[[[41,[30,0,[\\\"testRunning\\\"]],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"spinner small\\\"],[12],[13],[1,\\\"\\\\n                \\\"],[1,[28,[32,3],[\\\"discourse_ai.embeddings.tests.running\\\"],null]],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"testResult\\\"]],[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"ai-embedding-editor-tests__success\\\"],[12],[1,\\\"\\\\n                    \\\"],[1,[28,[32,16],[\\\"check\\\"],null]],[1,\\\"\\\\n                    \\\"],[1,[28,[32,3],[\\\"discourse_ai.embeddings.tests.success\\\"],null]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                  \\\"],[10,0],[14,0,\\\"ai-embedding-editor-tests__failure\\\"],[12],[1,\\\"\\\\n                    \\\"],[1,[28,[32,16],[\\\"xmark\\\"],null]],[1,\\\"\\\\n                    \\\"],[1,[30,0,[\\\"testErrorMessage\\\"]]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]]]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@model\\\",\\\"preset\\\",\\\"buttons\\\",\\\"@embeddings\\\",\\\"type\\\",\\\"field\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\",\\\"-each-in\\\",\\\"mut\\\",\\\"unless\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-embedding-editor.js\",\n      \"scope\": () => [_didInsert.default, _didUpdate.default, _backButton.default, _discourseI18n.i18n, _adminSectionLandingWrapper.default, _adminSectionLandingItem.default, _helper.concat, _helper.fn, _dButton.default, _component2.Input, _comboBox.default, _modifier.on, _not.default, _dTooltip.default, _component2.Textarea, _helper.get, _dIcon.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiEmbeddingEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-embeddings-list-editor\", [\"exports\", \"@glimmer/component\", \"@ember/helper\", \"@ember/service\", \"discourse/components/d-breadcrumbs-item\", \"discourse/components/d-button\", \"discourse/components/d-page-subheader\", \"discourse-i18n\", \"admin/components/admin-config-area-empty-list\", \"float-kit/components/d-tooltip\", \"discourse/plugins/discourse-ai/discourse/components/ai-embedding-editor\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _service, _dBreadcrumbsItem, _dButton, _dPageSubheader, _discourseI18n, _adminConfigAreaEmptyList, _dTooltip, _aiEmbeddingEditor, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiEmbeddingsListEditor extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"adminPluginNavManager\", [_service.service]))();\n    #adminPluginNavManager = (() => (dt7948.i(this, \"adminPluginNavManager\"), void 0))();\n    get hasEmbeddingElements() {\n      return this.args.embeddings.length !== 0;\n    }\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DBreadcrumbsItem\n          @path=\"/admin/plugins/{{this.adminPluginNavManager.currentPlugin.name}}/ai-embeddings\"\n          @label={{i18n \"discourse_ai.embeddings.short_title\"}}\n        />\n        <section class=\"ai-embeddings-list-editor admin-detail\">\n          {{#if @currentEmbedding}}\n            <AiEmbeddingEditor\n              @model={{@currentEmbedding}}\n              @embeddings={{@embeddings}}\n            />\n          {{else}}\n            <DPageSubheader\n              @titleLabel={{i18n \"discourse_ai.embeddings.short_title\"}}\n              @descriptionLabel={{i18n \"discourse_ai.embeddings.description\"}}\n              @learnMoreUrl=\"https://meta.discourse.org/t/discourse-ai-embeddings/259603\"\n            >\n              <:actions as |actions|>\n                <actions.Primary\n                  @label=\"discourse_ai.embeddings.new\"\n                  @route=\"adminPlugins.show.discourse-ai-embeddings.new\"\n                  @icon=\"plus\"\n                  class=\"ai-embeddings-list-editor__new-button\"\n                />\n              </:actions>\n            </DPageSubheader>\n    \n            {{#if this.hasEmbeddingElements}}\n              <table class=\"d-admin-table\">\n                <thead>\n                  <tr>\n                    <th>{{i18n \"discourse_ai.embeddings.display_name\"}}</th>\n                    <th>{{i18n \"discourse_ai.embeddings.provider\"}}</th>\n                    <th></th>\n                  </tr>\n                </thead>\n                <tbody>\n                  {{#each @embeddings as |embedding|}}\n                    <tr class=\"ai-embeddings-list__row d-admin-row__content\">\n                      <td class=\"d-admin-row__overview\">\n                        <div class=\"ai-embeddings-list__name\">\n                          <strong>\n                            {{embedding.display_name}}\n                          </strong>\n                        </div>\n                      </td>\n                      <td class=\"d-admin-row__detail\">\n                        <div class=\"d-admin-row__mobile-label\">\n                          {{i18n \"discourse_ai.embeddings.provider\"}}\n                        </div>\n                        {{i18n\n                          (concat\n                            \"discourse_ai.embeddings.providers.\" embedding.provider\n                          )\n                        }}\n                      </td>\n                      <td class=\"d-admin-row__controls\">\n                        {{#if embedding.seeded}}\n                          <DTooltip\n                            class=\"ai-embeddings-list__edit-disabled-tooltip\"\n                          >\n                            <:trigger>\n                              <DButton\n                                class=\"btn btn-default btn-small disabled\"\n                                @label=\"discourse_ai.embeddings.edit\"\n                              />\n                            </:trigger>\n                            <:content>\n                              {{i18n \"discourse_ai.embeddings.seeded_warning\"}}\n                            </:content>\n                          </DTooltip>\n                        {{else}}\n                          <DButton\n                            class=\"btn btn-default btn-small ai-embeddings-list__edit-button\"\n                            @label=\"discourse_ai.embeddings.edit\"\n                            @route=\"adminPlugins.show.discourse-ai-embeddings.edit\"\n                            @routeModels={{embedding.id}}\n                          />\n                        {{/if}}\n                      </td>\n                    </tr>\n                  {{/each}}\n                </tbody>\n              </table>\n            {{else}}\n              <AdminConfigAreaEmptyList\n                @ctaLabel=\"discourse_ai.embeddings.new\"\n                @ctaRoute=\"adminPlugins.show.discourse-ai-embeddings.new\"\n                @ctaClass=\"ai-embeddings-list-editor__empty-new-button\"\n                @emptyLabel=\"discourse_ai.embeddings.empty\"\n              />\n            {{/if}}\n          {{/if}}\n        </section>\n      \n    */\n    {\n      \"id\": \"MiS/W6iF\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@path\\\",\\\"@label\\\"],[[29,[\\\"/admin/plugins/\\\",[30,0,[\\\"adminPluginNavManager\\\",\\\"currentPlugin\\\",\\\"name\\\"]],\\\"/ai-embeddings\\\"]],[28,[32,1],[\\\"discourse_ai.embeddings.short_title\\\"],null]]],null],[1,\\\"\\\\n    \\\"],[10,\\\"section\\\"],[14,0,\\\"ai-embeddings-list-editor admin-detail\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"        \\\"],[8,[32,2],null,[[\\\"@model\\\",\\\"@embeddings\\\"],[[30,1],[30,2]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[32,3],null,[[\\\"@titleLabel\\\",\\\"@descriptionLabel\\\",\\\"@learnMoreUrl\\\"],[[28,[32,1],[\\\"discourse_ai.embeddings.short_title\\\"],null],[28,[32,1],[\\\"discourse_ai.embeddings.description\\\"],null],\\\"https://meta.discourse.org/t/discourse-ai-embeddings/259603\\\"]],[[\\\"actions\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,3,[\\\"Primary\\\"]],[[24,0,\\\"ai-embeddings-list-editor__new-button\\\"]],[[\\\"@label\\\",\\\"@route\\\",\\\"@icon\\\"],[\\\"discourse_ai.embeddings.new\\\",\\\"adminPlugins.show.discourse-ai-embeddings.new\\\",\\\"plus\\\"]],null],[1,\\\"\\\\n          \\\"]],[3]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"hasEmbeddingElements\\\"]],[[[1,\\\"          \\\"],[10,\\\"table\\\"],[14,0,\\\"d-admin-table\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.embeddings.display_name\\\"],null]],[13],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.embeddings.provider\\\"],null]],[13],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[12],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,2]],null]],null],null,[[[1,\\\"                \\\"],[10,\\\"tr\\\"],[14,0,\\\"ai-embeddings-list__row d-admin-row__content\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__overview\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"ai-embeddings-list__name\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n                        \\\"],[1,[30,4,[\\\"display_name\\\"]]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__detail\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"d-admin-row__mobile-label\\\"],[12],[1,\\\"\\\\n                      \\\"],[1,[28,[32,1],[\\\"discourse_ai.embeddings.provider\\\"],null]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[1,[28,[32,1],[[28,[32,4],[\\\"discourse_ai.embeddings.providers.\\\",[30,4,[\\\"provider\\\"]]],null]],null]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__controls\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,4,[\\\"seeded\\\"]],[[[1,\\\"                      \\\"],[8,[32,5],[[24,0,\\\"ai-embeddings-list__edit-disabled-tooltip\\\"]],null,[[\\\"trigger\\\",\\\"content\\\"],[[[[1,\\\"\\\\n                          \\\"],[8,[32,6],[[24,0,\\\"btn btn-default btn-small disabled\\\"]],[[\\\"@label\\\"],[\\\"discourse_ai.embeddings.edit\\\"]],null],[1,\\\"\\\\n                        \\\"]],[]],[[[1,\\\"\\\\n                          \\\"],[1,[28,[32,1],[\\\"discourse_ai.embeddings.seeded_warning\\\"],null]],[1,\\\"\\\\n                        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                      \\\"],[8,[32,6],[[24,0,\\\"btn btn-default btn-small ai-embeddings-list__edit-button\\\"]],[[\\\"@label\\\",\\\"@route\\\",\\\"@routeModels\\\"],[\\\"discourse_ai.embeddings.edit\\\",\\\"adminPlugins.show.discourse-ai-embeddings.edit\\\",[30,4,[\\\"id\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[8,[32,7],null,[[\\\"@ctaLabel\\\",\\\"@ctaRoute\\\",\\\"@ctaClass\\\",\\\"@emptyLabel\\\"],[\\\"discourse_ai.embeddings.new\\\",\\\"adminPlugins.show.discourse-ai-embeddings.new\\\",\\\"ai-embeddings-list-editor__empty-new-button\\\",\\\"discourse_ai.embeddings.empty\\\"]],null],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@currentEmbedding\\\",\\\"@embeddings\\\",\\\"actions\\\",\\\"embedding\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-embeddings-list-editor.js\",\n      \"scope\": () => [_dBreadcrumbsItem.default, _discourseI18n.i18n, _aiEmbeddingEditor.default, _dPageSubheader.default, _helper.concat, _dTooltip.default, _dButton.default, _adminConfigAreaEmptyList.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiEmbeddingsListEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-forced-tool-strategy-selector\", [\"exports\", \"@ember/object\", \"discourse-i18n\", \"select-kit/components/combo-box\"], function (_exports, _object, _discourseI18n, _comboBox) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = _comboBox.default.extend({\n    content: (0, _object.computed)(function () {\n      const content = [{\n        id: -1,\n        name: (0, _discourseI18n.i18n)(\"discourse_ai.ai_persona.tool_strategies.all\")\n      }];\n      [1, 2, 5].forEach(i => {\n        content.push({\n          id: i,\n          name: (0, _discourseI18n.i18n)(\"discourse_ai.ai_persona.tool_strategies.replies\", {\n            count: i\n          })\n        });\n      });\n      return content;\n    }),\n    selectKitOptions: {\n      filterable: false\n    }\n  });\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-full-page-search\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/modifier\", \"@ember/object\", \"@ember/render-modifiers/modifiers/did-update\", \"@ember/service\", \"discourse/components/d-toggle-switch\", \"discourse/controllers/full-page-search\", \"discourse/helpers/concat-class\", \"discourse/lib/ajax\", \"discourse/lib/search\", \"discourse-common/helpers/d-icon\", \"discourse-i18n\", \"float-kit/components/d-tooltip\", \"discourse/plugins/discourse-ai/discourse/components/ai-indicator-wave\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _modifier, _object, _didUpdate, _service, _dToggleSwitch, _fullPageSearch, _concatClass, _ajax, _search, _dIcon, _discourseI18n, _dTooltip, _aiIndicatorWave, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const AI_RESULTS_TOGGLED = \"full-page-search:ai-results-toggled\";\n  class AiFullPageSearch extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"appEvents\", [_service.service]))();\n    #appEvents = (() => (dt7948.i(this, \"appEvents\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"searchPreferencesManager\", [_service.service]))();\n    #searchPreferencesManager = (() => (dt7948.i(this, \"searchPreferencesManager\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"searching\", [_tracking.tracked]))();\n    #searching = (() => (dt7948.i(this, \"searching\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"AiResults\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #AiResults = (() => (dt7948.i(this, \"AiResults\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"showingAiResults\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showingAiResults = (() => (dt7948.i(this, \"showingAiResults\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"sortOrder\", [_tracking.tracked], function () {\n      return this.args.sortOrder;\n    }))();\n    #sortOrder = (() => (dt7948.i(this, \"sortOrder\"), void 0))();\n    initialSearchTerm = this.args.searchTerm;\n    constructor() {\n      super(...arguments);\n      this.appEvents.on(\"full-page-search:trigger-search\", this, this.onSearch);\n      this.onSearch();\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      this.appEvents.off(\"full-page-search:trigger-search\", this, this.onSearch);\n    }\n    onSearch() {\n      if (!this.searchEnabled) {\n        return;\n      }\n      this.initialSearchTerm = this.args.searchTerm;\n      this.searching = true;\n      this.resetAiResults();\n      return this.performHyDESearch();\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"onSearch\", [_object.action]))();\n    get disableToggleSwitch() {\n      if (this.searching || this.AiResults.length === 0 || !this.validSearchOrder) {\n        return true;\n      }\n    }\n    get validSearchOrder() {\n      return this.sortOrder === 0;\n    }\n    get searchStateText() {\n      if (!this.validSearchOrder) {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.embeddings.semantic_search_results.unavailable\");\n      }\n      // Search loading:\n      if (this.searching) {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.embeddings.semantic_search_loading\");\n      }\n      // We have results and we are showing them\n      if (this.AiResults.length && this.showingAiResults) {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.embeddings.semantic_search_results.toggle\", {\n          count: this.AiResults.length\n        });\n      }\n      // We have results but are hiding them\n      if (this.AiResults.length && !this.showingAiResults) {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.embeddings.semantic_search_results.toggle_hidden\", {\n          count: this.AiResults.length\n        });\n      }\n      // Typing to search:\n      if (this.AiResults.length === 0 && this.searchTerm !== this.initialSearchTerm) {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.embeddings.semantic_search_results.new\");\n      }\n      // No results:\n      if (this.AiResults.length === 0) {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.embeddings.semantic_search_results.none\");\n      }\n    }\n    get settled() {\n      return this.validSearchOrder && !this.searching && this.searchTerm === this.initialSearchTerm;\n    }\n    get noResults() {\n      return this.settled && this.AiResults.length === 0;\n    }\n    get searchTerm() {\n      if (this.initialSearchTerm !== this.args.searchTerm) {\n        this.initialSearchTerm = undefined;\n      }\n      return this.args.searchTerm;\n    }\n    get searchEnabled() {\n      return this.args.searchType === _fullPageSearch.SEARCH_TYPE_DEFAULT && (0, _search.isValidSearchTerm)(this.searchTerm, this.siteSettings) && this.validSearchOrder;\n    }\n    get searchClass() {\n      if (!this.validSearchOrder) {\n        return \"unavailable\";\n      } else if (this.searching) {\n        return \"in-progress\";\n      } else if (this.noResults) {\n        return \"no-results\";\n      }\n    }\n    get tooltipText() {\n      return (0, _discourseI18n.i18n)(`discourse_ai.embeddings.semantic_search_tooltips.${this.validSearchOrder ? \"results_explanation\" : \"invalid_sort\"}`);\n    }\n    toggleAiResults() {\n      this.appEvents.trigger(AI_RESULTS_TOGGLED, {\n        enabled: !this.showingAiResults\n      });\n      if (this.showingAiResults) {\n        this.args.addSearchResults([], \"topic_id\");\n      } else {\n        this.args.addSearchResults(this.AiResults, \"topic_id\");\n      }\n      this.showingAiResults = !this.showingAiResults;\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"toggleAiResults\", [_object.action]))();\n    resetAiResults() {\n      this.AiResults = [];\n      this.showingAiResults = false;\n      this.args.addSearchResults([], \"topic_id\");\n      this.appEvents.trigger(AI_RESULTS_TOGGLED, {\n        enabled: false\n      });\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"resetAiResults\", [_object.action]))();\n    performHyDESearch() {\n      this.resetAiResults();\n      (0, _ajax.ajax)(\"/discourse-ai/embeddings/semantic-search\", {\n        data: {\n          q: this.searchTerm\n        }\n      }).then(async results => {\n        const model = (await (0, _search.translateResults)(results)) || {};\n        if (model.posts?.length === 0) {\n          return;\n        }\n        model.posts.forEach(post => {\n          post.generatedByAi = true;\n        });\n        this.AiResults = model.posts;\n      }).finally(() => {\n        this.searching = false;\n      });\n    }\n    sortChanged() {\n      if (this.sortOrder !== this.args.sortOrder) {\n        this.sortOrder = this.args.sortOrder;\n        if (this.validSearchOrder) {\n          this.onSearch();\n        } else {\n          this.showingAiResults = false;\n          this.resetAiResults();\n        }\n      }\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"sortChanged\", [_object.action]))();\n    static #_13 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <span {{didUpdate this.sortChanged @sortOrder}}></span>\n        <div class=\"semantic-search__container search-results\" role=\"region\">\n          <div class=\"semantic-search__results\">\n            <div\n              class={{concatClass \"semantic-search__searching\" this.searchClass}}\n            >\n              <DToggleSwitch\n                disabled={{this.disableToggleSwitch}}\n                @state={{this.showingAiResults}}\n                class=\"semantic-search__results-toggle\"\n                {{on \"click\" this.toggleAiResults}}\n              />\n    \n              <div class=\"semantic-search__searching-text\">\n                {{icon \"discourse-sparkles\"}}\n                {{this.searchStateText}}\n              </div>\n    \n              {{#if this.validSearchOrder}}\n                <AiIndicatorWave @loading={{this.searching}} />\n              {{/if}}\n    \n              <DTooltip\n                @identifier=\"semantic-search-tooltip\"\n                class=\"semantic-search__tooltip\"\n              >\n                <:trigger>\n                  {{icon \"far-circle-question\"}}\n                </:trigger>\n                <:content>\n                  {{this.tooltipText}}\n                </:content>\n              </DTooltip>\n            </div>\n          </div>\n        </div>\n      \n    */\n    {\n      \"id\": \"X++0eTUN\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[11,1],[4,[32,0],[[30,0,[\\\"sortChanged\\\"]],[30,1]],null],[12],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"semantic-search__container search-results\\\"],[14,\\\"role\\\",\\\"region\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"semantic-search__results\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[28,[32,1],[\\\"semantic-search__searching\\\",[30,0,[\\\"searchClass\\\"]]],null]],[12],[1,\\\"\\\\n          \\\"],[8,[32,2],[[16,\\\"disabled\\\",[30,0,[\\\"disableToggleSwitch\\\"]]],[24,0,\\\"semantic-search__results-toggle\\\"],[4,[32,3],[\\\"click\\\",[30,0,[\\\"toggleAiResults\\\"]]],null]],[[\\\"@state\\\"],[[30,0,[\\\"showingAiResults\\\"]]]],null],[1,\\\"\\\\n\\\\n          \\\"],[10,0],[14,0,\\\"semantic-search__searching-text\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,4],[\\\"discourse-sparkles\\\"],null]],[1,\\\"\\\\n            \\\"],[1,[30,0,[\\\"searchStateText\\\"]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"validSearchOrder\\\"]],[[[1,\\\"            \\\"],[8,[32,5],null,[[\\\"@loading\\\"],[[30,0,[\\\"searching\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n          \\\"],[8,[32,6],[[24,0,\\\"semantic-search__tooltip\\\"]],[[\\\"@identifier\\\"],[\\\"semantic-search-tooltip\\\"]],[[\\\"trigger\\\",\\\"content\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[28,[32,4],[\\\"far-circle-question\\\"],null]],[1,\\\"\\\\n            \\\"]],[]],[[[1,\\\"\\\\n              \\\"],[1,[30,0,[\\\"tooltipText\\\"]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@sortOrder\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-full-page-search.js\",\n      \"scope\": () => [_didUpdate.default, _concatClass.default, _dToggleSwitch.default, _modifier.on, _dIcon.default, _aiIndicatorWave.default, _dTooltip.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiFullPageSearch;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-gist-toggle\", [\"exports\", \"@glimmer/component\", \"@ember/helper\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/components/dropdown-menu\", \"discourse/helpers/body-class\", \"discourse-common/helpers/d-icon\", \"discourse-common/helpers/i18n\", \"float-kit/components/d-menu\", \"truth-helpers/helpers/eq\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _object, _service, _dButton, _dropdownMenu, _bodyClass, _dIcon, _i18n, _dMenu, _eq, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiGistToggle extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"gists\", [_service.service]))();\n    #gists = (() => (dt7948.i(this, \"gists\"), void 0))();\n    get buttons() {\n      return [{\n        id: \"table\",\n        label: \"discourse_ai.summarization.topic_list_layout.button.compact\",\n        icon: \"discourse-table\"\n      }, {\n        id: \"table-ai\",\n        label: \"discourse_ai.summarization.topic_list_layout.button.expanded\",\n        icon: \"discourse-table-sparkles\",\n        description: \"discourse_ai.summarization.topic_list_layout.button.expanded_description\"\n      }];\n    }\n    get selectedOptionId() {\n      return this.gists.get(\"preference\");\n    }\n    get currentButton() {\n      const buttonPreference = this.buttons.find(button => button.id === this.selectedOptionId);\n      return buttonPreference || this.buttons[0];\n    }\n    onRegisterApi(api) {\n      this.dMenu = api;\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"onRegisterApi\", [_object.action]))();\n    onSelect(optionId) {\n      this.gists.setPreference(optionId);\n      this.dMenu.close();\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"onSelect\", [_object.action]))();\n    static #_4 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.gists.shouldShow}}\n          {{bodyClass (concat \"topic-list-layout-\" this.gists.preference)}}\n          <DMenu\n            @modalForMobile={{true}}\n            @autofocus={{true}}\n            @identifier=\"topic-list-layout\"\n            @onRegisterApi={{this.onRegisterApi}}\n            @triggerClass=\"btn-default btn-icon\"\n          >\n            <:trigger>\n              {{icon this.currentButton.icon}}\n            </:trigger>\n            <:content>\n              <DropdownMenu as |dropdown|>\n                {{#each this.buttons as |button|}}\n                  <dropdown.item>\n                    <DButton\n                      @label={{button.label}}\n                      @icon={{button.icon}}\n                      class=\"btn-transparent\n                        {{if button.description '--with-description'}}\n                        {{if (eq this.currentButton.id button.id) '--active'}}\"\n                      @action={{fn this.onSelect button.id}}\n                    >\n                      {{#if button.description}}\n                        <div class=\"btn__description\">\n                          {{i18n button.description}}\n                        </div>\n                      {{/if}}\n                    </DButton>\n                  </dropdown.item>\n                {{/each}}\n              </DropdownMenu>\n            </:content>\n          </DMenu>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"WNCmZBDe\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"gists\\\",\\\"shouldShow\\\"]],[[[1,\\\"      \\\"],[1,[28,[32,0],[[28,[32,1],[\\\"topic-list-layout-\\\",[30,0,[\\\"gists\\\",\\\"preference\\\"]]],null]],null]],[1,\\\"\\\\n      \\\"],[8,[32,2],null,[[\\\"@modalForMobile\\\",\\\"@autofocus\\\",\\\"@identifier\\\",\\\"@onRegisterApi\\\",\\\"@triggerClass\\\"],[true,true,\\\"topic-list-layout\\\",[30,0,[\\\"onRegisterApi\\\"]],\\\"btn-default btn-icon\\\"]],[[\\\"trigger\\\",\\\"content\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[32,3],[[30,0,[\\\"currentButton\\\",\\\"icon\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]],[[[1,\\\"\\\\n          \\\"],[8,[32,4],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"buttons\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[30,1,[\\\"item\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[32,5],[[16,0,[29,[\\\"btn-transparent\\\\n                    \\\",[52,[30,2,[\\\"description\\\"]],\\\"--with-description\\\"],\\\"\\\\n                    \\\",[52,[28,[32,6],[[30,0,[\\\"currentButton\\\",\\\"id\\\"]],[30,2,[\\\"id\\\"]]],null],\\\"--active\\\"]]]]],[[\\\"@label\\\",\\\"@icon\\\",\\\"@action\\\"],[[30,2,[\\\"label\\\"]],[30,2,[\\\"icon\\\"]],[28,[32,7],[[30,0,[\\\"onSelect\\\"]],[30,2,[\\\"id\\\"]]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,2,[\\\"description\\\"]],[[[1,\\\"                    \\\"],[10,0],[14,0,\\\"btn__description\\\"],[12],[1,\\\"\\\\n                      \\\"],[1,[28,[32,8],[[30,2,[\\\"description\\\"]]],null]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"]],[]]]]],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"          \\\"]],[1]]]]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"dropdown\\\",\\\"button\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-gist-toggle.js\",\n      \"scope\": () => [_bodyClass.default, _helper.concat, _dMenu.default, _dIcon.default, _dropdownMenu.default, _dButton.default, _eq.default, _helper.fn, _i18n.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiGistToggle;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-helper-custom-prompt\", [\"exports\", \"@glimmer/component\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"discourse/components/d-button\", \"discourse/helpers/with-event-value\", \"discourse-common/helpers/i18n\", \"truth-helpers/helpers/not\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _modifier, _object, _dButton, _withEventValue, _i18n, _not, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiHelperCustomPrompt extends _component.default {\n    sendInput(event) {\n      if (event.key !== \"Enter\") {\n        return;\n      }\n      return this.args.submit(this.args.promptArgs);\n    }\n    static #_ = (() => dt7948.n(this.prototype, \"sendInput\", [_object.action]))();\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"ai-custom-prompt\">\n    \n          <input\n            {{on \"input\" (withEventValue (fn (mut @value)))}}\n            {{on \"keydown\" this.sendInput}}\n            value={{@value}}\n            placeholder={{i18n\n              \"discourse_ai.ai_helper.context_menu.custom_prompt.placeholder\"\n            }}\n            class=\"ai-custom-prompt__input\"\n            type=\"text\"\n            autofocus=\"autofocus\"\n          />\n    \n          <DButton\n            @icon=\"discourse-sparkles\"\n            @action={{fn @submit @promptArgs}}\n            @disabled={{not @value.length}}\n            class=\"ai-custom-prompt__submit btn-primary\"\n          />\n        </div>\n      \n    */\n    {\n      \"id\": \"P6muo3ex\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-custom-prompt\\\"],[12],[1,\\\"\\\\n\\\\n      \\\"],[11,\\\"input\\\"],[16,2,[30,1]],[16,\\\"placeholder\\\",[28,[32,0],[\\\"discourse_ai.ai_helper.context_menu.custom_prompt.placeholder\\\"],null]],[24,0,\\\"ai-custom-prompt__input\\\"],[24,\\\"autofocus\\\",\\\"autofocus\\\"],[24,4,\\\"text\\\"],[4,[32,1],[\\\"input\\\",[28,[32,2],[[28,[32,3],[[28,[31,0],[[30,1]],null]],null]],null]],null],[4,[32,1],[\\\"keydown\\\",[30,0,[\\\"sendInput\\\"]]],null],[12],[13],[1,\\\"\\\\n\\\\n      \\\"],[8,[32,4],[[24,0,\\\"ai-custom-prompt__submit btn-primary\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@disabled\\\"],[\\\"discourse-sparkles\\\",[28,[32,3],[[30,2],[30,3]],null],[28,[32,5],[[30,1,[\\\"length\\\"]]],null]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@value\\\",\\\"@submit\\\",\\\"@promptArgs\\\"],false,[\\\"mut\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-helper-custom-prompt.js\",\n      \"scope\": () => [_i18n.default, _modifier.on, _withEventValue.default, _helper.fn, _dButton.default, _not.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiHelperCustomPrompt;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-helper-loading\", [\"exports\", \"discourse/components/d-button\", \"discourse-common/helpers/i18n\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _dButton, _i18n, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const AiHelperLoading = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n    <div class=\"ai-helper-loading\">\n      <div class=\"dot-falling\"></div>\n      <span>\n        {{i18n \"discourse_ai.ai_helper.context_menu.loading\"}}\n      </span>\n      <DButton\n        @icon=\"xmark\"\n        @title=\"discourse_ai.ai_helper.context_menu.cancel\"\n        @action={{@cancel}}\n        class=\"btn-flat cancel-request\"\n      />\n    </div>\n  \n  */\n  {\n    \"id\": \"qC8lok7p\",\n    \"block\": \"[[[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"ai-helper-loading\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"dot-falling\\\"],[12],[13],[1,\\\"\\\\n    \\\"],[10,1],[12],[1,\\\"\\\\n      \\\"],[1,[28,[32,0],[\\\"discourse_ai.ai_helper.context_menu.loading\\\"],null]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[8,[32,1],[[24,0,\\\"btn-flat cancel-request\\\"]],[[\\\"@icon\\\",\\\"@title\\\",\\\"@action\\\"],[\\\"xmark\\\",\\\"discourse_ai.ai_helper.context_menu.cancel\\\",[30,1]]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@cancel\\\"],false,[]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-helper-loading.js\",\n    \"scope\": () => [_i18n.default, _dButton.default],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"ai-helper-loading:AiHelperLoading\"));\n  var _default = _exports.default = AiHelperLoading;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-helper-options-list\", [\"exports\", \"@glimmer/component\", \"@ember/helper\", \"@ember/service\", \"truth-helpers\", \"discourse/components/d-button\", \"discourse/lib/keyboard-shortcuts\", \"discourse/lib/utilities\", \"truth-helpers/helpers/eq\", \"discourse/plugins/discourse-ai/discourse/components/ai-helper-custom-prompt\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _service, _truthHelpers, _dButton, _keyboardShortcuts, _utilities, _eq, _aiHelperCustomPrompt, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiHelperOptionsList extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"site\", [_service.service]))();\n    #site = (() => (dt7948.i(this, \"site\"), void 0))();\n    get showShortcut() {\n      return this.site.desktopView && this.args.shortcutVisible;\n    }\n    get shortcut() {\n      return (0, _utilities.translateModKey)(`${_keyboardShortcuts.PLATFORM_KEY_MODIFIER}+alt+p`);\n    }\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <ul class=\"ai-helper-options\">\n          {{#each @options as |option|}}\n            {{#if (eq option.name \"custom_prompt\")}}\n              <AiHelperCustomPrompt\n                @value={{@customPromptValue}}\n                @promptArgs={{option}}\n                @submit={{@performAction}}\n              />\n            {{else}}\n              <li data-name={{option.translated_name}} data-value={{option.id}}>\n                <DButton\n                  @icon={{option.icon}}\n                  @translatedLabel={{option.translated_name}}\n                  @action={{fn @performAction option}}\n                  data-name={{option.name}}\n                  data-value={{option.id}}\n                  class=\"ai-helper-options__button\"\n                >\n                  {{#if (and (eq option.name \"proofread\") this.showShortcut)}}\n                    <kbd class=\"shortcut\">{{this.shortcut}}</kbd>\n                  {{/if}}\n                </DButton>\n              </li>\n            {{/if}}\n          {{/each}}\n        </ul>\n      \n    */\n    {\n      \"id\": \"6HgxS5V6\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,\\\"ul\\\"],[14,0,\\\"ai-helper-options\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,1]],null]],null],null,[[[41,[28,[32,0],[[30,2,[\\\"name\\\"]],\\\"custom_prompt\\\"],null],[[[1,\\\"          \\\"],[8,[32,1],null,[[\\\"@value\\\",\\\"@promptArgs\\\",\\\"@submit\\\"],[[30,3],[30,2],[30,4]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[10,\\\"li\\\"],[15,\\\"data-name\\\",[30,2,[\\\"translated_name\\\"]]],[15,\\\"data-value\\\",[30,2,[\\\"id\\\"]]],[12],[1,\\\"\\\\n            \\\"],[8,[32,2],[[16,\\\"data-name\\\",[30,2,[\\\"name\\\"]]],[16,\\\"data-value\\\",[30,2,[\\\"id\\\"]]],[24,0,\\\"ai-helper-options__button\\\"]],[[\\\"@icon\\\",\\\"@translatedLabel\\\",\\\"@action\\\"],[[30,2,[\\\"icon\\\"]],[30,2,[\\\"translated_name\\\"]],[28,[32,3],[[30,4],[30,2]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[28,[32,4],[[28,[32,0],[[30,2,[\\\"name\\\"]],\\\"proofread\\\"],null],[30,0,[\\\"showShortcut\\\"]]],null],[[[1,\\\"                \\\"],[10,\\\"kbd\\\"],[14,0,\\\"shortcut\\\"],[12],[1,[30,0,[\\\"shortcut\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[2]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@options\\\",\\\"option\\\",\\\"@customPromptValue\\\",\\\"@performAction\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-helper-options-list.js\",\n      \"scope\": () => [_eq.default, _aiHelperCustomPrompt.default, _dButton.default, _helper.fn, _truthHelpers.and],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiHelperOptionsList;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-indicator-wave\", [\"exports\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const indicatorDots = [\".\", \".\", \".\"];\n  const AiIndicatorWave = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n    {{#if @loading}}\n      <span class=\"ai-indicator-wave\">\n        {{#each indicatorDots as |dot|}}\n          <span class=\"ai-indicator-wave__dot\">{{dot}}</span>\n        {{/each}}\n      </span>\n    {{/if}}\n  \n  */\n  {\n    \"id\": \"2VboNjAG\",\n    \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"    \\\"],[10,1],[14,0,\\\"ai-indicator-wave\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[32,0]],null]],null],null,[[[1,\\\"        \\\"],[10,1],[14,0,\\\"ai-indicator-wave__dot\\\"],[12],[1,[30,2]],[13],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@loading\\\",\\\"dot\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-indicator-wave.js\",\n    \"scope\": () => [indicatorDots],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"ai-indicator-wave:AiIndicatorWave\"));\n  var _default = _exports.default = AiIndicatorWave;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-llm-editor-form\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"@ember/routing\", \"@ember/runloop\", \"@ember/service\", \"truth-helpers\", \"discourse/components/conditional-loading-spinner\", \"discourse/components/form\", \"discourse/helpers/bound-avatar-template\", \"discourse/lib/ajax-error\", \"discourse-common/helpers/d-icon\", \"discourse-i18n\", \"admin/models/admin-user\", \"discourse/plugins/discourse-ai/discourse/components/ai-quota-duration-selector\", \"discourse/plugins/discourse-ai/discourse/components/modal/ai-llm-quota-modal\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _routing, _runloop, _service, _truthHelpers, _conditionalLoadingSpinner, _form, _boundAvatarTemplate, _ajaxError, _dIcon, _discourseI18n, _adminUser, _aiQuotaDurationSelector, _aiLlmQuotaModal, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiLlmEditorForm extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"toasts\", [_service.service]))();\n    #toasts = (() => (dt7948.i(this, \"toasts\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"dialog\", [_service.service]))();\n    #dialog = (() => (dt7948.i(this, \"dialog\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"isSaving\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isSaving = (() => (dt7948.i(this, \"isSaving\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"testRunning\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #testRunning = (() => (dt7948.i(this, \"testRunning\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"testResult\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #testResult = (() => (dt7948.i(this, \"testResult\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"testError\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #testError = (() => (dt7948.i(this, \"testError\"), void 0))();\n    get formData() {\n      if (this.args.llmTemplate) {\n        let [id, modelName] = this.args.llmTemplate.split(/-(.*)/);\n        if (id === \"none\") {\n          return {\n            provider_params: {}\n          };\n        }\n        const info = this.args.llms.resultSetMeta.presets.findBy(\"id\", id);\n        const modelInfo = info.models.findBy(\"name\", modelName);\n        const params = this.args.llms.resultSetMeta.provider_params[info.provider] ?? {};\n        return {\n          max_prompt_tokens: modelInfo.tokens,\n          tokenizer: info.tokenizer,\n          url: modelInfo.endpoint || info.endpoint,\n          display_name: modelInfo.display_name,\n          name: modelInfo.name,\n          provider: info.provider,\n          provider_params: Object.fromEntries(Object.entries(params).map(_ref => {\n            let [k, v] = _ref;\n            return [k, v?.type === \"enum\" ? v.default : null];\n          }))\n        };\n      }\n      const {\n        model\n      } = this.args;\n      return {\n        max_prompt_tokens: model.max_prompt_tokens,\n        api_key: model.api_key,\n        tokenizer: model.tokenizer,\n        url: model.url,\n        display_name: model.display_name,\n        name: model.name,\n        provider: model.provider,\n        enabled_chat_bot: model.enabled_chat_bot,\n        vision_enabled: model.vision_enabled,\n        provider_params: model.provider_params,\n        llm_quotas: model.llm_quotas\n      };\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"formData\", [_tracking.cached]))();\n    get selectedProviders() {\n      const t = provName => {\n        return (0, _discourseI18n.i18n)(`discourse_ai.llms.providers.${provName}`);\n      };\n      return this.args.llms.resultSetMeta.providers.map(prov => {\n        return {\n          id: prov,\n          name: t(prov)\n        };\n      }).sort((a, b) => a.name.localeCompare(b.name));\n    }\n    get tokenizers() {\n      return this.args.llms.resultSetMeta.tokenizers.sort((a, b) => a.name.localeCompare(b.name));\n    }\n    get adminUser() {\n      return _adminUser.default.create(this.args.model?.user);\n    }\n    get testErrorMessage() {\n      return (0, _discourseI18n.i18n)(\"discourse_ai.llms.tests.failure\", {\n        error: this.testError\n      });\n    }\n    get displayTestResult() {\n      return this.testRunning || this.testResult !== null;\n    }\n    get canEditURL() {\n      return this.args.model.provider !== \"aws_bedrock\";\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"canEditURL\", [(0, _object.computed)(\"args.model.provider\")]))();\n    get modulesUsingModel() {\n      const usedBy = this.args.model.used_by?.filter(m => m.type !== \"ai_bot\");\n      if (!usedBy || usedBy.length === 0) {\n        return null;\n      }\n      const localized = usedBy.map(m => {\n        return (0, _discourseI18n.i18n)(`discourse_ai.llms.usage.${m.type}`, {\n          persona: m.name\n        });\n      });\n      // TODO: this is not perfectly localized\n      return localized.join(\", \");\n    }\n    get seeded() {\n      return this.args.model.id < 0;\n    }\n    get inUseWarning() {\n      return (0, _discourseI18n.i18n)(\"discourse_ai.llms.in_use_warning\", {\n        settings: this.modulesUsingModel,\n        count: this.args.model.used_by.length\n      });\n    }\n    get showAddQuotaButton() {\n      return !this.args.model.isNew;\n    }\n    openAddQuotaModal(addItemToCollection) {\n      this.modal.show(_aiLlmQuotaModal.default, {\n        model: {\n          llm: this.args.model,\n          addItemToCollection\n        }\n      });\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"openAddQuotaModal\", [_object.action]))();\n    metaProviderParams(provider) {\n      const params = this.args.llms.resultSetMeta.provider_params[provider] || {};\n      return Object.entries(params).reduce((acc, _ref2) => {\n        let [field, value] = _ref2;\n        if (typeof value === \"string\") {\n          acc[field] = {\n            type: value\n          };\n        } else if (typeof value === \"object\") {\n          if (value.values) {\n            value = {\n              ...value\n            };\n            value.values = value.values.map(v => ({\n              id: v,\n              name: v\n            }));\n          }\n          acc[field] = {\n            type: value.type || \"text\",\n            values: value.values || [],\n            default: value.default ?? undefined\n          };\n        } else {\n          acc[field] = {\n            type: \"text\"\n          }; // fallback\n        }\n        return acc;\n      }, {});\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"metaProviderParams\", [_object.action]))();\n    async save(data) {\n      this.isSaving = true;\n      const isNew = this.args.model.isNew;\n      try {\n        await this.args.model.save(data);\n        if (isNew) {\n          this.args.llms.addObject(this.args.model);\n          this.router.transitionTo(\"adminPlugins.show.discourse-ai-llms.index\");\n        } else {\n          this.toasts.success({\n            data: {\n              message: (0, _discourseI18n.i18n)(\"discourse_ai.llms.saved\")\n            },\n            duration: 2000\n          });\n        }\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      } finally {\n        (0, _runloop.later)(() => {\n          this.isSaving = false;\n        }, 1000);\n      }\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"save\", [_object.action]))();\n    async test(data) {\n      this.testRunning = true;\n      try {\n        const configTestResult = await this.args.model.testConfig(data);\n        this.testResult = configTestResult.success;\n        if (this.testResult) {\n          this.testError = null;\n        } else {\n          this.testError = configTestResult.error;\n        }\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      } finally {\n        (0, _runloop.later)(() => {\n          this.testRunning = false;\n        }, 1000);\n      }\n    }\n    static #_14 = (() => dt7948.n(this.prototype, \"test\", [_object.action]))();\n    delete() {\n      return this.dialog.confirm({\n        message: (0, _discourseI18n.i18n)(\"discourse_ai.llms.confirm_delete\"),\n        didConfirm: () => {\n          return this.args.model.destroyRecord().then(() => {\n            this.args.llms.removeObject(this.args.model);\n            this.router.transitionTo(\"adminPlugins.show.discourse-ai-llms.index\");\n          }).catch(_ajaxError.popupAjaxError);\n        }\n      });\n    }\n    static #_15 = (() => dt7948.n(this.prototype, \"delete\", [_object.action]))();\n    static #_16 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <Form\n          @onSubmit={{this.save}}\n          @data={{this.formData}}\n          class=\"ai-llm-editor {{if this.seeded 'seeded'}}\"\n          as |form data|\n        >\n          {{#if this.seeded}}\n            <form.Alert @icon=\"circle-info\">\n              {{i18n \"discourse_ai.llms.seeded_warning\"}}\n            </form.Alert>\n          {{/if}}\n    \n          {{#if this.modulesUsingModel}}\n            <form.Alert @icon=\"circle-info\">\n              {{this.inUseWarning}}\n            </form.Alert>\n          {{/if}}\n    \n          <form.Field\n            @name=\"display_name\"\n            @title={{i18n \"discourse_ai.llms.display_name\"}}\n            @validation=\"required|length:1,100\"\n            @disabled={{this.seeded}}\n            @format=\"large\"\n            @tooltip={{i18n \"discourse_ai.llms.hints.max_prompt_tokens\"}}\n            as |field|\n          >\n            <field.Input />\n          </form.Field>\n    \n          <form.Field\n            @name=\"name\"\n            @title={{i18n \"discourse_ai.llms.name\"}}\n            @tooltip={{i18n \"discourse_ai.llms.hints.name\"}}\n            @validation=\"required\"\n            @disabled={{this.seeded}}\n            @format=\"large\"\n            as |field|\n          >\n            <field.Input />\n          </form.Field>\n    \n          <form.Field\n            @name=\"provider\"\n            @title={{i18n \"discourse_ai.llms.provider\"}}\n            @disabled={{this.seeded}}\n            @format=\"large\"\n            @validation=\"required\"\n            as |field|\n          >\n            <field.Select as |select|>\n              {{#each this.selectedProviders as |provider|}}\n                <select.Option\n                  @value={{provider.id}}\n                >{{provider.name}}</select.Option>\n              {{/each}}\n            </field.Select>\n          </form.Field>\n    \n          {{#unless this.seeded}}\n            {{#if this.canEditURL}}\n              <form.Field\n                @name=\"url\"\n                @title={{i18n \"discourse_ai.llms.url\"}}\n                @validation=\"required\"\n                @format=\"large\"\n                as |field|\n              >\n                <field.Input />\n              </form.Field>\n            {{/if}}\n    \n            <form.Field\n              @name=\"api_key\"\n              @title={{i18n \"discourse_ai.llms.api_key\"}}\n              @validation=\"required\"\n              @format=\"large\"\n              as |field|\n            >\n              <field.Password />\n            </form.Field>\n    \n            <form.Object @name=\"provider_params\" as |object name|>\n              {{#let\n                (get (this.metaProviderParams data.provider) name)\n                as |params|\n              }}\n                <object.Field\n                  @name={{name}}\n                  @title={{i18n (concat \"discourse_ai.llms.provider_fields.\" name)}}\n                  @format=\"large\"\n                  as |field|\n                >\n                  {{#if (eq params.type \"enum\")}}\n                    <field.Select @includeNone={{false}} as |select|>\n                      {{#each params.values as |option|}}\n                        <select.Option\n                          @value={{option.id}}\n                        >{{option.name}}</select.Option>\n                      {{/each}}\n                    </field.Select>\n                  {{else if (eq params.type \"checkbox\")}}\n                    <field.Checkbox />\n                  {{else}}\n                    <field.Input @type={{params.type}} />\n                  {{/if}}\n                </object.Field>\n              {{/let}}\n            </form.Object>\n    \n            <form.Field\n              @name=\"tokenizer\"\n              @title={{i18n \"discourse_ai.llms.tokenizer\"}}\n              @disabled={{this.seeded}}\n              @format=\"large\"\n              @validation=\"required\"\n              as |field|\n            >\n              <field.Select as |select|>\n                {{#each this.tokenizers as |tokenizer|}}\n                  <select.Option\n                    @value={{tokenizer.id}}\n                  >{{tokenizer.name}}</select.Option>\n                {{/each}}\n              </field.Select>\n            </form.Field>\n    \n            <form.Field\n              @name=\"max_prompt_tokens\"\n              @title={{i18n \"discourse_ai.llms.max_prompt_tokens\"}}\n              @tooltip={{i18n \"discourse_ai.llms.hints.max_prompt_tokens\"}}\n              @validation=\"required\"\n              @format=\"large\"\n              as |field|\n            >\n              <field.Input @type=\"number\" step=\"any\" min=\"0\" lang=\"en\" />\n            </form.Field>\n    \n            <form.Field\n              @name=\"vision_enabled\"\n              @title={{i18n \"discourse_ai.llms.vision_enabled\"}}\n              @tooltip={{i18n \"discourse_ai.llms.hints.vision_enabled\"}}\n              @format=\"large\"\n              as |field|\n            >\n              <field.Checkbox />\n            </form.Field>\n    \n            <form.Field\n              @name=\"enabled_chat_bot\"\n              @title={{i18n \"discourse_ai.llms.enabled_chat_bot\"}}\n              @tooltip={{i18n \"discourse_ai.llms.hints.enabled_chat_bot\"}}\n              @format=\"large\"\n              as |field|\n            >\n              <field.Checkbox />\n            </form.Field>\n    \n            {{#if @model.user}}\n              <form.Container @title={{i18n \"discourse_ai.llms.ai_bot_user\"}}>\n                <a\n                  class=\"avatar\"\n                  href={{@model.user.path}}\n                  data-user-card={{@model.user.username}}\n                >\n                  {{Avatar @model.user.avatar_template \"small\"}}\n                </a>\n                <LinkTo @route=\"adminUser\" @model={{this.adminUser}}>\n                  {{@model.user.username}}\n                </LinkTo>\n              </form.Container>\n            {{/if}}\n    \n            {{#if (gt data.llm_quotas.length 0)}}\n              <form.Container @title={{i18n \"discourse_ai.llms.quotas.title\"}}>\n                <table class=\"ai-llm-quotas__table\">\n                  <thead class=\"ai-llm-quotas__table-head\">\n                    <tr class=\"ai-llm-quotas__header-row\">\n                      <th class=\"ai-llm-quotas__header\">{{i18n\n                          \"discourse_ai.llms.quotas.group\"\n                        }}</th>\n                      <th class=\"ai-llm-quotas__header\">{{i18n\n                          \"discourse_ai.llms.quotas.max_tokens\"\n                        }}</th>\n                      <th class=\"ai-llm-quotas__header\">{{i18n\n                          \"discourse_ai.llms.quotas.max_usages\"\n                        }}</th>\n                      <th class=\"ai-llm-quotas__header\">{{i18n\n                          \"discourse_ai.llms.quotas.duration\"\n                        }}</th>\n                      <th\n                        class=\"ai-llm-quotas__header ai-llm-quotas__header--actions\"\n                      ></th>\n                      <th></th>\n                    </tr>\n                  </thead>\n                  <tbody class=\"ai-llm-quotas__table-body\">\n                    <form.Collection\n                      @name=\"llm_quotas\"\n                      @tagName=\"tr\"\n                      class=\"ai-llm-quotas__row\"\n                      as |collection index collectionData|\n                    >\n                      <td\n                        class=\"ai-llm-quotas__cell\"\n                      >{{collectionData.group_name}}</td>\n                      <td class=\"ai-llm-quotas__cell\">\n                        <collection.Field\n                          @name=\"max_tokens\"\n                          @title=\"max_tokens\"\n                          @showTitle={{false}}\n                          as |field|\n                        >\n                          <field.Input\n                            @type=\"number\"\n                            class=\"ai-llm-quotas__input\"\n                            min=\"1\"\n                          />\n                        </collection.Field>\n                      </td>\n                      <td class=\"ai-llm-quotas__cell\">\n                        <collection.Field\n                          @name=\"max_usages\"\n                          @title=\"max_usages\"\n                          @showTitle={{false}}\n                          as |field|\n                        >\n                          <field.Input\n                            @type=\"number\"\n                            class=\"ai-llm-quotas__input\"\n                            min=\"1\"\n                          />\n                        </collection.Field>\n                      </td>\n                      <td class=\"ai-llm-quotas__cell\">\n                        <collection.Field\n                          @name=\"duration_seconds\"\n                          @title=\"duration_seconds\"\n                          @showTitle={{false}}\n                          as |field|\n                        >\n                          <field.Custom>\n                            <DurationSelector\n                              @value={{collectionData.duration_seconds}}\n                              @onChange={{field.set}}\n                            />\n                          </field.Custom>\n                        </collection.Field>\n                      </td>\n                      <td>\n                        <form.Button\n                          @icon=\"trash-can\"\n                          @action={{fn collection.remove index}}\n                          class=\"btn-danger ai-llm-quotas__delete-btn\"\n                        />\n                      </td>\n                    </form.Collection>\n                  </tbody>\n                </table>\n              </form.Container>\n    \n              <form.Button\n                @action={{fn\n                  this.openAddQuotaModal\n                  (fn form.addItemToCollection \"llm_quotas\")\n                }}\n                @icon=\"plus\"\n                @label=\"discourse_ai.llms.quotas.add\"\n                class=\"ai-llm-editor__add-quota-btn\"\n              />\n            {{/if}}\n    \n            <form.Actions>\n              <form.Button\n                @action={{fn this.test data}}\n                @disabled={{this.testRunning}}\n                @label=\"discourse_ai.llms.tests.title\"\n              />\n    \n              <form.Submit />\n    \n              {{#if (eq data.llm_quotas.length 0)}}\n                <form.Button\n                  @action={{fn\n                    this.openAddQuotaModal\n                    (fn form.addItemToCollection \"llm_quotas\")\n                  }}\n                  @label=\"discourse_ai.llms.quotas.add\"\n                  class=\"ai-llm-editor__add-quota-btn\"\n                />\n              {{/if}}\n    \n              {{#unless @model.isNew}}\n                <form.Button\n                  @action={{this.delete}}\n                  @label=\"discourse_ai.llms.delete\"\n                  class=\"btn-danger\"\n                />\n              {{/unless}}\n            </form.Actions>\n          {{/unless}}\n    \n          {{#if this.displayTestResult}}\n            <form.Field\n              @showTitle={{false}}\n              @name=\"test_results\"\n              @title=\"test_results\"\n              @format=\"full\"\n              as |field|\n            >\n              <field.Custom>\n                <ConditionalLoadingSpinner\n                  @size=\"small\"\n                  @condition={{this.testRunning}}\n                >\n                  {{#if this.testResult}}\n                    <div class=\"ai-llm-editor-tests__success\">\n                      {{icon \"check\"}}\n                      {{i18n \"discourse_ai.llms.tests.success\"}}\n                    </div>\n                  {{else}}\n                    <div class=\"ai-llm-editor-tests__failure\">\n                      {{icon \"xmark\"}}\n                      {{this.testErrorMessage}}\n                    </div>\n                  {{/if}}\n                </ConditionalLoadingSpinner>\n              </field.Custom>\n            </form.Field>\n          {{/if}}\n        </Form>\n      \n    */\n    {\n      \"id\": \"Y3SHHWvv\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[16,0,[29,[\\\"ai-llm-editor \\\",[52,[30,0,[\\\"seeded\\\"]],\\\"seeded\\\"]]]]],[[\\\"@onSubmit\\\",\\\"@data\\\"],[[30,0,[\\\"save\\\"]],[30,0,[\\\"formData\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"seeded\\\"]],[[[1,\\\"        \\\"],[8,[30,1,[\\\"Alert\\\"]],null,[[\\\"@icon\\\"],[\\\"circle-info\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[32,1],[\\\"discourse_ai.llms.seeded_warning\\\"],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"modulesUsingModel\\\"]],[[[1,\\\"        \\\"],[8,[30,1,[\\\"Alert\\\"]],null,[[\\\"@icon\\\"],[\\\"circle-info\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[30,0,[\\\"inUseWarning\\\"]]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@disabled\\\",\\\"@format\\\",\\\"@tooltip\\\"],[\\\"display_name\\\",[28,[32,1],[\\\"discourse_ai.llms.display_name\\\"],null],\\\"required|length:1,100\\\",[30,0,[\\\"seeded\\\"]],\\\"large\\\",[28,[32,1],[\\\"discourse_ai.llms.hints.max_prompt_tokens\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,3,[\\\"Input\\\"]],null,null,null],[1,\\\"\\\\n      \\\"]],[3]]]]],[1,\\\"\\\\n\\\\n      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@validation\\\",\\\"@disabled\\\",\\\"@format\\\"],[\\\"name\\\",[28,[32,1],[\\\"discourse_ai.llms.name\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.hints.name\\\"],null],\\\"required\\\",[30,0,[\\\"seeded\\\"]],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,4,[\\\"Input\\\"]],null,null,null],[1,\\\"\\\\n      \\\"]],[4]]]]],[1,\\\"\\\\n\\\\n      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@disabled\\\",\\\"@format\\\",\\\"@validation\\\"],[\\\"provider\\\",[28,[32,1],[\\\"discourse_ai.llms.provider\\\"],null],[30,0,[\\\"seeded\\\"]],\\\"large\\\",\\\"required\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,5,[\\\"Select\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"selectedProviders\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[8,[30,6,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,7,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,7,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[7]],null],[1,\\\"        \\\"]],[6]]]]],[1,\\\"\\\\n      \\\"]],[5]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[51,[30,0,[\\\"seeded\\\"]]],[[[41,[30,0,[\\\"canEditURL\\\"]],[[[1,\\\"          \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"url\\\",[28,[32,1],[\\\"discourse_ai.llms.url\\\"],null],\\\"required\\\",\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,8,[\\\"Input\\\"]],null,null,null],[1,\\\"\\\\n          \\\"]],[8]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n        \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"api_key\\\",[28,[32,1],[\\\"discourse_ai.llms.api_key\\\"],null],\\\"required\\\",\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,9,[\\\"Password\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[9]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,1,[\\\"Object\\\"]],null,[[\\\"@name\\\"],[\\\"provider_params\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[44,[[28,[32,2],[[28,[30,0,[\\\"metaProviderParams\\\"]],[[30,2,[\\\"provider\\\"]]],null],[30,11]],null]],[[[1,\\\"            \\\"],[8,[30,10,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@format\\\"],[[30,11],[28,[32,1],[[28,[32,3],[\\\"discourse_ai.llms.provider_fields.\\\",[30,11]],null]],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[28,[32,4],[[30,12,[\\\"type\\\"]],\\\"enum\\\"],null],[[[1,\\\"                \\\"],[8,[30,13,[\\\"Select\\\"]],null,[[\\\"@includeNone\\\"],[false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,12,[\\\"values\\\"]]],null]],null],null,[[[1,\\\"                    \\\"],[8,[30,14,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,15,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,15,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[15]],null],[1,\\\"                \\\"]],[14]]]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[32,4],[[30,12,[\\\"type\\\"]],\\\"checkbox\\\"],null],[[[1,\\\"                \\\"],[8,[30,13,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[8,[30,13,[\\\"Input\\\"]],null,[[\\\"@type\\\"],[[30,12,[\\\"type\\\"]]]],null],[1,\\\"\\\\n              \\\"]],[]]]],[]]],[1,\\\"            \\\"]],[13]]]]],[1,\\\"\\\\n\\\"]],[12]]],[1,\\\"        \\\"]],[10,11]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@disabled\\\",\\\"@format\\\",\\\"@validation\\\"],[\\\"tokenizer\\\",[28,[32,1],[\\\"discourse_ai.llms.tokenizer\\\"],null],[30,0,[\\\"seeded\\\"]],\\\"large\\\",\\\"required\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,16,[\\\"Select\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"tokenizers\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[30,17,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,18,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,18,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[18]],null],[1,\\\"          \\\"]],[17]]]]],[1,\\\"\\\\n        \\\"]],[16]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"max_prompt_tokens\\\",[28,[32,1],[\\\"discourse_ai.llms.max_prompt_tokens\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.hints.max_prompt_tokens\\\"],null],\\\"required\\\",\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,19,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"min\\\",\\\"0\\\"],[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n        \\\"]],[19]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"vision_enabled\\\",[28,[32,1],[\\\"discourse_ai.llms.vision_enabled\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.hints.vision_enabled\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,20,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[20]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"enabled_chat_bot\\\",[28,[32,1],[\\\"discourse_ai.llms.enabled_chat_bot\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.hints.enabled_chat_bot\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,21,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[21]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,22,[\\\"user\\\"]],[[[1,\\\"          \\\"],[8,[30,1,[\\\"Container\\\"]],null,[[\\\"@title\\\"],[[28,[32,1],[\\\"discourse_ai.llms.ai_bot_user\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[10,3],[14,0,\\\"avatar\\\"],[15,6,[30,22,[\\\"user\\\",\\\"path\\\"]]],[15,\\\"data-user-card\\\",[30,22,[\\\"user\\\",\\\"username\\\"]]],[12],[1,\\\"\\\\n              \\\"],[1,[28,[32,5],[[30,22,[\\\"user\\\",\\\"avatar_template\\\"]],\\\"small\\\"],null]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[8,[32,6],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"adminUser\\\",[30,0,[\\\"adminUser\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[30,22,[\\\"user\\\",\\\"username\\\"]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[32,7],[[30,2,[\\\"llm_quotas\\\",\\\"length\\\"]],0],null],[[[1,\\\"          \\\"],[8,[30,1,[\\\"Container\\\"]],null,[[\\\"@title\\\"],[[28,[32,1],[\\\"discourse_ai.llms.quotas.title\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[10,\\\"table\\\"],[14,0,\\\"ai-llm-quotas__table\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"thead\\\"],[14,0,\\\"ai-llm-quotas__table-head\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"tr\\\"],[14,0,\\\"ai-llm-quotas__header-row\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"th\\\"],[14,0,\\\"ai-llm-quotas__header\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.llms.quotas.group\\\"],null]],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"th\\\"],[14,0,\\\"ai-llm-quotas__header\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.llms.quotas.max_tokens\\\"],null]],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"th\\\"],[14,0,\\\"ai-llm-quotas__header\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.llms.quotas.max_usages\\\"],null]],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"th\\\"],[14,0,\\\"ai-llm-quotas__header\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.llms.quotas.duration\\\"],null]],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"th\\\"],[14,0,\\\"ai-llm-quotas__header ai-llm-quotas__header--actions\\\"],[12],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"th\\\"],[12],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"tbody\\\"],[14,0,\\\"ai-llm-quotas__table-body\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[30,1,[\\\"Collection\\\"]],[[24,0,\\\"ai-llm-quotas__row\\\"]],[[\\\"@name\\\",\\\"@tagName\\\"],[\\\"llm_quotas\\\",\\\"tr\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-llm-quotas__cell\\\"],[12],[1,[30,25,[\\\"group_name\\\"]]],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-llm-quotas__cell\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[30,23,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@showTitle\\\"],[\\\"max_tokens\\\",\\\"max_tokens\\\",false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      \\\"],[8,[30,26,[\\\"Input\\\"]],[[24,0,\\\"ai-llm-quotas__input\\\"],[24,\\\"min\\\",\\\"1\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n                    \\\"]],[26]]]]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-llm-quotas__cell\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[30,23,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@showTitle\\\"],[\\\"max_usages\\\",\\\"max_usages\\\",false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      \\\"],[8,[30,27,[\\\"Input\\\"]],[[24,0,\\\"ai-llm-quotas__input\\\"],[24,\\\"min\\\",\\\"1\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n                    \\\"]],[27]]]]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-llm-quotas__cell\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[30,23,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@showTitle\\\"],[\\\"duration_seconds\\\",\\\"duration_seconds\\\",false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      \\\"],[8,[30,28,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                        \\\"],[8,[32,8],null,[[\\\"@value\\\",\\\"@onChange\\\"],[[30,25,[\\\"duration_seconds\\\"]],[30,28,[\\\"set\\\"]]]],null],[1,\\\"\\\\n                      \\\"]],[]]]]],[1,\\\"\\\\n                    \\\"]],[28]]]]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[30,1,[\\\"Button\\\"]],[[24,0,\\\"btn-danger ai-llm-quotas__delete-btn\\\"]],[[\\\"@icon\\\",\\\"@action\\\"],[\\\"trash-can\\\",[28,[32,9],[[30,23,[\\\"remove\\\"]],[30,24]],null]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"]],[23,24,25]]]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,1,[\\\"Button\\\"]],[[24,0,\\\"ai-llm-editor__add-quota-btn\\\"]],[[\\\"@action\\\",\\\"@icon\\\",\\\"@label\\\"],[[28,[32,9],[[30,0,[\\\"openAddQuotaModal\\\"]],[28,[32,9],[[30,1,[\\\"addItemToCollection\\\"]],\\\"llm_quotas\\\"],null]],null],\\\"plus\\\",\\\"discourse_ai.llms.quotas.add\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n        \\\"],[8,[30,1,[\\\"Actions\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,1,[\\\"Button\\\"]],null,[[\\\"@action\\\",\\\"@disabled\\\",\\\"@label\\\"],[[28,[32,9],[[30,0,[\\\"test\\\"]],[30,2]],null],[30,0,[\\\"testRunning\\\"]],\\\"discourse_ai.llms.tests.title\\\"]],null],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,1,[\\\"Submit\\\"]],null,null,null],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[32,4],[[30,2,[\\\"llm_quotas\\\",\\\"length\\\"]],0],null],[[[1,\\\"            \\\"],[8,[30,1,[\\\"Button\\\"]],[[24,0,\\\"ai-llm-editor__add-quota-btn\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[28,[32,9],[[30,0,[\\\"openAddQuotaModal\\\"]],[28,[32,9],[[30,1,[\\\"addItemToCollection\\\"]],\\\"llm_quotas\\\"],null]],null],\\\"discourse_ai.llms.quotas.add\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[51,[30,22,[\\\"isNew\\\"]]],[[[1,\\\"            \\\"],[8,[30,1,[\\\"Button\\\"]],[[24,0,\\\"btn-danger\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"delete\\\"]],\\\"discourse_ai.llms.delete\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"displayTestResult\\\"]],[[[1,\\\"        \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@showTitle\\\",\\\"@name\\\",\\\"@title\\\",\\\"@format\\\"],[false,\\\"test_results\\\",\\\"test_results\\\",\\\"full\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,29,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[32,10],null,[[\\\"@size\\\",\\\"@condition\\\"],[\\\"small\\\",[30,0,[\\\"testRunning\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"testResult\\\"]],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"ai-llm-editor-tests__success\\\"],[12],[1,\\\"\\\\n                  \\\"],[1,[28,[32,11],[\\\"check\\\"],null]],[1,\\\"\\\\n                  \\\"],[1,[28,[32,1],[\\\"discourse_ai.llms.tests.success\\\"],null]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"ai-llm-editor-tests__failure\\\"],[12],[1,\\\"\\\\n                  \\\"],[1,[28,[32,11],[\\\"xmark\\\"],null]],[1,\\\"\\\\n                  \\\"],[1,[30,0,[\\\"testErrorMessage\\\"]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"            \\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[29]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"]],[1,2]]]]],[1,\\\"\\\\n  \\\"]],[\\\"form\\\",\\\"data\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"select\\\",\\\"provider\\\",\\\"field\\\",\\\"field\\\",\\\"object\\\",\\\"name\\\",\\\"params\\\",\\\"field\\\",\\\"select\\\",\\\"option\\\",\\\"field\\\",\\\"select\\\",\\\"tokenizer\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"@model\\\",\\\"collection\\\",\\\"index\\\",\\\"collectionData\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\",\\\"unless\\\",\\\"let\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-llm-editor-form.js\",\n      \"scope\": () => [_form.default, _discourseI18n.i18n, _helper.get, _helper.concat, _truthHelpers.eq, _boundAvatarTemplate.default, _routing.LinkTo, _truthHelpers.gt, _aiQuotaDurationSelector.default, _helper.fn, _conditionalLoadingSpinner.default, _dIcon.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiLlmEditorForm;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-llm-editor\", [\"exports\", \"discourse/components/back-button\", \"discourse/plugins/discourse-ai/discourse/components/ai-llm-editor-form\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _backButton, _aiLlmEditorForm, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const AiLlmEditor = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n    <BackButton\n      @route=\"adminPlugins.show.discourse-ai-llms\"\n      @label=\"discourse_ai.llms.back\"\n    />\n    <AiLlmEditorForm\n      @model={{@model}}\n      @llmTemplate={{@llmTemplate}}\n      @llms={{@llms}}\n    />\n  \n  */\n  {\n    \"id\": \"Tv683ucY\",\n    \"block\": \"[[[1,\\\"\\\\n  \\\"],[8,[32,0],null,[[\\\"@route\\\",\\\"@label\\\"],[\\\"adminPlugins.show.discourse-ai-llms\\\",\\\"discourse_ai.llms.back\\\"]],null],[1,\\\"\\\\n  \\\"],[8,[32,1],null,[[\\\"@model\\\",\\\"@llmTemplate\\\",\\\"@llms\\\"],[[30,1],[30,2],[30,3]]],null],[1,\\\"\\\\n\\\"]],[\\\"@model\\\",\\\"@llmTemplate\\\",\\\"@llms\\\"],false,[]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-llm-editor.js\",\n    \"scope\": () => [_backButton.default, _aiLlmEditorForm.default],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"ai-llm-editor:AiLlmEditor\"));\n  var _default = _exports.default = AiLlmEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-llm-selector\", [\"exports\", \"@ember/object\", \"@ember-decorators/object\", \"discourse-i18n\", \"select-kit/components/combo-box\", \"select-kit/components/select-kit\"], function (_exports, _object, _object2, _discourseI18n, _comboBox, _selectKit) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const AiLlmSelector = dt7948.c(class AiLlmSelector extends _comboBox.default {\n    _modelDisabledChanged() {\n      this.selectKit.options.set(\"disabled\", this.get(\"attrs.disabled.value\"));\n    }\n    static #_ = (() => dt7948.n(this.prototype, \"_modelDisabledChanged\", [(0, _object2.observes)(\"attrs.disabled\")]))();\n    get content() {\n      const blankName = this.attrs.blankName || (0, _discourseI18n.i18n)(\"discourse_ai.ai_persona.no_llm_selected\");\n      return [{\n        id: \"blank\",\n        name: blankName\n      }].concat(this.llms);\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"content\", [_object.computed]))();\n  }, [(0, _selectKit.selectKitOptions)({\n    filterable: true\n  })]);\n  var _default = _exports.default = AiLlmSelector;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-llms-list-editor\", [\"exports\", \"@glimmer/component\", \"@ember/helper\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-breadcrumbs-item\", \"discourse/components/d-button\", \"discourse/components/d-page-subheader\", \"discourse-i18n\", \"admin/components/admin-section-landing-item\", \"admin/components/admin-section-landing-wrapper\", \"float-kit/components/d-tooltip\", \"discourse/plugins/discourse-ai/discourse/components/ai-llm-editor\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _object, _service, _dBreadcrumbsItem, _dButton, _dPageSubheader, _discourseI18n, _adminSectionLandingItem, _adminSectionLandingWrapper, _dTooltip, _aiLlmEditor, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  function isPreseeded(llm) {\n    if (llm.id < 0) {\n      return true;\n    }\n  }\n  class AiLlmsListEditor extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"adminPluginNavManager\", [_service.service]))();\n    #adminPluginNavManager = (() => (dt7948.i(this, \"adminPluginNavManager\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    modelDescription(llm) {\n      // this is a bit of an odd object, it can be an llm model or a preset model\n      // handle both flavors\n      // in the case of model\n      let key = \"\";\n      if (typeof llm.id === \"number\") {\n        key = `${llm.provider}-${llm.name}`;\n      } else {\n        // case of preset\n        key = llm.id.replace(/\\./g, \"-\");\n      }\n      key = `discourse_ai.llms.model_description.${key}`;\n      if (_discourseI18n.default.lookup(key, {\n        ignoreMissing: true\n      })) {\n        return (0, _discourseI18n.i18n)(key);\n      }\n      return \"\";\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"modelDescription\", [_object.action]))();\n    preseededDescription(llm) {\n      if (isPreseeded(llm)) {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.llms.preseeded_model_description\", {\n          model: llm.name\n        });\n      }\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"preseededDescription\", [_object.action]))();\n    sanitizedTranslationKey(id) {\n      return id.replace(/\\./g, \"-\");\n    }\n    get hasLlmElements() {\n      return this.args.llms.length !== 0;\n    }\n    get preconfiguredTitle() {\n      if (this.hasLlmElements) {\n        return \"discourse_ai.llms.preconfigured.title\";\n      } else {\n        return \"discourse_ai.llms.preconfigured.title_no_llms\";\n      }\n    }\n    get preConfiguredLlms() {\n      const options = [{\n        id: \"none\",\n        name: (0, _discourseI18n.i18n)(\"discourse_ai.llms.preconfigured.fake\"),\n        provider: \"fake\"\n      }];\n      const llmsContent = this.args.llms.content.map(llm => ({\n        provider: llm.provider,\n        name: llm.name\n      }));\n      this.args.llms.resultSetMeta.presets.forEach(llm => {\n        if (llm.models) {\n          llm.models.forEach(model => {\n            const id = `${llm.id}-${model.name}`;\n            const isConfigured = llmsContent.some(content => content.provider === llm.provider && content.name === model.name);\n            if (!isConfigured) {\n              options.push({\n                id,\n                name: model.display_name,\n                provider: llm.provider\n              });\n            }\n          });\n        }\n      });\n      return options;\n    }\n    transitionToLlmEditor(llmTemplate) {\n      this.router.transitionTo(\"adminPlugins.show.discourse-ai-llms.new\", {\n        queryParams: {\n          llmTemplate\n        }\n      });\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"transitionToLlmEditor\", [_object.action]))();\n    localizeUsage(usage) {\n      if (usage.type === \"ai_persona\") {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.llms.usage.ai_persona\", {\n          persona: usage.name\n        });\n      } else {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.llms.usage.\" + usage.type);\n      }\n    }\n    static #_6 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DBreadcrumbsItem\n          @path=\"/admin/plugins/{{this.adminPluginNavManager.currentPlugin.name}}/ai-llms\"\n          @label={{i18n \"discourse_ai.llms.short_title\"}}\n        />\n        <section class=\"ai-llm-list-editor admin-detail\">\n          {{#if @currentLlm}}\n            <AiLlmEditor\n              @model={{@currentLlm}}\n              @llms={{@llms}}\n              @llmTemplate={{@llmTemplate}}\n            />\n          {{else}}\n            <DPageSubheader\n              @titleLabel={{i18n \"discourse_ai.llms.short_title\"}}\n              @descriptionLabel={{i18n\n                \"discourse_ai.llms.preconfigured.description\"\n              }}\n              @learnMoreUrl=\"https://meta.discourse.org/t/discourse-ai-large-language-model-llm-settings-page/319903\"\n            />\n            {{#if this.hasLlmElements}}\n              <section class=\"ai-llms-list-editor__configured\">\n                <DPageSubheader\n                  @titleLabel={{i18n \"discourse_ai.llms.configured.title\"}}\n                />\n                <table class=\"d-admin-table\">\n                  <thead>\n                    <tr>\n                      <th>{{i18n \"discourse_ai.llms.display_name\"}}</th>\n                      <th>{{i18n \"discourse_ai.llms.provider\"}}</th>\n                      <th></th>\n                    </tr>\n                  </thead>\n                  <tbody>\n                    {{#each @llms as |llm|}}\n                      <tr\n                        data-llm-id={{llm.name}}\n                        class=\"ai-llm-list__row d-admin-row__content\"\n                      >\n                        <td class=\"d-admin-row__overview\">\n    \n                          <div class=\"ai-llm-list__name\">\n                            <strong>\n                              {{llm.display_name}}\n                            </strong>\n                          </div>\n                          <div class=\"ai-llm-list__description\">\n                            {{this.modelDescription llm}}\n                            {{this.preseededDescription llm}}\n                          </div>\n                          {{#if llm.used_by}}\n                            <ul class=\"ai-llm-list-editor__usages\">\n                              {{#each llm.used_by as |usage|}}\n                                <li>{{this.localizeUsage usage}}</li>\n                              {{/each}}\n                            </ul>\n                          {{/if}}\n                        </td>\n                        <td class=\"d-admin-row__detail\">\n                          <div class=\"d-admin-row__mobile-label\">\n                            {{i18n \"discourse_ai.llms.provider\"}}\n                          </div>\n                          {{i18n\n                            (concat \"discourse_ai.llms.providers.\" llm.provider)\n                          }}\n                        </td>\n                        <td class=\"d-admin-row__controls\">\n                          {{#if (isPreseeded llm)}}\n                            <DTooltip class=\"ai-llm-list__edit-disabled-tooltip\">\n                              <:trigger>\n                                <DButton\n                                  class=\"btn btn-default btn-small disabled\"\n                                  @label=\"discourse_ai.llms.edit\"\n                                />\n                              </:trigger>\n                              <:content>\n                                {{i18n \"discourse_ai.llms.seeded_warning\"}}\n                              </:content>\n                            </DTooltip>\n                          {{else}}\n                            <DButton\n                              class=\"btn btn-default btn-small ai-llm-list__delete-button\"\n                              @label=\"discourse_ai.llms.edit\"\n                              @route=\"adminPlugins.show.discourse-ai-llms.edit\"\n                              @routeModels={{llm.id}}\n                            />\n                          {{/if}}\n                        </td>\n                      </tr>\n                    {{/each}}\n                  </tbody>\n                </table>\n              </section>\n            {{/if}}\n            <section class=\"ai-llms-list-editor__templates\">\n              <DPageSubheader @titleLabel={{i18n this.preconfiguredTitle}} />\n              <AdminSectionLandingWrapper\n                class=\"ai-llms-list-editor__templates-list\"\n              >\n                {{#each this.preConfiguredLlms as |llm|}}\n                  <AdminSectionLandingItem\n                    @titleLabelTranslated={{llm.name}}\n                    @descriptionLabelTranslated={{this.modelDescription llm}}\n                    @taglineLabel={{concat\n                      \"discourse_ai.llms.providers.\"\n                      llm.provider\n                    }}\n                    data-llm-id={{llm.id}}\n                    class=\"ai-llms-list-editor__templates-list-item\"\n                  >\n                    <:buttons as |buttons|>\n                      <buttons.Default\n                        @action={{fn this.transitionToLlmEditor llm.id}}\n                        @icon=\"gear\"\n                        @label=\"discourse_ai.llms.preconfigured.button\"\n                      />\n                    </:buttons>\n                  </AdminSectionLandingItem>\n                {{/each}}\n              </AdminSectionLandingWrapper>\n            </section>\n          {{/if}}\n        </section>\n      \n    */\n    {\n      \"id\": \"W9+HDws7\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@path\\\",\\\"@label\\\"],[[29,[\\\"/admin/plugins/\\\",[30,0,[\\\"adminPluginNavManager\\\",\\\"currentPlugin\\\",\\\"name\\\"]],\\\"/ai-llms\\\"]],[28,[32,1],[\\\"discourse_ai.llms.short_title\\\"],null]]],null],[1,\\\"\\\\n    \\\"],[10,\\\"section\\\"],[14,0,\\\"ai-llm-list-editor admin-detail\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"        \\\"],[8,[32,2],null,[[\\\"@model\\\",\\\"@llms\\\",\\\"@llmTemplate\\\"],[[30,1],[30,2],[30,3]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[32,3],null,[[\\\"@titleLabel\\\",\\\"@descriptionLabel\\\",\\\"@learnMoreUrl\\\"],[[28,[32,1],[\\\"discourse_ai.llms.short_title\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.preconfigured.description\\\"],null],\\\"https://meta.discourse.org/t/discourse-ai-large-language-model-llm-settings-page/319903\\\"]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasLlmElements\\\"]],[[[1,\\\"          \\\"],[10,\\\"section\\\"],[14,0,\\\"ai-llms-list-editor__configured\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[32,3],null,[[\\\"@titleLabel\\\"],[[28,[32,1],[\\\"discourse_ai.llms.configured.title\\\"],null]]],null],[1,\\\"\\\\n            \\\"],[10,\\\"table\\\"],[14,0,\\\"d-admin-table\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.llms.display_name\\\"],null]],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.llms.provider\\\"],null]],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"th\\\"],[12],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,2]],null]],null],null,[[[1,\\\"                  \\\"],[10,\\\"tr\\\"],[15,\\\"data-llm-id\\\",[30,4,[\\\"name\\\"]]],[14,0,\\\"ai-llm-list__row d-admin-row__content\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__overview\\\"],[12],[1,\\\"\\\\n\\\\n                      \\\"],[10,0],[14,0,\\\"ai-llm-list__name\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n                          \\\"],[1,[30,4,[\\\"display_name\\\"]]],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"ai-llm-list__description\\\"],[12],[1,\\\"\\\\n                        \\\"],[1,[28,[30,0,[\\\"modelDescription\\\"]],[[30,4]],null]],[1,\\\"\\\\n                        \\\"],[1,[28,[30,0,[\\\"preseededDescription\\\"]],[[30,4]],null]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,4,[\\\"used_by\\\"]],[[[1,\\\"                        \\\"],[10,\\\"ul\\\"],[14,0,\\\"ai-llm-list-editor__usages\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,4,[\\\"used_by\\\"]]],null]],null],null,[[[1,\\\"                            \\\"],[10,\\\"li\\\"],[12],[1,[28,[30,0,[\\\"localizeUsage\\\"]],[[30,5]],null]],[13],[1,\\\"\\\\n\\\"]],[5]],null],[1,\\\"                        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__detail\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"d-admin-row__mobile-label\\\"],[12],[1,\\\"\\\\n                        \\\"],[1,[28,[32,1],[\\\"discourse_ai.llms.provider\\\"],null]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[1,[28,[32,1],[[28,[32,4],[\\\"discourse_ai.llms.providers.\\\",[30,4,[\\\"provider\\\"]]],null]],null]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__controls\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[32,5],[[30,4]],null],[[[1,\\\"                        \\\"],[8,[32,6],[[24,0,\\\"ai-llm-list__edit-disabled-tooltip\\\"]],null,[[\\\"trigger\\\",\\\"content\\\"],[[[[1,\\\"\\\\n                            \\\"],[8,[32,7],[[24,0,\\\"btn btn-default btn-small disabled\\\"]],[[\\\"@label\\\"],[\\\"discourse_ai.llms.edit\\\"]],null],[1,\\\"\\\\n                          \\\"]],[]],[[[1,\\\"\\\\n                            \\\"],[1,[28,[32,1],[\\\"discourse_ai.llms.seeded_warning\\\"],null]],[1,\\\"\\\\n                          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                        \\\"],[8,[32,7],[[24,0,\\\"btn btn-default btn-small ai-llm-list__delete-button\\\"]],[[\\\"@label\\\",\\\"@route\\\",\\\"@routeModels\\\"],[\\\"discourse_ai.llms.edit\\\",\\\"adminPlugins.show.discourse-ai-llms.edit\\\",[30,4,[\\\"id\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[10,\\\"section\\\"],[14,0,\\\"ai-llms-list-editor__templates\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,3],null,[[\\\"@titleLabel\\\"],[[28,[32,1],[[30,0,[\\\"preconfiguredTitle\\\"]]],null]]],null],[1,\\\"\\\\n          \\\"],[8,[32,8],[[24,0,\\\"ai-llms-list-editor__templates-list\\\"]],null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"preConfiguredLlms\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[32,9],[[16,\\\"data-llm-id\\\",[30,6,[\\\"id\\\"]]],[24,0,\\\"ai-llms-list-editor__templates-list-item\\\"]],[[\\\"@titleLabelTranslated\\\",\\\"@descriptionLabelTranslated\\\",\\\"@taglineLabel\\\"],[[30,6,[\\\"name\\\"]],[28,[30,0,[\\\"modelDescription\\\"]],[[30,6]],null],[28,[32,4],[\\\"discourse_ai.llms.providers.\\\",[30,6,[\\\"provider\\\"]]],null]]],[[\\\"buttons\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[30,7,[\\\"Default\\\"]],null,[[\\\"@action\\\",\\\"@icon\\\",\\\"@label\\\"],[[28,[32,10],[[30,0,[\\\"transitionToLlmEditor\\\"]],[30,6,[\\\"id\\\"]]],null],\\\"gear\\\",\\\"discourse_ai.llms.preconfigured.button\\\"]],null],[1,\\\"\\\\n                \\\"]],[7]]]]],[1,\\\"\\\\n\\\"]],[6]],null],[1,\\\"          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@currentLlm\\\",\\\"@llms\\\",\\\"@llmTemplate\\\",\\\"llm\\\",\\\"usage\\\",\\\"llm\\\",\\\"buttons\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-llms-list-editor.js\",\n      \"scope\": () => [_dBreadcrumbsItem.default, _discourseI18n.i18n, _aiLlmEditor.default, _dPageSubheader.default, _helper.concat, isPreseeded, _dTooltip.default, _dButton.default, _adminSectionLandingWrapper.default, _adminSectionLandingItem.default, _helper.fn],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiLlmsListEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-persona-editor\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/component\", \"@ember/modifier\", \"@ember/object\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/render-modifiers/modifiers/did-update\", \"@ember/routing\", \"@ember/runloop\", \"@ember/service\", \"discourse/components/back-button\", \"discourse/components/d-button\", \"discourse/components/d-textarea\", \"discourse/components/d-toggle-switch\", \"discourse/helpers/bound-avatar-template\", \"discourse/lib/ajax-error\", \"discourse/models/group\", \"discourse-i18n\", \"admin/models/admin-user\", \"select-kit/components/combo-box\", \"select-kit/components/group-chooser\", \"float-kit/components/d-tooltip\", \"discourse/plugins/discourse-ai/discourse/components/ai-forced-tool-strategy-selector\", \"discourse/plugins/discourse-ai/discourse/components/ai-llm-selector\", \"discourse/plugins/discourse-ai/discourse/components/ai-persona-tool-options\", \"discourse/plugins/discourse-ai/discourse/components/ai-tool-selector\", \"discourse/plugins/discourse-ai/discourse/components/rag-options\", \"discourse/plugins/discourse-ai/discourse/components/rag-uploader\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _component2, _modifier, _object, _didInsert, _didUpdate, _routing, _runloop, _service, _backButton, _dButton, _dTextarea, _dToggleSwitch, _boundAvatarTemplate, _ajaxError, _group, _discourseI18n, _adminUser, _comboBox, _groupChooser, _dTooltip, _aiForcedToolStrategySelector, _aiLlmSelector, _aiPersonaToolOptions, _aiToolSelector, _ragOptions, _ragUploader, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class PersonaEditor extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"store\", [_service.service]))();\n    #store = (() => (dt7948.i(this, \"store\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"dialog\", [_service.service]))();\n    #dialog = (() => (dt7948.i(this, \"dialog\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"toasts\", [_service.service]))();\n    #toasts = (() => (dt7948.i(this, \"toasts\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"allGroups\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #allGroups = (() => (dt7948.i(this, \"allGroups\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"isSaving\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isSaving = (() => (dt7948.i(this, \"isSaving\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"editingModel\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #editingModel = (() => (dt7948.i(this, \"editingModel\"), void 0))();\n    static #_9 = (() => dt7948.g(this.prototype, \"showDelete\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showDelete = (() => (dt7948.i(this, \"showDelete\"), void 0))();\n    static #_10 = (() => dt7948.g(this.prototype, \"maxPixelsValue\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #maxPixelsValue = (() => (dt7948.i(this, \"maxPixelsValue\"), void 0))();\n    static #_11 = (() => dt7948.g(this.prototype, \"ragIndexingStatuses\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #ragIndexingStatuses = (() => (dt7948.i(this, \"ragIndexingStatuses\"), void 0))();\n    static #_12 = (() => dt7948.g(this.prototype, \"selectedTools\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #selectedTools = (() => (dt7948.i(this, \"selectedTools\"), void 0))();\n    static #_13 = (() => dt7948.g(this.prototype, \"selectedToolNames\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #selectedToolNames = (() => (dt7948.i(this, \"selectedToolNames\"), void 0))();\n    static #_14 = (() => dt7948.g(this.prototype, \"forcedToolNames\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #forcedToolNames = (() => (dt7948.i(this, \"forcedToolNames\"), void 0))();\n    static #_15 = (() => dt7948.g(this.prototype, \"hasDefaultLlm\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #hasDefaultLlm = (() => (dt7948.i(this, \"hasDefaultLlm\"), void 0))();\n    get chatPluginEnabled() {\n      return this.siteSettings.chat_enabled;\n    }\n    get allowForceTools() {\n      return !this.editingModel?.system && this.selectedToolNames.length > 0;\n    }\n    get hasForcedTools() {\n      return this.forcedToolNames.length > 0;\n    }\n    forcedToolsChanged(tools) {\n      this.forcedToolNames = tools;\n      this.editingModel.forcedTools = this.forcedToolNames;\n    }\n    static #_16 = (() => dt7948.n(this.prototype, \"forcedToolsChanged\", [_object.action]))();\n    toolsChanged(tools) {\n      this.selectedTools = this.args.personas.resultSetMeta.tools.filter(tool => tools.includes(tool.id));\n      this.selectedToolNames = tools.slice();\n      this.forcedToolNames = this.forcedToolNames.filter(tool => this.editingModel.tools.indexOf(tool) !== -1);\n      this.editingModel.tools = this.selectedToolNames;\n      this.editingModel.forcedTools = this.forcedToolNames;\n    }\n    static #_17 = (() => dt7948.n(this.prototype, \"toolsChanged\", [_object.action]))();\n    updateModel() {\n      this.editingModel = this.args.model.workingCopy();\n      this.hasDefaultLlm = !!this.editingModel.default_llm;\n      this.showDelete = !this.args.model.isNew && !this.args.model.system;\n      this.maxPixelsValue = this.findClosestPixelValue(this.editingModel.vision_max_pixels);\n      this.selectedToolNames = this.editingModel.tools || [];\n      this.selectedTools = this.args.personas.resultSetMeta.tools.filter(tool => this.selectedToolNames.includes(tool.id));\n      this.forcedToolNames = this.editingModel.forcedTools || [];\n    }\n    static #_18 = (() => dt7948.n(this.prototype, \"updateModel\", [_object.action]))();\n    findClosestPixelValue(pixels) {\n      let value = \"high\";\n      this.maxPixelValues.forEach(info => {\n        if (pixels === info.pixels) {\n          value = info.id;\n        }\n      });\n      return value;\n    }\n    get maxPixelValues() {\n      const l = key => (0, _discourseI18n.i18n)(`discourse_ai.ai_persona.vision_max_pixel_sizes.${key}`);\n      return [{\n        id: \"low\",\n        name: l(\"low\"),\n        pixels: 65536\n      }, {\n        id: \"medium\",\n        name: l(\"medium\"),\n        pixels: 262144\n      }, {\n        id: \"high\",\n        name: l(\"high\"),\n        pixels: 1048576\n      }];\n    }\n    static #_19 = (() => dt7948.n(this.prototype, \"maxPixelValues\", [_tracking.cached]))();\n    async updateAllGroups() {\n      this.allGroups = await _group.default.findAll();\n    }\n    static #_20 = (() => dt7948.n(this.prototype, \"updateAllGroups\", [_object.action]))();\n    async save() {\n      const isNew = this.args.model.isNew;\n      this.isSaving = true;\n      const backupModel = this.args.model.workingCopy();\n      this.args.model.setProperties(this.editingModel);\n      try {\n        await this.args.model.save();\n        this.#sortPersonas();\n        if (isNew && this.args.model.rag_uploads.length === 0) {\n          this.args.personas.addObject(this.args.model);\n          this.router.transitionTo(\"adminPlugins.show.discourse-ai-personas.edit\", this.args.model);\n        } else {\n          this.toasts.success({\n            data: {\n              message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_persona.saved\")\n            },\n            duration: 2000\n          });\n        }\n      } catch (e) {\n        this.args.model.setProperties(backupModel);\n        (0, _ajaxError.popupAjaxError)(e);\n      } finally {\n        (0, _runloop.later)(() => {\n          this.isSaving = false;\n        }, 1000);\n      }\n    }\n    static #_21 = (() => dt7948.n(this.prototype, \"save\", [_object.action]))();\n    get showTemperature() {\n      return this.editingModel?.temperature || !this.editingModel?.system;\n    }\n    get showTopP() {\n      return this.editingModel?.top_p || !this.editingModel?.system;\n    }\n    get adminUser() {\n      return _adminUser.default.create(this.editingModel?.user);\n    }\n    get mappedQuestionConsolidatorLlm() {\n      return this.editingModel?.question_consolidator_llm || \"blank\";\n    }\n    set mappedQuestionConsolidatorLlm(value) {\n      if (value === \"blank\") {\n        this.editingModel.question_consolidator_llm = null;\n      } else {\n        this.editingModel.question_consolidator_llm = value;\n      }\n    }\n    get mappedDefaultLlm() {\n      return this.editingModel?.default_llm || \"blank\";\n    }\n    set mappedDefaultLlm(value) {\n      if (value === \"blank\") {\n        this.editingModel.default_llm = null;\n        this.hasDefaultLlm = false;\n      } else {\n        this.editingModel.default_llm = value;\n        this.hasDefaultLlm = true;\n      }\n    }\n    onChangeMaxPixels(value) {\n      const entry = this.maxPixelValues.findBy(\"id\", value);\n      if (!entry) {\n        return;\n      }\n      this.maxPixelsValue = value;\n      this.editingModel.vision_max_pixels = entry.pixels;\n    }\n    static #_22 = (() => dt7948.n(this.prototype, \"onChangeMaxPixels\", [_object.action]))();\n    delete() {\n      return this.dialog.confirm({\n        message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_persona.confirm_delete\"),\n        didConfirm: () => {\n          return this.args.model.destroyRecord().then(() => {\n            this.args.personas.removeObject(this.args.model);\n            this.router.transitionTo(\"adminPlugins.show.discourse-ai-personas.index\");\n          });\n        }\n      });\n    }\n    static #_23 = (() => dt7948.n(this.prototype, \"delete\", [_object.action]))();\n    updateAllowedGroups(ids) {\n      this.editingModel.set(\"allowed_group_ids\", ids);\n    }\n    static #_24 = (() => dt7948.n(this.prototype, \"updateAllowedGroups\", [_object.action]))();\n    async toggleEnabled() {\n      await this.toggleField(\"enabled\");\n    }\n    static #_25 = (() => dt7948.n(this.prototype, \"toggleEnabled\", [_object.action]))();\n    async togglePriority() {\n      await this.toggleField(\"priority\", true);\n    }\n    static #_26 = (() => dt7948.n(this.prototype, \"togglePriority\", [_object.action]))();\n    async createUser() {\n      try {\n        let user = await this.args.model.createUser();\n        this.editingModel.set(\"user\", user);\n        this.editingModel.set(\"user_id\", user.id);\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      }\n    }\n    static #_27 = (() => dt7948.n(this.prototype, \"createUser\", [_object.action]))();\n    updateUploads(uploads) {\n      this.editingModel.rag_uploads = uploads;\n    }\n    static #_28 = (() => dt7948.n(this.prototype, \"updateUploads\", [_object.action]))();\n    removeUpload(upload) {\n      this.editingModel.rag_uploads.removeObject(upload);\n      if (!this.args.model.isNew) {\n        this.save();\n      }\n    }\n    static #_29 = (() => dt7948.n(this.prototype, \"removeUpload\", [_object.action]))();\n    async toggleField(field, sortPersonas) {\n      this.args.model.set(field, !this.args.model[field]);\n      this.editingModel.set(field, this.args.model[field]);\n      if (!this.args.model.isNew) {\n        try {\n          const args = {};\n          args[field] = this.args.model[field];\n          await this.args.model.update(args);\n          if (sortPersonas) {\n            this.#sortPersonas();\n          }\n        } catch (e) {\n          (0, _ajaxError.popupAjaxError)(e);\n        }\n      }\n    }\n    #sortPersonas() {\n      const sorted = this.args.personas.toArray().sort((a, b) => {\n        if (a.priority && !b.priority) {\n          return -1;\n        } else if (!a.priority && b.priority) {\n          return 1;\n        } else {\n          return a.name.localeCompare(b.name);\n        }\n      });\n      this.args.personas.clear();\n      this.args.personas.setObjects(sorted);\n    }\n    static #_30 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <BackButton\n          @route=\"adminPlugins.show.discourse-ai-personas\"\n          @label=\"discourse_ai.ai_persona.back\"\n        />\n        <form\n          class=\"form-horizontal ai-persona-editor\"\n          {{didUpdate this.updateModel @model.id}}\n          {{didInsert this.updateModel @model.id}}\n          {{didInsert this.updateAllGroups @model.id}}\n        >\n          <div class=\"control-group\">\n            <DToggleSwitch\n              class=\"ai-persona-editor__enabled\"\n              @state={{@model.enabled}}\n              @label=\"discourse_ai.ai_persona.enabled\"\n              {{on \"click\" this.toggleEnabled}}\n            />\n          </div>\n          <div class=\"control-group ai-persona-editor__priority\">\n            <DToggleSwitch\n              class=\"ai-persona-editor__priority\"\n              @state={{@model.priority}}\n              @label=\"discourse_ai.ai_persona.priority\"\n              {{on \"click\" this.togglePriority}}\n            />\n            <DTooltip\n              @icon=\"circle-question\"\n              @content={{i18n \"discourse_ai.ai_persona.priority_help\"}}\n            />\n          </div>\n          <div class=\"control-group\">\n            <label>{{i18n \"discourse_ai.ai_persona.name\"}}</label>\n            <Input\n              class=\"ai-persona-editor__name\"\n              @type=\"text\"\n              @value={{this.editingModel.name}}\n              disabled={{this.editingModel.system}}\n            />\n          </div>\n          <div class=\"control-group\">\n            <label>{{i18n \"discourse_ai.ai_persona.description\"}}</label>\n            <Textarea\n              class=\"ai-persona-editor__description\"\n              @value={{this.editingModel.description}}\n              disabled={{this.editingModel.system}}\n            />\n          </div>\n          {{#if this.editingModel.user}}\n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.ai_persona.default_llm\"}}</label>\n              <AiLlmSelector\n                class=\"ai-persona-editor__llms\"\n                @value={{this.mappedDefaultLlm}}\n                @llms={{@personas.resultSetMeta.llms}}\n              />\n              <DTooltip\n                @icon=\"circle-question\"\n                @content={{i18n \"discourse_ai.ai_persona.default_llm_help\"}}\n              />\n            </div>\n            {{#if this.hasDefaultLlm}}\n              <div class=\"control-group\">\n                <label>\n                  <Input\n                    @type=\"checkbox\"\n                    @checked={{this.editingModel.force_default_llm}}\n                  />\n                  {{i18n \"discourse_ai.ai_persona.force_default_llm\"}}</label>\n              </div>\n            {{/if}}\n          {{/if}}\n          {{#unless @model.isNew}}\n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.ai_persona.user\"}}</label>\n              {{#if this.editingModel.user}}\n                <a\n                  class=\"avatar\"\n                  href={{this.editingModel.user.path}}\n                  data-user-card={{this.editingModel.user.username}}\n                >\n                  {{Avatar this.editingModel.user.avatar_template \"small\"}}\n                </a>\n                <LinkTo @route=\"adminUser\" @model={{this.adminUser}}>\n                  {{this.editingModel.user.username}}\n                </LinkTo>\n              {{else}}\n                <DButton\n                  @action={{this.createUser}}\n                  class=\"ai-persona-editor__create-user\"\n                >\n                  {{i18n \"discourse_ai.ai_persona.create_user\"}}\n                </DButton>\n                <DTooltip\n                  @icon=\"circle-question\"\n                  @content={{i18n \"discourse_ai.ai_persona.create_user_help\"}}\n                />\n              {{/if}}\n            </div>\n          {{/unless}}\n          <div class=\"control-group\">\n            <label>{{i18n \"discourse_ai.ai_persona.tools\"}}</label>\n            <AiToolSelector\n              class=\"ai-persona-editor__tools\"\n              @value={{this.selectedToolNames}}\n              @disabled={{this.editingModel.system}}\n              @tools={{@personas.resultSetMeta.tools}}\n              @onChange={{this.toolsChanged}}\n            />\n          </div>\n          {{#if this.allowForceTools}}\n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.ai_persona.forced_tools\"}}</label>\n              <AiToolSelector\n                class=\"ai-persona-editor__forced_tools\"\n                @value={{this.forcedToolNames}}\n                @tools={{this.selectedTools}}\n                @onChange={{this.forcedToolsChanged}}\n              />\n            </div>\n            {{#if this.hasForcedTools}}\n              <div class=\"control-group\">\n                <label>{{i18n\n                    \"discourse_ai.ai_persona.forced_tool_strategy\"\n                  }}</label>\n                <AiForcedToolStrategySelector\n                  class=\"ai-persona-editor__forced_tool_strategy\"\n                  @value={{this.editingModel.forced_tool_count}}\n                />\n              </div>\n            {{/if}}\n          {{/if}}\n          <AiPersonaToolOptions\n            @persona={{this.editingModel}}\n            @tools={{this.selectedToolNames}}\n            @llms={{@personas.resultSetMeta.llms}}\n            @allTools={{@personas.resultSetMeta.tools}}\n          />\n          <div class=\"control-group\">\n            <label>{{i18n \"discourse_ai.ai_persona.allowed_groups\"}}</label>\n            <GroupChooser\n              @value={{this.editingModel.allowed_group_ids}}\n              @content={{this.allGroups}}\n              @onChange={{this.updateAllowedGroups}}\n            />\n          </div>\n          <div class=\"control-group\">\n            <label for=\"ai-persona-editor__system_prompt\">{{i18n\n                \"discourse_ai.ai_persona.system_prompt\"\n              }}</label>\n            <Textarea\n              class=\"ai-persona-editor__system_prompt\"\n              @value={{this.editingModel.system_prompt}}\n              disabled={{this.editingModel.system}}\n            />\n          </div>\n          <div class=\"control-group ai-persona-editor__allow_personal_messages\">\n            <label>\n              <Input\n                @type=\"checkbox\"\n                @checked={{this.editingModel.allow_personal_messages}}\n              />\n              {{i18n \"discourse_ai.ai_persona.allow_personal_messages\"}}</label>\n            <DTooltip\n              @icon=\"circle-question\"\n              @content={{i18n\n                \"discourse_ai.ai_persona.allow_personal_messages_help\"\n              }}\n            />\n          </div>\n          {{#if this.editingModel.user}}\n            <div class=\"control-group ai-persona-editor__allow_topic_mentions\">\n              <label>\n                <Input\n                  @type=\"checkbox\"\n                  @checked={{this.editingModel.allow_topic_mentions}}\n                />\n                {{i18n \"discourse_ai.ai_persona.allow_topic_mentions\"}}</label>\n              <DTooltip\n                @icon=\"circle-question\"\n                @content={{i18n\n                  \"discourse_ai.ai_persona.allow_topic_mentions_help\"\n                }}\n              />\n            </div>\n            {{#if this.chatPluginEnabled}}\n              <div\n                class=\"control-group ai-persona-editor__allow_chat_direct_messages\"\n              >\n                <label>\n                  <Input\n                    @type=\"checkbox\"\n                    @checked={{this.editingModel.allow_chat_direct_messages}}\n                  />\n                  {{i18n\n                    \"discourse_ai.ai_persona.allow_chat_direct_messages\"\n                  }}</label>\n                <DTooltip\n                  @icon=\"circle-question\"\n                  @content={{i18n\n                    \"discourse_ai.ai_persona.allow_chat_direct_messages_help\"\n                  }}\n                />\n              </div>\n              <div\n                class=\"control-group ai-persona-editor__allow_chat_channel_mentions\"\n              >\n                <label>\n                  <Input\n                    @type=\"checkbox\"\n                    @checked={{this.editingModel.allow_chat_channel_mentions}}\n                  />\n                  {{i18n\n                    \"discourse_ai.ai_persona.allow_chat_channel_mentions\"\n                  }}</label>\n                <DTooltip\n                  @icon=\"circle-question\"\n                  @content={{i18n\n                    \"discourse_ai.ai_persona.allow_chat_channel_mentions_help\"\n                  }}\n                />\n              </div>\n            {{/if}}\n          {{/if}}\n          <div class=\"control-group ai-persona-editor__tool-details\">\n            <label>\n              <Input @type=\"checkbox\" @checked={{this.editingModel.tool_details}} />\n              {{i18n \"discourse_ai.ai_persona.tool_details\"}}</label>\n            <DTooltip\n              @icon=\"circle-question\"\n              @content={{i18n \"discourse_ai.ai_persona.tool_details_help\"}}\n            />\n          </div>\n          <div class=\"control-group ai-persona-editor__vision_enabled\">\n            <label>\n              <Input\n                @type=\"checkbox\"\n                @checked={{this.editingModel.vision_enabled}}\n              />\n              {{i18n \"discourse_ai.ai_persona.vision_enabled\"}}</label>\n            <DTooltip\n              @icon=\"circle-question\"\n              @content={{i18n \"discourse_ai.ai_persona.vision_enabled_help\"}}\n            />\n          </div>\n          {{#if this.editingModel.vision_enabled}}\n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.ai_persona.vision_max_pixels\"}}</label>\n              <ComboBox\n                @value={{this.maxPixelsValue}}\n                @content={{this.maxPixelValues}}\n                @onChange={{this.onChangeMaxPixels}}\n              />\n            </div>\n          {{/if}}\n          <div class=\"control-group\">\n            <label>{{i18n \"discourse_ai.ai_persona.max_context_posts\"}}</label>\n            <Input\n              @type=\"number\"\n              lang=\"en\"\n              class=\"ai-persona-editor__max_context_posts\"\n              @value={{this.editingModel.max_context_posts}}\n            />\n            <DTooltip\n              @icon=\"circle-question\"\n              @content={{i18n \"discourse_ai.ai_persona.max_context_posts_help\"}}\n            />\n          </div>\n          {{#if this.showTemperature}}\n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.ai_persona.temperature\"}}</label>\n              <Input\n                @type=\"number\"\n                class=\"ai-persona-editor__temperature\"\n                step=\"any\"\n                lang=\"en\"\n                @value={{this.editingModel.temperature}}\n                disabled={{this.editingModel.system}}\n              />\n              <DTooltip\n                @icon=\"circle-question\"\n                @content={{i18n \"discourse_ai.ai_persona.temperature_help\"}}\n              />\n            </div>\n          {{/if}}\n          {{#if this.showTopP}}\n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.ai_persona.top_p\"}}</label>\n              <Input\n                @type=\"number\"\n                step=\"any\"\n                lang=\"en\"\n                class=\"ai-persona-editor__top_p\"\n                @value={{this.editingModel.top_p}}\n                disabled={{this.editingModel.system}}\n              />\n              <DTooltip\n                @icon=\"circle-question\"\n                @content={{i18n \"discourse_ai.ai_persona.top_p_help\"}}\n              />\n            </div>\n          {{/if}}\n          {{#if this.siteSettings.ai_embeddings_enabled}}\n            <div class=\"control-group\">\n              <RagUploader\n                @target={{this.editingModel}}\n                @updateUploads={{this.updateUploads}}\n                @onRemove={{this.removeUpload}}\n              />\n            </div>\n            <RagOptions @model={{this.editingModel}}>\n              <div class=\"control-group\">\n                <label>{{i18n\n                    \"discourse_ai.ai_persona.rag_conversation_chunks\"\n                  }}</label>\n                <Input\n                  @type=\"number\"\n                  step=\"any\"\n                  lang=\"en\"\n                  class=\"ai-persona-editor__rag_conversation_chunks\"\n                  @value={{this.editingModel.rag_conversation_chunks}}\n                />\n                <DTooltip\n                  @icon=\"circle-question\"\n                  @content={{i18n\n                    \"discourse_ai.ai_persona.rag_conversation_chunks_help\"\n                  }}\n                />\n              </div>\n              <div class=\"control-group\">\n                <label>{{i18n\n                    \"discourse_ai.ai_persona.question_consolidator_llm\"\n                  }}</label>\n                <AiLlmSelector\n                  class=\"ai-persona-editor__llms\"\n                  @value={{this.mappedQuestionConsolidatorLlm}}\n                  @llms={{@personas.resultSetMeta.llms}}\n                />\n    \n                <DTooltip\n                  @icon=\"circle-question\"\n                  @content={{i18n\n                    \"discourse_ai.ai_persona.question_consolidator_llm_help\"\n                  }}\n                />\n              </div>\n            </RagOptions>\n          {{/if}}\n          <div class=\"control-group ai-persona-editor__action_panel\">\n            <DButton\n              class=\"btn-primary ai-persona-editor__save\"\n              @action={{this.save}}\n              @disabled={{this.isSaving}}\n            >{{i18n \"discourse_ai.ai_persona.save\"}}</DButton>\n            {{#if this.showDelete}}\n              <DButton\n                @action={{this.delete}}\n                class=\"btn-danger ai-persona-editor__delete\"\n              >\n                {{i18n \"discourse_ai.ai_persona.delete\"}}\n              </DButton>\n            {{/if}}\n          </div>\n        </form>\n      \n    */\n    {\n      \"id\": \"Id82wgrk\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@route\\\",\\\"@label\\\"],[\\\"adminPlugins.show.discourse-ai-personas\\\",\\\"discourse_ai.ai_persona.back\\\"]],null],[1,\\\"\\\\n    \\\"],[11,\\\"form\\\"],[24,0,\\\"form-horizontal ai-persona-editor\\\"],[4,[32,1],[[30,0,[\\\"updateModel\\\"]],[30,1,[\\\"id\\\"]]],null],[4,[32,2],[[30,0,[\\\"updateModel\\\"]],[30,1,[\\\"id\\\"]]],null],[4,[32,2],[[30,0,[\\\"updateAllGroups\\\"]],[30,1,[\\\"id\\\"]]],null],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[32,3],[[24,0,\\\"ai-persona-editor__enabled\\\"],[4,[32,4],[\\\"click\\\",[30,0,[\\\"toggleEnabled\\\"]]],null]],[[\\\"@state\\\",\\\"@label\\\"],[[30,1,[\\\"enabled\\\"]],\\\"discourse_ai.ai_persona.enabled\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"control-group ai-persona-editor__priority\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[32,3],[[24,0,\\\"ai-persona-editor__priority\\\"],[4,[32,4],[\\\"click\\\",[30,0,[\\\"togglePriority\\\"]]],null]],[[\\\"@state\\\",\\\"@label\\\"],[[30,1,[\\\"priority\\\"]],\\\"discourse_ai.ai_persona.priority\\\"]],null],[1,\\\"\\\\n        \\\"],[8,[32,5],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,6],[\\\"discourse_ai.ai_persona.priority_help\\\"],null]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,6],[\\\"discourse_ai.ai_persona.name\\\"],null]],[13],[1,\\\"\\\\n        \\\"],[8,[32,7],[[24,0,\\\"ai-persona-editor__name\\\"],[16,\\\"disabled\\\",[30,0,[\\\"editingModel\\\",\\\"system\\\"]]]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"text\\\",[30,0,[\\\"editingModel\\\",\\\"name\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,6],[\\\"discourse_ai.ai_persona.description\\\"],null]],[13],[1,\\\"\\\\n        \\\"],[8,[32,8],[[24,0,\\\"ai-persona-editor__description\\\"],[16,\\\"disabled\\\",[30,0,[\\\"editingModel\\\",\\\"system\\\"]]]],[[\\\"@value\\\"],[[30,0,[\\\"editingModel\\\",\\\"description\\\"]]]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"editingModel\\\",\\\"user\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,6],[\\\"discourse_ai.ai_persona.default_llm\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,9],[[24,0,\\\"ai-persona-editor__llms\\\"]],[[\\\"@value\\\",\\\"@llms\\\"],[[30,0,[\\\"mappedDefaultLlm\\\"]],[30,2,[\\\"resultSetMeta\\\",\\\"llms\\\"]]]],null],[1,\\\"\\\\n          \\\"],[8,[32,5],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,6],[\\\"discourse_ai.ai_persona.default_llm_help\\\"],null]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasDefaultLlm\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[32,7],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"editingModel\\\",\\\"force_default_llm\\\"]]]],null],[1,\\\"\\\\n              \\\"],[1,[28,[32,6],[\\\"discourse_ai.ai_persona.force_default_llm\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[41,[51,[30,1,[\\\"isNew\\\"]]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,6],[\\\"discourse_ai.ai_persona.user\\\"],null]],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"editingModel\\\",\\\"user\\\"]],[[[1,\\\"            \\\"],[10,3],[14,0,\\\"avatar\\\"],[15,6,[30,0,[\\\"editingModel\\\",\\\"user\\\",\\\"path\\\"]]],[15,\\\"data-user-card\\\",[30,0,[\\\"editingModel\\\",\\\"user\\\",\\\"username\\\"]]],[12],[1,\\\"\\\\n              \\\"],[1,[28,[32,10],[[30,0,[\\\"editingModel\\\",\\\"user\\\",\\\"avatar_template\\\"]],\\\"small\\\"],null]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[8,[32,11],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"adminUser\\\",[30,0,[\\\"adminUser\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[30,0,[\\\"editingModel\\\",\\\"user\\\",\\\"username\\\"]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[8,[32,12],[[24,0,\\\"ai-persona-editor__create-user\\\"]],[[\\\"@action\\\"],[[30,0,[\\\"createUser\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[28,[32,6],[\\\"discourse_ai.ai_persona.create_user\\\"],null]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n            \\\"],[8,[32,5],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,6],[\\\"discourse_ai.ai_persona.create_user_help\\\"],null]]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,6],[\\\"discourse_ai.ai_persona.tools\\\"],null]],[13],[1,\\\"\\\\n        \\\"],[8,[32,13],[[24,0,\\\"ai-persona-editor__tools\\\"]],[[\\\"@value\\\",\\\"@disabled\\\",\\\"@tools\\\",\\\"@onChange\\\"],[[30,0,[\\\"selectedToolNames\\\"]],[30,0,[\\\"editingModel\\\",\\\"system\\\"]],[30,2,[\\\"resultSetMeta\\\",\\\"tools\\\"]],[30,0,[\\\"toolsChanged\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"allowForceTools\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,6],[\\\"discourse_ai.ai_persona.forced_tools\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,13],[[24,0,\\\"ai-persona-editor__forced_tools\\\"]],[[\\\"@value\\\",\\\"@tools\\\",\\\"@onChange\\\"],[[30,0,[\\\"forcedToolNames\\\"]],[30,0,[\\\"selectedTools\\\"]],[30,0,[\\\"forcedToolsChanged\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasForcedTools\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,6],[\\\"discourse_ai.ai_persona.forced_tool_strategy\\\"],null]],[13],[1,\\\"\\\\n            \\\"],[8,[32,14],[[24,0,\\\"ai-persona-editor__forced_tool_strategy\\\"]],[[\\\"@value\\\"],[[30,0,[\\\"editingModel\\\",\\\"forced_tool_count\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"      \\\"],[8,[32,15],null,[[\\\"@persona\\\",\\\"@tools\\\",\\\"@llms\\\",\\\"@allTools\\\"],[[30,0,[\\\"editingModel\\\"]],[30,0,[\\\"selectedToolNames\\\"]],[30,2,[\\\"resultSetMeta\\\",\\\"llms\\\"]],[30,2,[\\\"resultSetMeta\\\",\\\"tools\\\"]]]],null],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,6],[\\\"discourse_ai.ai_persona.allowed_groups\\\"],null]],[13],[1,\\\"\\\\n        \\\"],[8,[32,16],null,[[\\\"@value\\\",\\\"@content\\\",\\\"@onChange\\\"],[[30,0,[\\\"editingModel\\\",\\\"allowed_group_ids\\\"]],[30,0,[\\\"allGroups\\\"]],[30,0,[\\\"updateAllowedGroups\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[14,\\\"for\\\",\\\"ai-persona-editor__system_prompt\\\"],[12],[1,[28,[32,6],[\\\"discourse_ai.ai_persona.system_prompt\\\"],null]],[13],[1,\\\"\\\\n        \\\"],[8,[32,8],[[24,0,\\\"ai-persona-editor__system_prompt\\\"],[16,\\\"disabled\\\",[30,0,[\\\"editingModel\\\",\\\"system\\\"]]]],[[\\\"@value\\\"],[[30,0,[\\\"editingModel\\\",\\\"system_prompt\\\"]]]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"control-group ai-persona-editor__allow_personal_messages\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,7],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"editingModel\\\",\\\"allow_personal_messages\\\"]]]],null],[1,\\\"\\\\n          \\\"],[1,[28,[32,6],[\\\"discourse_ai.ai_persona.allow_personal_messages\\\"],null]],[13],[1,\\\"\\\\n        \\\"],[8,[32,5],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,6],[\\\"discourse_ai.ai_persona.allow_personal_messages_help\\\"],null]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"editingModel\\\",\\\"user\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"control-group ai-persona-editor__allow_topic_mentions\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[32,7],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"editingModel\\\",\\\"allow_topic_mentions\\\"]]]],null],[1,\\\"\\\\n            \\\"],[1,[28,[32,6],[\\\"discourse_ai.ai_persona.allow_topic_mentions\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,5],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,6],[\\\"discourse_ai.ai_persona.allow_topic_mentions_help\\\"],null]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"chatPluginEnabled\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"control-group ai-persona-editor__allow_chat_direct_messages\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[32,7],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"editingModel\\\",\\\"allow_chat_direct_messages\\\"]]]],null],[1,\\\"\\\\n              \\\"],[1,[28,[32,6],[\\\"discourse_ai.ai_persona.allow_chat_direct_messages\\\"],null]],[13],[1,\\\"\\\\n            \\\"],[8,[32,5],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,6],[\\\"discourse_ai.ai_persona.allow_chat_direct_messages_help\\\"],null]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"control-group ai-persona-editor__allow_chat_channel_mentions\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[32,7],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"editingModel\\\",\\\"allow_chat_channel_mentions\\\"]]]],null],[1,\\\"\\\\n              \\\"],[1,[28,[32,6],[\\\"discourse_ai.ai_persona.allow_chat_channel_mentions\\\"],null]],[13],[1,\\\"\\\\n            \\\"],[8,[32,5],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,6],[\\\"discourse_ai.ai_persona.allow_chat_channel_mentions_help\\\"],null]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"      \\\"],[10,0],[14,0,\\\"control-group ai-persona-editor__tool-details\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,7],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"editingModel\\\",\\\"tool_details\\\"]]]],null],[1,\\\"\\\\n          \\\"],[1,[28,[32,6],[\\\"discourse_ai.ai_persona.tool_details\\\"],null]],[13],[1,\\\"\\\\n        \\\"],[8,[32,5],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,6],[\\\"discourse_ai.ai_persona.tool_details_help\\\"],null]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"control-group ai-persona-editor__vision_enabled\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,7],null,[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,0,[\\\"editingModel\\\",\\\"vision_enabled\\\"]]]],null],[1,\\\"\\\\n          \\\"],[1,[28,[32,6],[\\\"discourse_ai.ai_persona.vision_enabled\\\"],null]],[13],[1,\\\"\\\\n        \\\"],[8,[32,5],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,6],[\\\"discourse_ai.ai_persona.vision_enabled_help\\\"],null]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"editingModel\\\",\\\"vision_enabled\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,6],[\\\"discourse_ai.ai_persona.vision_max_pixels\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,17],null,[[\\\"@value\\\",\\\"@content\\\",\\\"@onChange\\\"],[[30,0,[\\\"maxPixelsValue\\\"]],[30,0,[\\\"maxPixelValues\\\"]],[30,0,[\\\"onChangeMaxPixels\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,6],[\\\"discourse_ai.ai_persona.max_context_posts\\\"],null]],[13],[1,\\\"\\\\n        \\\"],[8,[32,7],[[24,\\\"lang\\\",\\\"en\\\"],[24,0,\\\"ai-persona-editor__max_context_posts\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"editingModel\\\",\\\"max_context_posts\\\"]]]],null],[1,\\\"\\\\n        \\\"],[8,[32,5],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,6],[\\\"discourse_ai.ai_persona.max_context_posts_help\\\"],null]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showTemperature\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,6],[\\\"discourse_ai.ai_persona.temperature\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,7],[[24,0,\\\"ai-persona-editor__temperature\\\"],[24,\\\"step\\\",\\\"any\\\"],[24,\\\"lang\\\",\\\"en\\\"],[16,\\\"disabled\\\",[30,0,[\\\"editingModel\\\",\\\"system\\\"]]]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"editingModel\\\",\\\"temperature\\\"]]]],null],[1,\\\"\\\\n          \\\"],[8,[32,5],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,6],[\\\"discourse_ai.ai_persona.temperature_help\\\"],null]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"showTopP\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,6],[\\\"discourse_ai.ai_persona.top_p\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,7],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"lang\\\",\\\"en\\\"],[24,0,\\\"ai-persona-editor__top_p\\\"],[16,\\\"disabled\\\",[30,0,[\\\"editingModel\\\",\\\"system\\\"]]]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"editingModel\\\",\\\"top_p\\\"]]]],null],[1,\\\"\\\\n          \\\"],[8,[32,5],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,6],[\\\"discourse_ai.ai_persona.top_p_help\\\"],null]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"siteSettings\\\",\\\"ai_embeddings_enabled\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,18],null,[[\\\"@target\\\",\\\"@updateUploads\\\",\\\"@onRemove\\\"],[[30,0,[\\\"editingModel\\\"]],[30,0,[\\\"updateUploads\\\"]],[30,0,[\\\"removeUpload\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[8,[32,19],null,[[\\\"@model\\\"],[[30,0,[\\\"editingModel\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,6],[\\\"discourse_ai.ai_persona.rag_conversation_chunks\\\"],null]],[13],[1,\\\"\\\\n            \\\"],[8,[32,7],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"lang\\\",\\\"en\\\"],[24,0,\\\"ai-persona-editor__rag_conversation_chunks\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,0,[\\\"editingModel\\\",\\\"rag_conversation_chunks\\\"]]]],null],[1,\\\"\\\\n            \\\"],[8,[32,5],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,6],[\\\"discourse_ai.ai_persona.rag_conversation_chunks_help\\\"],null]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,6],[\\\"discourse_ai.ai_persona.question_consolidator_llm\\\"],null]],[13],[1,\\\"\\\\n            \\\"],[8,[32,9],[[24,0,\\\"ai-persona-editor__llms\\\"]],[[\\\"@value\\\",\\\"@llms\\\"],[[30,0,[\\\"mappedQuestionConsolidatorLlm\\\"]],[30,2,[\\\"resultSetMeta\\\",\\\"llms\\\"]]]],null],[1,\\\"\\\\n\\\\n            \\\"],[8,[32,5],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,6],[\\\"discourse_ai.ai_persona.question_consolidator_llm_help\\\"],null]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[10,0],[14,0,\\\"control-group ai-persona-editor__action_panel\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[32,12],[[24,0,\\\"btn-primary ai-persona-editor__save\\\"]],[[\\\"@action\\\",\\\"@disabled\\\"],[[30,0,[\\\"save\\\"]],[30,0,[\\\"isSaving\\\"]]]],[[\\\"default\\\"],[[[[1,[28,[32,6],[\\\"discourse_ai.ai_persona.save\\\"],null]]],[]]]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showDelete\\\"]],[[[1,\\\"          \\\"],[8,[32,12],[[24,0,\\\"btn-danger ai-persona-editor__delete\\\"]],[[\\\"@action\\\"],[[30,0,[\\\"delete\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[28,[32,6],[\\\"discourse_ai.ai_persona.delete\\\"],null]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@model\\\",\\\"@personas\\\"],false,[\\\"if\\\",\\\"unless\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-persona-editor.js\",\n      \"scope\": () => [_backButton.default, _didUpdate.default, _didInsert.default, _dToggleSwitch.default, _modifier.on, _dTooltip.default, _discourseI18n.i18n, _component2.Input, _dTextarea.default, _aiLlmSelector.default, _boundAvatarTemplate.default, _routing.LinkTo, _dButton.default, _aiToolSelector.default, _aiForcedToolStrategySelector.default, _aiPersonaToolOptions.default, _groupChooser.default, _comboBox.default, _ragUploader.default, _ragOptions.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = PersonaEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-persona-list-editor\", [\"exports\", \"@glimmer/component\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"@ember/routing\", \"@ember/service\", \"discourse/components/d-breadcrumbs-item\", \"discourse/components/d-page-subheader\", \"discourse/components/d-toggle-switch\", \"discourse/helpers/concat-class\", \"discourse/lib/ajax-error\", \"discourse-common/helpers/i18n\", \"admin/components/admin-config-area-empty-list\", \"discourse/plugins/discourse-ai/discourse/components/ai-persona-editor\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _modifier, _object, _routing, _service, _dBreadcrumbsItem, _dPageSubheader, _dToggleSwitch, _concatClass, _ajaxError, _i18n, _adminConfigAreaEmptyList, _aiPersonaEditor, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiPersonaListEditor extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"adminPluginNavManager\", [_service.service]))();\n    #adminPluginNavManager = (() => (dt7948.i(this, \"adminPluginNavManager\"), void 0))();\n    async toggleEnabled(persona) {\n      const oldValue = persona.enabled;\n      const newValue = !oldValue;\n      try {\n        persona.set(\"enabled\", newValue);\n        await persona.save();\n      } catch (err) {\n        persona.set(\"enabled\", oldValue);\n        (0, _ajaxError.popupAjaxError)(err);\n      }\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"toggleEnabled\", [_object.action]))();\n    static #_3 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DBreadcrumbsItem\n          @path=\"/admin/plugins/{{this.adminPluginNavManager.currentPlugin.name}}/ai-personas\"\n          @label={{i18n \"discourse_ai.ai_persona.short_title\"}}\n        />\n        <section class=\"ai-persona-list-editor__current admin-detail pull-left\">\n          {{#if @currentPersona}}\n            <AiPersonaEditor @model={{@currentPersona}} @personas={{@personas}} />\n          {{else}}\n            <DPageSubheader\n              @titleLabel={{i18n \"discourse_ai.ai_persona.short_title\"}}\n              @descriptionLabel={{i18n\n                \"discourse_ai.ai_persona.persona_description\"\n              }}\n              @learnMoreUrl=\"https://meta.discourse.org/t/ai-bot-personas/306099\"\n            >\n              <:actions as |actions|>\n                <actions.Primary\n                  @label=\"discourse_ai.ai_persona.new\"\n                  @route=\"adminPlugins.show.discourse-ai-personas.new\"\n                  @icon=\"plus\"\n                  class=\"ai-persona-list-editor__new-button\"\n                />\n              </:actions>\n            </DPageSubheader>\n    \n            {{#if @personas}}\n              <table class=\"content-list ai-persona-list-editor d-admin-table\">\n                <thead>\n                  <tr>\n                    <th>{{i18n \"discourse_ai.ai_persona.name\"}}</th>\n                    <th>{{i18n \"discourse_ai.ai_persona.enabled\"}}</th>\n                    <th></th>\n                  </tr>\n                </thead>\n                <tbody>\n                  {{#each @personas as |persona|}}\n                    <tr\n                      data-persona-id={{persona.id}}\n                      class={{concatClass\n                        \"ai-persona-list__row d-admin-row__content\"\n                        (if persona.priority \"priority\")\n                      }}\n                    >\n                      <td class=\"d-admin-row__overview\">\n                        <div class=\"ai-persona-list__name-with-description\">\n                          <div class=\"ai-persona-list__name\">\n                            <strong>\n                              {{persona.name}}\n                            </strong>\n                          </div>\n                          <div class=\"ai-persona-list__description\">\n                            {{persona.description}}\n                          </div>\n                        </div>\n                      </td>\n                      <td class=\"d-admin-row__detail\">\n                        <DToggleSwitch\n                          @state={{persona.enabled}}\n                          {{on \"click\" (fn this.toggleEnabled persona)}}\n                        />\n                      </td>\n                      <td class=\"d-admin-row__controls\">\n                        <LinkTo\n                          @route=\"adminPlugins.show.discourse-ai-personas.edit\"\n                          @model={{persona}}\n                          class=\"btn btn-text btn-small\"\n                        >{{i18n \"discourse_ai.ai_persona.edit\"}} </LinkTo>\n                      </td>\n                    </tr>\n                  {{/each}}\n                </tbody>\n              </table>\n            {{else}}\n              <AdminConfigAreaEmptyList\n                @ctaLabel=\"discourse_ai.ai_persona.new\"\n                @ctaRoute=\"adminPlugins.show.discourse-ai-personas.new\"\n                @ctaClass=\"ai-persona-list-editor__empty-new-button\"\n                @emptyLabel=\"discourse_ai.ai_persona.no_personas\"\n              />\n            {{/if}}\n          {{/if}}\n        </section>\n      \n    */\n    {\n      \"id\": \"ufrWVvos\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@path\\\",\\\"@label\\\"],[[29,[\\\"/admin/plugins/\\\",[30,0,[\\\"adminPluginNavManager\\\",\\\"currentPlugin\\\",\\\"name\\\"]],\\\"/ai-personas\\\"]],[28,[32,1],[\\\"discourse_ai.ai_persona.short_title\\\"],null]]],null],[1,\\\"\\\\n    \\\"],[10,\\\"section\\\"],[14,0,\\\"ai-persona-list-editor__current admin-detail pull-left\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"        \\\"],[8,[32,2],null,[[\\\"@model\\\",\\\"@personas\\\"],[[30,1],[30,2]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[32,3],null,[[\\\"@titleLabel\\\",\\\"@descriptionLabel\\\",\\\"@learnMoreUrl\\\"],[[28,[32,1],[\\\"discourse_ai.ai_persona.short_title\\\"],null],[28,[32,1],[\\\"discourse_ai.ai_persona.persona_description\\\"],null],\\\"https://meta.discourse.org/t/ai-bot-personas/306099\\\"]],[[\\\"actions\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,3,[\\\"Primary\\\"]],[[24,0,\\\"ai-persona-list-editor__new-button\\\"]],[[\\\"@label\\\",\\\"@route\\\",\\\"@icon\\\"],[\\\"discourse_ai.ai_persona.new\\\",\\\"adminPlugins.show.discourse-ai-personas.new\\\",\\\"plus\\\"]],null],[1,\\\"\\\\n          \\\"]],[3]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,2],[[[1,\\\"          \\\"],[10,\\\"table\\\"],[14,0,\\\"content-list ai-persona-list-editor d-admin-table\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.ai_persona.name\\\"],null]],[13],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.ai_persona.enabled\\\"],null]],[13],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[12],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,2]],null]],null],null,[[[1,\\\"                \\\"],[10,\\\"tr\\\"],[15,\\\"data-persona-id\\\",[30,4,[\\\"id\\\"]]],[15,0,[28,[32,4],[\\\"ai-persona-list__row d-admin-row__content\\\",[52,[30,4,[\\\"priority\\\"]],\\\"priority\\\"]],null]],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__overview\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"ai-persona-list__name-with-description\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"ai-persona-list__name\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n                          \\\"],[1,[30,4,[\\\"name\\\"]]],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"ai-persona-list__description\\\"],[12],[1,\\\"\\\\n                        \\\"],[1,[30,4,[\\\"description\\\"]]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__detail\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[32,5],[[4,[32,6],[\\\"click\\\",[28,[32,7],[[30,0,[\\\"toggleEnabled\\\"]],[30,4]],null]],null]],[[\\\"@state\\\"],[[30,4,[\\\"enabled\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__controls\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[32,8],[[24,0,\\\"btn btn-text btn-small\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"adminPlugins.show.discourse-ai-personas.edit\\\",[30,4]]],[[\\\"default\\\"],[[[[1,[28,[32,1],[\\\"discourse_ai.ai_persona.edit\\\"],null]],[1,\\\" \\\"]],[]]]]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[8,[32,9],null,[[\\\"@ctaLabel\\\",\\\"@ctaRoute\\\",\\\"@ctaClass\\\",\\\"@emptyLabel\\\"],[\\\"discourse_ai.ai_persona.new\\\",\\\"adminPlugins.show.discourse-ai-personas.new\\\",\\\"ai-persona-list-editor__empty-new-button\\\",\\\"discourse_ai.ai_persona.no_personas\\\"]],null],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@currentPersona\\\",\\\"@personas\\\",\\\"actions\\\",\\\"persona\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-persona-list-editor.js\",\n      \"scope\": () => [_dBreadcrumbsItem.default, _i18n.default, _aiPersonaEditor.default, _dPageSubheader.default, _concatClass.default, _dToggleSwitch.default, _modifier.on, _helper.fn, _routing.LinkTo, _adminConfigAreaEmptyList.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiPersonaListEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-persona-tool-option-editor\", [\"exports\", \"@glimmer/component\", \"@ember/component\", \"@ember/modifier\", \"@ember/object\", \"truth-helpers\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-llm-selector\", \"@ember/template-factory\"], function (_exports, _component, _component2, _modifier, _object, _truthHelpers, _discourseI18n, _aiLlmSelector, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiPersonaToolOptionEditor extends _component.default {\n    get isBoolean() {\n      return this.args.option.type === \"boolean\";\n    }\n    get isEnum() {\n      return this.args.option.type === \"enum\";\n    }\n    get isLlm() {\n      return this.args.option.type === \"llm\";\n    }\n    get selectedValue() {\n      return this.args.option.value.value === \"true\";\n    }\n    get selectedLlm() {\n      if (this.args.option.value.value) {\n        return `custom:${this.args.option.value.value}`;\n      } else {\n        return \"blank\";\n      }\n    }\n    set selectedLlm(value) {\n      if (value === \"blank\") {\n        this.args.option.value.value = null;\n      } else {\n        this.args.option.value.value = value.replace(\"custom:\", \"\");\n      }\n    }\n    onCheckboxChange(event) {\n      this.args.option.value.value = event.target.checked ? \"true\" : \"false\";\n    }\n    static #_ = (() => dt7948.n(this.prototype, \"onCheckboxChange\", [_object.action]))();\n    onSelectOption(event) {\n      this.args.option.value.value = event.target.value;\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"onSelectOption\", [_object.action]))();\n    static #_3 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"control-group ai-persona-tool-option-editor\">\n          <label>\n            {{@option.name}}\n          </label>\n          <div class=\"\">\n            {{#if this.isEnum}}\n              <select name=\"input\" {{on \"change\" this.onSelectOption}}>\n                {{#each @option.values as |value|}}\n                  <option value={{value}} selected={{eq value @option.value.value}}>\n                    {{value}}\n                  </option>\n                {{/each}}\n              </select>\n            {{else if this.isLlm}}\n              <AiLlmSelector\n                class=\"ai-persona-tool-option-editor__llms\"\n                @value={{this.selectedLlm}}\n                @llms={{@llms}}\n                @blankName={{i18n \"discourse_ai.ai_persona.use_parent_llm\"}}\n              />\n            {{else if this.isBoolean}}\n              <input\n                type=\"checkbox\"\n                checked={{this.selectedValue}}\n                {{on \"click\" this.onCheckboxChange}}\n              />\n              {{@option.description}}\n            {{else}}\n              <Input @value={{@option.value.value}} />\n            {{/if}}\n          </div>\n          {{#unless this.isBoolean}}\n            <div class=\"ai-persona-tool-option-editor__instructions\">\n              {{@option.description}}\n            </div>\n          {{/unless}}\n        </div>\n      \n    */\n    {\n      \"id\": \"oQ46XPhz\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"control-group ai-persona-tool-option-editor\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n        \\\"],[1,[30,1,[\\\"name\\\"]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isEnum\\\"]],[[[1,\\\"          \\\"],[11,\\\"select\\\"],[24,3,\\\"input\\\"],[4,[32,0],[\\\"change\\\",[30,0,[\\\"onSelectOption\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,1,[\\\"values\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[10,\\\"option\\\"],[15,2,[30,2]],[15,\\\"selected\\\",[28,[32,1],[[30,2],[30,1,[\\\"value\\\",\\\"value\\\"]]],null]],[12],[1,\\\"\\\\n                \\\"],[1,[30,2]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"isLlm\\\"]],[[[1,\\\"          \\\"],[8,[32,2],[[24,0,\\\"ai-persona-tool-option-editor__llms\\\"]],[[\\\"@value\\\",\\\"@llms\\\",\\\"@blankName\\\"],[[30,0,[\\\"selectedLlm\\\"]],[30,3],[28,[32,3],[\\\"discourse_ai.ai_persona.use_parent_llm\\\"],null]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"isBoolean\\\"]],[[[1,\\\"          \\\"],[11,\\\"input\\\"],[16,\\\"checked\\\",[30,0,[\\\"selectedValue\\\"]]],[24,4,\\\"checkbox\\\"],[4,[32,0],[\\\"click\\\",[30,0,[\\\"onCheckboxChange\\\"]]],null],[12],[13],[1,\\\"\\\\n          \\\"],[1,[30,1,[\\\"description\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[8,[32,4],null,[[\\\"@value\\\"],[[30,1,[\\\"value\\\",\\\"value\\\"]]]],null],[1,\\\"\\\\n        \\\"]],[]]]],[]]]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"isBoolean\\\"]]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"ai-persona-tool-option-editor__instructions\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[30,1,[\\\"description\\\"]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@option\\\",\\\"value\\\",\\\"@llms\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\",\\\"unless\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-persona-tool-option-editor.js\",\n      \"scope\": () => [_modifier.on, _truthHelpers.eq, _aiLlmSelector.default, _discourseI18n.i18n, _component2.Input],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiPersonaToolOptionEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-persona-tool-options\", [\"exports\", \"@glimmer/component\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-persona-tool-option-editor\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _discourseI18n, _aiPersonaToolOptionEditor, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiPersonaToolOptions extends _component.default {\n    get showToolOptions() {\n      const allTools = this.args.allTools;\n      if (!allTools) {\n        return false;\n      }\n      return this.toolNames.any(tool => allTools.findBy(\"id\", tool)?.options);\n    }\n    get toolNames() {\n      if (!this.args.tools) {\n        return [];\n      }\n      return this.args.tools.map(tool => {\n        if (typeof tool === \"string\") {\n          return tool;\n        } else {\n          return tool[0];\n        }\n      });\n    }\n    get toolOptions() {\n      if (!this.args.tools) {\n        return [];\n      }\n      const allTools = this.args.allTools;\n      if (!allTools) {\n        return [];\n      }\n      const options = [];\n      this.toolNames.forEach(toolId => {\n        const tool = allTools.findBy(\"id\", toolId);\n        const toolName = tool?.name;\n        const toolOptions = tool?.options;\n        if (toolOptions) {\n          const mappedOptions = Object.keys(toolOptions).map(key => {\n            const value = this.args.persona.getToolOption(toolId, key);\n            return Object.assign({}, toolOptions[key], {\n              id: key,\n              value\n            });\n          });\n          options.push({\n            toolName,\n            options: mappedOptions\n          });\n        }\n      });\n      return options;\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.showToolOptions}}\n          <div class=\"control-group\">\n            <label>{{i18n \"discourse_ai.ai_persona.tool_options\"}}</label>\n            <div>\n              {{#each this.toolOptions as |toolOption|}}\n                <div class=\"ai-persona-editor__tool-options\">\n                  <div class=\"ai-persona-editor__tool-options-name\">\n                    {{toolOption.toolName}}\n                  </div>\n                  <div class=\"ai-persona-editor__tool-option-options\">\n                    {{#each toolOption.options as |option|}}\n                      <AiPersonaToolOptionEditor\n                        @option={{option}}\n                        @llms={{@llms}}\n                      />\n                    {{/each}}\n                  </div>\n                </div>\n              {{/each}}\n            </div>\n          </div>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"ZkSVlPJ7\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showToolOptions\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,0],[\\\"discourse_ai.ai_persona.tool_options\\\"],null]],[13],[1,\\\"\\\\n        \\\"],[10,0],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"toolOptions\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[10,0],[14,0,\\\"ai-persona-editor__tool-options\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"ai-persona-editor__tool-options-name\\\"],[12],[1,\\\"\\\\n                \\\"],[1,[30,1,[\\\"toolName\\\"]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"ai-persona-editor__tool-option-options\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,1,[\\\"options\\\"]]],null]],null],null,[[[1,\\\"                  \\\"],[8,[32,1],null,[[\\\"@option\\\",\\\"@llms\\\"],[[30,2],[30,3]]],null],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"toolOption\\\",\\\"option\\\",\\\"@llms\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-persona-tool-options.js\",\n      \"scope\": () => [_discourseI18n.i18n, _aiPersonaToolOptionEditor.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiPersonaToolOptions;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-post-helper-menu\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/render-modifiers/modifiers/will-destroy\", \"@ember/service\", \"ember-modifier\", \"truth-helpers\", \"discourse/components/cook-text\", \"discourse/components/d-button\", \"discourse/components/fast-edit\", \"discourse/components/modal/fast-edit\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/text\", \"discourse/lib/utilities\", \"discourse-common/utils/decorators\", \"discourse-i18n\", \"truth-helpers/helpers/eq\", \"discourse/plugins/discourse-ai/discourse/components/ai-helper-loading\", \"discourse/plugins/discourse-ai/discourse/components/ai-helper-options-list\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _didInsert, _willDestroy, _service, _emberModifier, _truthHelpers, _cookText, _dButton, _fastEdit, _fastEdit2, _ajax, _ajaxError, _text, _utilities, _decorators, _discourseI18n, _eq, _aiHelperLoading, _aiHelperOptionsList, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiPostHelperMenu extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"messageBus\", [_service.service]))();\n    #messageBus = (() => (dt7948.i(this, \"messageBus\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"site\", [_service.service]))();\n    #site = (() => (dt7948.i(this, \"site\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"menu\", [_service.service]))();\n    #menu = (() => (dt7948.i(this, \"menu\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"tooltip\", [_service.service]))();\n    #tooltip = (() => (dt7948.i(this, \"tooltip\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"menuState\", [_tracking.tracked], function () {\n      return this.MENU_STATES.options;\n    }))();\n    #menuState = (() => (dt7948.i(this, \"menuState\"), void 0))();\n    static #_9 = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_10 = (() => dt7948.g(this.prototype, \"suggestion\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #suggestion = (() => (dt7948.i(this, \"suggestion\"), void 0))();\n    static #_11 = (() => dt7948.g(this.prototype, \"customPromptValue\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #customPromptValue = (() => (dt7948.i(this, \"customPromptValue\"), void 0))();\n    static #_12 = (() => dt7948.g(this.prototype, \"copyButtonIcon\", [_tracking.tracked], function () {\n      return \"copy\";\n    }))();\n    #copyButtonIcon = (() => (dt7948.i(this, \"copyButtonIcon\"), void 0))();\n    static #_13 = (() => dt7948.g(this.prototype, \"copyButtonLabel\", [_tracking.tracked], function () {\n      return \"discourse_ai.ai_helper.post_options_menu.copy\";\n    }))();\n    #copyButtonLabel = (() => (dt7948.i(this, \"copyButtonLabel\"), void 0))();\n    static #_14 = (() => dt7948.g(this.prototype, \"showFastEdit\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showFastEdit = (() => (dt7948.i(this, \"showFastEdit\"), void 0))();\n    static #_15 = (() => dt7948.g(this.prototype, \"showAiButtons\", [_tracking.tracked], function () {\n      return true;\n    }))();\n    #showAiButtons = (() => (dt7948.i(this, \"showAiButtons\"), void 0))();\n    static #_16 = (() => dt7948.g(this.prototype, \"streaming\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #streaming = (() => (dt7948.i(this, \"streaming\"), void 0))();\n    static #_17 = (() => dt7948.g(this.prototype, \"lastSelectedOption\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #lastSelectedOption = (() => (dt7948.i(this, \"lastSelectedOption\"), void 0))();\n    static #_18 = (() => dt7948.g(this.prototype, \"isSavingFootnote\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isSavingFootnote = (() => (dt7948.i(this, \"isSavingFootnote\"), void 0))();\n    static #_19 = (() => dt7948.g(this.prototype, \"supportsAddFootnote\", [_tracking.tracked], function () {\n      return this.args.data.supportsFastEdit;\n    }))();\n    #supportsAddFootnote = (() => (dt7948.i(this, \"supportsAddFootnote\"), void 0))();\n    MENU_STATES = {\n      options: \"OPTIONS\",\n      loading: \"LOADING\",\n      result: \"RESULT\"\n    };\n    showFootnoteTooltip = (() => (0, _emberModifier.modifier)(element => {\n      if (this.supportsAddFootnote || this.streaming) {\n        return;\n      }\n      const instance = this.tooltip.register(element, {\n        identifier: \"cannot-add-footnote-tooltip\",\n        content: (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.post_options_menu.footnote_disabled\"),\n        placement: \"top\",\n        triggers: \"hover\"\n      });\n      return () => {\n        instance.destroy();\n      };\n    }))();\n    static #_20 = (() => dt7948.g(this.prototype, \"_activeAiRequest\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #_activeAiRequest = (() => (dt7948.i(this, \"_activeAiRequest\"), void 0))();\n    get footnoteDisabled() {\n      return this.streaming || !this.supportsAddFootnote;\n    }\n    get helperOptions() {\n      let prompts = this.currentUser?.ai_helper_prompts;\n      prompts = prompts.filter(item => item.location.includes(\"post\"));\n      // Find the custom_prompt object and move it to the beginning of the array\n      const customPromptIndex = prompts.findIndex(p => p.name === \"custom_prompt\");\n      if (customPromptIndex !== -1) {\n        const customPrompt = prompts.splice(customPromptIndex, 1)[0];\n        prompts.unshift(customPrompt);\n      }\n      if (!this._showUserCustomPrompts()) {\n        prompts = prompts.filter(p => p.name !== \"custom_prompt\");\n      }\n      if (!this.args.data.canEditPost) {\n        prompts = prompts.filter(p => p.name !== \"proofread\");\n      }\n      return prompts;\n    }\n    get highlightedTextToggleIcon() {\n      if (this.showHighlightedText) {\n        return \"angle-double-left\";\n      } else {\n        return \"angle-double-right\";\n      }\n    }\n    get allowInsertFootnote() {\n      const siteSettings = this.siteSettings;\n      const canEditPost = this.args.data.canEditPost;\n      if (!siteSettings?.enable_markdown_footnotes || !siteSettings?.display_footnotes_inline || !canEditPost) {\n        return false;\n      }\n      return this.lastSelectedOption?.name === \"explain\";\n    }\n    _showUserCustomPrompts() {\n      return this.currentUser?.can_use_custom_prompts;\n    }\n    _sanitizeForFootnote(text) {\n      // Remove line breaks (line-breaks breaks the inline footnote display)\n      text = text.replace(/[\\r\\n]+/g, \" \");\n      // Remove headings (headings don't work in inline footnotes)\n      text = text.replace(/^(#+)\\s+/gm, \"\");\n      // Trim excess space\n      text = text.trim();\n      return (0, _text.sanitize)(text);\n    }\n    subscribe() {\n      const channel = `/discourse-ai/ai-helper/stream_suggestion/${this.args.data.quoteState.postId}`;\n      this.messageBus.subscribe(channel, this._updateResult);\n    }\n    static #_21 = (() => dt7948.n(this.prototype, \"subscribe\", [_decorators.bind]))();\n    unsubscribe() {\n      this.messageBus.unsubscribe(\"/discourse-ai/ai-helper/stream_suggestion/*\", this._updateResult);\n    }\n    static #_22 = (() => dt7948.n(this.prototype, \"unsubscribe\", [_decorators.bind]))();\n    _updateResult(result) {\n      this.streaming = !result.done;\n      this.suggestion = result.result;\n    }\n    static #_23 = (() => dt7948.n(this.prototype, \"_updateResult\", [_decorators.bind]))();\n    toggleHighlightedTextPreview() {\n      this.showHighlightedText = !this.showHighlightedText;\n    }\n    static #_24 = (() => dt7948.n(this.prototype, \"toggleHighlightedTextPreview\", [_object.action]))();\n    async performAiSuggestion(option) {\n      this.menuState = this.MENU_STATES.loading;\n      this.lastSelectedOption = option;\n      const streamableOptions = [\"explain\", \"translate\", \"custom_prompt\"];\n      if (streamableOptions.includes(option.name)) {\n        return this._handleStreamedResult(option);\n      } else {\n        this._activeAiRequest = (0, _ajax.ajax)(\"/discourse-ai/ai-helper/suggest\", {\n          method: \"POST\",\n          data: {\n            mode: option.id,\n            text: this.args.data.quoteState.buffer,\n            custom_prompt: this.customPromptValue\n          }\n        });\n      }\n      this._activeAiRequest.then(_ref => {\n        let {\n          suggestions\n        } = _ref;\n        this.suggestion = suggestions[0].trim();\n        if (option.name === \"proofread\") {\n          return this._handleProofreadOption();\n        }\n      }).catch(_ajaxError.popupAjaxError).finally(() => {\n        this.loading = false;\n        this.menuState = this.MENU_STATES.result;\n      });\n      return this._activeAiRequest;\n    }\n    static #_25 = (() => dt7948.n(this.prototype, \"performAiSuggestion\", [_object.action]))();\n    _handleStreamedResult(option) {\n      this.menuState = this.MENU_STATES.result;\n      const menu = this.menu.getByIdentifier(\"post-text-selection-toolbar\");\n      if (menu) {\n        menu.options.placement = \"bottom\";\n      }\n      const fetchUrl = `/discourse-ai/ai-helper/stream_suggestion`;\n      this._activeAiRequest = (0, _ajax.ajax)(fetchUrl, {\n        method: \"POST\",\n        data: {\n          mode: option.id,\n          text: this.args.data.selectedText,\n          post_id: this.args.data.quoteState.postId,\n          custom_prompt: this.customPromptValue\n        }\n      });\n      return this._activeAiRequest;\n    }\n    _handleProofreadOption() {\n      this.showAiButtons = false;\n      if (this.site.desktopView) {\n        this.showFastEdit = true;\n        return;\n      } else {\n        return this.modal.show(_fastEdit2.default, {\n          model: {\n            initialValue: this.args.data.quoteState.buffer,\n            newValue: this.suggestion,\n            post: this.args.data.post,\n            close: this.closeFastEdit\n          }\n        });\n      }\n    }\n    cancelAiAction() {\n      if (this._activeAiRequest) {\n        this._activeAiRequest.abort();\n        this._activeAiRequest = null;\n        this.loading = false;\n        this.menuState = this.MENU_STATES.options;\n      }\n    }\n    static #_26 = (() => dt7948.n(this.prototype, \"cancelAiAction\", [_object.action]))();\n    copySuggestion() {\n      if (this.suggestion?.length > 0) {\n        (0, _utilities.clipboardCopy)(this.suggestion);\n        this.copyButtonIcon = \"check\";\n        this.copyButtonLabel = \"discourse_ai.ai_helper.post_options_menu.copied\";\n        setTimeout(() => {\n          this.copyButtonIcon = \"copy\";\n          this.copyButtonLabel = \"discourse_ai.ai_helper.post_options_menu.copy\";\n        }, 3500);\n      }\n    }\n    static #_27 = (() => dt7948.n(this.prototype, \"copySuggestion\", [_object.action]))();\n    closeMenu() {\n      if (this.site.mobileView) {\n        return this.args.close();\n      }\n      const menu = this.menu.getByIdentifier(\"post-text-selection-toolbar\");\n      return menu?.close();\n    }\n    static #_28 = (() => dt7948.n(this.prototype, \"closeMenu\", [_object.action]))();\n    async closeFastEdit() {\n      this.showFastEdit = false;\n      await this.args.data.hideToolbar();\n    }\n    static #_29 = (() => dt7948.n(this.prototype, \"closeFastEdit\", [_object.action]))();\n    async insertFootnote() {\n      this.isSavingFootnote = true;\n      if (this.allowInsertFootnote) {\n        try {\n          const result = await (0, _ajax.ajax)(`/posts/${this.args.data.post.id}`);\n          const sanitizedSuggestion = this._sanitizeForFootnote(this.suggestion);\n          const credits = (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.post_options_menu.footnote_credits\");\n          const withFootnote = `${this.args.data.selectedText} ^[${sanitizedSuggestion} (${credits})]`;\n          const newRaw = result.raw.replace(this.args.data.selectedText, withFootnote);\n          await this.args.data.post.save({\n            raw: newRaw\n          });\n        } catch (error) {\n          (0, _ajaxError.popupAjaxError)(error);\n        } finally {\n          this.isSavingFootnote = false;\n          await this.closeMenu();\n        }\n      }\n    }\n    static #_30 = (() => dt7948.n(this.prototype, \"insertFootnote\", [_object.action]))();\n    static #_31 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if\n          (and this.site.mobileView (eq this.menuState this.MENU_STATES.options))\n        }}\n          <div class=\"ai-post-helper-menu__selected-text\">\n            {{@data.selectedText}}\n          </div>\n        {{/if}}\n    \n        {{#if this.showAiButtons}}\n          <div class=\"ai-post-helper\">\n            {{#if (eq this.menuState this.MENU_STATES.options)}}\n              <AiHelperOptionsList\n                @options={{this.helperOptions}}\n                @customPromptValue={{this.customPromptValue}}\n                @performAction={{this.performAiSuggestion}}\n                @shortcutVisible={{false}}\n              />\n            {{else if (eq this.menuState this.MENU_STATES.loading)}}\n              <AiHelperLoading @cancel={{this.cancelAiAction}} />\n            {{else if (eq this.menuState this.MENU_STATES.result)}}\n              <div\n                class=\"ai-post-helper__suggestion\"\n                {{didInsert this.subscribe}}\n                {{willDestroy this.unsubscribe}}\n              >\n                {{#if this.suggestion}}\n                  <div class=\"ai-post-helper__suggestion__text\" dir=\"auto\">\n                    <CookText @rawText={{this.suggestion}} />\n                  </div>\n                  <div class=\"ai-post-helper__suggestion__buttons\">\n                    <DButton\n                      @icon=\"xmark\"\n                      @label=\"discourse_ai.ai_helper.post_options_menu.cancel\"\n                      @action={{this.cancelAiAction}}\n                      class=\"btn-flat ai-post-helper__suggestion__cancel\"\n                    />\n                    <DButton\n                      @icon={{this.copyButtonIcon}}\n                      @label={{this.copyButtonLabel}}\n                      @action={{this.copySuggestion}}\n                      @disabled={{this.streaming}}\n                      class=\"btn-flat ai-post-helper__suggestion__copy\"\n                    />\n                    {{#if this.allowInsertFootnote}}\n                      <DButton\n                        @icon=\"asterisk\"\n                        @label=\"discourse_ai.ai_helper.post_options_menu.insert_footnote\"\n                        @action={{this.insertFootnote}}\n                        @isLoading={{this.isSavingFootnote}}\n                        @disabled={{this.footnoteDisabled}}\n                        class=\"btn-flat ai-post-helper__suggestion__insert-footnote\"\n                        {{this.showFootnoteTooltip}}\n                      />\n                    {{/if}}\n                  </div>\n                {{else}}\n                  <AiHelperLoading @cancel={{this.cancelAiAction}} />\n                {{/if}}\n              </div>\n            {{/if}}\n          </div>\n        {{/if}}\n    \n        {{#if this.showFastEdit}}\n          <div class=\"ai-post-helper__fast-edit\">\n            <FastEdit\n              @initialValue={{@data.quoteState.buffer}}\n              @newValue={{this.suggestion}}\n              @post={{@data.post}}\n              @close={{this.closeFastEdit}}\n            />\n          </div>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"/g+fRewr\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[28,[32,0],[[30,0,[\\\"site\\\",\\\"mobileView\\\"]],[28,[32,1],[[30,0,[\\\"menuState\\\"]],[30,0,[\\\"MENU_STATES\\\",\\\"options\\\"]]],null]],null],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"ai-post-helper-menu__selected-text\\\"],[12],[1,\\\"\\\\n        \\\"],[1,[30,1,[\\\"selectedText\\\"]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showAiButtons\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"ai-post-helper\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[32,1],[[30,0,[\\\"menuState\\\"]],[30,0,[\\\"MENU_STATES\\\",\\\"options\\\"]]],null],[[[1,\\\"          \\\"],[8,[32,2],null,[[\\\"@options\\\",\\\"@customPromptValue\\\",\\\"@performAction\\\",\\\"@shortcutVisible\\\"],[[30,0,[\\\"helperOptions\\\"]],[30,0,[\\\"customPromptValue\\\"]],[30,0,[\\\"performAiSuggestion\\\"]],false]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[32,1],[[30,0,[\\\"menuState\\\"]],[30,0,[\\\"MENU_STATES\\\",\\\"loading\\\"]]],null],[[[1,\\\"          \\\"],[8,[32,3],null,[[\\\"@cancel\\\"],[[30,0,[\\\"cancelAiAction\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[32,1],[[30,0,[\\\"menuState\\\"]],[30,0,[\\\"MENU_STATES\\\",\\\"result\\\"]]],null],[[[1,\\\"          \\\"],[11,0],[24,0,\\\"ai-post-helper__suggestion\\\"],[4,[32,4],[[30,0,[\\\"subscribe\\\"]]],null],[4,[32,5],[[30,0,[\\\"unsubscribe\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"suggestion\\\"]],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"ai-post-helper__suggestion__text\\\"],[14,\\\"dir\\\",\\\"auto\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[32,6],null,[[\\\"@rawText\\\"],[[30,0,[\\\"suggestion\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"ai-post-helper__suggestion__buttons\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[32,7],[[24,0,\\\"btn-flat ai-post-helper__suggestion__cancel\\\"]],[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\"],[\\\"xmark\\\",\\\"discourse_ai.ai_helper.post_options_menu.cancel\\\",[30,0,[\\\"cancelAiAction\\\"]]]],null],[1,\\\"\\\\n                \\\"],[8,[32,7],[[24,0,\\\"btn-flat ai-post-helper__suggestion__copy\\\"]],[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\",\\\"@disabled\\\"],[[30,0,[\\\"copyButtonIcon\\\"]],[30,0,[\\\"copyButtonLabel\\\"]],[30,0,[\\\"copySuggestion\\\"]],[30,0,[\\\"streaming\\\"]]]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"allowInsertFootnote\\\"]],[[[1,\\\"                  \\\"],[8,[32,7],[[24,0,\\\"btn-flat ai-post-helper__suggestion__insert-footnote\\\"],[4,[30,0,[\\\"showFootnoteTooltip\\\"]],null,null]],[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\",\\\"@isLoading\\\",\\\"@disabled\\\"],[\\\"asterisk\\\",\\\"discourse_ai.ai_helper.post_options_menu.insert_footnote\\\",[30,0,[\\\"insertFootnote\\\"]],[30,0,[\\\"isSavingFootnote\\\"]],[30,0,[\\\"footnoteDisabled\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              \\\"],[8,[32,3],null,[[\\\"@cancel\\\"],[[30,0,[\\\"cancelAiAction\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"]],[]],null]],[]]]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showFastEdit\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"ai-post-helper__fast-edit\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[32,8],null,[[\\\"@initialValue\\\",\\\"@newValue\\\",\\\"@post\\\",\\\"@close\\\"],[[30,1,[\\\"quoteState\\\",\\\"buffer\\\"]],[30,0,[\\\"suggestion\\\"]],[30,1,[\\\"post\\\"]],[30,0,[\\\"closeFastEdit\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@data\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-post-helper-menu.js\",\n      \"scope\": () => [_truthHelpers.and, _eq.default, _aiHelperOptionsList.default, _aiHelperLoading.default, _didInsert.default, _willDestroy.default, _cookText.default, _dButton.default, _fastEdit.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiPostHelperMenu;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-quota-duration-selector\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/modifier\", \"@ember/object\", \"discourse-i18n\", \"select-kit/components/combo-box\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _modifier, _object, _discourseI18n, _comboBox, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DURATION_PRESETS = [{\n    id: \"3600\",\n    seconds: 3600,\n    nameKey: \"discourse_ai.llms.quotas.durations.hour\"\n  }, {\n    id: \"21600\",\n    seconds: 21600,\n    nameKey: \"discourse_ai.llms.quotas.durations.six_hours\"\n  }, {\n    id: \"86400\",\n    seconds: 86400,\n    nameKey: \"discourse_ai.llms.quotas.durations.day\"\n  }, {\n    id: \"604800\",\n    seconds: 604800,\n    nameKey: \"discourse_ai.llms.quotas.durations.week\"\n  }, {\n    id: \"custom\",\n    nameKey: \"discourse_ai.llms.quotas.durations.custom\"\n  }];\n  class DurationSelector extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"selectedPresetId\", [_tracking.tracked], function () {\n      return \"86400\";\n    }))();\n    #selectedPresetId = (() => (dt7948.i(this, \"selectedPresetId\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"customHours\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #customHours = (() => (dt7948.i(this, \"customHours\"), void 0))();\n    constructor() {\n      super(...arguments);\n      const seconds = this.args.value;\n      const preset = DURATION_PRESETS.find(p => p.seconds === seconds);\n      if (preset) {\n        this.selectedPresetId = preset.id;\n      } else {\n        this.selectedPresetId = \"custom\";\n        this.customHours = Math.round(seconds / 3600);\n      }\n    }\n    get presetOptions() {\n      return DURATION_PRESETS.map(preset => ({\n        id: preset.id,\n        name: (0, _discourseI18n.i18n)(preset.nameKey),\n        seconds: preset.seconds\n      }));\n    }\n    get isCustom() {\n      return this.selectedPresetId === \"custom\";\n    }\n    get currentDurationSeconds() {\n      if (this.isCustom) {\n        return this.customHours ? this.customHours * 3600 : 0;\n      } else {\n        return parseInt(this.selectedPresetId, 10);\n      }\n    }\n    onPresetChange(value) {\n      this.selectedPresetId = value;\n      this.updateValue();\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"onPresetChange\", [_object.action]))();\n    onCustomHoursChange(event) {\n      this.customHours = parseInt(event.target.value, 10);\n      this.updateValue();\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"onCustomHoursChange\", [_object.action]))();\n    updateValue() {\n      if (this.args.onChange) {\n        this.args.onChange(this.currentDurationSeconds);\n      }\n    }\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"duration-selector\">\n          <ComboBox\n            @content={{this.presetOptions}}\n            @value={{this.selectedPresetId}}\n            @onChange={{this.onPresetChange}}\n            class=\"duration-selector__preset\"\n          />\n    \n          {{#if this.isCustom}}\n            <div class=\"duration-selector__custom\">\n              <input\n                type=\"number\"\n                value={{this.customHours}}\n                class=\"duration-selector__hours-input\"\n                min=\"1\"\n                {{on \"input\" this.onCustomHoursChange}}\n              />\n              <span class=\"duration-selector__hours-label\">\n                {{i18n \"discourse_ai.llms.quotas.hours\"}}\n              </span>\n            </div>\n          {{/if}}\n        </div>\n      \n    */\n    {\n      \"id\": \"qzu/tJzR\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"duration-selector\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,0],[[24,0,\\\"duration-selector__preset\\\"]],[[\\\"@content\\\",\\\"@value\\\",\\\"@onChange\\\"],[[30,0,[\\\"presetOptions\\\"]],[30,0,[\\\"selectedPresetId\\\"]],[30,0,[\\\"onPresetChange\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"isCustom\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"duration-selector__custom\\\"],[12],[1,\\\"\\\\n          \\\"],[11,\\\"input\\\"],[16,2,[30,0,[\\\"customHours\\\"]]],[24,0,\\\"duration-selector__hours-input\\\"],[24,\\\"min\\\",\\\"1\\\"],[24,4,\\\"number\\\"],[4,[32,1],[\\\"input\\\",[30,0,[\\\"onCustomHoursChange\\\"]]],null],[12],[13],[1,\\\"\\\\n          \\\"],[10,1],[14,0,\\\"duration-selector__hours-label\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,2],[\\\"discourse_ai.llms.quotas.hours\\\"],null]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-quota-duration-selector.js\",\n      \"scope\": () => [_comboBox.default, _modifier.on, _discourseI18n.i18n],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = DurationSelector;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-spam\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"@ember/routing\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/components/d-page-subheader\", \"discourse/components/d-stat-tiles\", \"discourse/components/d-toggle-switch\", \"discourse/components/d-tooltip\", \"discourse/helpers/with-event-value\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse-common/helpers/d-icon\", \"discourse-common/helpers/i18n\", \"discourse-common/lib/get-url\", \"admin/components/admin-config-area-card\", \"select-kit/components/combo-box\", \"discourse/plugins/discourse-ai/discourse/components/modal/spam-test-modal\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _modifier, _object, _routing, _service, _dButton, _dPageSubheader, _dStatTiles, _dToggleSwitch, _dTooltip, _withEventValue, _ajax, _ajaxError, _dIcon, _i18n, _getUrl, _adminConfigAreaCard, _comboBox, _spamTestModal, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiSpam extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"toasts\", [_service.service]))();\n    #toasts = (() => (dt7948.i(this, \"toasts\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"stats\", [_tracking.tracked], function () {\n      return {\n        scanned_count: 0,\n        spam_detected: 0,\n        false_positives: 0,\n        false_negatives: 0,\n        daily_data: []\n      };\n    }))();\n    #stats = (() => (dt7948.i(this, \"stats\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"isEnabled\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isEnabled = (() => (dt7948.i(this, \"isEnabled\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"selectedLLM\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #selectedLLM = (() => (dt7948.i(this, \"selectedLLM\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"customInstructions\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #customInstructions = (() => (dt7948.i(this, \"customInstructions\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"errors\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #errors = (() => (dt7948.i(this, \"errors\"), void 0))();\n    constructor() {\n      super(...arguments);\n      this.initializeFromModel();\n      if (this.args.model?.spam_scanning_user?.admin === false) {\n        this.errors.push({\n          message: (0, _i18n.default)(\"discourse_ai.spam.errors.scan_not_admin.message\"),\n          button: {\n            label: (0, _i18n.default)(\"discourse_ai.spam.errors.scan_not_admin.action\"),\n            action: this.fixScanUserNotAdmin\n          }\n        });\n      }\n    }\n    async fixScanUserNotAdmin() {\n      const spamScanningUser = this.args.model.spam_scanning_user;\n      if (!spamScanningUser || spamScanningUser.admin) {\n        return;\n      }\n      try {\n        const response = await (0, _ajax.ajax)(`/admin/plugins/discourse-ai/ai-spam/fix-errors`, {\n          type: \"POST\",\n          data: {\n            error: \"spam_scanner_not_admin\"\n          }\n        });\n        if (response.success) {\n          this.toasts.success({\n            data: {\n              message: (0, _i18n.default)(\"discourse_ai.spam.errors.resolved\")\n            },\n            duration: 2000\n          });\n        }\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      } finally {\n        window.location.reload();\n      }\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"fixScanUserNotAdmin\", [_object.action]))();\n    initializeFromModel() {\n      const model = this.args.model;\n      this.isEnabled = model.is_enabled;\n      if (model.llm_id) {\n        this.selectedLLM = \"custom:\" + model.llm_id;\n      } else {\n        if (this.availableLLMs.length) {\n          this.selectedLLM = this.availableLLMs[0].id;\n          this.autoSelectedLLM = true;\n        }\n      }\n      this.customInstructions = model.custom_instructions;\n      this.stats = model.stats;\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"initializeFromModel\", [_object.action]))();\n    get availableLLMs() {\n      return this.args.model?.available_llms || [];\n    }\n    async toggleEnabled() {\n      this.isEnabled = !this.isEnabled;\n      const data = {\n        is_enabled: this.isEnabled\n      };\n      if (this.autoSelectedLLM) {\n        data.llm_model_id = this.llmId;\n      }\n      try {\n        const response = await (0, _ajax.ajax)(\"/admin/plugins/discourse-ai/ai-spam.json\", {\n          type: \"PUT\",\n          data\n        });\n        this.autoSelectedLLM = false;\n        this.isEnabled = response.is_enabled;\n      } catch (error) {\n        this.isEnabled = !this.isEnabled;\n        (0, _ajaxError.popupAjaxError)(error);\n      }\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"toggleEnabled\", [_object.action]))();\n    get llmId() {\n      return this.selectedLLM.toString().split(\":\")[1];\n    }\n    async updateLLM(value) {\n      this.selectedLLM = value;\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"updateLLM\", [_object.action]))();\n    async save() {\n      try {\n        await (0, _ajax.ajax)(\"/admin/plugins/discourse-ai/ai-spam.json\", {\n          type: \"PUT\",\n          data: {\n            llm_model_id: this.llmId,\n            custom_instructions: this.customInstructions\n          }\n        });\n        this.toasts.success({\n          data: {\n            message: (0, _i18n.default)(\"discourse_ai.spam.settings_saved\")\n          },\n          duration: 2000\n        });\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      }\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"save\", [_object.action]))();\n    showTestModal() {\n      this.modal.show(_spamTestModal.default, {\n        model: {\n          customInstructions: this.customInstructions,\n          llmId: this.llmId\n        }\n      });\n    }\n    static #_14 = (() => dt7948.n(this.prototype, \"showTestModal\", [_object.action]))();\n    get metrics() {\n      const detected = {\n        label: (0, _i18n.default)(\"discourse_ai.spam.spam_detected\"),\n        value: this.stats.spam_detected\n      };\n      const falsePositives = {\n        label: (0, _i18n.default)(\"discourse_ai.spam.false_positives\"),\n        value: this.stats.false_positives,\n        tooltip: (0, _i18n.default)(\"discourse_ai.spam.stat_tooltips.incorrectly_flagged\")\n      };\n      const falseNegatives = {\n        label: (0, _i18n.default)(\"discourse_ai.spam.false_negatives\"),\n        value: this.stats.false_negatives,\n        tooltip: (0, _i18n.default)(\"discourse_ai.spam.stat_tooltips.missed_spam\")\n      };\n      if (this.args.model.flagging_username) {\n        detected.href = (0, _getUrl.default)(`/review?flagged_by=${this.args.model.flagging_username}&status=all&sort_order=created_at`);\n        falsePositives.href = (0, _getUrl.default)(`/review?flagged_by=${this.args.model.flagging_username}&status=rejected&sort_order=created_at`);\n        falseNegatives.href = (0, _getUrl.default)(`/review?status=approved&sort_order=created_at&additional_filters={\"ai_spam_false_negative\":true}&order=created&score_type=${this.args.model.spam_score_type}`);\n      }\n      return [{\n        label: (0, _i18n.default)(\"discourse_ai.spam.scanned_count\"),\n        value: this.stats.scanned_count\n      }, detected, falsePositives, falseNegatives];\n    }\n    static #_15 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"ai-spam\">\n          <section class=\"ai-spam__settings\">\n            <div class=\"ai-spam__errors\">\n              {{#each this.errors as |e|}}\n                <div class=\"alert alert-error\">\n                  {{dIcon \"triangle-exclamation\"}}\n                  <p>{{e.message}}</p>\n                  <DButton\n                    @action={{e.button.action}}\n                    @translatedLabel={{e.button.label}}\n                  />\n                </div>\n              {{/each}}\n            </div>\n            <DPageSubheader\n              @titleLabel={{i18n \"discourse_ai.spam.title\"}}\n              @descriptionLabel={{i18n \"discourse_ai.spam.spam_description\"}}\n            />\n            <div class=\"control-group ai-spam__enabled\">\n              <DToggleSwitch\n                class=\"ai-spam__toggle\"\n                @state={{this.isEnabled}}\n                @label=\"discourse_ai.spam.enable\"\n                {{on \"click\" this.toggleEnabled}}\n              />\n              <DTooltip\n                @icon=\"circle-question\"\n                @content={{i18n \"discourse_ai.spam.spam_tip\"}}\n              />\n            </div>\n    \n            <div class=\"ai-spam__llm\">\n              <label class=\"ai-spam__llm-label\">{{i18n\n                  \"discourse_ai.spam.select_llm\"\n                }}</label>\n              {{#if this.availableLLMs.length}}\n                <ComboBox\n                  @value={{this.selectedLLM}}\n                  @content={{this.availableLLMs}}\n                  @onChange={{this.updateLLM}}\n                  class=\"ai-spam__llm-selector\"\n                />\n              {{else}}\n                <span class=\"ai-spam__llm-placeholder\">\n                  <LinkTo @route=\"adminPlugins.show.discourse-ai-llms.index\">\n                    {{i18n \"discourse_ai.spam.no_llms\"}}\n                  </LinkTo>\n                </span>\n              {{/if}}\n            </div>\n    \n            <div class=\"ai-spam__instructions\">\n              <label class=\"ai-spam__instructions-label\">\n                {{i18n \"discourse_ai.spam.custom_instructions\"}}\n                <DTooltip\n                  @icon=\"circle-question\"\n                  @content={{i18n \"discourse_ai.spam.custom_instructions_help\"}}\n                />\n              </label>\n              <textarea\n                class=\"ai-spam__instructions-input\"\n                placeholder={{i18n\n                  \"discourse_ai.spam.custom_instructions_placeholder\"\n                }}\n                {{on \"input\" (withEventValue (fn (mut this.customInstructions)))}}\n              >{{this.customInstructions}}</textarea>\n              <DButton\n                @action={{this.save}}\n                @label=\"discourse_ai.spam.save_button\"\n                class=\"ai-spam__instructions-save btn-primary\"\n              />\n              <DButton\n                @action={{this.showTestModal}}\n                @label=\"discourse_ai.spam.test_button\"\n                class=\"btn-default\"\n              />\n            </div>\n          </section>\n    \n          <AdminConfigAreaCard\n            @heading=\"discourse_ai.spam.last_seven_days\"\n            class=\"ai-spam__stats\"\n          >\n            <:content>\n              <DStatTiles as |tiles|>\n                {{#each this.metrics as |metric|}}\n                  <tiles.Tile\n                    @label={{metric.label}}\n                    @url={{metric.href}}\n                    @value={{metric.value}}\n                    @tooltip={{metric.tooltip}}\n                  />\n                {{/each}}\n              </DStatTiles>\n            </:content>\n          </AdminConfigAreaCard>\n        </div>\n      \n    */\n    {\n      \"id\": \"h6+24r0F\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-spam\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"section\\\"],[14,0,\\\"ai-spam__settings\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-spam__errors\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"errors\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[10,0],[14,0,\\\"alert alert-error\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[28,[32,0],[\\\"triangle-exclamation\\\"],null]],[1,\\\"\\\\n              \\\"],[10,2],[12],[1,[30,1,[\\\"message\\\"]]],[13],[1,\\\"\\\\n              \\\"],[8,[32,1],null,[[\\\"@action\\\",\\\"@translatedLabel\\\"],[[30,1,[\\\"button\\\",\\\"action\\\"]],[30,1,[\\\"button\\\",\\\"label\\\"]]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n        \\\"],[8,[32,2],null,[[\\\"@titleLabel\\\",\\\"@descriptionLabel\\\"],[[28,[32,3],[\\\"discourse_ai.spam.title\\\"],null],[28,[32,3],[\\\"discourse_ai.spam.spam_description\\\"],null]]],null],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"control-group ai-spam__enabled\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,4],[[24,0,\\\"ai-spam__toggle\\\"],[4,[32,5],[\\\"click\\\",[30,0,[\\\"toggleEnabled\\\"]]],null]],[[\\\"@state\\\",\\\"@label\\\"],[[30,0,[\\\"isEnabled\\\"]],\\\"discourse_ai.spam.enable\\\"]],null],[1,\\\"\\\\n          \\\"],[8,[32,6],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,3],[\\\"discourse_ai.spam.spam_tip\\\"],null]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"ai-spam__llm\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[14,0,\\\"ai-spam__llm-label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.spam.select_llm\\\"],null]],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"availableLLMs\\\",\\\"length\\\"]],[[[1,\\\"            \\\"],[8,[32,7],[[24,0,\\\"ai-spam__llm-selector\\\"]],[[\\\"@value\\\",\\\"@content\\\",\\\"@onChange\\\"],[[30,0,[\\\"selectedLLM\\\"]],[30,0,[\\\"availableLLMs\\\"]],[30,0,[\\\"updateLLM\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[10,1],[14,0,\\\"ai-spam__llm-placeholder\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[32,8],null,[[\\\"@route\\\"],[\\\"adminPlugins.show.discourse-ai-llms.index\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[1,[28,[32,3],[\\\"discourse_ai.spam.no_llms\\\"],null]],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"ai-spam__instructions\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[14,0,\\\"ai-spam__instructions-label\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,3],[\\\"discourse_ai.spam.custom_instructions\\\"],null]],[1,\\\"\\\\n            \\\"],[8,[32,6],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,3],[\\\"discourse_ai.spam.custom_instructions_help\\\"],null]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[11,\\\"textarea\\\"],[24,0,\\\"ai-spam__instructions-input\\\"],[16,\\\"placeholder\\\",[28,[32,3],[\\\"discourse_ai.spam.custom_instructions_placeholder\\\"],null]],[4,[32,5],[\\\"input\\\",[28,[32,9],[[28,[32,10],[[28,[31,3],[[30,0,[\\\"customInstructions\\\"]]],null]],null]],null]],null],[12],[1,[30,0,[\\\"customInstructions\\\"]]],[13],[1,\\\"\\\\n          \\\"],[8,[32,1],[[24,0,\\\"ai-spam__instructions-save btn-primary\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"save\\\"]],\\\"discourse_ai.spam.save_button\\\"]],null],[1,\\\"\\\\n          \\\"],[8,[32,1],[[24,0,\\\"btn-default\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"showTestModal\\\"]],\\\"discourse_ai.spam.test_button\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[8,[32,11],[[24,0,\\\"ai-spam__stats\\\"]],[[\\\"@heading\\\"],[\\\"discourse_ai.spam.last_seven_days\\\"]],[[\\\"content\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[32,12],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"metrics\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[30,2,[\\\"Tile\\\"]],null,[[\\\"@label\\\",\\\"@url\\\",\\\"@value\\\",\\\"@tooltip\\\"],[[30,3,[\\\"label\\\"]],[30,3,[\\\"href\\\"]],[30,3,[\\\"value\\\"]],[30,3,[\\\"tooltip\\\"]]]],null],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"          \\\"]],[2]]]]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"e\\\",\\\"tiles\\\",\\\"metric\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\",\\\"mut\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-spam.js\",\n      \"scope\": () => [_dIcon.default, _dButton.default, _dPageSubheader.default, _i18n.default, _dToggleSwitch.default, _modifier.on, _dTooltip.default, _comboBox.default, _routing.LinkTo, _withEventValue.default, _helper.fn, _adminConfigAreaCard.default, _dStatTiles.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiSpam;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-split-topic-suggester\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/helpers/category-badge\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"float-kit/components/d-menu\", \"truth-helpers/helpers/eq\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _modifier, _object, _service, _dButton, _categoryBadge, _ajax, _ajaxError, _dMenu, _eq, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiSplitTopicSuggester extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"site\", [_service.service]))();\n    #site = (() => (dt7948.i(this, \"site\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"menu\", [_service.service]))();\n    #menu = (() => (dt7948.i(this, \"menu\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"suggestions\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #suggestions = (() => (dt7948.i(this, \"suggestions\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"icon\", [_tracking.tracked], function () {\n      return \"discourse-sparkles\";\n    }))();\n    #icon = (() => (dt7948.i(this, \"icon\"), void 0))();\n    SUGGESTION_TYPES = {\n      title: \"suggest_title\",\n      category: \"suggest_category\",\n      tag: \"suggest_tags\"\n    };\n    get input() {\n      return this.args.selectedPosts.map(item => item.cooked).join(\"\\n\");\n    }\n    get disabled() {\n      return this.loading || this.suggestions.length > 0;\n    }\n    loadSuggestions() {\n      if (this.loading || this.suggestions.length > 0) {\n        return;\n      }\n      this.loading = true;\n      (0, _ajax.ajax)(`/discourse-ai/ai-helper/${this.args.mode}`, {\n        method: \"POST\",\n        data: {\n          text: this.input\n        }\n      }).then(result => {\n        if (this.args.mode === this.SUGGESTION_TYPES.title) {\n          this.suggestions = result.suggestions;\n        } else if (this.args.mode === this.SUGGESTION_TYPES.category) {\n          const suggestions = result.assistant.map(s => s.name);\n          const suggestedCategories = this.site.categories.filter(item => suggestions.includes(item.name.toLowerCase()));\n          this.suggestions = suggestedCategories;\n        } else if (this.args.mode === this.SUGGESTION_TYPES.tag) {\n          this.suggestions = result.assistant.map(s => {\n            return {\n              name: s.name,\n              count: s.count\n            };\n          });\n        }\n      }).catch(_ajaxError.popupAjaxError).finally(() => {\n        this.loading = false;\n      });\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"loadSuggestions\", [_object.action]))();\n    applySuggestion(suggestion, menu) {\n      if (!this.args.mode) {\n        return;\n      }\n      if (this.args.mode === this.SUGGESTION_TYPES.title) {\n        this.args.updateAction(suggestion);\n        return menu.close();\n      }\n      if (this.args.mode === this.SUGGESTION_TYPES.category) {\n        this.args.updateAction(suggestion.id);\n        return menu.close();\n      }\n      if (this.args.mode === this.SUGGESTION_TYPES.tag) {\n        if (this.args.currentValue) {\n          if (Array.isArray(this.args.currentValue)) {\n            const updatedTags = [...this.args.currentValue, suggestion];\n            this.args.updateAction([...new Set(updatedTags)]);\n          } else {\n            const updatedTags = [this.args.currentValue, suggestion];\n            this.args.updateAction([...new Set(updatedTags)]);\n          }\n        } else {\n          this.args.updateAction(suggestion);\n        }\n        return menu.close();\n      }\n    }\n    static #_7 = (() => dt7948.n(this.prototype, \"applySuggestion\", [_object.action]))();\n    static #_8 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.loading}}\n          {{!\n            Dynamically changing @icon of DMenu\n            causes it to rerender after load and\n            close the menu once data is loaded.\n            This workaround mimics an icon change of\n            the button by adding an overlapping\n            disabled button while loading}}\n          <DButton\n            class=\"ai-split-topic-loading-placeholder\"\n            @disabled={{true}}\n            @icon=\"spinner\"\n          />\n        {{/if}}\n        <DMenu\n          @icon=\"discourse-sparkles\"\n          @interactive={{true}}\n          @identifier=\"ai-split-topic-suggestion-menu\"\n          class=\"ai-split-topic-suggestion-button\"\n          data-suggestion-mode={{@mode}}\n          {{on \"click\" this.loadSuggestions}}\n          as |menu|\n        >\n          <ul class=\"ai-split-topic-suggestion__results\">\n            {{#unless this.loading}}\n              {{#each this.suggestions as |suggestion index|}}\n                {{#if (eq @mode \"suggest_category\")}}\n                  <li\n                    data-name={{suggestion.name}}\n                    data-value={{suggestion.id}}\n                    class=\"ai-split-topic-suggestion__category-result\"\n                    role=\"button\"\n                    {{on \"click\" (fn this.applySuggestion suggestion menu)}}\n                  >\n                    {{categoryBadge suggestion}}\n                    <span class=\"topic-count\">x\n                      {{suggestion.totalTopicCount}}</span>\n                  </li>\n                {{else if (eq @mode \"suggest_tags\")}}\n                  <li data-name={{suggestion.name}} data-value={{index}}>\n                    <DButton\n                      @translatedLabel={{suggestion.name}}\n                      @action={{fn this.applySuggestion suggestion.name menu}}\n                    >\n                      <span class=\"topic-count\">x{{suggestion.count}}</span>\n                    </DButton>\n                  </li>\n                {{else}}\n                  <li data-name={{suggestion}} data-value={{index}}>\n                    <DButton\n                      @translatedLabel={{suggestion}}\n                      @action={{fn this.applySuggestion suggestion menu}}\n                    />\n                  </li>\n                {{/if}}\n              {{/each}}\n            {{/unless}}\n          </ul>\n        </DMenu>\n      \n    */\n    {\n      \"id\": \"4ZszHd3J\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loading\\\"]],[[[1,\\\"      \\\"],[8,[32,0],[[24,0,\\\"ai-split-topic-loading-placeholder\\\"]],[[\\\"@disabled\\\",\\\"@icon\\\"],[true,\\\"spinner\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[8,[32,1],[[24,0,\\\"ai-split-topic-suggestion-button\\\"],[16,\\\"data-suggestion-mode\\\",[30,1]],[4,[32,2],[\\\"click\\\",[30,0,[\\\"loadSuggestions\\\"]]],null]],[[\\\"@icon\\\",\\\"@interactive\\\",\\\"@identifier\\\"],[\\\"discourse-sparkles\\\",true,\\\"ai-split-topic-suggestion-menu\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[10,\\\"ul\\\"],[14,0,\\\"ai-split-topic-suggestion__results\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"loading\\\"]]],[[[42,[28,[31,3],[[28,[31,3],[[30,0,[\\\"suggestions\\\"]]],null]],null],null,[[[41,[28,[32,3],[[30,1],\\\"suggest_category\\\"],null],[[[1,\\\"              \\\"],[11,\\\"li\\\"],[16,\\\"data-name\\\",[30,3,[\\\"name\\\"]]],[16,\\\"data-value\\\",[30,3,[\\\"id\\\"]]],[24,0,\\\"ai-split-topic-suggestion__category-result\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[32,2],[\\\"click\\\",[28,[32,4],[[30,0,[\\\"applySuggestion\\\"]],[30,3],[30,2]],null]],null],[12],[1,\\\"\\\\n                \\\"],[1,[28,[32,5],[[30,3]],null]],[1,\\\"\\\\n                \\\"],[10,1],[14,0,\\\"topic-count\\\"],[12],[1,\\\"x\\\\n                  \\\"],[1,[30,3,[\\\"totalTopicCount\\\"]]],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[32,3],[[30,1],\\\"suggest_tags\\\"],null],[[[1,\\\"              \\\"],[10,\\\"li\\\"],[15,\\\"data-name\\\",[30,3,[\\\"name\\\"]]],[15,\\\"data-value\\\",[30,4]],[12],[1,\\\"\\\\n                \\\"],[8,[32,0],null,[[\\\"@translatedLabel\\\",\\\"@action\\\"],[[30,3,[\\\"name\\\"]],[28,[32,4],[[30,0,[\\\"applySuggestion\\\"]],[30,3,[\\\"name\\\"]],[30,2]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[10,1],[14,0,\\\"topic-count\\\"],[12],[1,\\\"x\\\"],[1,[30,3,[\\\"count\\\"]]],[13],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              \\\"],[10,\\\"li\\\"],[15,\\\"data-name\\\",[30,3]],[15,\\\"data-value\\\",[30,4]],[12],[1,\\\"\\\\n                \\\"],[8,[32,0],null,[[\\\"@translatedLabel\\\",\\\"@action\\\"],[[30,3],[28,[32,4],[[30,0,[\\\"applySuggestion\\\"]],[30,3],[30,2]],null]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"]],[]]]],[]]]],[3,4]],null]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"]],[2]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@mode\\\",\\\"menu\\\",\\\"suggestion\\\",\\\"index\\\"],false,[\\\"if\\\",\\\"unless\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-split-topic-suggester.js\",\n      \"scope\": () => [_dButton.default, _dMenu.default, _modifier.on, _eq.default, _helper.fn, _categoryBadge.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiSplitTopicSuggester;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-summary-skeleton\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/render-modifiers/modifiers/did-update\", \"@ember/render-modifiers/modifiers/will-destroy\", \"@ember/runloop\", \"discourse/helpers/concat-class\", \"discourse-common/helpers/i18n\", \"discourse-common/lib/later\", \"discourse/plugins/discourse-ai/discourse/components/ai-indicator-wave\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _didInsert, _didUpdate, _willDestroy, _runloop, _concatClass, _i18n, _later, _aiIndicatorWave, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class Block {\n    static #_ = (() => dt7948.g(this.prototype, \"show\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #show = (() => (dt7948.i(this, \"show\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"shown\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #shown = (() => (dt7948.i(this, \"shown\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"blinking\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #blinking = (() => (dt7948.i(this, \"blinking\"), void 0))();\n    constructor() {\n      let args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      this.show = args.show ?? false;\n      this.shown = args.shown ?? false;\n    }\n  }\n  const BLOCKS_SIZE = 20; // changing this requires to change css accordingly\n  class AiSummarySkeleton extends _component.default {\n    blocks = (() => [...Array.from({\n      length: BLOCKS_SIZE\n    }, () => new Block())])();\n    #nextBlockBlinkingTimer;\n    #blockBlinkingTimer;\n    #blockShownTimer;\n    setupAnimation() {\n      this.blocks.firstObject.show = true;\n      this.blocks.firstObject.shown = true;\n    }\n    static #_ = (() => dt7948.n(this.prototype, \"setupAnimation\", [_object.action]))();\n    onBlinking(block) {\n      if (!block.blinking) {\n        return;\n      }\n      block.show = false;\n      this.#nextBlockBlinkingTimer = (0, _later.default)(this, () => {\n        this.#nextBlock(block).blinking = true;\n      }, 250);\n      this.#blockBlinkingTimer = (0, _later.default)(this, () => {\n        block.blinking = false;\n      }, 500);\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"onBlinking\", [_object.action]))();\n    onShowing(block) {\n      if (!block.show) {\n        return;\n      }\n      this.#blockShownTimer = (0, _later.default)(this, () => {\n        this.#nextBlock(block).show = true;\n        this.#nextBlock(block).shown = true;\n        if (this.blocks.lastObject === block) {\n          this.blocks.firstObject.blinking = true;\n        }\n      }, 250);\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"onShowing\", [_object.action]))();\n    teardownAnimation() {\n      (0, _runloop.cancel)(this.#blockShownTimer);\n      (0, _runloop.cancel)(this.#nextBlockBlinkingTimer);\n      (0, _runloop.cancel)(this.#blockBlinkingTimer);\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"teardownAnimation\", [_object.action]))();\n    #nextBlock(currentBlock) {\n      if (currentBlock === this.blocks.lastObject) {\n        return this.blocks.firstObject;\n      } else {\n        return this.blocks.objectAt(this.blocks.indexOf(currentBlock) + 1);\n      }\n    }\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"ai-summary__container\">\n          <ul class=\"ai-summary__list\" {{didInsert this.setupAnimation}}>\n            {{#each this.blocks as |block|}}\n              <li\n                class={{concatClass\n                  \"ai-summary__list-item\"\n                  (if block.show \"show\")\n                  (if block.shown \"is-shown\")\n                  (if block.blinking \"blink\")\n                }}\n                {{didUpdate (fn this.onBlinking block) block.blinking}}\n                {{didUpdate (fn this.onShowing block) block.show}}\n                {{willDestroy this.teardownAnimation}}\n              ></li>\n            {{/each}}\n          </ul>\n    \n          <span>\n            <div class=\"ai-summary__generating-text\">\n              {{i18n \"summary.in_progress\"}}\n            </div>\n            <AiIndicatorWave @loading={{true}} />\n          </span>\n        </div>\n      \n    */\n    {\n      \"id\": \"nyQgIgwk\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-summary__container\\\"],[12],[1,\\\"\\\\n      \\\"],[11,\\\"ul\\\"],[24,0,\\\"ai-summary__list\\\"],[4,[32,0],[[30,0,[\\\"setupAnimation\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"blocks\\\"]]],null]],null],null,[[[1,\\\"          \\\"],[11,\\\"li\\\"],[16,0,[28,[32,1],[\\\"ai-summary__list-item\\\",[52,[30,1,[\\\"show\\\"]],\\\"show\\\"],[52,[30,1,[\\\"shown\\\"]],\\\"is-shown\\\"],[52,[30,1,[\\\"blinking\\\"]],\\\"blink\\\"]],null]],[4,[32,2],[[28,[32,3],[[30,0,[\\\"onBlinking\\\"]],[30,1]],null],[30,1,[\\\"blinking\\\"]]],null],[4,[32,2],[[28,[32,3],[[30,0,[\\\"onShowing\\\"]],[30,1]],null],[30,1,[\\\"show\\\"]]],null],[4,[32,4],[[30,0,[\\\"teardownAnimation\\\"]]],null],[12],[13],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,1],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-summary__generating-text\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[28,[32,5],[\\\"summary.in_progress\\\"],null]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[8,[32,6],null,[[\\\"@loading\\\"],[true]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"block\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-summary-skeleton.js\",\n      \"scope\": () => [_didInsert.default, _concatClass.default, _didUpdate.default, _helper.fn, _willDestroy.default, _i18n.default, _aiIndicatorWave.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiSummarySkeleton;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-tool-editor\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/render-modifiers/modifiers/did-update\", \"@ember/service\", \"discourse/components/ace-editor\", \"discourse/components/back-button\", \"discourse/components/d-button\", \"discourse/components/d-tooltip\", \"discourse/helpers/with-event-value\", \"discourse/lib/ajax-error\", \"discourse-i18n\", \"select-kit/components/combo-box\", \"discourse/plugins/discourse-ai/discourse/components/ai-tool-parameter-editor\", \"discourse/plugins/discourse-ai/discourse/components/modal/ai-tool-test-modal\", \"discourse/plugins/discourse-ai/discourse/components/rag-options\", \"discourse/plugins/discourse-ai/discourse/components/rag-uploader\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _modifier, _object, _didInsert, _didUpdate, _service, _aceEditor, _backButton, _dButton, _dTooltip, _withEventValue, _ajaxError, _discourseI18n, _comboBox, _aiToolParameterEditor, _aiToolTestModal, _ragOptions, _ragUploader, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ACE_EDITOR_MODE = \"javascript\";\n  const ACE_EDITOR_THEME = \"chrome\";\n  class AiToolEditor extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"dialog\", [_service.service]))();\n    #dialog = (() => (dt7948.i(this, \"dialog\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"toasts\", [_service.service]))();\n    #toasts = (() => (dt7948.i(this, \"toasts\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"store\", [_service.service]))();\n    #store = (() => (dt7948.i(this, \"store\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"isSaving\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isSaving = (() => (dt7948.i(this, \"isSaving\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"editingModel\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #editingModel = (() => (dt7948.i(this, \"editingModel\"), void 0))();\n    static #_9 = (() => dt7948.g(this.prototype, \"showDelete\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showDelete = (() => (dt7948.i(this, \"showDelete\"), void 0))();\n    static #_10 = (() => dt7948.g(this.prototype, \"selectedPreset\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #selectedPreset = (() => (dt7948.i(this, \"selectedPreset\"), void 0))();\n    get presets() {\n      return this.args.presets.map(preset => {\n        return {\n          name: preset.preset_name,\n          id: preset.preset_id\n        };\n      });\n    }\n    get showPresets() {\n      return !this.selectedPreset && this.args.model.isNew;\n    }\n    updateModel() {\n      this.editingModel = this.args.model.workingCopy();\n      this.showDelete = !this.args.model.isNew;\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"updateModel\", [_object.action]))();\n    configurePreset() {\n      this.selectedPreset = this.args.presets.findBy(\"preset_id\", this.presetId);\n      this.editingModel = this.store.createRecord(\"ai-tool\", this.selectedPreset).workingCopy();\n      this.showDelete = false;\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"configurePreset\", [_object.action]))();\n    updateUploads(uploads) {\n      this.editingModel.rag_uploads = uploads;\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"updateUploads\", [_object.action]))();\n    removeUpload(upload) {\n      this.editingModel.rag_uploads.removeObject(upload);\n      if (!this.args.model.isNew) {\n        this.save();\n      }\n    }\n    static #_14 = (() => dt7948.n(this.prototype, \"removeUpload\", [_object.action]))();\n    async save() {\n      this.isSaving = true;\n      try {\n        const data = this.editingModel.getProperties(\"name\", \"description\", \"parameters\", \"script\", \"summary\", \"rag_uploads\", \"rag_chunk_tokens\", \"rag_chunk_overlap_tokens\");\n        await this.args.model.save(data);\n        this.toasts.success({\n          data: {\n            message: (0, _discourseI18n.i18n)(\"discourse_ai.tools.saved\")\n          },\n          duration: 2000\n        });\n        if (!this.args.tools.any(tool => tool.id === this.args.model.id)) {\n          this.args.tools.pushObject(this.args.model);\n        }\n        this.router.transitionTo(\"adminPlugins.show.discourse-ai-tools.edit\", this.args.model);\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      } finally {\n        this.isSaving = false;\n      }\n    }\n    static #_15 = (() => dt7948.n(this.prototype, \"save\", [_object.action]))();\n    delete() {\n      return this.dialog.confirm({\n        message: (0, _discourseI18n.i18n)(\"discourse_ai.tools.confirm_delete\"),\n        didConfirm: async () => {\n          await this.args.model.destroyRecord();\n          this.args.tools.removeObject(this.args.model);\n          this.router.transitionTo(\"adminPlugins.show.discourse-ai-tools.index\");\n        }\n      });\n    }\n    static #_16 = (() => dt7948.n(this.prototype, \"delete\", [_object.action]))();\n    openTestModal() {\n      this.modal.show(_aiToolTestModal.default, {\n        model: {\n          tool: this.editingModel\n        }\n      });\n    }\n    static #_17 = (() => dt7948.n(this.prototype, \"openTestModal\", [_object.action]))();\n    static #_18 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <BackButton\n          @route=\"adminPlugins.show.discourse-ai-tools\"\n          @label=\"discourse_ai.tools.back\"\n        />\n    \n        <form\n          {{didInsert this.updateModel @model.id}}\n          {{didUpdate this.updateModel @model.id}}\n          class=\"form-horizontal ai-tool-editor\"\n        >\n          {{#if this.showPresets}}\n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.tools.presets\"}}</label>\n              <ComboBox\n                @value={{this.presetId}}\n                @content={{this.presets}}\n                class=\"ai-tool-editor__presets\"\n              />\n            </div>\n    \n            <div class=\"control-group ai-llm-editor__action_panel\">\n              <DButton\n                @action={{this.configurePreset}}\n                @label=\"discourse_ai.tools.next.title\"\n                class=\"ai-tool-editor__next\"\n              />\n            </div>\n          {{else}}\n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.tools.name\"}}</label>\n              <input\n                {{on \"input\" (withEventValue (fn (mut this.editingModel.name)))}}\n                value={{this.editingModel.name}}\n                type=\"text\"\n                class=\"ai-tool-editor__name\"\n              />\n              <DTooltip\n                @icon=\"circle-question\"\n                @content={{i18n \"discourse_ai.tools.name_help\"}}\n              />\n            </div>\n    \n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.tools.description\"}}</label>\n              <textarea\n                {{on\n                  \"input\"\n                  (withEventValue (fn (mut this.editingModel.description)))\n                }}\n                placeholder={{i18n \"discourse_ai.tools.description_help\"}}\n                class=\"ai-tool-editor__description input-xxlarge\"\n              >{{this.editingModel.description}}</textarea>\n            </div>\n    \n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.tools.summary\"}}</label>\n              <input\n                {{on \"input\" (withEventValue (fn (mut this.editingModel.summary)))}}\n                value={{this.editingModel.summary}}\n                type=\"text\"\n                class=\"ai-tool-editor__summary input-xxlarge\"\n              />\n              <DTooltip\n                @icon=\"circle-question\"\n                @content={{i18n \"discourse_ai.tools.summary_help\"}}\n              />\n            </div>\n    \n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.tools.parameters\"}}</label>\n              <AiToolParameterEditor @parameters={{this.editingModel.parameters}} />\n            </div>\n    \n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.tools.script\"}}</label>\n              <AceEditor\n                @content={{this.editingModel.script}}\n                @onChange={{fn (mut this.editingModel.script)}}\n                @mode={{ACE_EDITOR_MODE}}\n                @theme={{ACE_EDITOR_THEME}}\n                @editorId=\"ai-tool-script-editor\"\n              />\n            </div>\n    \n            {{#if this.siteSettings.ai_embeddings_enabled}}\n              <div class=\"control-group\">\n                <RagUploader\n                  @target={{this.editingModel}}\n                  @updateUploads={{this.updateUploads}}\n                  @onRemove={{this.removeUpload}}\n                />\n              </div>\n              <RagOptions @model={{this.editingModel}} />\n            {{/if}}\n    \n            <div class=\"control-group ai-tool-editor__action_panel\">\n              {{#unless @model.isNew}}\n                <DButton\n                  @action={{this.openTestModal}}\n                  @label=\"discourse_ai.tools.test\"\n                  class=\"ai-tool-editor__test-button\"\n                />\n              {{/unless}}\n    \n              <DButton\n                @action={{this.save}}\n                @label=\"discourse_ai.tools.save\"\n                @disabled={{this.isSaving}}\n                class=\"btn-primary ai-tool-editor__save\"\n              />\n    \n              {{#if this.showDelete}}\n                <DButton\n                  @action={{this.delete}}\n                  @label=\"discourse_ai.tools.delete\"\n                  class=\"btn-danger ai-tool-editor__delete\"\n                />\n              {{/if}}\n            </div>\n          {{/if}}\n        </form>\n      \n    */\n    {\n      \"id\": \"W5aAqODM\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@route\\\",\\\"@label\\\"],[\\\"adminPlugins.show.discourse-ai-tools\\\",\\\"discourse_ai.tools.back\\\"]],null],[1,\\\"\\\\n\\\\n    \\\"],[11,\\\"form\\\"],[24,0,\\\"form-horizontal ai-tool-editor\\\"],[4,[32,1],[[30,0,[\\\"updateModel\\\"]],[30,1,[\\\"id\\\"]]],null],[4,[32,2],[[30,0,[\\\"updateModel\\\"]],[30,1,[\\\"id\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showPresets\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.tools.presets\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,4],[[24,0,\\\"ai-tool-editor__presets\\\"]],[[\\\"@value\\\",\\\"@content\\\"],[[30,0,[\\\"presetId\\\"]],[30,0,[\\\"presets\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"control-group ai-llm-editor__action_panel\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,5],[[24,0,\\\"ai-tool-editor__next\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"configurePreset\\\"]],\\\"discourse_ai.tools.next.title\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.tools.name\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[11,\\\"input\\\"],[16,2,[30,0,[\\\"editingModel\\\",\\\"name\\\"]]],[24,0,\\\"ai-tool-editor__name\\\"],[24,4,\\\"text\\\"],[4,[32,6],[\\\"input\\\",[28,[32,7],[[28,[32,8],[[28,[31,1],[[30,0,[\\\"editingModel\\\",\\\"name\\\"]]],null]],null]],null]],null],[12],[13],[1,\\\"\\\\n          \\\"],[8,[32,9],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,3],[\\\"discourse_ai.tools.name_help\\\"],null]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.tools.description\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[11,\\\"textarea\\\"],[16,\\\"placeholder\\\",[28,[32,3],[\\\"discourse_ai.tools.description_help\\\"],null]],[24,0,\\\"ai-tool-editor__description input-xxlarge\\\"],[4,[32,6],[\\\"input\\\",[28,[32,7],[[28,[32,8],[[28,[31,1],[[30,0,[\\\"editingModel\\\",\\\"description\\\"]]],null]],null]],null]],null],[12],[1,[30,0,[\\\"editingModel\\\",\\\"description\\\"]]],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.tools.summary\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[11,\\\"input\\\"],[16,2,[30,0,[\\\"editingModel\\\",\\\"summary\\\"]]],[24,0,\\\"ai-tool-editor__summary input-xxlarge\\\"],[24,4,\\\"text\\\"],[4,[32,6],[\\\"input\\\",[28,[32,7],[[28,[32,8],[[28,[31,1],[[30,0,[\\\"editingModel\\\",\\\"summary\\\"]]],null]],null]],null]],null],[12],[13],[1,\\\"\\\\n          \\\"],[8,[32,9],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,3],[\\\"discourse_ai.tools.summary_help\\\"],null]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.tools.parameters\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,10],null,[[\\\"@parameters\\\"],[[30,0,[\\\"editingModel\\\",\\\"parameters\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.tools.script\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,11],null,[[\\\"@content\\\",\\\"@onChange\\\",\\\"@mode\\\",\\\"@theme\\\",\\\"@editorId\\\"],[[30,0,[\\\"editingModel\\\",\\\"script\\\"]],[28,[32,8],[[28,[31,1],[[30,0,[\\\"editingModel\\\",\\\"script\\\"]]],null]],null],[32,12],[32,13],\\\"ai-tool-script-editor\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"siteSettings\\\",\\\"ai_embeddings_enabled\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[32,14],null,[[\\\"@target\\\",\\\"@updateUploads\\\",\\\"@onRemove\\\"],[[30,0,[\\\"editingModel\\\"]],[30,0,[\\\"updateUploads\\\"]],[30,0,[\\\"removeUpload\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[8,[32,15],null,[[\\\"@model\\\"],[[30,0,[\\\"editingModel\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"control-group ai-tool-editor__action_panel\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,1,[\\\"isNew\\\"]]],[[[1,\\\"            \\\"],[8,[32,5],[[24,0,\\\"ai-tool-editor__test-button\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"openTestModal\\\"]],\\\"discourse_ai.tools.test\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n          \\\"],[8,[32,5],[[24,0,\\\"btn-primary ai-tool-editor__save\\\"]],[[\\\"@action\\\",\\\"@label\\\",\\\"@disabled\\\"],[[30,0,[\\\"save\\\"]],\\\"discourse_ai.tools.save\\\",[30,0,[\\\"isSaving\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showDelete\\\"]],[[[1,\\\"            \\\"],[8,[32,5],[[24,0,\\\"btn-danger ai-tool-editor__delete\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"delete\\\"]],\\\"discourse_ai.tools.delete\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@model\\\"],false,[\\\"if\\\",\\\"mut\\\",\\\"unless\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-tool-editor.js\",\n      \"scope\": () => [_backButton.default, _didInsert.default, _didUpdate.default, _discourseI18n.i18n, _comboBox.default, _dButton.default, _modifier.on, _withEventValue.default, _helper.fn, _dTooltip.default, _aiToolParameterEditor.default, _aceEditor.default, ACE_EDITOR_MODE, ACE_EDITOR_THEME, _ragUploader.default, _ragOptions.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiToolEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-tool-list-editor\", [\"exports\", \"@glimmer/component\", \"@ember/routing\", \"@ember/service\", \"discourse/components/d-breadcrumbs-item\", \"discourse/components/d-page-subheader\", \"discourse-i18n\", \"admin/components/admin-config-area-empty-list\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _routing, _service, _dBreadcrumbsItem, _dPageSubheader, _discourseI18n, _adminConfigAreaEmptyList, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiToolListEditor extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"adminPluginNavManager\", [_service.service]))();\n    #adminPluginNavManager = (() => (dt7948.i(this, \"adminPluginNavManager\"), void 0))();\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DBreadcrumbsItem\n          @path=\"/admin/plugins/{{this.adminPluginNavManager.currentPlugin.name}}/ai-tools\"\n          @label={{i18n \"discourse_ai.tools.short_title\"}}\n        />\n        <section class=\"ai-tool-list-editor__current admin-detail pull-left\">\n          <DPageSubheader\n            @titleLabel={{i18n \"discourse_ai.tools.short_title\"}}\n            @learnMoreUrl=\"https://meta.discourse.org/t/ai-bot-custom-tools/314103\"\n            @descriptionLabel={{i18n \"discourse_ai.tools.subheader_description\"}}\n          >\n            <:actions as |actions|>\n              <actions.Primary\n                @label=\"discourse_ai.tools.new\"\n                @route=\"adminPlugins.show.discourse-ai-tools.new\"\n                @icon=\"plus\"\n                class=\"ai-tool-list-editor__new-button\"\n              />\n            </:actions>\n          </DPageSubheader>\n    \n          {{#if @tools}}\n            <table class=\"d-admin-table ai-tool-list-editor\">\n              <thead>\n                <th>{{i18n \"discourse_ai.tools.name\"}}</th>\n                <th></th>\n              </thead>\n              <tbody>\n                {{#each @tools as |tool|}}\n                  <tr\n                    data-tool-id={{tool.id}}\n                    class=\"ai-tool-list__row d-admin-row__content\"\n                  >\n                    <td class=\"d-admin-row__overview\">\n                      <div class=\"ai-tool-list__name-with-description\">\n                        <div class=\"ai-tool-list__name\">\n                          <strong>\n                            {{tool.name}}\n                          </strong>\n                        </div>\n                        <div class=\"ai-tool-list__description\">\n                          {{tool.description}}\n                        </div>\n                      </div>\n                    </td>\n                    <td class=\"d-admin-row__controls\">\n                      <LinkTo\n                        @route=\"adminPlugins.show.discourse-ai-tools.edit\"\n                        @model={{tool}}\n                        class=\"btn btn-text btn-small\"\n                      >{{i18n \"discourse_ai.tools.edit\"}}</LinkTo>\n                    </td>\n                  </tr>\n                {{/each}}\n              </tbody>\n            </table>\n          {{else}}\n            <AdminConfigAreaEmptyList\n              @ctaLabel=\"discourse_ai.tools.new\"\n              @ctaRoute=\"adminPlugins.show.discourse-ai-tools.new\"\n              @ctaClass=\"ai-tool-list-editor__empty-new-button\"\n              @emptyLabel=\"discourse_ai.tools.no_tools\"\n            />\n          {{/if}}\n        </section>\n      \n    */\n    {\n      \"id\": \"D/wxIpfT\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@path\\\",\\\"@label\\\"],[[29,[\\\"/admin/plugins/\\\",[30,0,[\\\"adminPluginNavManager\\\",\\\"currentPlugin\\\",\\\"name\\\"]],\\\"/ai-tools\\\"]],[28,[32,1],[\\\"discourse_ai.tools.short_title\\\"],null]]],null],[1,\\\"\\\\n    \\\"],[10,\\\"section\\\"],[14,0,\\\"ai-tool-list-editor__current admin-detail pull-left\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,2],null,[[\\\"@titleLabel\\\",\\\"@learnMoreUrl\\\",\\\"@descriptionLabel\\\"],[[28,[32,1],[\\\"discourse_ai.tools.short_title\\\"],null],\\\"https://meta.discourse.org/t/ai-bot-custom-tools/314103\\\",[28,[32,1],[\\\"discourse_ai.tools.subheader_description\\\"],null]]],[[\\\"actions\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,1,[\\\"Primary\\\"]],[[24,0,\\\"ai-tool-list-editor__new-button\\\"]],[[\\\"@label\\\",\\\"@route\\\",\\\"@icon\\\"],[\\\"discourse_ai.tools.new\\\",\\\"adminPlugins.show.discourse-ai-tools.new\\\",\\\"plus\\\"]],null],[1,\\\"\\\\n        \\\"]],[1]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,2],[[[1,\\\"        \\\"],[10,\\\"table\\\"],[14,0,\\\"d-admin-table ai-tool-list-editor\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.tools.name\\\"],null]],[13],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[12],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,2]],null]],null],null,[[[1,\\\"              \\\"],[10,\\\"tr\\\"],[15,\\\"data-tool-id\\\",[30,3,[\\\"id\\\"]]],[14,0,\\\"ai-tool-list__row d-admin-row__content\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__overview\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"ai-tool-list__name-with-description\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"ai-tool-list__name\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n                        \\\"],[1,[30,3,[\\\"name\\\"]]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"ai-tool-list__description\\\"],[12],[1,\\\"\\\\n                      \\\"],[1,[30,3,[\\\"description\\\"]]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__controls\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[32,3],[[24,0,\\\"btn btn-text btn-small\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"adminPlugins.show.discourse-ai-tools.edit\\\",[30,3]]],[[\\\"default\\\"],[[[[1,[28,[32,1],[\\\"discourse_ai.tools.edit\\\"],null]]],[]]]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[32,4],null,[[\\\"@ctaLabel\\\",\\\"@ctaRoute\\\",\\\"@ctaClass\\\",\\\"@emptyLabel\\\"],[\\\"discourse_ai.tools.new\\\",\\\"adminPlugins.show.discourse-ai-tools.new\\\",\\\"ai-tool-list-editor__empty-new-button\\\",\\\"discourse_ai.tools.no_tools\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"actions\\\",\\\"@tools\\\",\\\"tool\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-tool-list-editor.js\",\n      \"scope\": () => [_dBreadcrumbsItem.default, _discourseI18n.i18n, _dPageSubheader.default, _routing.LinkTo, _adminConfigAreaEmptyList.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiToolListEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-tool-parameter-editor\", [\"exports\", \"@glimmer/component\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"@ember-compat/tracked-built-ins\", \"discourse/components/d-button\", \"discourse/helpers/with-event-value\", \"discourse-i18n\", \"select-kit/components/combo-box\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _modifier, _object, _trackedBuiltIns, _dButton, _withEventValue, _discourseI18n, _comboBox, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const PARAMETER_TYPES = [{\n    name: \"string\",\n    id: \"string\"\n  }, {\n    name: \"number\",\n    id: \"number\"\n  }, {\n    name: \"boolean\",\n    id: \"boolean\"\n  }, {\n    name: \"array\",\n    id: \"array\"\n  }];\n  class AiToolParameterEditor extends _component.default {\n    addParameter() {\n      this.args.parameters.push(new _trackedBuiltIns.TrackedObject({\n        name: \"\",\n        description: \"\",\n        type: \"string\",\n        required: false,\n        enum: null\n      }));\n    }\n    static #_ = (() => dt7948.n(this.prototype, \"addParameter\", [_object.action]))();\n    removeParameter(parameter) {\n      const index = this.args.parameters.indexOf(parameter);\n      this.args.parameters.splice(index, 1);\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"removeParameter\", [_object.action]))();\n    toggleRequired(parameter, event) {\n      parameter.required = event.target.checked;\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"toggleRequired\", [_object.action]))();\n    toggleEnum(parameter) {\n      if (parameter.enum) {\n        parameter.enum = null;\n      } else {\n        this.addEnumValue(parameter);\n      }\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"toggleEnum\", [_object.action]))();\n    addEnumValue(parameter) {\n      parameter.enum ||= new _trackedBuiltIns.TrackedArray();\n      parameter.enum.push(\"\");\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"addEnumValue\", [_object.action]))();\n    removeEnumValue(parameter, index) {\n      parameter.enum.splice(index, 1);\n      if (parameter.enum.length === 0) {\n        parameter.enum = null;\n      }\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"removeEnumValue\", [_object.action]))();\n    updateEnumValue(parameter, index, event) {\n      parameter.enum[index] = event.target.value;\n    }\n    static #_7 = (() => dt7948.n(this.prototype, \"updateEnumValue\", [_object.action]))();\n    static #_8 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#each @parameters as |parameter|}}\n          <div class=\"ai-tool-parameter\">\n            <div class=\"parameter-row\">\n              <input\n                {{on \"input\" (withEventValue (fn (mut parameter.name)))}}\n                value={{parameter.name}}\n                type=\"text\"\n                placeholder={{i18n \"discourse_ai.tools.parameter_name\"}}\n              />\n              <ComboBox @value={{parameter.type}} @content={{PARAMETER_TYPES}} />\n            </div>\n    \n            <div class=\"parameter-row\">\n              <input\n                {{on \"input\" (withEventValue (fn (mut parameter.description)))}}\n                value={{parameter.description}}\n                type=\"text\"\n                placeholder={{i18n \"discourse_ai.tools.parameter_description\"}}\n              />\n            </div>\n    \n            <div class=\"parameter-row\">\n              <label>\n                <input\n                  {{on \"input\" (fn this.toggleRequired parameter)}}\n                  checked={{parameter.required}}\n                  type=\"checkbox\"\n                  class=\"parameter-row__required-toggle\"\n                />\n                {{i18n \"discourse_ai.tools.parameter_required\"}}\n              </label>\n    \n              <label>\n                <input\n                  {{on \"input\" (fn this.toggleEnum parameter)}}\n                  checked={{parameter.enum}}\n                  type=\"checkbox\"\n                  class=\"parameter-row__enum-toggle\"\n                />\n                {{i18n \"discourse_ai.tools.parameter_enum\"}}\n              </label>\n    \n              <DButton\n                @action={{fn this.removeParameter parameter}}\n                @icon=\"trash-can\"\n                class=\"btn-danger\"\n              />\n            </div>\n    \n            {{#if parameter.enum}}\n              <div class=\"parameter-enum-values\">\n                {{#each parameter.enum as |enumValue enumIndex|}}\n                  <div class=\"enum-value-row\">\n                    <input\n                      {{on \"change\" (fn this.updateEnumValue parameter enumIndex)}}\n                      value={{enumValue}}\n                      type=\"text\"\n                      placeholder={{i18n \"discourse_ai.tools.enum_value\"}}\n                    />\n                    <DButton\n                      @action={{fn this.removeEnumValue parameter enumIndex}}\n                      @icon=\"trash-can\"\n                      class=\"btn-danger\"\n                    />\n                  </div>\n                {{/each}}\n    \n                <DButton\n                  @action={{fn this.addEnumValue parameter}}\n                  @label=\"discourse_ai.tools.add_enum_value\"\n                  @icon=\"plus\"\n                />\n              </div>\n            {{/if}}\n          </div>\n        {{/each}}\n    \n        <DButton\n          @action={{this.addParameter}}\n          @label=\"discourse_ai.tools.add_parameter\"\n          @icon=\"plus\"\n        />\n      \n    */\n    {\n      \"id\": \"YMABeavw\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,1]],null]],null],null,[[[1,\\\"      \\\"],[10,0],[14,0,\\\"ai-tool-parameter\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"parameter-row\\\"],[12],[1,\\\"\\\\n          \\\"],[11,\\\"input\\\"],[16,2,[30,2,[\\\"name\\\"]]],[16,\\\"placeholder\\\",[28,[32,0],[\\\"discourse_ai.tools.parameter_name\\\"],null]],[24,4,\\\"text\\\"],[4,[32,1],[\\\"input\\\",[28,[32,2],[[28,[32,3],[[28,[31,2],[[30,2,[\\\"name\\\"]]],null]],null]],null]],null],[12],[13],[1,\\\"\\\\n          \\\"],[8,[32,4],null,[[\\\"@value\\\",\\\"@content\\\"],[[30,2,[\\\"type\\\"]],[32,5]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"parameter-row\\\"],[12],[1,\\\"\\\\n          \\\"],[11,\\\"input\\\"],[16,2,[30,2,[\\\"description\\\"]]],[16,\\\"placeholder\\\",[28,[32,0],[\\\"discourse_ai.tools.parameter_description\\\"],null]],[24,4,\\\"text\\\"],[4,[32,1],[\\\"input\\\",[28,[32,2],[[28,[32,3],[[28,[31,2],[[30,2,[\\\"description\\\"]]],null]],null]],null]],null],[12],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"parameter-row\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n            \\\"],[11,\\\"input\\\"],[16,\\\"checked\\\",[30,2,[\\\"required\\\"]]],[24,0,\\\"parameter-row__required-toggle\\\"],[24,4,\\\"checkbox\\\"],[4,[32,1],[\\\"input\\\",[28,[32,3],[[30,0,[\\\"toggleRequired\\\"]],[30,2]],null]],null],[12],[13],[1,\\\"\\\\n            \\\"],[1,[28,[32,0],[\\\"discourse_ai.tools.parameter_required\\\"],null]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n            \\\"],[11,\\\"input\\\"],[16,\\\"checked\\\",[30,2,[\\\"enum\\\"]]],[24,0,\\\"parameter-row__enum-toggle\\\"],[24,4,\\\"checkbox\\\"],[4,[32,1],[\\\"input\\\",[28,[32,3],[[30,0,[\\\"toggleEnum\\\"]],[30,2]],null]],null],[12],[13],[1,\\\"\\\\n            \\\"],[1,[28,[32,0],[\\\"discourse_ai.tools.parameter_enum\\\"],null]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n          \\\"],[8,[32,6],[[24,0,\\\"btn-danger\\\"]],[[\\\"@action\\\",\\\"@icon\\\"],[[28,[32,3],[[30,0,[\\\"removeParameter\\\"]],[30,2]],null],\\\"trash-can\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,2,[\\\"enum\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"parameter-enum-values\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,2,[\\\"enum\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[10,0],[14,0,\\\"enum-value-row\\\"],[12],[1,\\\"\\\\n                \\\"],[11,\\\"input\\\"],[16,2,[30,3]],[16,\\\"placeholder\\\",[28,[32,0],[\\\"discourse_ai.tools.enum_value\\\"],null]],[24,4,\\\"text\\\"],[4,[32,1],[\\\"change\\\",[28,[32,3],[[30,0,[\\\"updateEnumValue\\\"]],[30,2],[30,4]],null]],null],[12],[13],[1,\\\"\\\\n                \\\"],[8,[32,6],[[24,0,\\\"btn-danger\\\"]],[[\\\"@action\\\",\\\"@icon\\\"],[[28,[32,3],[[30,0,[\\\"removeEnumValue\\\"]],[30,2],[30,4]],null],\\\"trash-can\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[3,4]],null],[1,\\\"\\\\n            \\\"],[8,[32,6],null,[[\\\"@action\\\",\\\"@label\\\",\\\"@icon\\\"],[[28,[32,3],[[30,0,[\\\"addEnumValue\\\"]],[30,2]],null],\\\"discourse_ai.tools.add_enum_value\\\",\\\"plus\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"\\\\n    \\\"],[8,[32,6],null,[[\\\"@action\\\",\\\"@label\\\",\\\"@icon\\\"],[[30,0,[\\\"addParameter\\\"]],\\\"discourse_ai.tools.add_parameter\\\",\\\"plus\\\"]],null],[1,\\\"\\\\n  \\\"]],[\\\"@parameters\\\",\\\"parameter\\\",\\\"enumValue\\\",\\\"enumIndex\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"mut\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-tool-parameter-editor.js\",\n      \"scope\": () => [_discourseI18n.i18n, _modifier.on, _withEventValue.default, _helper.fn, _comboBox.default, PARAMETER_TYPES, _dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiToolParameterEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-tool-selector\", [\"exports\", \"@ember/object/computed\", \"@ember-decorators/object\", \"select-kit/components/multi-select\", \"select-kit/components/select-kit\"], function (_exports, _computed, _object, _multiSelect, _selectKit) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const AiToolSelector = dt7948.c(class AiToolSelector extends _multiSelect.default {\n    static #_ = (() => dt7948.g(this.prototype, \"content\", [(0, _computed.readOnly)(\"tools\")]))();\n    #content = (() => (dt7948.i(this, \"content\"), void 0))();\n    value = \"\";\n    _modelDisabledChanged() {\n      this.selectKit.options.set(\"disabled\", this.get(\"attrs.disabled.value\"));\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"_modelDisabledChanged\", [(0, _object.observes)(\"attrs.disabled\")]))();\n  }, [(0, _selectKit.selectKitOptions)({\n    filterable: true\n  })]);\n  var _default = _exports.default = AiToolSelector;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-topic-gist\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"@ember/template\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _template, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTopicGist extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"gists\", [_service.service]))();\n    #gists = (() => (dt7948.i(this, \"gists\"), void 0))();\n    get shouldShow() {\n      return this.gists.preference === \"table-ai\" && this.gists.shouldShow;\n    }\n    get hasGist() {\n      return !!this.gist;\n    }\n    get gist() {\n      return this.args.topic.get(\"ai_topic_gist\");\n    }\n    get escapedExcerpt() {\n      return this.args.topic.get(\"escapedExcerpt\");\n    }\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.shouldShow}}\n          {{#if this.hasGist}}\n            <div class=\"excerpt\">\n              <div class=\"excerpt__contents\">{{this.gist}}</div>\n            </div>\n          {{else}}\n            {{#if this.escapedExcerpt}}\n              <div class=\"excerpt\">\n                <div class=\"excerpt__contents\">\n                  {{htmlSafe this.escapedExcerpt}}\n                </div>\n              </div>\n            {{/if}}\n          {{/if}}\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"DDbV96Wf\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"shouldShow\\\"]],[[[41,[30,0,[\\\"hasGist\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"excerpt\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"excerpt__contents\\\"],[12],[1,[30,0,[\\\"gist\\\"]]],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"escapedExcerpt\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"excerpt\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"excerpt__contents\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[28,[32,0],[[30,0,[\\\"escapedExcerpt\\\"]]],null]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]]]],[]],null],[1,\\\"  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-topic-gist.js\",\n      \"scope\": () => [_template.htmlSafe],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiTopicGist;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-usage\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"@ember/routing\", \"@ember/service\", \"truth-helpers\", \"discourse/components/conditional-loading-spinner\", \"discourse/components/d-button\", \"discourse/components/d-page-subheader\", \"discourse/components/d-stat-tiles\", \"discourse/components/date-time-input-range\", \"discourse/helpers/avatar\", \"discourse/helpers/concat-class\", \"discourse/lib/ajax\", \"discourse/lib/formatter\", \"discourse-common/helpers/i18n\", \"discourse-common/utils/decorators\", \"admin/components/admin-config-area-card\", \"admin/components/admin-config-area-empty-list\", \"admin/components/chart\", \"select-kit/components/combo-box\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _routing, _service, _truthHelpers, _conditionalLoadingSpinner, _dButton, _dPageSubheader, _dStatTiles, _dateTimeInputRange, _avatar, _concatClass, _ajax, _formatter, _i18n, _decorators, _adminConfigAreaCard, _adminConfigAreaEmptyList, _chart, _comboBox, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiUsage extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"store\", [_service.service]))();\n    #store = (() => (dt7948.i(this, \"store\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"startDate\", [_tracking.tracked], function () {\n      return moment().subtract(30, \"days\").toDate();\n    }))();\n    #startDate = (() => (dt7948.i(this, \"startDate\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"endDate\", [_tracking.tracked], function () {\n      return new Date();\n    }))();\n    #endDate = (() => (dt7948.i(this, \"endDate\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"data\", [_tracking.tracked], function () {\n      return this.args.model;\n    }))();\n    #data = (() => (dt7948.i(this, \"data\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"selectedFeature\", [_tracking.tracked]))();\n    #selectedFeature = (() => (dt7948.i(this, \"selectedFeature\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"selectedModel\", [_tracking.tracked]))();\n    #selectedModel = (() => (dt7948.i(this, \"selectedModel\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"selectedPeriod\", [_tracking.tracked], function () {\n      return \"month\";\n    }))();\n    #selectedPeriod = (() => (dt7948.i(this, \"selectedPeriod\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"isCustomDateActive\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isCustomDateActive = (() => (dt7948.i(this, \"isCustomDateActive\"), void 0))();\n    static #_9 = (() => dt7948.g(this.prototype, \"loadingData\", [_tracking.tracked], function () {\n      return true;\n    }))();\n    #loadingData = (() => (dt7948.i(this, \"loadingData\"), void 0))();\n    constructor() {\n      super(...arguments);\n      this.fetchData();\n    }\n    async fetchData() {\n      const response = await (0, _ajax.ajax)(\"/admin/plugins/discourse-ai/ai-usage-report.json\", {\n        data: {\n          start_date: moment(this.startDate).format(\"YYYY-MM-DD\"),\n          end_date: moment(this.endDate).format(\"YYYY-MM-DD\"),\n          feature: this.selectedFeature,\n          model: this.selectedModel\n        }\n      });\n      this.data = response;\n      this.loadingData = false;\n      this._cachedFeatures = null;\n      this._cachedModels = null;\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"fetchData\", [_object.action]))();\n    async onFilterChange() {\n      await this.fetchData();\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"onFilterChange\", [_object.action]))();\n    onFeatureChanged(value) {\n      this.selectedFeature = value;\n      this.onFilterChange();\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"onFeatureChanged\", [_object.action]))();\n    onModelChanged(value) {\n      this.selectedModel = value;\n      this.onFilterChange();\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"onModelChanged\", [_object.action]))();\n    takeUsers(start, end) {\n      return this.data.users.slice(start, end);\n    }\n    static #_14 = (() => dt7948.n(this.prototype, \"takeUsers\", [_decorators.bind]))();\n    normalizeTimeSeriesData(data) {\n      if (!data?.length) {\n        return [];\n      }\n      const startDate = moment(this.startDate);\n      const endDate = moment(this.endDate);\n      const normalized = [];\n      let interval;\n      let format;\n      if (this.data.period === \"hour\") {\n        interval = \"hour\";\n        format = \"YYYY-MM-DD HH:00:00\";\n      } else if (this.data.period === \"day\") {\n        interval = \"day\";\n        format = \"YYYY-MM-DD\";\n      } else {\n        interval = \"month\";\n        format = \"YYYY-MM\";\n      }\n      const dataMap = new Map(data.map(d => [moment(d.period).format(format), d]));\n      for (let currentMoment = moment(startDate); currentMoment.isSameOrBefore(endDate); currentMoment.add(1, interval)) {\n        const dateKey = currentMoment.format(format);\n        const existingData = dataMap.get(dateKey);\n        normalized.push(existingData || {\n          period: currentMoment.format(),\n          total_tokens: 0,\n          total_cached_tokens: 0,\n          total_request_tokens: 0,\n          total_response_tokens: 0\n        });\n      }\n      return normalized;\n    }\n    get metrics() {\n      return [{\n        label: (0, _i18n.default)(\"discourse_ai.usage.total_requests\"),\n        value: this.data.summary.total_requests,\n        tooltip: (0, _i18n.default)(\"discourse_ai.usage.stat_tooltips.total_requests\")\n      }, {\n        label: (0, _i18n.default)(\"discourse_ai.usage.total_tokens\"),\n        value: this.data.summary.total_tokens,\n        tooltip: (0, _i18n.default)(\"discourse_ai.usage.stat_tooltips.total_tokens\")\n      }, {\n        label: (0, _i18n.default)(\"discourse_ai.usage.request_tokens\"),\n        value: this.data.summary.total_request_tokens,\n        tooltip: (0, _i18n.default)(\"discourse_ai.usage.stat_tooltips.request_tokens\")\n      }, {\n        label: (0, _i18n.default)(\"discourse_ai.usage.response_tokens\"),\n        value: this.data.summary.total_response_tokens,\n        tooltip: (0, _i18n.default)(\"discourse_ai.usage.stat_tooltips.response_tokens\")\n      }, {\n        label: (0, _i18n.default)(\"discourse_ai.usage.cached_tokens\"),\n        value: this.data.summary.total_cached_tokens,\n        tooltip: (0, _i18n.default)(\"discourse_ai.usage.stat_tooltips.cached_tokens\")\n      }];\n    }\n    get chartConfig() {\n      if (!this.data?.data) {\n        return;\n      }\n      const normalizedData = this.normalizeTimeSeriesData(this.data.data);\n      const chartEl = document.querySelector(\".ai-usage__chart\");\n      const computedStyle = getComputedStyle(chartEl);\n      const colors = {\n        response: computedStyle.getPropertyValue(\"--chart-response-color\").trim(),\n        request: computedStyle.getPropertyValue(\"--chart-request-color\").trim(),\n        cached: computedStyle.getPropertyValue(\"--chart-cached-color\").trim()\n      };\n      return {\n        type: \"bar\",\n        data: {\n          labels: normalizedData.map(row => {\n            const date = moment(row.period);\n            if (this.data.period === \"hour\") {\n              return date.format(\"HH:00\");\n            } else if (this.data.period === \"day\") {\n              return date.format(\"DD-MMM\");\n            } else {\n              return date.format(\"MMM-YY\");\n            }\n          }),\n          datasets: [{\n            label: (0, _i18n.default)(\"discourse_ai.usage.response_tokens\"),\n            data: normalizedData.map(row => row.total_response_tokens),\n            backgroundColor: colors.response\n          }, {\n            label: (0, _i18n.default)(\"discourse_ai.usage.net_request_tokens\"),\n            data: normalizedData.map(row => row.total_request_tokens - row.total_cached_tokens),\n            backgroundColor: colors.request\n          }, {\n            label: (0, _i18n.default)(\"discourse_ai.usage.cached_request_tokens\"),\n            data: normalizedData.map(row => row.total_cached_tokens),\n            backgroundColor: colors.cached\n          }]\n        },\n        options: {\n          responsive: true,\n          scales: {\n            x: {\n              stacked: true\n            },\n            y: {\n              stacked: true,\n              beginAtZero: true\n            }\n          }\n        }\n      };\n    }\n    get availableFeatures() {\n      // when you switch we don't want the list to change\n      // only when you switch durations\n      this._cachedFeatures = this._cachedFeatures || (this.data?.features || []).map(f => ({\n        id: f.feature_name,\n        name: f.feature_name\n      }));\n      return this._cachedFeatures;\n    }\n    get availableModels() {\n      this._cachedModels = this._cachedModels || (this.data?.models || []).map(m => ({\n        id: m.llm,\n        name: m.llm\n      }));\n      return this._cachedModels;\n    }\n    get periodOptions() {\n      return [{\n        id: \"day\",\n        name: (0, _i18n.default)(\"discourse_ai.usage.periods.last_day\")\n      }, {\n        id: \"week\",\n        name: (0, _i18n.default)(\"discourse_ai.usage.periods.last_week\")\n      }, {\n        id: \"month\",\n        name: (0, _i18n.default)(\"discourse_ai.usage.periods.last_month\")\n      }];\n    }\n    setPeriodDates(period) {\n      const now = moment();\n      switch (period) {\n        case \"day\":\n          this.startDate = now.clone().subtract(1, \"day\").toDate();\n          this.endDate = now.toDate();\n          break;\n        case \"week\":\n          this.startDate = now.clone().subtract(7, \"days\").toDate();\n          this.endDate = now.toDate();\n          break;\n        case \"month\":\n          this.startDate = now.clone().subtract(30, \"days\").toDate();\n          this.endDate = now.toDate();\n          break;\n      }\n    }\n    static #_15 = (() => dt7948.n(this.prototype, \"setPeriodDates\", [_object.action]))();\n    onPeriodSelect(period) {\n      this.selectedPeriod = period;\n      this.isCustomDateActive = false;\n      this.setPeriodDates(period);\n      this.fetchData();\n    }\n    static #_16 = (() => dt7948.n(this.prototype, \"onPeriodSelect\", [_object.action]))();\n    onCustomDateClick() {\n      this.isCustomDateActive = !this.isCustomDateActive;\n      if (this.isCustomDateActive) {\n        this.selectedPeriod = null;\n      }\n    }\n    static #_17 = (() => dt7948.n(this.prototype, \"onCustomDateClick\", [_object.action]))();\n    onDateChange() {\n      this.isCustomDateActive = true;\n      this.selectedPeriod = null;\n      this.fetchData();\n    }\n    static #_18 = (() => dt7948.n(this.prototype, \"onDateChange\", [_object.action]))();\n    onChangeDateRange(_ref) {\n      let {\n        from,\n        to\n      } = _ref;\n      this._startDate = from;\n      this._endDate = to;\n    }\n    static #_19 = (() => dt7948.n(this.prototype, \"onChangeDateRange\", [_object.action]))();\n    onRefreshDateRange() {\n      this.startDate = this._startDate;\n      this.endDate = this._endDate;\n      this.fetchData();\n    }\n    static #_20 = (() => dt7948.n(this.prototype, \"onRefreshDateRange\", [_object.action]))();\n    static #_21 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"ai-usage admin-detail\">\n          <DPageSubheader\n            @titleLabel={{i18n \"discourse_ai.usage.short_title\"}}\n            @learnMoreUrl=\"https://meta.discourse.org/t/-/348677\"\n            @descriptionLabel={{i18n \"discourse_ai.usage.subheader_description\"}}\n          />\n          <div class=\"ai-usage__filters\">\n            <div class=\"ai-usage__filters-dates\">\n              <div class=\"ai-usage__period-buttons\">\n                {{#each this.periodOptions as |option|}}\n                  <DButton\n                    class={{if\n                      (eq this.selectedPeriod option.id)\n                      \"btn-primary\"\n                      \"btn-default\"\n                    }}\n                    @action={{fn this.onPeriodSelect option.id}}\n                    @translatedLabel={{option.name}}\n                  />\n                {{/each}}\n                <DButton\n                  class={{if this.isCustomDateActive \"btn-primary\" \"btn-default\"}}\n                  @action={{this.onCustomDateClick}}\n                  @label=\"discourse_ai.usage.periods.custom\"\n                />\n              </div>\n    \n              {{#if this.isCustomDateActive}}\n                <div class=\"ai-usage__custom-date-pickers\">\n    \n                  <DateTimeInputRange\n                    @from={{this.startDate}}\n                    @to={{this.endDate}}\n                    @onChange={{this.onChangeDateRange}}\n                    @showFromTime={{false}}\n                    @showToTime={{false}}\n                  />\n    \n                  <DButton @action={{this.onRefreshDateRange}} @label=\"refresh\" />\n                </div>\n              {{/if}}\n            </div>\n    \n            <div class=\"ai-usage__filters-row\">\n              <ComboBox\n                @value={{this.selectedFeature}}\n                @content={{this.availableFeatures}}\n                @onChange={{this.onFeatureChanged}}\n                @options={{hash none=\"discourse_ai.usage.all_features\"}}\n                class=\"ai-usage__feature-selector\"\n              />\n    \n              <ComboBox\n                @value={{this.selectedModel}}\n                @content={{this.availableModels}}\n                @onChange={{this.onModelChanged}}\n                @options={{hash none=\"discourse_ai.usage.all_models\"}}\n                class=\"ai-usage__model-selector\"\n              />\n            </div>\n    \n            <ConditionalLoadingSpinner @condition={{this.loadingData}}>\n              <AdminConfigAreaCard\n                @heading=\"discourse_ai.usage.summary\"\n                class=\"ai-usage__summary\"\n              >\n                <:content>\n                  <DStatTiles as |tiles|>\n                    {{#each this.metrics as |metric|}}\n                      <tiles.Tile\n                        @label={{metric.label}}\n                        @href={{metric.href}}\n                        @value={{metric.value}}\n                        @tooltip={{metric.tooltip}}\n                      />\n                    {{/each}}\n                  </DStatTiles>\n                </:content>\n              </AdminConfigAreaCard>\n    \n              <AdminConfigAreaCard\n                class=\"ai-usage__charts\"\n                @heading=\"discourse_ai.usage.tokens_over_time\"\n              >\n                <:content>\n                  <div class=\"ai-usage__chart-container\">\n                    <Chart\n                      @chartConfig={{this.chartConfig}}\n                      class=\"ai-usage__chart\"\n                    />\n                  </div>\n                </:content>\n              </AdminConfigAreaCard>\n    \n              <div class=\"ai-usage__breakdowns\">\n                <AdminConfigAreaCard\n                  class=\"ai-usage__features\"\n                  @heading=\"discourse_ai.usage.features_breakdown\"\n                >\n                  <:content>\n                    {{#unless this.data.features.length}}\n                      <AdminConfigAreaEmptyList\n                        @emptyLabel=\"discourse_ai.usage.no_features\"\n                      />\n                    {{/unless}}\n    \n                    {{#if this.data.features.length}}\n                      <table class=\"ai-usage__features-table\">\n                        <thead>\n                          <tr>\n                            <th>{{i18n \"discourse_ai.usage.feature\"}}</th>\n                            <th>{{i18n \"discourse_ai.usage.usage_count\"}}</th>\n                            <th>{{i18n \"discourse_ai.usage.total_tokens\"}}</th>\n                          </tr>\n                        </thead>\n                        <tbody>\n                          {{#each this.data.features as |feature|}}\n                            <tr class=\"ai-usage__features-row\">\n                              <td\n                                class=\"ai-usage__features-cell\"\n                              >{{feature.feature_name}}</td>\n                              <td\n                                class=\"ai-usage__features-cell\"\n                                title={{feature.usage_count}}\n                              >{{number feature.usage_count}}</td>\n                              <td\n                                class=\"ai-usage__features-cell\"\n                                title={{feature.total_tokens}}\n                              >{{number feature.total_tokens}}</td>\n                            </tr>\n                          {{/each}}\n                        </tbody>\n                      </table>\n                    {{/if}}\n                  </:content>\n                </AdminConfigAreaCard>\n    \n                <AdminConfigAreaCard\n                  class=\"ai-usage__models\"\n                  @heading=\"discourse_ai.usage.models_breakdown\"\n                >\n                  <:content>\n                    {{#unless this.data.models.length}}\n                      <AdminConfigAreaEmptyList\n                        @emptyLabel=\"discourse_ai.usage.no_models\"\n                      />\n                    {{/unless}}\n    \n                    {{#if this.data.models.length}}\n                      <table class=\"ai-usage__models-table\">\n                        <thead>\n                          <tr>\n                            <th>{{i18n \"discourse_ai.usage.model\"}}</th>\n                            <th>{{i18n \"discourse_ai.usage.usage_count\"}}</th>\n                            <th>{{i18n \"discourse_ai.usage.total_tokens\"}}</th>\n                          </tr>\n                        </thead>\n                        <tbody>\n                          {{#each this.data.models as |model|}}\n                            <tr class=\"ai-usage__models-row\">\n                              <td class=\"ai-usage__models-cell\">{{model.llm}}</td>\n                              <td\n                                class=\"ai-usage__models-cell\"\n                                title={{model.usage_count}}\n                              >{{number model.usage_count}}</td>\n                              <td\n                                class=\"ai-usage__models-cell\"\n                                title={{model.total_tokens}}\n                              >{{number model.total_tokens}}</td>\n                            </tr>\n                          {{/each}}\n                        </tbody>\n                      </table>\n                    {{/if}}\n                  </:content>\n                </AdminConfigAreaCard>\n    \n                <AdminConfigAreaCard\n                  class=\"ai-usage__users\"\n                  @heading=\"discourse_ai.usage.users_breakdown\"\n                >\n                  <:content>\n                    {{#unless this.data.users.length}}\n                      <AdminConfigAreaEmptyList\n                        @emptyLabel=\"discourse_ai.usage.no_users\"\n                      />\n                    {{/unless}}\n    \n                    {{#if this.data.users.length}}\n                      <table\n                        class={{concatClass\n                          \"ai-usage__users-table\"\n                          (if (lt this.data.users.length 25) \"-double-width\")\n                        }}\n                      >\n                        <thead>\n                          <tr>\n                            <th class=\"ai-usage__users-username\">{{i18n\n                                \"discourse_ai.usage.username\"\n                              }}</th>\n                            <th>{{i18n \"discourse_ai.usage.usage_count\"}}</th>\n                            <th>{{i18n \"discourse_ai.usage.total_tokens\"}}</th>\n                          </tr>\n                        </thead>\n                        <tbody>\n                          {{#each (this.takeUsers 0 24) as |user|}}\n                            <tr class=\"ai-usage__users-row\">\n                              <td class=\"ai-usage__users-cell\">\n                                <div class=\"user-info\">\n                                  <LinkTo\n                                    @route=\"user\"\n                                    @model={{user.username}}\n                                    class=\"username\"\n                                  >\n                                    {{avatar user imageSize=\"tiny\"}}\n                                    {{user.username}}\n                                  </LinkTo>\n                                </div></td>\n                              <td\n                                class=\"ai-usage__users-cell\"\n                                title={{user.usage_count}}\n                              >{{number user.usage_count}}</td>\n                              <td\n                                class=\"ai-usage__users-cell\"\n                                title={{user.total_tokens}}\n                              >{{number user.total_tokens}}</td>\n                            </tr>\n                          {{/each}}\n                        </tbody>\n                      </table>\n    \n                      {{#if (gt this.data.users.length 25)}}\n                        <table class=\"ai-usage__users-table\">\n                          <thead>\n                            <tr>\n                              <th class=\"ai-usage__users-username\">{{i18n\n                                  \"discourse_ai.usage.username\"\n                                }}</th>\n                              <th>{{i18n \"discourse_ai.usage.usage_count\"}}</th>\n                              <th>{{i18n \"discourse_ai.usage.total_tokens\"}}</th>\n                            </tr>\n                          </thead>\n                          <tbody>\n                            {{#each (this.takeUsers 25 49) as |user|}}\n                              <tr class=\"ai-usage__users-row\">\n                                <td class=\"ai-usage__users-cell\">\n                                  <div class=\"user-info\">\n                                    <LinkTo\n                                      @route=\"user\"\n                                      @model={{user.username}}\n                                      class=\"username\"\n                                    >\n                                      {{avatar user imageSize=\"tiny\"}}\n                                      {{user.username}}\n                                    </LinkTo>\n                                  </div></td>\n                                <td\n                                  class=\"ai-usage__users-cell\"\n                                  title={{user.usage_count}}\n                                >{{number user.usage_count}}</td>\n                                <td\n                                  class=\"ai-usage__users-cell\"\n                                  title={{user.total_tokens}}\n                                >{{number user.total_tokens}}</td>\n                              </tr>\n                            {{/each}}\n                          </tbody>\n                        </table>\n                      {{/if}}\n                    {{/if}}\n                  </:content>\n                </AdminConfigAreaCard>\n              </div>\n            </ConditionalLoadingSpinner>\n          </div>\n        </div>\n      \n    */\n    {\n      \"id\": \"LcImkkGS\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-usage admin-detail\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,0],null,[[\\\"@titleLabel\\\",\\\"@learnMoreUrl\\\",\\\"@descriptionLabel\\\"],[[28,[32,1],[\\\"discourse_ai.usage.short_title\\\"],null],\\\"https://meta.discourse.org/t/-/348677\\\",[28,[32,1],[\\\"discourse_ai.usage.subheader_description\\\"],null]]],null],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"ai-usage__filters\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-usage__filters-dates\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"ai-usage__period-buttons\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"periodOptions\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[32,2],[[16,0,[52,[28,[32,3],[[30,0,[\\\"selectedPeriod\\\"]],[30,1,[\\\"id\\\"]]],null],\\\"btn-primary\\\",\\\"btn-default\\\"]]],[[\\\"@action\\\",\\\"@translatedLabel\\\"],[[28,[32,4],[[30,0,[\\\"onPeriodSelect\\\"]],[30,1,[\\\"id\\\"]]],null],[30,1,[\\\"name\\\"]]]],null],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"            \\\"],[8,[32,2],[[16,0,[52,[30,0,[\\\"isCustomDateActive\\\"]],\\\"btn-primary\\\",\\\"btn-default\\\"]]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"onCustomDateClick\\\"]],\\\"discourse_ai.usage.periods.custom\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"isCustomDateActive\\\"]],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"ai-usage__custom-date-pickers\\\"],[12],[1,\\\"\\\\n\\\\n              \\\"],[8,[32,5],null,[[\\\"@from\\\",\\\"@to\\\",\\\"@onChange\\\",\\\"@showFromTime\\\",\\\"@showToTime\\\"],[[30,0,[\\\"startDate\\\"]],[30,0,[\\\"endDate\\\"]],[30,0,[\\\"onChangeDateRange\\\"]],false,false]],null],[1,\\\"\\\\n\\\\n              \\\"],[8,[32,2],null,[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"onRefreshDateRange\\\"]],\\\"refresh\\\"]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"ai-usage__filters-row\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,6],[[24,0,\\\"ai-usage__feature-selector\\\"]],[[\\\"@value\\\",\\\"@content\\\",\\\"@onChange\\\",\\\"@options\\\"],[[30,0,[\\\"selectedFeature\\\"]],[30,0,[\\\"availableFeatures\\\"]],[30,0,[\\\"onFeatureChanged\\\"]],[28,[32,7],null,[[\\\"none\\\"],[\\\"discourse_ai.usage.all_features\\\"]]]]],null],[1,\\\"\\\\n\\\\n          \\\"],[8,[32,6],[[24,0,\\\"ai-usage__model-selector\\\"]],[[\\\"@value\\\",\\\"@content\\\",\\\"@onChange\\\",\\\"@options\\\"],[[30,0,[\\\"selectedModel\\\"]],[30,0,[\\\"availableModels\\\"]],[30,0,[\\\"onModelChanged\\\"]],[28,[32,7],null,[[\\\"none\\\"],[\\\"discourse_ai.usage.all_models\\\"]]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[8,[32,8],null,[[\\\"@condition\\\"],[[30,0,[\\\"loadingData\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[32,9],[[24,0,\\\"ai-usage__summary\\\"]],[[\\\"@heading\\\"],[\\\"discourse_ai.usage.summary\\\"]],[[\\\"content\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[32,10],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"metrics\\\"]]],null]],null],null,[[[1,\\\"                  \\\"],[8,[30,2,[\\\"Tile\\\"]],null,[[\\\"@label\\\",\\\"@href\\\",\\\"@value\\\",\\\"@tooltip\\\"],[[30,3,[\\\"label\\\"]],[30,3,[\\\"href\\\"]],[30,3,[\\\"value\\\"]],[30,3,[\\\"tooltip\\\"]]]],null],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"              \\\"]],[2]]]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[32,9],[[24,0,\\\"ai-usage__charts\\\"]],[[\\\"@heading\\\"],[\\\"discourse_ai.usage.tokens_over_time\\\"]],[[\\\"content\\\"],[[[[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"ai-usage__chart-container\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[32,11],[[24,0,\\\"ai-usage__chart\\\"]],[[\\\"@chartConfig\\\"],[[30,0,[\\\"chartConfig\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\\n          \\\"],[10,0],[14,0,\\\"ai-usage__breakdowns\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[32,9],[[24,0,\\\"ai-usage__features\\\"]],[[\\\"@heading\\\"],[\\\"discourse_ai.usage.features_breakdown\\\"]],[[\\\"content\\\"],[[[[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"data\\\",\\\"features\\\",\\\"length\\\"]]],[[[1,\\\"                  \\\"],[8,[32,12],null,[[\\\"@emptyLabel\\\"],[\\\"discourse_ai.usage.no_features\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"data\\\",\\\"features\\\",\\\"length\\\"]],[[[1,\\\"                  \\\"],[10,\\\"table\\\"],[14,0,\\\"ai-usage__features-table\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.feature\\\"],null]],[13],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.usage_count\\\"],null]],[13],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.total_tokens\\\"],null]],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"data\\\",\\\"features\\\"]]],null]],null],null,[[[1,\\\"                        \\\"],[10,\\\"tr\\\"],[14,0,\\\"ai-usage__features-row\\\"],[12],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__features-cell\\\"],[12],[1,[30,4,[\\\"feature_name\\\"]]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__features-cell\\\"],[15,\\\"title\\\",[30,4,[\\\"usage_count\\\"]]],[12],[1,[28,[32,13],[[30,4,[\\\"usage_count\\\"]]],null]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__features-cell\\\"],[15,\\\"title\\\",[30,4,[\\\"total_tokens\\\"]]],[12],[1,[28,[32,13],[[30,4,[\\\"total_tokens\\\"]]],null]],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"]],[]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[32,9],[[24,0,\\\"ai-usage__models\\\"]],[[\\\"@heading\\\"],[\\\"discourse_ai.usage.models_breakdown\\\"]],[[\\\"content\\\"],[[[[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"data\\\",\\\"models\\\",\\\"length\\\"]]],[[[1,\\\"                  \\\"],[8,[32,12],null,[[\\\"@emptyLabel\\\"],[\\\"discourse_ai.usage.no_models\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"data\\\",\\\"models\\\",\\\"length\\\"]],[[[1,\\\"                  \\\"],[10,\\\"table\\\"],[14,0,\\\"ai-usage__models-table\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.model\\\"],null]],[13],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.usage_count\\\"],null]],[13],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.total_tokens\\\"],null]],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"data\\\",\\\"models\\\"]]],null]],null],null,[[[1,\\\"                        \\\"],[10,\\\"tr\\\"],[14,0,\\\"ai-usage__models-row\\\"],[12],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__models-cell\\\"],[12],[1,[30,5,[\\\"llm\\\"]]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__models-cell\\\"],[15,\\\"title\\\",[30,5,[\\\"usage_count\\\"]]],[12],[1,[28,[32,13],[[30,5,[\\\"usage_count\\\"]]],null]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__models-cell\\\"],[15,\\\"title\\\",[30,5,[\\\"total_tokens\\\"]]],[12],[1,[28,[32,13],[[30,5,[\\\"total_tokens\\\"]]],null]],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n\\\"]],[5]],null],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"]],[]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[32,9],[[24,0,\\\"ai-usage__users\\\"]],[[\\\"@heading\\\"],[\\\"discourse_ai.usage.users_breakdown\\\"]],[[\\\"content\\\"],[[[[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"data\\\",\\\"users\\\",\\\"length\\\"]]],[[[1,\\\"                  \\\"],[8,[32,12],null,[[\\\"@emptyLabel\\\"],[\\\"discourse_ai.usage.no_users\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"data\\\",\\\"users\\\",\\\"length\\\"]],[[[1,\\\"                  \\\"],[10,\\\"table\\\"],[15,0,[28,[32,14],[\\\"ai-usage__users-table\\\",[52,[28,[32,15],[[30,0,[\\\"data\\\",\\\"users\\\",\\\"length\\\"]],25],null],\\\"-double-width\\\"]],null]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[14,0,\\\"ai-usage__users-username\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.username\\\"],null]],[13],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.usage_count\\\"],null]],[13],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.total_tokens\\\"],null]],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[28,[30,0,[\\\"takeUsers\\\"]],[0,24],null]],null]],null],null,[[[1,\\\"                        \\\"],[10,\\\"tr\\\"],[14,0,\\\"ai-usage__users-row\\\"],[12],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__users-cell\\\"],[12],[1,\\\"\\\\n                            \\\"],[10,0],[14,0,\\\"user-info\\\"],[12],[1,\\\"\\\\n                              \\\"],[8,[32,16],[[24,0,\\\"username\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"user\\\",[30,6,[\\\"username\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                                \\\"],[1,[28,[32,17],[[30,6]],[[\\\"imageSize\\\"],[\\\"tiny\\\"]]]],[1,\\\"\\\\n                                \\\"],[1,[30,6,[\\\"username\\\"]]],[1,\\\"\\\\n                              \\\"]],[]]]]],[1,\\\"\\\\n                            \\\"],[13],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__users-cell\\\"],[15,\\\"title\\\",[30,6,[\\\"usage_count\\\"]]],[12],[1,[28,[32,13],[[30,6,[\\\"usage_count\\\"]]],null]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__users-cell\\\"],[15,\\\"title\\\",[30,6,[\\\"total_tokens\\\"]]],[12],[1,[28,[32,13],[[30,6,[\\\"total_tokens\\\"]]],null]],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n\\\"]],[6]],null],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[32,18],[[30,0,[\\\"data\\\",\\\"users\\\",\\\"length\\\"]],25],null],[[[1,\\\"                    \\\"],[10,\\\"table\\\"],[14,0,\\\"ai-usage__users-table\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                          \\\"],[10,\\\"th\\\"],[14,0,\\\"ai-usage__users-username\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.username\\\"],null]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.usage_count\\\"],null]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.total_tokens\\\"],null]],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[28,[30,0,[\\\"takeUsers\\\"]],[25,49],null]],null]],null],null,[[[1,\\\"                          \\\"],[10,\\\"tr\\\"],[14,0,\\\"ai-usage__users-row\\\"],[12],[1,\\\"\\\\n                            \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__users-cell\\\"],[12],[1,\\\"\\\\n                              \\\"],[10,0],[14,0,\\\"user-info\\\"],[12],[1,\\\"\\\\n                                \\\"],[8,[32,16],[[24,0,\\\"username\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"user\\\",[30,7,[\\\"username\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                                  \\\"],[1,[28,[32,17],[[30,7]],[[\\\"imageSize\\\"],[\\\"tiny\\\"]]]],[1,\\\"\\\\n                                  \\\"],[1,[30,7,[\\\"username\\\"]]],[1,\\\"\\\\n                                \\\"]],[]]]]],[1,\\\"\\\\n                              \\\"],[13],[13],[1,\\\"\\\\n                            \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__users-cell\\\"],[15,\\\"title\\\",[30,7,[\\\"usage_count\\\"]]],[12],[1,[28,[32,13],[[30,7,[\\\"usage_count\\\"]]],null]],[13],[1,\\\"\\\\n                            \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__users-cell\\\"],[15,\\\"title\\\",[30,7,[\\\"total_tokens\\\"]]],[12],[1,[28,[32,13],[[30,7,[\\\"total_tokens\\\"]]],null]],[13],[1,\\\"\\\\n                          \\\"],[13],[1,\\\"\\\\n\\\"]],[7]],null],[1,\\\"                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"              \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"option\\\",\\\"tiles\\\",\\\"metric\\\",\\\"feature\\\",\\\"model\\\",\\\"user\\\",\\\"user\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\",\\\"unless\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-usage.js\",\n      \"scope\": () => [_dPageSubheader.default, _i18n.default, _dButton.default, _truthHelpers.eq, _helper.fn, _dateTimeInputRange.default, _comboBox.default, _helper.hash, _conditionalLoadingSpinner.default, _adminConfigAreaCard.default, _dStatTiles.default, _chart.default, _adminConfigAreaEmptyList.default, _formatter.number, _concatClass.default, _truthHelpers.lt, _routing.LinkTo, _avatar.default, _truthHelpers.gt],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiUsage;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/ai-llm-quota-modal\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-modal\", \"discourse/components/form\", \"discourse-i18n\", \"select-kit/components/group-chooser\", \"discourse/plugins/discourse-ai/discourse/components/ai-quota-duration-selector\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _service, _dModal, _form, _discourseI18n, _groupChooser, _aiQuotaDurationSelector, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiLlmQuotaModal extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"site\", [_service.service]))();\n    #site = (() => (dt7948.i(this, \"site\"), void 0))();\n    save(data) {\n      const quota = {\n        ...data\n      };\n      quota.group_name = this.site.groups.findBy(\"id\", data.group_id).name;\n      quota.llm_model_id = this.args.model.id;\n      this.args.model.addItemToCollection(quota);\n      this.args.closeModal();\n      if (this.args.model.onSave) {\n        this.args.model.onSave();\n      }\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"save\", [_object.action]))();\n    get availableGroups() {\n      const existingQuotaGroupIds = this.args.model.llm.llm_quotas.map(q => q.group_id) || [];\n      return this.site.groups.filter(group => !existingQuotaGroupIds.includes(group.id) && group.id !== 0);\n    }\n    get quota() {\n      return {\n        group_id: null,\n        llm_model_id: null,\n        max_tokens: null,\n        max_usages: null,\n        duration_seconds: moment.duration(1, \"day\").asSeconds()\n      };\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"quota\", [_tracking.cached]))();\n    setGroupId(field, groups) {\n      field.set(groups[0]);\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"setGroupId\", [_object.action]))();\n    validateForm(data, _ref) {\n      let {\n        addError,\n        removeError\n      } = _ref;\n      if (!data.max_tokens && !data.max_usages) {\n        addError(\"max_tokens\", {\n          title: (0, _discourseI18n.i18n)(\"discourse_ai.llms.quotas.max_tokens\"),\n          message: (0, _discourseI18n.i18n)(\"discourse_ai.llms.quotas.max_tokens_required\")\n        });\n        addError(\"max_usages\", {\n          title: (0, _discourseI18n.i18n)(\"discourse_ai.llms.quotas.max_usages\"),\n          message: (0, _discourseI18n.i18n)(\"discourse_ai.llms.quotas.max_usages_required\")\n        });\n      } else {\n        removeError(\"max_tokens\");\n        removeError(\"max_usages\");\n      }\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"validateForm\", [_object.action]))();\n    static #_6 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DModal\n          @title={{i18n \"discourse_ai.llms.quotas.add_title\"}}\n          @closeModal={{@closeModal}}\n          class=\"ai-llm-quota-modal\"\n        >\n          <:body>\n            <Form\n              @validate={{this.validateForm}}\n              @onSubmit={{this.save}}\n              @data={{this.quota}}\n              as |form data|\n            >\n              <form.Field\n                @name=\"group_id\"\n                @title={{i18n \"discourse_ai.llms.quotas.group\"}}\n                @validation=\"required\"\n                @format=\"large\"\n                as |field|\n              >\n                <field.Custom>\n                  <GroupChooser\n                    @value={{data.group_id}}\n                    @content={{this.availableGroups}}\n                    @onChange={{fn this.setGroupId field}}\n                    @options={{hash maximum=1}}\n                  />\n                </field.Custom>\n              </form.Field>\n    \n              <form.Field\n                @name=\"max_tokens\"\n                @title={{i18n \"discourse_ai.llms.quotas.max_tokens\"}}\n                @tooltip={{i18n \"discourse_ai.llms.quotas.max_tokens_help\"}}\n                @format=\"large\"\n                as |field|\n              >\n                <field.Input @type=\"number\" min=\"1\" />\n              </form.Field>\n    \n              <form.Field\n                @name=\"max_usages\"\n                @title={{i18n \"discourse_ai.llms.quotas.max_usages\"}}\n                @tooltip={{i18n \"discourse_ai.llms.quotas.max_usages_help\"}}\n                @format=\"large\"\n                as |field|\n              >\n                <field.Input @type=\"number\" min=\"1\" />\n              </form.Field>\n    \n              <form.Field\n                @name=\"duration_seconds\"\n                @title={{i18n \"discourse_ai.llms.quotas.duration\"}}\n                @validation=\"required\"\n                @format=\"large\"\n                as |field|\n              >\n                <field.Custom>\n                  <DurationSelector\n                    @value={{data.duration_seconds}}\n                    @onChange={{field.set}}\n                  />\n                </field.Custom>\n              </form.Field>\n    \n              <form.Submit\n                @label=\"discourse_ai.llms.quotas.add\"\n                class=\"btn-primary\"\n              />\n            </Form>\n          </:body>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"MLB+nwD5\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"ai-llm-quota-modal\\\"]],[[\\\"@title\\\",\\\"@closeModal\\\"],[[28,[32,1],[\\\"discourse_ai.llms.quotas.add_title\\\"],null],[30,1]]],[[\\\"body\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[32,2],null,[[\\\"@validate\\\",\\\"@onSubmit\\\",\\\"@data\\\"],[[30,0,[\\\"validateForm\\\"]],[30,0,[\\\"save\\\"]],[30,0,[\\\"quota\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"group_id\\\",[28,[32,1],[\\\"discourse_ai.llms.quotas.group\\\"],null],\\\"required\\\",\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,4,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[32,3],null,[[\\\"@value\\\",\\\"@content\\\",\\\"@onChange\\\",\\\"@options\\\"],[[30,3,[\\\"group_id\\\"]],[30,0,[\\\"availableGroups\\\"]],[28,[32,4],[[30,0,[\\\"setGroupId\\\"]],[30,4]],null],[28,[32,5],null,[[\\\"maximum\\\"],[1]]]]],null],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[4]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"max_tokens\\\",[28,[32,1],[\\\"discourse_ai.llms.quotas.max_tokens\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.quotas.max_tokens_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,5,[\\\"Input\\\"]],[[24,\\\"min\\\",\\\"1\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n          \\\"]],[5]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"max_usages\\\",[28,[32,1],[\\\"discourse_ai.llms.quotas.max_usages\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.quotas.max_usages_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,6,[\\\"Input\\\"]],[[24,\\\"min\\\",\\\"1\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n          \\\"]],[6]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"duration_seconds\\\",[28,[32,1],[\\\"discourse_ai.llms.quotas.duration\\\"],null],\\\"required\\\",\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,7,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[32,6],null,[[\\\"@value\\\",\\\"@onChange\\\"],[[30,3,[\\\"duration_seconds\\\"]],[30,7,[\\\"set\\\"]]]],null],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[7]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,2,[\\\"Submit\\\"]],[[24,0,\\\"btn-primary\\\"]],[[\\\"@label\\\"],[\\\"discourse_ai.llms.quotas.add\\\"]],null],[1,\\\"\\\\n        \\\"]],[2,3]]]]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@closeModal\\\",\\\"form\\\",\\\"data\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/ai-llm-quota-modal.js\",\n      \"scope\": () => [_dModal.default, _discourseI18n.i18n, _form.default, _groupChooser.default, _helper.fn, _helper.hash, _aiQuotaDurationSelector.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiLlmQuotaModal;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/ai-summary-modal\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/render-modifiers/modifiers/did-update\", \"@ember/render-modifiers/modifiers/will-destroy\", \"@ember/runloop\", \"@ember/service\", \"truth-helpers\", \"discourse/components/cook-text\", \"discourse/components/d-button\", \"discourse/components/d-modal\", \"discourse/helpers/concat-class\", \"discourse/helpers/html-class\", \"discourse/lib/ajax\", \"discourse/lib/formatter\", \"discourse-common/helpers/d-icon\", \"discourse-common/utils/decorators\", \"discourse-i18n\", \"float-kit/components/d-tooltip\", \"discourse/plugins/discourse-ai/discourse/components/ai-summary-skeleton\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _didInsert, _didUpdate, _willDestroy, _runloop, _service, _truthHelpers, _cookText, _dButton, _dModal, _concatClass, _htmlClass, _ajax, _formatter, _dIcon, _decorators, _discourseI18n, _dTooltip, _aiSummarySkeleton, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const STREAMED_TEXT_SPEED = 15;\n  class AiSummaryModal extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"messageBus\", [_service.service]))();\n    #messageBus = (() => (dt7948.i(this, \"messageBus\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"site\", [_service.service]))();\n    #site = (() => (dt7948.i(this, \"site\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"text\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #text = (() => (dt7948.i(this, \"text\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"summarizedOn\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #summarizedOn = (() => (dt7948.i(this, \"summarizedOn\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"summarizedBy\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #summarizedBy = (() => (dt7948.i(this, \"summarizedBy\"), void 0))();\n    static #_9 = (() => dt7948.g(this.prototype, \"newPostsSinceSummary\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #newPostsSinceSummary = (() => (dt7948.i(this, \"newPostsSinceSummary\"), void 0))();\n    static #_10 = (() => dt7948.g(this.prototype, \"outdated\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #outdated = (() => (dt7948.i(this, \"outdated\"), void 0))();\n    static #_11 = (() => dt7948.g(this.prototype, \"canRegenerate\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #canRegenerate = (() => (dt7948.i(this, \"canRegenerate\"), void 0))();\n    static #_12 = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_13 = (() => dt7948.g(this.prototype, \"isStreaming\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isStreaming = (() => (dt7948.i(this, \"isStreaming\"), void 0))();\n    static #_14 = (() => dt7948.g(this.prototype, \"streamedText\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #streamedText = (() => (dt7948.i(this, \"streamedText\"), void 0))();\n    static #_15 = (() => dt7948.g(this.prototype, \"currentIndex\", [_tracking.tracked], function () {\n      return 0;\n    }))();\n    #currentIndex = (() => (dt7948.i(this, \"currentIndex\"), void 0))();\n    typingTimer = null;\n    streamedTextLength = 0;\n    get outdatedSummaryWarningText() {\n      let outdatedText = (0, _discourseI18n.i18n)(\"summary.outdated\");\n      if (!this.topRepliesSummaryEnabled && this.newPostsSinceSummary > 0) {\n        outdatedText += \" \";\n        outdatedText += (0, _discourseI18n.i18n)(\"summary.outdated_posts\", {\n          count: this.newPostsSinceSummary\n        });\n      }\n      return outdatedText;\n    }\n    resetSummary() {\n      this.streamedText = \"\";\n      this.currentIndex = 0;\n      this.text = \"\";\n      this.summarizedOn = null;\n      this.summarizedBy = null;\n      this.newPostsSinceSummary = null;\n      this.outdated = false;\n      this.canRegenerate = false;\n      this.loading = false;\n      this._channel = null;\n    }\n    get topRepliesSummaryEnabled() {\n      return this.args.model.postStream.summary;\n    }\n    get topicId() {\n      return this.args.model.topic.id;\n    }\n    get baseSummarizationURL() {\n      return `/discourse-ai/summarization/t/${this.topicId}`;\n    }\n    subscribe() {\n      const channel = `/discourse-ai/summaries/topic/${this.args.model.topic.id}`;\n      this._channel = channel;\n      this.messageBus.subscribe(channel, this._updateSummary);\n    }\n    static #_16 = (() => dt7948.n(this.prototype, \"subscribe\", [_decorators.bind]))();\n    unsubscribe() {\n      this.messageBus.unsubscribe(\"/discourse-ai/summaries/topic/*\", this._updateSummary);\n      this.resetSummary();\n    }\n    static #_17 = (() => dt7948.n(this.prototype, \"unsubscribe\", [_decorators.bind]))();\n    generateSummary() {\n      let fetchURL = this.baseSummarizationURL;\n      if (this.currentUser) {\n        fetchURL += `?stream=true`;\n      }\n      return this._requestSummary(fetchURL);\n    }\n    static #_18 = (() => dt7948.n(this.prototype, \"generateSummary\", [_object.action]))();\n    regenerateSummary() {\n      let fetchURL = this.baseSummarizationURL;\n      if (this.currentUser) {\n        fetchURL += `?stream=true`;\n        if (this.canRegenerate) {\n          fetchURL += \"&skip_age_check=true\";\n        }\n      }\n      // ensure summary is reset before requesting a new one:\n      this.resetSummary();\n      return this._requestSummary(fetchURL);\n    }\n    static #_19 = (() => dt7948.n(this.prototype, \"regenerateSummary\", [_object.action]))();\n    _requestSummary(url) {\n      if (this.loading || this.text && !this.canRegenerate) {\n        return;\n      }\n      this.loading = true;\n      this.summarizedOn = null;\n      return (0, _ajax.ajax)(url).then(data => {\n        if (data?.ai_topic_summary?.summarized_text) {\n          data.done = true;\n          this._updateSummary(data);\n        }\n      });\n    }\n    static #_20 = (() => dt7948.n(this.prototype, \"_requestSummary\", [_object.action]))();\n    typeCharacter() {\n      if (this.streamedTextLength < this.text.length) {\n        this.streamedText += this.text.charAt(this.streamedTextLength);\n        this.streamedTextLength++;\n        this.typingTimer = (0, _runloop.later)(this, this.typeCharacter, STREAMED_TEXT_SPEED);\n      } else {\n        this.typingTimer = null;\n      }\n    }\n    onTextUpdate() {\n      // Reset only if there’s a new summary to process\n      if (this.typingTimer) {\n        (0, _runloop.cancel)(this.typingTimer);\n      }\n      this.typeCharacter();\n    }\n    async _updateSummary(update) {\n      const topicSummary = {\n        done: update.done,\n        raw: update.ai_topic_summary?.summarized_text,\n        ...update.ai_topic_summary\n      };\n      const newText = topicSummary.raw || \"\";\n      this.loading = false;\n      if (update.done) {\n        this.text = newText;\n        this.streamedText = newText;\n        this.displayedTextLength = newText.length;\n        this.isStreaming = false;\n        this.summarizedOn = (0, _formatter.shortDateNoYear)(moment(topicSummary.updated_at, \"YYYY-MM-DD HH:mm:ss Z\"));\n        this.summarizedBy = topicSummary.algorithm;\n        this.newPostsSinceSummary = topicSummary.new_posts_since_summary;\n        this.outdated = topicSummary.outdated;\n        this.canRegenerate = topicSummary.outdated && topicSummary.can_regenerate;\n        // Clear pending animations\n        if (this.typingTimer) {\n          (0, _runloop.cancel)(this.typingTimer);\n          this.typingTimer = null;\n        }\n      } else if (newText.length > this.text.length) {\n        this.text = newText;\n        this.isStreaming = true;\n        this.onTextUpdate();\n      }\n    }\n    static #_21 = (() => dt7948.n(this.prototype, \"_updateSummary\", [_decorators.bind]))();\n    onRegisterApi(api) {\n      this.dMenu = api;\n    }\n    static #_22 = (() => dt7948.n(this.prototype, \"onRegisterApi\", [_object.action]))();\n    handleClose() {\n      this.modal.triggerElement = null; // prevent refocus of trigger, which changes scroll position\n      this.args.closeModal();\n    }\n    static #_23 = (() => dt7948.n(this.prototype, \"handleClose\", [_object.action]))();\n    static #_24 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DModal\n          @title={{i18n \"discourse_ai.summarization.topic.title\"}}\n          @closeModal={{this.handleClose}}\n          @bodyClass=\"ai-summary-modal__body\"\n          class=\"ai-summary-modal\"\n          {{didInsert this.subscribe @model.topic.id}}\n          {{didUpdate this.subscribe @model.topic.id}}\n          {{willDestroy this.unsubscribe}}\n          @hideFooter={{not this.summarizedOn}}\n        >\n          <:body>\n            {{htmlClass \"scrollable-modal\"}}\n            <div class=\"ai-summary-container\" {{didInsert this.generateSummary}}>\n              <article\n                class={{concatClass\n                  \"ai-summary-box\"\n                  \"streamable-content\"\n                  (if this.isStreaming \"streaming\")\n                }}\n              >\n                {{#if this.loading}}\n                  <AiSummarySkeleton />\n                {{else}}\n                  <div class=\"generated-summary cooked\">\n                    <CookText @rawText={{this.streamedText}} />\n                  </div>\n                {{/if}}\n              </article>\n            </div>\n          </:body>\n          <:footer>\n            <p class=\"summarized-on\">\n              {{i18n \"summary.summarized_on\" date=this.summarizedOn}}\n              <DTooltip @placements={{array \"top-end\"}}>\n                <:trigger>\n                  {{dIcon \"circle-info\"}}\n                </:trigger>\n                <:content>\n                  {{i18n \"summary.model_used\" model=this.summarizedBy}}\n                </:content>\n              </DTooltip>\n            </p>\n            {{#if this.outdated}}\n              <p class=\"summary-outdated\">{{this.outdatedSummaryWarningText}}</p>\n            {{/if}}\n            {{#if this.canRegenerate}}\n              <DButton\n                @label=\"summary.buttons.regenerate\"\n                @title=\"summary.buttons.regenerate\"\n                @action={{this.regenerateSummary}}\n                @icon=\"arrows-rotate\"\n              />\n            {{/if}}\n          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"FY6znZCF\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"ai-summary-modal\\\"],[4,[32,3],[[30,0,[\\\"subscribe\\\"]],[30,1,[\\\"topic\\\",\\\"id\\\"]]],null],[4,[32,4],[[30,0,[\\\"subscribe\\\"]],[30,1,[\\\"topic\\\",\\\"id\\\"]]],null],[4,[32,5],[[30,0,[\\\"unsubscribe\\\"]]],null]],[[\\\"@title\\\",\\\"@closeModal\\\",\\\"@bodyClass\\\",\\\"@hideFooter\\\"],[[28,[32,1],[\\\"discourse_ai.summarization.topic.title\\\"],null],[30,0,[\\\"handleClose\\\"]],\\\"ai-summary-modal__body\\\",[28,[32,2],[[30,0,[\\\"summarizedOn\\\"]]],null]]],[[\\\"body\\\",\\\"footer\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[32,6],[\\\"scrollable-modal\\\"],null]],[1,\\\"\\\\n        \\\"],[11,0],[24,0,\\\"ai-summary-container\\\"],[4,[32,3],[[30,0,[\\\"generateSummary\\\"]]],null],[12],[1,\\\"\\\\n          \\\"],[10,\\\"article\\\"],[15,0,[28,[32,7],[\\\"ai-summary-box\\\",\\\"streamable-content\\\",[52,[30,0,[\\\"isStreaming\\\"]],\\\"streaming\\\"]],null]],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loading\\\"]],[[[1,\\\"              \\\"],[8,[32,8],null,null,null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"generated-summary cooked\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[32,9],null,[[\\\"@rawText\\\"],[[30,0,[\\\"streamedText\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[10,2],[14,0,\\\"summarized-on\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[28,[32,1],[\\\"summary.summarized_on\\\"],[[\\\"date\\\"],[[30,0,[\\\"summarizedOn\\\"]]]]]],[1,\\\"\\\\n          \\\"],[8,[32,10],null,[[\\\"@placements\\\"],[[28,[32,11],[\\\"top-end\\\"],null]]],[[\\\"trigger\\\",\\\"content\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[28,[32,12],[\\\"circle-info\\\"],null]],[1,\\\"\\\\n            \\\"]],[]],[[[1,\\\"\\\\n              \\\"],[1,[28,[32,1],[\\\"summary.model_used\\\"],[[\\\"model\\\"],[[30,0,[\\\"summarizedBy\\\"]]]]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"outdated\\\"]],[[[1,\\\"          \\\"],[10,2],[14,0,\\\"summary-outdated\\\"],[12],[1,[30,0,[\\\"outdatedSummaryWarningText\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"canRegenerate\\\"]],[[[1,\\\"          \\\"],[8,[32,13],null,[[\\\"@label\\\",\\\"@title\\\",\\\"@action\\\",\\\"@icon\\\"],[\\\"summary.buttons.regenerate\\\",\\\"summary.buttons.regenerate\\\",[30,0,[\\\"regenerateSummary\\\"]],\\\"arrows-rotate\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@model\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/ai-summary-modal.js\",\n      \"scope\": () => [_dModal.default, _discourseI18n.i18n, _truthHelpers.not, _didInsert.default, _didUpdate.default, _willDestroy.default, _htmlClass.default, _concatClass.default, _aiSummarySkeleton.default, _cookText.default, _dTooltip.default, _helper.array, _dIcon.default, _dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiSummaryModal;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/ai-tool-test-modal\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"discourse/components/d-button\", \"discourse/components/d-modal\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/lib/utilities\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _modifier, _object, _dButton, _dModal, _ajax, _ajaxError, _discourseI18n, _utilities, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiToolTestModal extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"testResult\", [_tracking.tracked]))();\n    #testResult = (() => (dt7948.i(this, \"testResult\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"isLoading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isLoading = (() => (dt7948.i(this, \"isLoading\"), void 0))();\n    parameterValues = {};\n    updateParameter(name, event) {\n      this.parameterValues[name] = event.target.value;\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"updateParameter\", [_object.action]))();\n    async runTest() {\n      this.isLoading = true;\n      try {\n        const response = await (0, _ajax.ajax)(`/admin/plugins/discourse-ai/ai-tools/${this.args.model.tool.id}/test.json`, {\n          type: \"POST\",\n          data: JSON.stringify({\n            ai_tool: this.args.model.tool,\n            parameters: this.parameterValues\n          }),\n          contentType: \"application/json\"\n        });\n        this.testResult = (0, _utilities.jsonToHtml)(response.output);\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      } finally {\n        this.isLoading = false;\n      }\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"runTest\", [_object.action]))();\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DModal\n          @title={{i18n \"discourse_ai.tools.test_modal.title\"}}\n          @closeModal={{@closeModal}}\n          @bodyClass=\"ai-tool-test-modal__body\"\n          class=\"ai-tool-test-modal\"\n        >\n          <:body>\n            {{#each @model.tool.parameters as |param|}}\n              <div class=\"control-group\">\n                <label>{{param.name}}</label>\n                <input\n                  {{on \"input\" (fn this.updateParameter param.name)}}\n                  name={{param.name}}\n                  type=\"text\"\n                />\n              </div>\n            {{/each}}\n    \n            {{#if this.testResult}}\n              <div class=\"ai-tool-test-modal__test-result\">\n                <h3>{{i18n \"discourse_ai.tools.test_modal.result\"}}</h3>\n                <div>{{this.testResult}}</div>\n              </div>\n            {{/if}}\n          </:body>\n    \n          <:footer>\n            <DButton\n              @action={{this.runTest}}\n              @label=\"discourse_ai.tools.test_modal.run\"\n              @disabled={{this.isLoading}}\n              class=\"btn-primary ai-tool-test-modal__run-button\"\n            />\n          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"LJMGtGI7\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"ai-tool-test-modal\\\"]],[[\\\"@title\\\",\\\"@closeModal\\\",\\\"@bodyClass\\\"],[[28,[32,1],[\\\"discourse_ai.tools.test_modal.title\\\"],null],[30,1],\\\"ai-tool-test-modal__body\\\"]],[[\\\"body\\\",\\\"footer\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,2,[\\\"tool\\\",\\\"parameters\\\"]]],null]],null],null,[[[1,\\\"          \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"label\\\"],[12],[1,[30,3,[\\\"name\\\"]]],[13],[1,\\\"\\\\n            \\\"],[11,\\\"input\\\"],[16,3,[30,3,[\\\"name\\\"]]],[24,4,\\\"text\\\"],[4,[32,2],[\\\"input\\\",[28,[32,3],[[30,0,[\\\"updateParameter\\\"]],[30,3,[\\\"name\\\"]]],null]],null],[12],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"testResult\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"ai-tool-test-modal__test-result\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"h3\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.tools.test_modal.result\\\"],null]],[13],[1,\\\"\\\\n            \\\"],[10,0],[12],[1,[30,0,[\\\"testResult\\\"]]],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[8,[32,4],[[24,0,\\\"btn-primary ai-tool-test-modal__run-button\\\"]],[[\\\"@action\\\",\\\"@label\\\",\\\"@disabled\\\"],[[30,0,[\\\"runTest\\\"]],\\\"discourse_ai.tools.test_modal.run\\\",[30,0,[\\\"isLoading\\\"]]]],null],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@closeModal\\\",\\\"@model\\\",\\\"param\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/ai-tool-test-modal.js\",\n      \"scope\": () => [_dModal.default, _discourseI18n.i18n, _modifier.on, _helper.fn, _dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiToolTestModal;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/chat-modal-channel-summary\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"discourse/components/conditional-loading-section\", \"discourse/components/d-modal\", \"discourse/components/d-modal-cancel\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse-i18n\", \"select-kit/components/combo-box\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _service, _conditionalLoadingSection, _dModal, _dModalCancel, _ajax, _ajaxError, _discourseI18n, _comboBox, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class ChatModalChannelSummary extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"chatApi\", [_service.service]))();\n    #chatApi = (() => (dt7948.i(this, \"chatApi\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"sinceHours\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #sinceHours = (() => (dt7948.i(this, \"sinceHours\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"summary\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #summary = (() => (dt7948.i(this, \"summary\"), void 0))();\n    availableSummaries = {};\n    sinceOptions = [1, 3, 6, 12, 24, 72, 168].map(hours => {\n      return {\n        name: (0, _discourseI18n.i18n)(\"discourse_ai.summarization.chat.since\", {\n          count: hours\n        }),\n        value: hours\n      };\n    });\n    get channelId() {\n      return this.args.model.channelId;\n    }\n    summarize(since) {\n      this.sinceHours = since;\n      this.loading = true;\n      if (this.availableSummaries[since]) {\n        this.summary = this.availableSummaries[since];\n        this.loading = false;\n        return;\n      }\n      return (0, _ajax.ajax)(`/discourse-ai/summarization/channels/${this.channelId}.json`, {\n        type: \"GET\",\n        data: {\n          since\n        }\n      }).then(data => {\n        this.availableSummaries[this.sinceHours] = data.summary;\n        this.summary = this.availableSummaries[this.sinceHours];\n      }).catch(_ajaxError.popupAjaxError).finally(() => this.loading = false);\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"summarize\", [_object.action]))();\n    static #_6 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DModal\n          @closeModal={{@closeModal}}\n          class=\"chat-modal-channel-summary\"\n          @title={{i18n \"discourse_ai.summarization.chat.title\"}}\n        >\n          <:body>\n            <span>{{i18n \"discourse_ai.summarization.chat.description\"}}</span>\n            <ComboBox\n              @value={{this.sinceHours}}\n              @content={{this.sinceOptions}}\n              @onChange={{this.summarize}}\n              @valueProperty=\"value\"\n              class=\"summarization-since\"\n            />\n            <ConditionalLoadingSection @isLoading={{this.loading}}>\n              <p class=\"summary-area\">{{this.summary}}</p>\n            </ConditionalLoadingSection>\n          </:body>\n          <:footer>\n            <DModalCancel @close={{@closeModal}} />\n          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"ye9ZWC9O\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"chat-modal-channel-summary\\\"]],[[\\\"@closeModal\\\",\\\"@title\\\"],[[30,1],[28,[32,1],[\\\"discourse_ai.summarization.chat.title\\\"],null]]],[[\\\"body\\\",\\\"footer\\\"],[[[[1,\\\"\\\\n        \\\"],[10,1],[12],[1,[28,[32,1],[\\\"discourse_ai.summarization.chat.description\\\"],null]],[13],[1,\\\"\\\\n        \\\"],[8,[32,2],[[24,0,\\\"summarization-since\\\"]],[[\\\"@value\\\",\\\"@content\\\",\\\"@onChange\\\",\\\"@valueProperty\\\"],[[30,0,[\\\"sinceHours\\\"]],[30,0,[\\\"sinceOptions\\\"]],[30,0,[\\\"summarize\\\"]],\\\"value\\\"]],null],[1,\\\"\\\\n        \\\"],[8,[32,3],null,[[\\\"@isLoading\\\"],[[30,0,[\\\"loading\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[10,2],[14,0,\\\"summary-area\\\"],[12],[1,[30,0,[\\\"summary\\\"]]],[13],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[8,[32,4],null,[[\\\"@close\\\"],[[30,1]]],null],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@closeModal\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/chat-modal-channel-summary.js\",\n      \"scope\": () => [_dModal.default, _discourseI18n.i18n, _comboBox.default, _conditionalLoadingSection.default, _dModalCancel.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = ChatModalChannelSummary;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/debug-ai-modal\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/modifier\", \"@ember/object\", \"@ember/runloop\", \"@ember/template\", \"discourse/components/d-button\", \"discourse/components/d-modal\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/utilities\", \"discourse-common/lib/later\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/lib/utilities\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _modifier, _object, _runloop, _template, _dButton, _dModal, _ajax, _ajaxError, _utilities, _later, _discourseI18n, _utilities2, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class DebugAiModal extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"info\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #info = (() => (dt7948.i(this, \"info\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"justCopiedText\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #justCopiedText = (() => (dt7948.i(this, \"justCopiedText\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"activeTab\", [_tracking.tracked], function () {\n      return \"request\";\n    }))();\n    #activeTab = (() => (dt7948.i(this, \"activeTab\"), void 0))();\n    constructor() {\n      super(...arguments);\n      (0, _runloop.next)(() => {\n        this.loadApiRequestInfo();\n      });\n    }\n    get htmlContext() {\n      if (!this.info) {\n        return \"\";\n      }\n      let parsed;\n      try {\n        if (this.activeTab === \"request\") {\n          parsed = JSON.parse(this.info.raw_request_payload);\n        } else {\n          return this.formattedResponse(this.info.raw_response_payload);\n        }\n      } catch {\n        return this.info.raw_request_payload;\n      }\n      return (0, _utilities2.jsonToHtml)(parsed);\n    }\n    formattedResponse(response) {\n      // we need to replace the new lines with <br> to make it look good\n      const split = response.split(\"\\n\");\n      const safe = split.map(line => (0, _utilities.escapeExpression)(line)).join(\"<br>\");\n      return (0, _template.htmlSafe)(safe);\n    }\n    copyRequest() {\n      this.copy(this.info.raw_request_payload);\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"copyRequest\", [_object.action]))();\n    copyResponse() {\n      this.copy(this.info.raw_response_payload);\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"copyResponse\", [_object.action]))();\n    async loadLog(logId) {\n      try {\n        await (0, _ajax.ajax)(`/discourse-ai/ai-bot/show-debug-info/${logId}.json`).then(result => {\n          this.info = result;\n        });\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      }\n    }\n    prevLog() {\n      this.loadLog(this.info.prev_log_id);\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"prevLog\", [_object.action]))();\n    nextLog() {\n      this.loadLog(this.info.next_log_id);\n    }\n    static #_7 = (() => dt7948.n(this.prototype, \"nextLog\", [_object.action]))();\n    copy(text) {\n      (0, _utilities.clipboardCopy)(text);\n      this.justCopiedText = (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.conversation_shared\");\n      (0, _later.default)(() => {\n        this.justCopiedText = \"\";\n      }, 2000);\n    }\n    loadApiRequestInfo() {\n      (0, _ajax.ajax)(`/discourse-ai/ai-bot/post/${this.args.model.id}/show-debug-info.json`).then(result => {\n        this.info = result;\n      }).catch(e => {\n        (0, _ajaxError.popupAjaxError)(e);\n      });\n    }\n    get requestActive() {\n      return this.activeTab === \"request\" ? \"active\" : \"\";\n    }\n    get responseActive() {\n      return this.activeTab === \"response\" ? \"active\" : \"\";\n    }\n    requestClicked(e) {\n      this.activeTab = \"request\";\n      e.preventDefault();\n    }\n    static #_8 = (() => dt7948.n(this.prototype, \"requestClicked\", [_object.action]))();\n    responseClicked(e) {\n      this.activeTab = \"response\";\n      e.preventDefault();\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"responseClicked\", [_object.action]))();\n    static #_10 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DModal\n          class=\"ai-debug-modal\"\n          @title={{i18n \"discourse_ai.ai_bot.debug_ai_modal.title\"}}\n          @closeModal={{@closeModal}}\n        >\n          <:body>\n            <ul class=\"nav nav-pills ai-debug-modal__nav\">\n              <li><a\n                  href=\"\"\n                  class={{this.requestActive}}\n                  {{on \"click\" this.requestClicked}}\n                >{{i18n \"discourse_ai.ai_bot.debug_ai_modal.request\"}}</a></li>\n              <li><a\n                  href=\"\"\n                  class={{this.responseActive}}\n                  {{on \"click\" this.responseClicked}}\n                >{{i18n \"discourse_ai.ai_bot.debug_ai_modal.response\"}}</a></li>\n            </ul>\n            <div class=\"ai-debug-modal__tokens\">\n              <span>\n                {{i18n \"discourse_ai.ai_bot.debug_ai_modal.request_tokens\"}}\n                {{this.info.request_tokens}}\n              </span>\n              <span>\n                {{i18n \"discourse_ai.ai_bot.debug_ai_modal.response_tokens\"}}\n                {{this.info.response_tokens}}\n              </span>\n            </div>\n            <div class=\"debug-ai-modal__preview\">\n              {{this.htmlContext}}\n            </div>\n          </:body>\n    \n          <:footer>\n            <DButton\n              class=\"btn confirm\"\n              @icon=\"copy\"\n              @action={{this.copyRequest}}\n              @label=\"discourse_ai.ai_bot.debug_ai_modal.copy_request\"\n            />\n            <DButton\n              class=\"btn confirm\"\n              @icon=\"copy\"\n              @action={{this.copyResponse}}\n              @label=\"discourse_ai.ai_bot.debug_ai_modal.copy_response\"\n            />\n            {{#if this.info.prev_log_id}}\n              <DButton\n                class=\"btn\"\n                @icon=\"angles-left\"\n                @action={{this.prevLog}}\n                @label=\"discourse_ai.ai_bot.debug_ai_modal.previous_log\"\n              />\n            {{/if}}\n            {{#if this.info.next_log_id}}\n              <DButton\n                class=\"btn\"\n                @icon=\"angles-right\"\n                @action={{this.nextLog}}\n                @label=\"discourse_ai.ai_bot.debug_ai_modal.next_log\"\n              />\n            {{/if}}\n            <span class=\"ai-debut-modal__just-copied\">{{this.justCopiedText}}</span>\n          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"xMX9mYY4\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"ai-debug-modal\\\"]],[[\\\"@title\\\",\\\"@closeModal\\\"],[[28,[32,1],[\\\"discourse_ai.ai_bot.debug_ai_modal.title\\\"],null],[30,1]]],[[\\\"body\\\",\\\"footer\\\"],[[[[1,\\\"\\\\n        \\\"],[10,\\\"ul\\\"],[14,0,\\\"nav nav-pills ai-debug-modal__nav\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[11,3],[24,6,\\\"\\\"],[16,0,[30,0,[\\\"requestActive\\\"]]],[4,[32,2],[\\\"click\\\",[30,0,[\\\"requestClicked\\\"]]],null],[12],[1,[28,[32,1],[\\\"discourse_ai.ai_bot.debug_ai_modal.request\\\"],null]],[13],[13],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[11,3],[24,6,\\\"\\\"],[16,0,[30,0,[\\\"responseActive\\\"]]],[4,[32,2],[\\\"click\\\",[30,0,[\\\"responseClicked\\\"]]],null],[12],[1,[28,[32,1],[\\\"discourse_ai.ai_bot.debug_ai_modal.response\\\"],null]],[13],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-debug-modal__tokens\\\"],[12],[1,\\\"\\\\n          \\\"],[10,1],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,1],[\\\"discourse_ai.ai_bot.debug_ai_modal.request_tokens\\\"],null]],[1,\\\"\\\\n            \\\"],[1,[30,0,[\\\"info\\\",\\\"request_tokens\\\"]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,1],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,1],[\\\"discourse_ai.ai_bot.debug_ai_modal.response_tokens\\\"],null]],[1,\\\"\\\\n            \\\"],[1,[30,0,[\\\"info\\\",\\\"response_tokens\\\"]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"debug-ai-modal__preview\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[30,0,[\\\"htmlContext\\\"]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[8,[32,3],[[24,0,\\\"btn confirm\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@label\\\"],[\\\"copy\\\",[30,0,[\\\"copyRequest\\\"]],\\\"discourse_ai.ai_bot.debug_ai_modal.copy_request\\\"]],null],[1,\\\"\\\\n        \\\"],[8,[32,3],[[24,0,\\\"btn confirm\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@label\\\"],[\\\"copy\\\",[30,0,[\\\"copyResponse\\\"]],\\\"discourse_ai.ai_bot.debug_ai_modal.copy_response\\\"]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"info\\\",\\\"prev_log_id\\\"]],[[[1,\\\"          \\\"],[8,[32,3],[[24,0,\\\"btn\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@label\\\"],[\\\"angles-left\\\",[30,0,[\\\"prevLog\\\"]],\\\"discourse_ai.ai_bot.debug_ai_modal.previous_log\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"info\\\",\\\"next_log_id\\\"]],[[[1,\\\"          \\\"],[8,[32,3],[[24,0,\\\"btn\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@label\\\"],[\\\"angles-right\\\",[30,0,[\\\"nextLog\\\"]],\\\"discourse_ai.ai_bot.debug_ai_modal.next_log\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[10,1],[14,0,\\\"ai-debut-modal__just-copied\\\"],[12],[1,[30,0,[\\\"justCopiedText\\\"]]],[13],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@closeModal\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/debug-ai-modal.js\",\n      \"scope\": () => [_dModal.default, _discourseI18n.i18n, _modifier.on, _dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = DebugAiModal;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/diff-modal\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@ember/template\", \"discourse/components/cook-text\", \"discourse/components/d-button\", \"discourse/components/d-modal\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse-common/helpers/i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-indicator-wave\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _service, _template, _cookText, _dButton, _dModal, _ajax, _ajaxError, _i18n, _aiIndicatorWave, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class ModalDiffModal extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"diff\", [_tracking.tracked]))();\n    #diff = (() => (dt7948.i(this, \"diff\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"suggestion\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #suggestion = (() => (dt7948.i(this, \"suggestion\"), void 0))();\n    constructor() {\n      super(...arguments);\n      this.suggestChanges();\n    }\n    async suggestChanges() {\n      this.loading = true;\n      try {\n        const suggestion = await (0, _ajax.ajax)(\"/discourse-ai/ai-helper/suggest\", {\n          method: \"POST\",\n          data: {\n            mode: this.args.model.mode,\n            text: this.args.model.selectedText,\n            custom_prompt: this.args.model.customPromptValue,\n            force_default_locale: true\n          }\n        });\n        this.diff = suggestion.diff;\n        this.suggestion = suggestion.suggestions[0];\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      } finally {\n        this.loading = false;\n      }\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"suggestChanges\", [_object.action]))();\n    triggerConfirmChanges() {\n      this.args.closeModal();\n      if (this.suggestion) {\n        this.args.model.toolbarEvent.replaceText(this.args.model.selectedText, this.suggestion);\n      }\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"triggerConfirmChanges\", [_object.action]))();\n    static #_7 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DModal\n          class=\"composer-ai-helper-modal\"\n          @title={{i18n \"discourse_ai.ai_helper.context_menu.changes\"}}\n          @closeModal={{@closeModal}}\n        >\n          <:body>\n            {{#if this.loading}}\n              <div class=\"composer-ai-helper-modal__loading\">\n                <CookText @rawText={{@model.selectedText}} />\n              </div>\n            {{else}}\n              {{#if this.diff}}\n                {{htmlSafe this.diff}}\n              {{else}}\n                <div class=\"composer-ai-helper-modal__old-value\">\n                  {{@model.selectedText}}\n                </div>\n    \n                <div class=\"composer-ai-helper-modal__new-value\">\n                  {{this.suggestion}}\n                </div>\n              {{/if}}\n            {{/if}}\n    \n          </:body>\n    \n          <:footer>\n            {{#if this.loading}}\n              <DButton\n                class=\"btn-primary\"\n                @label=\"discourse_ai.ai_helper.context_menu.loading\"\n                @disabled={{true}}\n              >\n                <AiIndicatorWave @loading={{this.loading}} />\n              </DButton>\n            {{else}}\n              <DButton\n                class=\"btn-primary confirm\"\n                @action={{this.triggerConfirmChanges}}\n                @label=\"discourse_ai.ai_helper.context_menu.confirm\"\n              />\n              <DButton\n                class=\"btn-flat discard\"\n                @action={{@closeModal}}\n                @label=\"discourse_ai.ai_helper.context_menu.discard\"\n              />\n              <DButton\n                class=\"regenerate\"\n                @icon=\"arrows-rotate\"\n                @action={{this.suggestChanges}}\n                @label=\"discourse_ai.ai_helper.context_menu.regen\"\n              />\n            {{/if}}\n          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"1RHJPtPu\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"composer-ai-helper-modal\\\"]],[[\\\"@title\\\",\\\"@closeModal\\\"],[[28,[32,1],[\\\"discourse_ai.ai_helper.context_menu.changes\\\"],null],[30,1]]],[[\\\"body\\\",\\\"footer\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loading\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"composer-ai-helper-modal__loading\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[32,2],null,[[\\\"@rawText\\\"],[[30,2,[\\\"selectedText\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"diff\\\"]],[[[1,\\\"            \\\"],[1,[28,[32,3],[[30,0,[\\\"diff\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"composer-ai-helper-modal__old-value\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[30,2,[\\\"selectedText\\\"]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[10,0],[14,0,\\\"composer-ai-helper-modal__new-value\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[30,0,[\\\"suggestion\\\"]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loading\\\"]],[[[1,\\\"          \\\"],[8,[32,4],[[24,0,\\\"btn-primary\\\"]],[[\\\"@label\\\",\\\"@disabled\\\"],[\\\"discourse_ai.ai_helper.context_menu.loading\\\",true]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[32,5],null,[[\\\"@loading\\\"],[[30,0,[\\\"loading\\\"]]]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[8,[32,4],[[24,0,\\\"btn-primary confirm\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"triggerConfirmChanges\\\"]],\\\"discourse_ai.ai_helper.context_menu.confirm\\\"]],null],[1,\\\"\\\\n          \\\"],[8,[32,4],[[24,0,\\\"btn-flat discard\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,1],\\\"discourse_ai.ai_helper.context_menu.discard\\\"]],null],[1,\\\"\\\\n          \\\"],[8,[32,4],[[24,0,\\\"regenerate\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@label\\\"],[\\\"arrows-rotate\\\",[30,0,[\\\"suggestChanges\\\"]],\\\"discourse_ai.ai_helper.context_menu.regen\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@closeModal\\\",\\\"@model\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/diff-modal.js\",\n      \"scope\": () => [_dModal.default, _i18n.default, _cookText.default, _template.htmlSafe, _dButton.default, _aiIndicatorWave.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = ModalDiffModal;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/share-full-topic-modal\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@ember/template\", \"discourse/components/d-button\", \"discourse/components/d-modal\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/utilities\", \"discourse-common/lib/get-url\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _service, _template, _dButton, _dModal, _ajax, _ajaxError, _utilities, _getUrl, _discourseI18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class ShareModal extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"toasts\", [_service.service]))();\n    #toasts = (() => (dt7948.i(this, \"toasts\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"shareKey\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #shareKey = (() => (dt7948.i(this, \"shareKey\"), void 0))();\n    constructor() {\n      super(...arguments);\n      this.shareKey = this.args.model.share_key;\n    }\n    get htmlContext() {\n      let context = [];\n      this.args.model.context.forEach(post => {\n        context.push(`<p><b>${post.username}:</b></p>`);\n        context.push(post.cooked);\n      });\n      return (0, _template.htmlSafe)(context.join(\"\\n\"));\n    }\n    async generateShareURL() {\n      try {\n        const response = await (0, _ajax.ajax)(\"/discourse-ai/ai-bot/shared-ai-conversations\", {\n          type: \"POST\",\n          data: {\n            topic_id: this.args.model.topic_id\n          }\n        });\n        const url = (0, _getUrl.getAbsoluteURL)(`/discourse-ai/ai-bot/shared-ai-conversations/${response.share_key}`);\n        this.shareKey = response.share_key;\n        return new Blob([url], {\n          type: \"text/plain\"\n        });\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n        return;\n      }\n    }\n    get primaryLabel() {\n      return this.shareKey ? \"discourse_ai.ai_bot.share_full_topic_modal.update\" : \"discourse_ai.ai_bot.share_full_topic_modal.share\";\n    }\n    async deleteLink() {\n      try {\n        await (0, _ajax.ajax)(`/discourse-ai/ai-bot/shared-ai-conversations/${this.shareKey}.json`, {\n          type: \"DELETE\"\n        });\n        this.shareKey = null;\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      }\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"deleteLink\", [_object.action]))();\n    async share() {\n      await (0, _utilities.clipboardCopyAsync)(this.generateShareURL.bind(this));\n      this.toasts.success({\n        duration: 3000,\n        data: {\n          message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.conversation_shared\")\n        }\n      });\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"share\", [_object.action]))();\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DModal\n          class=\"ai-share-full-topic-modal\"\n          @title={{i18n \"discourse_ai.ai_bot.share_full_topic_modal.title\"}}\n          @closeModal={{@closeModal}}\n        >\n          <:body>\n            <div class=\"ai-share-full-topic-modal__body\">\n              {{this.htmlContext}}\n            </div>\n          </:body>\n    \n          <:footer>\n            <DButton\n              class=\"btn-primary confirm\"\n              @icon=\"copy\"\n              @action={{this.share}}\n              @label={{this.primaryLabel}}\n            />\n            {{#if this.shareKey}}\n              <DButton\n                class=\"btn-danger\"\n                @icon=\"far-trash-can\"\n                @action={{this.deleteLink}}\n                @label=\"discourse_ai.ai_bot.share_full_topic_modal.delete\"\n              />\n            {{/if}}\n          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"A5MyH/Ft\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"ai-share-full-topic-modal\\\"]],[[\\\"@title\\\",\\\"@closeModal\\\"],[[28,[32,1],[\\\"discourse_ai.ai_bot.share_full_topic_modal.title\\\"],null],[30,1]]],[[\\\"body\\\",\\\"footer\\\"],[[[[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-share-full-topic-modal__body\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[30,0,[\\\"htmlContext\\\"]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[8,[32,2],[[24,0,\\\"btn-primary confirm\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@label\\\"],[\\\"copy\\\",[30,0,[\\\"share\\\"]],[30,0,[\\\"primaryLabel\\\"]]]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"shareKey\\\"]],[[[1,\\\"          \\\"],[8,[32,2],[[24,0,\\\"btn-danger\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@label\\\"],[\\\"far-trash-can\\\",[30,0,[\\\"deleteLink\\\"]],\\\"discourse_ai.ai_bot.share_full_topic_modal.delete\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@closeModal\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/share-full-topic-modal.js\",\n      \"scope\": () => [_dModal.default, _discourseI18n.i18n, _dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = ShareModal;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/share-modal\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/component\", \"@ember/modifier\", \"@ember/object\", \"@ember/service\", \"@ember/template\", \"discourse/components/d-button\", \"discourse/components/d-modal\", \"discourse-common/lib/later\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/lib/ai-bot-helper\", \"discourse/plugins/discourse-ai/discourse/lib/copy-conversation\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _component2, _modifier, _object, _service, _template, _dButton, _dModal, _later, _discourseI18n, _aiBotHelper, _copyConversation, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class ShareModal extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"contextValue\", [_tracking.tracked], function () {\n      return 1;\n    }))();\n    #contextValue = (() => (dt7948.i(this, \"contextValue\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"htmlContext\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #htmlContext = (() => (dt7948.i(this, \"htmlContext\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"maxContext\", [_tracking.tracked], function () {\n      return 0;\n    }))();\n    #maxContext = (() => (dt7948.i(this, \"maxContext\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"allPosts\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #allPosts = (() => (dt7948.i(this, \"allPosts\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"justCopiedText\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #justCopiedText = (() => (dt7948.i(this, \"justCopiedText\"), void 0))();\n    constructor() {\n      super(...arguments);\n      const postStream = this.args.model.topic.get(\"postStream\");\n      let postNumbers = [];\n      // simpler to understand than Array.from\n      for (let i = 1; i <= this.args.model.post_number; i++) {\n        postNumbers.push(i);\n      }\n      this.allPosts = postNumbers.map(postNumber => {\n        let postId = postStream.findPostIdForPostNumber(postNumber);\n        if (postId) {\n          return postStream.findLoadedPost(postId);\n        }\n      }).filter(post => post);\n      this.maxContext = this.allPosts.length / 2;\n      this.contextValue = 1;\n      this.updateHtmlContext();\n    }\n    updateHtmlContext() {\n      let context = [];\n      const start = this.allPosts.length - this.contextValue * 2;\n      for (let i = start; i < this.allPosts.length; i++) {\n        const post = this.allPosts[i];\n        context.push(`<p><b>${post.username}:</b></p>`);\n        context.push(post.cooked);\n      }\n      this.htmlContext = (0, _template.htmlSafe)(context.join(\"\\n\"));\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"updateHtmlContext\", [_object.action]))();\n    async copyContext() {\n      const from = this.allPosts[this.allPosts.length - this.contextValue * 2].post_number;\n      const to = this.args.model.post_number;\n      await (0, _copyConversation.default)(this.args.model.topic, from, to);\n      this.justCopiedText = (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.conversation_shared\");\n      (0, _later.default)(() => {\n        this.justCopiedText = \"\";\n      }, 2000);\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"copyContext\", [_object.action]))();\n    shareConversationModal(event) {\n      event?.preventDefault();\n      this.args.closeModal();\n      (0, _aiBotHelper.showShareConversationModal)(this.modal, this.args.model.topic_id);\n      return false;\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"shareConversationModal\", [_object.action]))();\n    static #_12 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DModal\n          class=\"ai-share-modal\"\n          @title={{i18n \"discourse_ai.ai_bot.share_modal.title\"}}\n          @closeModal={{@closeModal}}\n        >\n          <:body>\n            <div class=\"ai-share-modal__preview\">\n              {{this.htmlContext}}\n            </div>\n          </:body>\n    \n          <:footer>\n            <div class=\"ai-share-modal__slider\">\n              <Input\n                @type=\"range\"\n                min=\"1\"\n                max={{this.maxContext}}\n                @value={{this.contextValue}}\n                {{on \"change\" this.updateHtmlContext}}\n              />\n              <div class=\"ai-share-modal__context\">\n                {{i18n \"discourse_ai.ai_bot.share_modal.context\"}}\n                {{this.contextValue}}\n              </div>\n            </div>\n            <DButton\n              class=\"btn-primary confirm\"\n              @icon=\"copy\"\n              @action={{this.copyContext}}\n              @label=\"discourse_ai.ai_bot.share_modal.copy\"\n            />\n            <span class=\"ai-share-modal__just-copied\">{{this.justCopiedText}}</span>\n            {{#if this.currentUser.can_share_ai_bot_conversations}}\n              <a href {{on \"click\" this.shareConversationModal}}>\n                <span class=\"ai-share-modal__share-tip\">\n                  {{i18n \"discourse_ai.ai_bot.share_modal.share_tip\"}}\n                </span>\n              </a>\n            {{/if}}\n          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"Ccsc9yzh\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"ai-share-modal\\\"]],[[\\\"@title\\\",\\\"@closeModal\\\"],[[28,[32,1],[\\\"discourse_ai.ai_bot.share_modal.title\\\"],null],[30,1]]],[[\\\"body\\\",\\\"footer\\\"],[[[[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-share-modal__preview\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[30,0,[\\\"htmlContext\\\"]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-share-modal__slider\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,2],[[24,\\\"min\\\",\\\"1\\\"],[16,\\\"max\\\",[30,0,[\\\"maxContext\\\"]]],[4,[32,3],[\\\"change\\\",[30,0,[\\\"updateHtmlContext\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"range\\\",[30,0,[\\\"contextValue\\\"]]]],null],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"ai-share-modal__context\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,1],[\\\"discourse_ai.ai_bot.share_modal.context\\\"],null]],[1,\\\"\\\\n            \\\"],[1,[30,0,[\\\"contextValue\\\"]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[8,[32,4],[[24,0,\\\"btn-primary confirm\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@label\\\"],[\\\"copy\\\",[30,0,[\\\"copyContext\\\"]],\\\"discourse_ai.ai_bot.share_modal.copy\\\"]],null],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"ai-share-modal__just-copied\\\"],[12],[1,[30,0,[\\\"justCopiedText\\\"]]],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"currentUser\\\",\\\"can_share_ai_bot_conversations\\\"]],[[[1,\\\"          \\\"],[11,3],[24,6,\\\"\\\"],[4,[32,3],[\\\"click\\\",[30,0,[\\\"shareConversationModal\\\"]]],null],[12],[1,\\\"\\\\n            \\\"],[10,1],[14,0,\\\"ai-share-modal__share-tip\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[28,[32,1],[\\\"discourse_ai.ai_bot.share_modal.share_tip\\\"],null]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@closeModal\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/share-modal.js\",\n      \"scope\": () => [_dModal.default, _discourseI18n.i18n, _component2.Input, _modifier.on, _dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = ShareModal;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/spam-test-modal\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"discourse/components/d-button\", \"discourse/components/d-modal\", \"discourse/helpers/with-event-value\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-indicator-wave\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _modifier, _object, _dButton, _dModal, _withEventValue, _ajax, _ajaxError, _discourseI18n, _aiIndicatorWave, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class SpamTestModal extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"testResult\", [_tracking.tracked]))();\n    #testResult = (() => (dt7948.i(this, \"testResult\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"isLoading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isLoading = (() => (dt7948.i(this, \"isLoading\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"postUrl\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #postUrl = (() => (dt7948.i(this, \"postUrl\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"scanLog\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #scanLog = (() => (dt7948.i(this, \"scanLog\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"isSpam\", [_tracking.tracked]))();\n    #isSpam = (() => (dt7948.i(this, \"isSpam\"), void 0))();\n    async runTest() {\n      this.isLoading = true;\n      try {\n        const response = await (0, _ajax.ajax)(`/admin/plugins/discourse-ai/ai-spam/test.json`, {\n          type: \"POST\",\n          data: {\n            post_url: this.postUrl,\n            custom_instructions: this.args.model.customInstructions,\n            llm_id: this.args.model.llmId\n          }\n        });\n        this.isSpam = response.is_spam;\n        this.testResult = response.is_spam ? (0, _discourseI18n.i18n)(\"discourse_ai.spam.test_modal.spam\") : (0, _discourseI18n.i18n)(\"discourse_ai.spam.test_modal.not_spam\");\n        this.scanLog = response.log;\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      } finally {\n        this.isLoading = false;\n      }\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"runTest\", [_object.action]))();\n    static #_7 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DModal\n          @title={{i18n \"discourse_ai.spam.test_modal.title\"}}\n          @closeModal={{@closeModal}}\n          @bodyClass=\"spam-test-modal__body\"\n          class=\"spam-test-modal\"\n        >\n          <:body>\n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.spam.test_modal.post_url_label\"}}</label>\n              <input\n                {{on \"input\" (withEventValue (fn (mut this.postUrl)))}}\n                type=\"text\"\n                placeholder={{i18n\n                  \"discourse_ai.spam.test_modal.post_url_placeholder\"\n                }}\n              />\n            </div>\n    \n            {{#if this.testResult}}\n              <div class=\"spam-test-modal__test-result\">\n                <h3>{{i18n \"discourse_ai.spam.test_modal.result\"}}</h3>\n                <div\n                  class=\"spam-test-modal__verdict\n                    {{if this.isSpam 'is-spam' 'not-spam'}}\"\n                >\n                  {{this.testResult}}\n                </div>\n                {{#if this.scanLog}}\n                  <div class=\"spam-test-modal__log\">\n                    <h4>{{i18n \"discourse_ai.spam.test_modal.scan_log\"}}</h4>\n                    <pre>{{this.scanLog}}</pre>\n                  </div>\n                {{/if}}\n              </div>\n            {{/if}}\n          </:body>\n    \n          <:footer>\n            <DButton\n              @action={{this.runTest}}\n              @label=\"discourse_ai.spam.test_modal.run\"\n              @disabled={{this.isLoading}}\n              class=\"btn-primary spam-test-modal__run-button\"\n            >\n              <AiIndicatorWave @loading={{this.isLoading}} />\n            </DButton>\n          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"34+xPAxG\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"spam-test-modal\\\"]],[[\\\"@title\\\",\\\"@closeModal\\\",\\\"@bodyClass\\\"],[[28,[32,1],[\\\"discourse_ai.spam.test_modal.title\\\"],null],[30,1],\\\"spam-test-modal__body\\\"]],[[\\\"body\\\",\\\"footer\\\"],[[[[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.spam.test_modal.post_url_label\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[11,\\\"input\\\"],[16,\\\"placeholder\\\",[28,[32,1],[\\\"discourse_ai.spam.test_modal.post_url_placeholder\\\"],null]],[24,4,\\\"text\\\"],[4,[32,2],[\\\"input\\\",[28,[32,3],[[28,[32,4],[[28,[31,0],[[30,0,[\\\"postUrl\\\"]]],null]],null]],null]],null],[12],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"testResult\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"spam-test-modal__test-result\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"h3\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.spam.test_modal.result\\\"],null]],[13],[1,\\\"\\\\n            \\\"],[10,0],[15,0,[29,[\\\"spam-test-modal__verdict\\\\n                \\\",[52,[30,0,[\\\"isSpam\\\"]],\\\"is-spam\\\",\\\"not-spam\\\"]]]],[12],[1,\\\"\\\\n              \\\"],[1,[30,0,[\\\"testResult\\\"]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"scanLog\\\"]],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"spam-test-modal__log\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"h4\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.spam.test_modal.scan_log\\\"],null]],[13],[1,\\\"\\\\n                \\\"],[10,\\\"pre\\\"],[12],[1,[30,0,[\\\"scanLog\\\"]]],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[8,[32,5],[[24,0,\\\"btn-primary spam-test-modal__run-button\\\"]],[[\\\"@action\\\",\\\"@label\\\",\\\"@disabled\\\"],[[30,0,[\\\"runTest\\\"]],\\\"discourse_ai.spam.test_modal.run\\\",[30,0,[\\\"isLoading\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[32,6],null,[[\\\"@loading\\\"],[[30,0,[\\\"isLoading\\\"]]]],null],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@closeModal\\\"],false,[\\\"mut\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/spam-test-modal.js\",\n      \"scope\": () => [_dModal.default, _discourseI18n.i18n, _modifier.on, _withEventValue.default, _helper.fn, _dButton.default, _aiIndicatorWave.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = SpamTestModal;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/thumbnail-suggestions\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"discourse/components/conditional-loading-spinner\", \"discourse/components/d-button\", \"discourse/components/d-modal\", \"discourse/components/d-modal-cancel\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse-common/helpers/i18n\", \"discourse/plugins/discourse-ai/discourse/components/thumbnail-suggestion-item\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _conditionalLoadingSpinner, _dButton, _dModal, _dModalCancel, _ajax, _ajaxError, _i18n, _thumbnailSuggestionItem, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class ThumbnailSuggestions extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"selectedImages\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #selectedImages = (() => (dt7948.i(this, \"selectedImages\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"thumbnails\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #thumbnails = (() => (dt7948.i(this, \"thumbnails\"), void 0))();\n    constructor() {\n      super(...arguments);\n      this.findThumbnails();\n    }\n    get isDisabled() {\n      return this.selectedImages.length === 0;\n    }\n    async findThumbnails() {\n      this.loading = true;\n      try {\n        const thumbnails = await (0, _ajax.ajax)(\"/discourse-ai/ai-helper/suggest\", {\n          method: \"POST\",\n          data: {\n            mode: this.args.model.mode,\n            text: this.args.model.selectedText,\n            force_default_locale: true\n          }\n        });\n        this.thumbnails = thumbnails.thumbnails;\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      } finally {\n        this.loading = false;\n      }\n    }\n    addSelection(selection) {\n      const thumbnailMarkdown = `![${selection.original_filename}|${selection.width}x${selection.height}](${selection.short_url})`;\n      this.selectedImages = [...this.selectedImages, thumbnailMarkdown];\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"addSelection\", [_object.action]))();\n    removeSelection(selection) {\n      const thumbnailMarkdown = `![${selection.original_filename}|${selection.width}x${selection.height}](${selection.short_url})`;\n      this.selectedImages = this.selectedImages.filter(thumbnail => {\n        if (thumbnail !== thumbnailMarkdown) {\n          return thumbnail;\n        }\n      });\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"removeSelection\", [_object.action]))();\n    appendSelectedImages() {\n      const imageMarkdown = \"\\n\\n\" + this.selectedImages.join(\"\\n\");\n      const dEditorInput = document.querySelector(\".d-editor-input\");\n      dEditorInput.setSelectionRange(dEditorInput.value.length, dEditorInput.value.length);\n      dEditorInput.focus();\n      document.execCommand(\"insertText\", false, imageMarkdown);\n      this.args.closeModal();\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"appendSelectedImages\", [_object.action]))();\n    static #_7 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DModal\n          class=\"thumbnail-suggestions-modal\"\n          @title={{i18n \"discourse_ai.ai_helper.thumbnail_suggestions.title\"}}\n          @closeModal={{@closeModal}}\n        >\n          <:body>\n            <ConditionalLoadingSpinner @condition={{this.loading}}>\n              <div class=\"ai-thumbnail-suggestions\">\n                {{#each this.thumbnails as |thumbnail|}}\n                  <ThumbnailSuggestionItem\n                    @thumbnail={{thumbnail}}\n                    @addSelection={{this.addSelection}}\n                    @removeSelection={{this.removeSelection}}\n                  />\n                {{/each}}\n              </div>\n            </ConditionalLoadingSpinner>\n          </:body>\n    \n          <:footer>\n            <DButton\n              @action={{this.appendSelectedImages}}\n              @label=\"save\"\n              @disabled={{this.isDisabled}}\n              class=\"btn-primary create\"\n            />\n            <DModalCancel @close={{@closeModal}} />\n          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"NK1Pg0q5\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"thumbnail-suggestions-modal\\\"]],[[\\\"@title\\\",\\\"@closeModal\\\"],[[28,[32,1],[\\\"discourse_ai.ai_helper.thumbnail_suggestions.title\\\"],null],[30,1]]],[[\\\"body\\\",\\\"footer\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[32,2],null,[[\\\"@condition\\\"],[[30,0,[\\\"loading\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"ai-thumbnail-suggestions\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"thumbnails\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[32,3],null,[[\\\"@thumbnail\\\",\\\"@addSelection\\\",\\\"@removeSelection\\\"],[[30,2],[30,0,[\\\"addSelection\\\"]],[30,0,[\\\"removeSelection\\\"]]]],null],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[8,[32,4],[[24,0,\\\"btn-primary create\\\"]],[[\\\"@action\\\",\\\"@label\\\",\\\"@disabled\\\"],[[30,0,[\\\"appendSelectedImages\\\"]],\\\"save\\\",[30,0,[\\\"isDisabled\\\"]]]],null],[1,\\\"\\\\n        \\\"],[8,[32,5],null,[[\\\"@close\\\"],[[30,1]]],null],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@closeModal\\\",\\\"thumbnail\\\"],false,[\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/thumbnail-suggestions.js\",\n      \"scope\": () => [_dModal.default, _i18n.default, _conditionalLoadingSpinner.default, _thumbnailSuggestionItem.default, _dButton.default, _dModalCancel.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = ThumbnailSuggestions;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/model-accuracies\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if @accuracies}}\n    <table class=\"reviewable-scores\">\n      <tbody>\n        {{#each-in @accuracies as |model acc|}}\n          <tr>\n            <td colspan=\"4\">{{i18n \"discourse_ai.reviewables.model_used\"}}</td>\n            <td colspan=\"3\">{{model}}</td>\n            <td colspan=\"4\">{{i18n \"discourse_ai.reviewables.accuracy\"}}</td>\n            <td colspan=\"3\">{{acc}}%</td>\n          </tr>\n        {{/each-in}}\n      </tbody>\n    </table>\n  {{/if}}\n  */\n  {\n    \"id\": \"ik7ZG6Vr\",\n    \"block\": \"[[[41,[30,1],[[[1,\\\"  \\\"],[10,\\\"table\\\"],[14,0,\\\"reviewable-scores\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,4],[[30,1]],null],null,[[[1,\\\"        \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[14,\\\"colspan\\\",\\\"4\\\"],[12],[1,[28,[35,7],[\\\"discourse_ai.reviewables.model_used\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[14,\\\"colspan\\\",\\\"3\\\"],[12],[1,[30,3]],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[14,\\\"colspan\\\",\\\"4\\\"],[12],[1,[28,[35,7],[\\\"discourse_ai.reviewables.accuracy\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[14,\\\"colspan\\\",\\\"3\\\"],[12],[1,[30,2]],[1,\\\"%\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[2,3]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@accuracies\\\",\\\"acc\\\",\\\"model\\\"],false,[\\\"if\\\",\\\"table\\\",\\\"tbody\\\",\\\"each\\\",\\\"-each-in\\\",\\\"tr\\\",\\\"td\\\",\\\"i18n\\\"]]\",\n    \"moduleName\": \"discourse/plugins/discourse-ai/discourse/components/model-accuracies.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"model-accuracies\"));\n});","define(\"discourse/plugins/discourse-ai/discourse/components/post-menu/ai-cancel-streaming-button\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"discourse/components/d-button\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _dButton, _ajax, _ajaxError, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiCancelStreamingButton extends _component.default {\n    // TODO (glimmer-post-menu): Remove this static function and move the code into the button action after the widget code is removed\n    static async cancelStreaming(post) {\n      try {\n        await (0, _ajax.ajax)(`/discourse-ai/ai-bot/post/${post.id}/stop-streaming`, {\n          type: \"POST\"\n        });\n        document.querySelector(`#post_${post.post_number}`).classList.remove(\"streaming\");\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      }\n    }\n    cancelStreaming() {\n      this.constructor.cancelStreaming(this.args.post);\n    }\n    static #_ = (() => dt7948.n(this.prototype, \"cancelStreaming\", [_object.action]))();\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DButton\n          class=\"post-action-menu__ai-cancel-streaming cancel-streaming\"\n          ...attributes\n          @action={{this.cancelStreaming}}\n          @icon=\"pause\"\n          @title=\"discourse_ai.ai_bot.cancel_streaming\"\n        />\n      \n    */\n    {\n      \"id\": \"eS4Xq4iv\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"post-action-menu__ai-cancel-streaming cancel-streaming\\\"],[17,1]],[[\\\"@action\\\",\\\"@icon\\\",\\\"@title\\\"],[[30,0,[\\\"cancelStreaming\\\"]],\\\"pause\\\",\\\"discourse_ai.ai_bot.cancel_streaming\\\"]],null],[1,\\\"\\\\n  \\\"]],[\\\"&attrs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/post-menu/ai-cancel-streaming-button.js\",\n      \"scope\": () => [_dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiCancelStreamingButton;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/post-menu/ai-debug-button\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/plugins/discourse-ai/discourse/lib/ai-bot-helper\", \"discourse/plugins/discourse-ai/discourse/components/modal/debug-ai-modal\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _dButton, _aiBotHelper, _debugAiModal, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiDebugButton extends _component.default {\n    static shouldRender(args) {\n      return (0, _aiBotHelper.isPostFromAiBot)(args.post, args.state.currentUser);\n    }\n    // TODO (glimmer-post-menu): Remove this static function and move the code into the button action after the widget code is removed\n    static debugAiResponse(post, modal) {\n      modal.show(_debugAiModal.default, {\n        model: post\n      });\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    debugAiResponse() {\n      this.constructor.debugAiResponse(this.args.post, this.modal);\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"debugAiResponse\", [_object.action]))();\n    static #_3 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DButton\n          class=\"post-action-menu__debug-ai\"\n          ...attributes\n          @action={{this.debugAiResponse}}\n          @icon=\"info\"\n          @title=\"discourse_ai.ai_bot.debug_ai\"\n        />\n      \n    */\n    {\n      \"id\": \"a7gp58E/\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"post-action-menu__debug-ai\\\"],[17,1]],[[\\\"@action\\\",\\\"@icon\\\",\\\"@title\\\"],[[30,0,[\\\"debugAiResponse\\\"]],\\\"info\\\",\\\"discourse_ai.ai_bot.debug_ai\\\"]],null],[1,\\\"\\\\n  \\\"]],[\\\"&attrs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/post-menu/ai-debug-button.js\",\n      \"scope\": () => [_dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiDebugButton;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/post-menu/ai-share-button\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/plugins/discourse-ai/discourse/lib/ai-bot-helper\", \"discourse/plugins/discourse-ai/discourse/lib/copy-conversation\", \"discourse/plugins/discourse-ai/discourse/components/modal/share-modal\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _dButton, _aiBotHelper, _copyConversation, _shareModal, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const AUTO_COPY_THRESHOLD = 4;\n  class AiDebugButton extends _component.default {\n    static shouldRender(args) {\n      return (0, _aiBotHelper.isPostFromAiBot)(args.post, args.state.currentUser);\n    }\n    // TODO (glimmer-post-menu): Remove this static function and move the code into the button action after the widget code is removed\n    static async shareAiResponse(post, modal, showFeedback) {\n      if (post.post_number <= AUTO_COPY_THRESHOLD) {\n        await (0, _copyConversation.default)(post.topic, 1, post.post_number);\n        showFeedback(\"discourse_ai.ai_bot.conversation_shared\");\n      } else {\n        modal.show(_shareModal.default, {\n          model: post\n        });\n      }\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    shareAiResponse() {\n      this.constructor.shareAiResponse(this.args.post, this.modal, this.args.showFeedback);\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"shareAiResponse\", [_object.action]))();\n    static #_3 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DButton\n          class=\"post-action-menu__share-ai\"\n          ...attributes\n          @action={{this.shareAiResponse}}\n          @icon=\"far-copy\"\n          @title=\"discourse_ai.ai_bot.share\"\n        />\n      \n    */\n    {\n      \"id\": \"GGDSzGUM\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"post-action-menu__share-ai\\\"],[17,1]],[[\\\"@action\\\",\\\"@icon\\\",\\\"@title\\\"],[[30,0,[\\\"shareAiResponse\\\"]],\\\"far-copy\\\",\\\"discourse_ai.ai_bot.share\\\"]],null],[1,\\\"\\\\n  \\\"]],[\\\"&attrs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/post-menu/ai-share-button.js\",\n      \"scope\": () => [_dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiDebugButton;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/rag-options\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/component\", \"@ember/modifier\", \"@ember/object\", \"discourse/components/d-tooltip\", \"discourse-i18n\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _component2, _modifier, _object, _dTooltip, _discourseI18n, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class RagOptions extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"showIndexingOptions\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showIndexingOptions = (() => (dt7948.i(this, \"showIndexingOptions\"), void 0))();\n    toggleIndexingOptions(event) {\n      this.showIndexingOptions = !this.showIndexingOptions;\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"toggleIndexingOptions\", [_object.action]))();\n    get indexingOptionsText() {\n      return this.showIndexingOptions ? (0, _discourseI18n.i18n)(\"discourse_ai.rag.options.hide_indexing_options\") : (0, _discourseI18n.i18n)(\"discourse_ai.rag.options.show_indexing_options\");\n    }\n    static #_3 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if @model.rag_uploads}}\n          <a\n            href=\"#\"\n            class=\"rag-options__indexing-options\"\n            {{on \"click\" this.toggleIndexingOptions}}\n          >{{this.indexingOptionsText}}</a>\n        {{/if}}\n    \n        {{#if this.showIndexingOptions}}\n          <div class=\"control-group\">\n            <label>{{i18n \"discourse_ai.rag.options.rag_chunk_tokens\"}}</label>\n            <Input\n              @type=\"number\"\n              step=\"any\"\n              lang=\"en\"\n              class=\"rag-options__rag_chunk_tokens\"\n              @value={{@model.rag_chunk_tokens}}\n            />\n            <DTooltip\n              @icon=\"circle-question\"\n              @content={{i18n \"discourse_ai.rag.options.rag_chunk_tokens_help\"}}\n            />\n          </div>\n          <div class=\"control-group\">\n            <label>{{i18n\n                \"discourse_ai.rag.options.rag_chunk_overlap_tokens\"\n              }}</label>\n            <Input\n              @type=\"number\"\n              step=\"any\"\n              lang=\"en\"\n              class=\"rag-options__rag_chunk_overlap_tokens\"\n              @value={{@model.rag_chunk_overlap_tokens}}\n            />\n            <DTooltip\n              @icon=\"circle-question\"\n              @content={{i18n\n                \"discourse_ai.rag.options.rag_chunk_overlap_tokens_help\"\n              }}\n            />\n          </div>\n          {{yield}}\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"DKL/phR1\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"rag_uploads\\\"]],[[[1,\\\"      \\\"],[11,3],[24,6,\\\"#\\\"],[24,0,\\\"rag-options__indexing-options\\\"],[4,[32,0],[\\\"click\\\",[30,0,[\\\"toggleIndexingOptions\\\"]]],null],[12],[1,[30,0,[\\\"indexingOptionsText\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showIndexingOptions\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.rag.options.rag_chunk_tokens\\\"],null]],[13],[1,\\\"\\\\n        \\\"],[8,[32,2],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"lang\\\",\\\"en\\\"],[24,0,\\\"rag-options__rag_chunk_tokens\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,1,[\\\"rag_chunk_tokens\\\"]]]],null],[1,\\\"\\\\n        \\\"],[8,[32,3],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,1],[\\\"discourse_ai.rag.options.rag_chunk_tokens_help\\\"],null]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.rag.options.rag_chunk_overlap_tokens\\\"],null]],[13],[1,\\\"\\\\n        \\\"],[8,[32,2],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"lang\\\",\\\"en\\\"],[24,0,\\\"rag-options__rag_chunk_overlap_tokens\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,1,[\\\"rag_chunk_overlap_tokens\\\"]]]],null],[1,\\\"\\\\n        \\\"],[8,[32,3],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,1],[\\\"discourse_ai.rag.options.rag_chunk_overlap_tokens_help\\\"],null]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[18,2,null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@model\\\",\\\"&default\\\"],false,[\\\"if\\\",\\\"yield\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/rag-options.js\",\n      \"scope\": () => [_modifier.on, _discourseI18n.i18n, _component2.Input, _dTooltip.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = RagOptions;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/rag-upload-progress\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/service\", \"discourse-common/helpers/d-icon\", \"discourse-common/utils/decorators\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _didInsert, _service, _dIcon, _decorators, _discourseI18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class RagUploadProgress extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"messageBus\", [_service.service]))();\n    #messageBus = (() => (dt7948.i(this, \"messageBus\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"updatedProgress\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #updatedProgress = (() => (dt7948.i(this, \"updatedProgress\"), void 0))();\n    willDestroy() {\n      super.willDestroy(...arguments);\n      this.messageBus.unsubscribe(`/discourse-ai/rag/${this.args.upload.id}`);\n    }\n    trackProgress() {\n      this.messageBus.subscribe(`/discourse-ai/rag/${this.args.upload.id}`, this.onIndexingUpdate);\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"trackProgress\", [_object.action]))();\n    onIndexingUpdate(data) {\n      // Order not guaranteed. Discard old updates.\n      if (!this.updatedProgress || this.updatedProgress.left === 0 || this.updatedProgress.left > data.left || data.total === data.indexed) {\n        this.updatedProgress = data;\n      }\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"onIndexingUpdate\", [_decorators.bind]))();\n    get calculateProgress() {\n      if (this.progress.total === 0) {\n        return 0;\n      }\n      return Math.ceil(this.progress.indexed * 100 / this.progress.total);\n    }\n    get fullyIndexed() {\n      return this.progress && this.progress.total !== 0 && this.progress.left === 0;\n    }\n    get progress() {\n      if (this.updatedProgress) {\n        return this.updatedProgress;\n      } else if (this.args.ragIndexingStatuses) {\n        return this.args.ragIndexingStatuses[this.args.upload.id];\n      } else {\n        return [];\n      }\n    }\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <td class=\"rag-uploader__upload-status\" {{didInsert this.trackProgress}}>\n          {{#if this.progress}}\n            {{#if this.fullyIndexed}}\n              <span class=\"indexed\">\n                {{icon \"check\"}}\n                {{i18n \"discourse_ai.rag.uploads.indexed\"}}\n              </span>\n            {{else}}\n              <span class=\"indexing\">\n                {{icon \"robot\"}}\n                {{i18n \"discourse_ai.rag.uploads.indexing\"}}\n                {{this.calculateProgress}}%\n              </span>\n            {{/if}}\n          {{else}}\n            <span class=\"uploaded\">{{i18n\n                \"discourse_ai.rag.uploads.uploaded\"\n              }}</span>\n          {{/if}}\n        </td>\n      \n    */\n    {\n      \"id\": \"AyWODt7W\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[11,\\\"td\\\"],[24,0,\\\"rag-uploader__upload-status\\\"],[4,[32,0],[[30,0,[\\\"trackProgress\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"progress\\\"]],[[[41,[30,0,[\\\"fullyIndexed\\\"]],[[[1,\\\"          \\\"],[10,1],[14,0,\\\"indexed\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,1],[\\\"check\\\"],null]],[1,\\\"\\\\n            \\\"],[1,[28,[32,2],[\\\"discourse_ai.rag.uploads.indexed\\\"],null]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[10,1],[14,0,\\\"indexing\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,1],[\\\"robot\\\"],null]],[1,\\\"\\\\n            \\\"],[1,[28,[32,2],[\\\"discourse_ai.rag.uploads.indexing\\\"],null]],[1,\\\"\\\\n            \\\"],[1,[30,0,[\\\"calculateProgress\\\"]]],[1,\\\"%\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]],[[[1,\\\"        \\\"],[10,1],[14,0,\\\"uploaded\\\"],[12],[1,[28,[32,2],[\\\"discourse_ai.rag.uploads.uploaded\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/rag-upload-progress.js\",\n      \"scope\": () => [_didInsert.default, _dIcon.default, _discourseI18n.i18n],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = RagUploadProgress;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/rag-uploader\", [\"exports\", \"@glimmer/tracking\", \"@ember/component\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"@ember/owner\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/lib/ajax\", \"discourse/lib/uppy/uppy-upload\", \"discourse-common/helpers/d-icon\", \"discourse-common/lib/debounce\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/rag-upload-progress\", \"@ember/template-factory\"], function (_exports, _tracking, _component, _helper, _modifier, _object, _owner, _didInsert, _service, _dButton, _ajax, _uppyUpload, _dIcon, _debounce, _discourseI18n, _ragUploadProgress, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class RagUploader extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"appEvents\", [_service.service]))();\n    #appEvents = (() => (dt7948.i(this, \"appEvents\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"term\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #term = (() => (dt7948.i(this, \"term\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"filteredUploads\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #filteredUploads = (() => (dt7948.i(this, \"filteredUploads\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"ragIndexingStatuses\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #ragIndexingStatuses = (() => (dt7948.i(this, \"ragIndexingStatuses\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"ragUploads\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #ragUploads = (() => (dt7948.i(this, \"ragUploads\"), void 0))();\n    uppyUpload = (() => new _uppyUpload.default((0, _owner.getOwner)(this), {\n      id: \"discourse-ai-rag-uploader\",\n      maxFiles: 20,\n      type: \"discourse_ai_rag_upload\",\n      uploadUrl: \"/admin/plugins/discourse-ai/rag-document-fragments/files/upload\",\n      preventDirectS3Uploads: true,\n      uploadDone: uploadedFile => {\n        const newUpload = uploadedFile.upload;\n        newUpload.status = \"uploaded\";\n        newUpload.statusText = (0, _discourseI18n.i18n)(\"discourse_ai.rag.uploads.uploaded\");\n        this.ragUploads.pushObject(newUpload);\n        this.debouncedSearch();\n      }\n    }))();\n    willDestroy() {\n      super.willDestroy(...arguments);\n      this.appEvents.off(`upload-mixin:${this.uppyUpload.config}:all-uploads-complete`, this, \"_updateTargetWithUploads\");\n    }\n    didReceiveAttrs() {\n      super.didReceiveAttrs(...arguments);\n      if (this.uppyUpload.inProgressUploads?.length > 0) {\n        this.uppyUpload.cancelAllUploads();\n      }\n      this.ragUploads = this.target?.rag_uploads || [];\n      this.filteredUploads = this.ragUploads;\n      const targetName = this.target?.constructor?.name;\n      if (this.ragUploads?.length && this.target?.id) {\n        (0, _ajax.ajax)(`/admin/plugins/discourse-ai/rag-document-fragments/files/status.json?target_type=${targetName}&target_id=${this.target.id}`).then(statuses => {\n          this.set(\"ragIndexingStatuses\", statuses);\n        });\n      }\n      this.appEvents.on(`upload-mixin:${this.uppyUpload.config.id}:all-uploads-complete`, this, \"_updateTargetWithUploads\");\n    }\n    _updateTargetWithUploads() {\n      this.updateUploads(this.ragUploads);\n    }\n    submitFiles() {\n      this.uppyUpload.openPicker();\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"submitFiles\", [_object.action]))();\n    cancelUploading(upload) {\n      this.uppyUpload.cancelSingleUpload({\n        fileId: upload.id\n      });\n    }\n    static #_7 = (() => dt7948.n(this.prototype, \"cancelUploading\", [_object.action]))();\n    search() {\n      if (this.term) {\n        this.filteredUploads = this.ragUploads.filter(u => {\n          return u.original_filename.toUpperCase().indexOf(this.term.toUpperCase()) > -1;\n        });\n      } else {\n        this.filteredUploads = this.ragUploads;\n      }\n    }\n    static #_8 = (() => dt7948.n(this.prototype, \"search\", [_object.action]))();\n    debouncedSearch() {\n      (0, _debounce.default)(this, this.search, 100);\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"debouncedSearch\", [_object.action]))();\n    removeUpload(upload) {\n      this.ragUploads.removeObject(upload);\n      this.onRemove(upload);\n      this.debouncedSearch();\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"removeUpload\", [_object.action]))();\n    static #_11 = (() => (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"rag-uploader\">\n          <h3>{{i18n \"discourse_ai.rag.uploads.title\"}}</h3>\n          <p>{{i18n \"discourse_ai.rag.uploads.description\"}}</p>\n    \n          {{#if this.ragUploads}}\n            <div class=\"rag-uploader__search-input-container\">\n              <div class=\"rag-uploader__search-input\">\n                {{icon \"search\" class=\"rag-uploader__search-input__search-icon\"}}\n                <Input\n                  class=\"rag-uploader__search-input__input\"\n                  placeholder={{i18n \"discourse_ai.rag.uploads.filter\"}}\n                  @value={{this.term}}\n                  {{on \"keyup\" this.debouncedSearch}}\n                />\n              </div>\n            </div>\n          {{/if}}\n    \n          <table class=\"rag-uploader__uploads-list\">\n            <tbody>\n              {{#each this.filteredUploads as |upload|}}\n                <tr>\n                  <td>\n                    <span class=\"rag-uploader__rag-file-icon\">{{icon \"file\"}}</span>\n                    {{upload.original_filename}}\n                  </td>\n                  <RagUploadProgress\n                    @upload={{upload}}\n                    @ragIndexingStatuses={{this.ragIndexingStatuses}}\n                  />\n                  <td class=\"rag-uploader__remove-file\">\n                    <DButton\n                      @icon=\"xmark\"\n                      @title=\"discourse_ai.rag.uploads.remove\"\n                      @action={{fn this.removeUpload upload}}\n                      class=\"btn-flat\"\n                    />\n                  </td>\n                </tr>\n              {{/each}}\n              {{#each this.uppyUpload.inProgressUploads as |upload|}}\n                <tr>\n                  <td><span class=\"rag-uploader__rag-file-icon\">{{icon\n                        \"file\"\n                      }}</span>\n                    {{upload.original_filename}}</td>\n                  <td class=\"rag-uploader__upload-status\">\n                    <div class=\"spinner small\"></div>\n                    <span>{{i18n \"discourse_ai.rag.uploads.uploading\"}}\n                      {{upload.uploadProgress}}%</span>\n                  </td>\n                  <td class=\"rag-uploader__remove-file\">\n                    <DButton\n                      @icon=\"xmark\"\n                      @title=\"discourse_ai.rag.uploads.remove\"\n                      @action={{fn this.cancelUploading upload}}\n                      class=\"btn-flat\"\n                    />\n                  </td>\n                </tr>\n              {{/each}}\n            </tbody>\n          </table>\n    \n          <input\n            {{didInsert this.uppyUpload.setup}}\n            class=\"hidden-upload-field\"\n            disabled={{this.uploading}}\n            type=\"file\"\n            multiple=\"multiple\"\n            accept=\".txt,.md\"\n          />\n          <DButton\n            @label=\"discourse_ai.rag.uploads.button\"\n            @icon=\"plus\"\n            @title=\"discourse_ai.rag.uploads.button\"\n            @action={{this.submitFiles}}\n            class=\"btn-default\"\n          />\n        </div>\n      \n    */\n    {\n      \"id\": \"Mssx5AMm\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"rag-uploader\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"h3\\\"],[12],[1,[28,[32,0],[\\\"discourse_ai.rag.uploads.title\\\"],null]],[13],[1,\\\"\\\\n      \\\"],[10,2],[12],[1,[28,[32,0],[\\\"discourse_ai.rag.uploads.description\\\"],null]],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"ragUploads\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"rag-uploader__search-input-container\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"rag-uploader__search-input\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,1],[\\\"search\\\"],[[\\\"class\\\"],[\\\"rag-uploader__search-input__search-icon\\\"]]]],[1,\\\"\\\\n            \\\"],[8,[32,2],[[24,0,\\\"rag-uploader__search-input__input\\\"],[16,\\\"placeholder\\\",[28,[32,0],[\\\"discourse_ai.rag.uploads.filter\\\"],null]],[4,[32,3],[\\\"keyup\\\",[30,0,[\\\"debouncedSearch\\\"]]],null]],[[\\\"@value\\\"],[[30,0,[\\\"term\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n      \\\"],[10,\\\"table\\\"],[14,0,\\\"rag-uploader__uploads-list\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"filteredUploads\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n                \\\"],[10,1],[14,0,\\\"rag-uploader__rag-file-icon\\\"],[12],[1,[28,[32,1],[\\\"file\\\"],null]],[13],[1,\\\"\\\\n                \\\"],[1,[30,1,[\\\"original_filename\\\"]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[8,[32,4],null,[[\\\"@upload\\\",\\\"@ragIndexingStatuses\\\"],[[30,1],[30,0,[\\\"ragIndexingStatuses\\\"]]]],null],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[14,0,\\\"rag-uploader__remove-file\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[32,5],[[24,0,\\\"btn-flat\\\"]],[[\\\"@icon\\\",\\\"@title\\\",\\\"@action\\\"],[\\\"xmark\\\",\\\"discourse_ai.rag.uploads.remove\\\",[28,[32,6],[[30,0,[\\\"removeUpload\\\"]],[30,1]],null]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[1]],null],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"uppyUpload\\\",\\\"inProgressUploads\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[12],[10,1],[14,0,\\\"rag-uploader__rag-file-icon\\\"],[12],[1,[28,[32,1],[\\\"file\\\"],null]],[13],[1,\\\"\\\\n                \\\"],[1,[30,2,[\\\"original_filename\\\"]]],[13],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[14,0,\\\"rag-uploader__upload-status\\\"],[12],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"spinner small\\\"],[12],[13],[1,\\\"\\\\n                \\\"],[10,1],[12],[1,[28,[32,0],[\\\"discourse_ai.rag.uploads.uploading\\\"],null]],[1,\\\"\\\\n                  \\\"],[1,[30,2,[\\\"uploadProgress\\\"]]],[1,\\\"%\\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[14,0,\\\"rag-uploader__remove-file\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[32,5],[[24,0,\\\"btn-flat\\\"]],[[\\\"@icon\\\",\\\"@title\\\",\\\"@action\\\"],[\\\"xmark\\\",\\\"discourse_ai.rag.uploads.remove\\\",[28,[32,6],[[30,0,[\\\"cancelUploading\\\"]],[30,2]],null]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[11,\\\"input\\\"],[24,0,\\\"hidden-upload-field\\\"],[16,\\\"disabled\\\",[30,0,[\\\"uploading\\\"]]],[24,\\\"multiple\\\",\\\"multiple\\\"],[24,\\\"accept\\\",\\\".txt,.md\\\"],[24,4,\\\"file\\\"],[4,[32,7],[[30,0,[\\\"uppyUpload\\\",\\\"setup\\\"]]],null],[12],[13],[1,\\\"\\\\n      \\\"],[8,[32,5],[[24,0,\\\"btn-default\\\"]],[[\\\"@label\\\",\\\"@icon\\\",\\\"@title\\\",\\\"@action\\\"],[\\\"discourse_ai.rag.uploads.button\\\",\\\"plus\\\",\\\"discourse_ai.rag.uploads.button\\\",[30,0,[\\\"submitFiles\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"upload\\\",\\\"upload\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/rag-uploader.js\",\n      \"scope\": () => [_discourseI18n.i18n, _dIcon.default, _component.Input, _modifier.on, _ragUploadProgress.default, _dButton.default, _helper.fn, _didInsert.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = RagUploader;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/reviewable-ai-chat-message\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"discourse/plugins/chat/discourse/models/chat-channel\", \"@ember/template-factory\"], function (_exports, _component, _component2, _chatChannel, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if this.chatChannel}}\n    <div class=\"flagged-post-header\">\n      <LinkTo\n        @route=\"chat.channel.near-message\"\n        @models={{array\n          this.chatChannel.slugifiedTitle\n          this.chatChannel.id\n          @reviewable.target_id\n        }}\n      >\n        <ChatChannelTitle @channel={{this.chatChannel}} />\n      </LinkTo>\n    </div>\n  {{/if}}\n  \n  <div class=\"post-contents-wrapper\">\n    <ReviewableCreatedBy @user={{@reviewable.target_created_by}} @tagName=\"\" />\n    <div class=\"post-contents\">\n      <ReviewablePostHeader\n        @reviewable={{@reviewable}}\n        @createdBy={{@reviewable.target_created_by}}\n        @tagName=\"\"\n      />\n  \n      <div class=\"post-body\">\n        {{html-safe (or @reviewable.payload.message_cooked @reviewable.cooked)}}\n      </div>\n  \n      {{yield}}\n  \n      <ModelAccuracies @accuracies={{@reviewable.payload.accuracies}} />\n    </div>\n  </div>\n  */\n  {\n    \"id\": \"JlFBNZVw\",\n    \"block\": \"[[[41,[30,0,[\\\"chatChannel\\\"]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"flagged-post-header\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[39,2],null,[[\\\"@route\\\",\\\"@models\\\"],[\\\"chat.channel.near-message\\\",[28,[37,3],[[30,0,[\\\"chatChannel\\\",\\\"slugifiedTitle\\\"]],[30,0,[\\\"chatChannel\\\",\\\"id\\\"]],[30,1,[\\\"target_id\\\"]]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[8,[39,4],null,[[\\\"@channel\\\"],[[30,0,[\\\"chatChannel\\\"]]]],null],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"post-contents-wrapper\\\"],[12],[1,\\\"\\\\n  \\\"],[8,[39,5],null,[[\\\"@user\\\",\\\"@tagName\\\"],[[30,1,[\\\"target_created_by\\\"]],\\\"\\\"]],null],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"post-contents\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[39,6],null,[[\\\"@reviewable\\\",\\\"@createdBy\\\",\\\"@tagName\\\"],[[30,1],[30,1,[\\\"target_created_by\\\"]],\\\"\\\"]],null],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[14,0,\\\"post-body\\\"],[12],[1,\\\"\\\\n      \\\"],[1,[28,[35,7],[[28,[37,8],[[30,1,[\\\"payload\\\",\\\"message_cooked\\\"]],[30,1,[\\\"cooked\\\"]]],null]],null]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[18,2,null],[1,\\\"\\\\n\\\\n    \\\"],[8,[39,10],null,[[\\\"@accuracies\\\"],[[30,1,[\\\"payload\\\",\\\"accuracies\\\"]]]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"@reviewable\\\",\\\"&default\\\"],false,[\\\"if\\\",\\\"div\\\",\\\"link-to\\\",\\\"array\\\",\\\"chat-channel-title\\\",\\\"reviewable-created-by\\\",\\\"reviewable-post-header\\\",\\\"html-safe\\\",\\\"or\\\",\\\"yield\\\",\\\"model-accuracies\\\"]]\",\n    \"moduleName\": \"discourse/plugins/discourse-ai/discourse/components/reviewable-ai-chat-message.hbs\",\n    \"isStrictMode\": false\n  });\n  class ReviewableAiChatMessage extends _component2.default {\n    get chatChannel() {\n      if (!this.args.reviewable.chat_channel) {\n        return;\n      }\n      return _chatChannel.default.create(this.args.reviewable.chat_channel);\n    }\n  }\n  _exports.default = ReviewableAiChatMessage;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ReviewableAiChatMessage);\n});","define(\"discourse/plugins/discourse-ai/discourse/components/reviewable-ai-post\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"flagged-post-header\">\n    <ReviewableTopicLink @reviewable={{@reviewable}} @tagName=\"\" />\n    <ReviewablePostEdits @reviewable={{@reviewable}} @tagName=\"\" />\n  </div>\n  \n  <div class=\"post-contents-wrapper\">\n    <ReviewableCreatedBy @user={{@reviewable.target_created_by}} @tagName=\"\" />\n    <div class=\"post-contents\">\n      <ReviewablePostHeader\n        @reviewable={{@reviewable}}\n        @createdBy={{@reviewable.target_created_by}}\n        @tagName=\"\"\n      />\n      <div class=\"post-body\">\n        {{#if @reviewable.blank_post}}\n          <p>{{i18n \"review.deleted_post\"}}</p>\n        {{else}}\n          {{html-safe @reviewable.cooked}}\n        {{/if}}\n      </div>\n  \n      {{yield}}\n  \n      <ModelAccuracies @accuracies={{@reviewable.payload.accuracies}} />\n    </div>\n  </div>\n  */\n  {\n    \"id\": \"Cs7KWxKV\",\n    \"block\": \"[[[10,0],[14,0,\\\"flagged-post-header\\\"],[12],[1,\\\"\\\\n  \\\"],[8,[39,1],null,[[\\\"@reviewable\\\",\\\"@tagName\\\"],[[30,1],\\\"\\\"]],null],[1,\\\"\\\\n  \\\"],[8,[39,2],null,[[\\\"@reviewable\\\",\\\"@tagName\\\"],[[30,1],\\\"\\\"]],null],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[10,0],[14,0,\\\"post-contents-wrapper\\\"],[12],[1,\\\"\\\\n  \\\"],[8,[39,3],null,[[\\\"@user\\\",\\\"@tagName\\\"],[[30,1,[\\\"target_created_by\\\"]],\\\"\\\"]],null],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"post-contents\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[39,4],null,[[\\\"@reviewable\\\",\\\"@createdBy\\\",\\\"@tagName\\\"],[[30,1],[30,1,[\\\"target_created_by\\\"]],\\\"\\\"]],null],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"post-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"blank_post\\\"]],[[[1,\\\"        \\\"],[10,2],[12],[1,[28,[35,7],[\\\"review.deleted_post\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[1,[28,[35,8],[[30,1,[\\\"cooked\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[18,2,null],[1,\\\"\\\\n\\\\n    \\\"],[8,[39,10],null,[[\\\"@accuracies\\\"],[[30,1,[\\\"payload\\\",\\\"accuracies\\\"]]]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"@reviewable\\\",\\\"&default\\\"],false,[\\\"div\\\",\\\"reviewable-topic-link\\\",\\\"reviewable-post-edits\\\",\\\"reviewable-created-by\\\",\\\"reviewable-post-header\\\",\\\"if\\\",\\\"p\\\",\\\"i18n\\\",\\\"html-safe\\\",\\\"yield\\\",\\\"model-accuracies\\\"]]\",\n    \"moduleName\": \"discourse/plugins/discourse-ai/discourse/components/reviewable-ai-post.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"reviewable-ai-post\"));\n});","define(\"discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-category-suggester\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/components/dropdown-menu\", \"discourse/helpers/category-badge\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse-common/helpers/i18n\", \"float-kit/components/d-menu\", \"discourse/plugins/discourse-ai/discourse/lib/ai-helper-suggestions\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _modifier, _object, _service, _dButton, _dropdownMenu, _categoryBadge, _ajax, _ajaxError, _i18n, _dMenu, _aiHelperSuggestions, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiCategorySuggester extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"suggestions\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #suggestions = (() => (dt7948.i(this, \"suggestions\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"untriggers\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #untriggers = (() => (dt7948.i(this, \"untriggers\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"triggerIcon\", [_tracking.tracked], function () {\n      return \"discourse-sparkles\";\n    }))();\n    #triggerIcon = (() => (dt7948.i(this, \"triggerIcon\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"content\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #content = (() => (dt7948.i(this, \"content\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"topicContent\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #topicContent = (() => (dt7948.i(this, \"topicContent\"), void 0))();\n    constructor() {\n      super(...arguments);\n      if (!this.topicContent && this.args.composer?.reply === undefined) {\n        this.fetchTopicContent();\n      }\n    }\n    async fetchTopicContent() {\n      await (0, _ajax.ajax)(`/t/${this.args.buffered.content.id}.json`).then(_ref => {\n        let {\n          post_stream\n        } = _ref;\n        this.topicContent = post_stream.posts[0].cooked;\n      });\n    }\n    get showSuggestionButton() {\n      const composerFields = document.querySelector(\".composer-fields\");\n      this.content = this.args.composer?.reply || this.topicContent;\n      const showTrigger = this.content?.length > _aiHelperSuggestions.MIN_CHARACTER_COUNT;\n      if (composerFields) {\n        if (showTrigger) {\n          composerFields.classList.add(\"showing-ai-suggestions\");\n        } else {\n          composerFields.classList.remove(\"showing-ai-suggestions\");\n        }\n      }\n      return this.siteSettings.ai_embeddings_enabled && showTrigger;\n    }\n    async loadSuggestions() {\n      if (this.suggestions && !this.dMenu.expanded) {\n        return this.suggestions;\n      }\n      this.loading = true;\n      this.triggerIcon = \"spinner\";\n      try {\n        const {\n          assistant\n        } = await (0, _ajax.ajax)(\"/discourse-ai/ai-helper/suggest_category\", {\n          method: \"POST\",\n          data: {\n            text: this.content\n          }\n        });\n        this.suggestions = assistant;\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      } finally {\n        this.loading = false;\n        this.triggerIcon = \"rotate\";\n      }\n      return this.suggestions;\n    }\n    static #_8 = (() => dt7948.n(this.prototype, \"loadSuggestions\", [_object.action]))();\n    applySuggestion(suggestion) {\n      const composer = this.args.composer;\n      const buffered = this.args.buffered;\n      if (composer) {\n        composer.set(\"categoryId\", suggestion.id);\n        composer.get(\"categoryId\");\n      }\n      if (buffered) {\n        this.args.buffered.set(\"category_id\", suggestion.id);\n      }\n      return this.dMenu.close();\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"applySuggestion\", [_object.action]))();\n    onRegisterApi(api) {\n      this.dMenu = api;\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"onRegisterApi\", [_object.action]))();\n    onClose() {\n      this.triggerIcon = \"discourse-sparkles\";\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"onClose\", [_object.action]))();\n    static #_12 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.showSuggestionButton}}\n          <DMenu\n            @title={{i18n \"discourse_ai.ai_helper.suggest\"}}\n            @icon={{this.triggerIcon}}\n            @identifier=\"ai-category-suggester\"\n            @onClose={{this.onClose}}\n            @triggerClass=\"btn-transparent suggestion-button suggest-category-button {{if\n              this.loading\n              'is-loading'\n            }}\"\n            @contentClass=\"ai-suggestions-menu\"\n            @onRegisterApi={{this.onRegisterApi}}\n            @modalForMobile={{true}}\n            @untriggers={{this.untriggers}}\n            {{on \"click\" this.loadSuggestions}}\n          >\n            <:content>\n              {{#unless this.loading}}\n                <DropdownMenu as |dropdown|>\n                  {{#each this.suggestions as |suggestion index|}}\n                    <dropdown.item>\n                      <DButton\n                        class=\"category-row\"\n                        data-name={{suggestion.name}}\n                        data-value={{index}}\n                        title={{suggestion.name}}\n                        @action={{fn this.applySuggestion suggestion}}\n                      >\n                        <div class=\"category-status\">\n                          {{categoryBadge suggestion}}\n                          <span class=\"topic-count\">x\n                            {{suggestion.topicCount}}</span>\n                        </div>\n                      </DButton>\n                    </dropdown.item>\n                  {{/each}}\n                </DropdownMenu>\n              {{/unless}}\n            </:content>\n          </DMenu>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"ckFiQc91\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showSuggestionButton\\\"]],[[[1,\\\"      \\\"],[8,[32,0],[[4,[32,2],[\\\"click\\\",[30,0,[\\\"loadSuggestions\\\"]]],null]],[[\\\"@title\\\",\\\"@icon\\\",\\\"@identifier\\\",\\\"@onClose\\\",\\\"@triggerClass\\\",\\\"@contentClass\\\",\\\"@onRegisterApi\\\",\\\"@modalForMobile\\\",\\\"@untriggers\\\"],[[28,[32,1],[\\\"discourse_ai.ai_helper.suggest\\\"],null],[30,0,[\\\"triggerIcon\\\"]],\\\"ai-category-suggester\\\",[30,0,[\\\"onClose\\\"]],[29,[\\\"btn-transparent suggestion-button suggest-category-button \\\",[52,[30,0,[\\\"loading\\\"]],\\\"is-loading\\\"]]],\\\"ai-suggestions-menu\\\",[30,0,[\\\"onRegisterApi\\\"]],true,[30,0,[\\\"untriggers\\\"]]]],[[\\\"content\\\"],[[[[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"loading\\\"]]],[[[1,\\\"            \\\"],[8,[32,3],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,3],[[28,[31,3],[[30,0,[\\\"suggestions\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[8,[30,1,[\\\"item\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[32,4],[[24,0,\\\"category-row\\\"],[16,\\\"data-name\\\",[30,2,[\\\"name\\\"]]],[16,\\\"data-value\\\",[30,3]],[16,\\\"title\\\",[30,2,[\\\"name\\\"]]]],[[\\\"@action\\\"],[[28,[32,5],[[30,0,[\\\"applySuggestion\\\"]],[30,2]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"category-status\\\"],[12],[1,\\\"\\\\n                      \\\"],[1,[28,[32,6],[[30,2]],null]],[1,\\\"\\\\n                      \\\"],[10,1],[14,0,\\\"topic-count\\\"],[12],[1,\\\"x\\\\n                        \\\"],[1,[30,2,[\\\"topicCount\\\"]]],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"]],[]]]]],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[2,3]],null],[1,\\\"            \\\"]],[1]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"dropdown\\\",\\\"suggestion\\\",\\\"index\\\"],false,[\\\"if\\\",\\\"unless\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-category-suggester.js\",\n      \"scope\": () => [_dMenu.default, _i18n.default, _modifier.on, _dropdownMenu.default, _dButton.default, _helper.fn, _categoryBadge.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiCategorySuggester;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-tag-suggester\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/components/dropdown-menu\", \"discourse/helpers/discourse-tag\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse-common/helpers/i18n\", \"float-kit/components/d-menu\", \"discourse/plugins/discourse-ai/discourse/lib/ai-helper-suggestions\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _modifier, _object, _service, _dButton, _dropdownMenu, _discourseTag, _ajax, _ajaxError, _i18n, _dMenu, _aiHelperSuggestions, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTagSuggester extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"toasts\", [_service.service]))();\n    #toasts = (() => (dt7948.i(this, \"toasts\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"suggestions\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #suggestions = (() => (dt7948.i(this, \"suggestions\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"untriggers\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #untriggers = (() => (dt7948.i(this, \"untriggers\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"triggerIcon\", [_tracking.tracked], function () {\n      return \"discourse-sparkles\";\n    }))();\n    #triggerIcon = (() => (dt7948.i(this, \"triggerIcon\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"content\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #content = (() => (dt7948.i(this, \"content\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"topicContent\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #topicContent = (() => (dt7948.i(this, \"topicContent\"), void 0))();\n    constructor() {\n      super(...arguments);\n      if (!this.topicContent && this.args.composer?.reply === undefined) {\n        this.fetchTopicContent();\n      }\n    }\n    async fetchTopicContent() {\n      await (0, _ajax.ajax)(`/t/${this.args.buffered.content.id}.json`).then(_ref => {\n        let {\n          post_stream\n        } = _ref;\n        this.topicContent = post_stream.posts[0].cooked;\n      });\n    }\n    get showSuggestionButton() {\n      const composerFields = document.querySelector(\".composer-fields\");\n      this.content = this.args.composer?.reply || this.topicContent;\n      const showTrigger = this.content?.length > _aiHelperSuggestions.MIN_CHARACTER_COUNT;\n      if (composerFields) {\n        if (showTrigger) {\n          composerFields.classList.add(\"showing-ai-suggestions\");\n        } else {\n          composerFields.classList.remove(\"showing-ai-suggestions\");\n        }\n      }\n      return this.siteSettings.ai_embeddings_enabled && showTrigger;\n    }\n    get showDropdown() {\n      if (this.suggestions?.length <= 0) {\n        this.dMenu.close();\n      }\n      return !this.loading && this.suggestions?.length > 0;\n    }\n    async loadSuggestions() {\n      if (this.suggestions && this.suggestions?.length > 0 && !this.dMenu.expanded) {\n        return this.suggestions;\n      }\n      this.loading = true;\n      this.triggerIcon = \"spinner\";\n      try {\n        const {\n          assistant\n        } = await (0, _ajax.ajax)(\"/discourse-ai/ai-helper/suggest_tags\", {\n          method: \"POST\",\n          data: {\n            text: this.content\n          }\n        });\n        this.suggestions = assistant;\n        const model = this.args.composer ? this.args.composer : this.args.buffered;\n        if (this.#tagSelectorHasValues()) {\n          this.suggestions = this.suggestions.filter(s => !model.get(\"tags\").includes(s.name));\n        }\n        if (this.suggestions?.length <= 0) {\n          this.toasts.error({\n            class: \"ai-suggestion-error\",\n            duration: 3000,\n            data: {\n              message: (0, _i18n.default)(\"discourse_ai.ai_helper.suggest_errors.no_suggestions\")\n            }\n          });\n          return;\n        }\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      } finally {\n        this.loading = false;\n        this.triggerIcon = \"rotate\";\n      }\n      return this.suggestions;\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"loadSuggestions\", [_object.action]))();\n    #tagSelectorHasValues() {\n      const model = this.args.composer ? this.args.composer : this.args.buffered;\n      return model.get(\"tags\") && model.get(\"tags\").length > 0;\n    }\n    #removedAppliedTag(suggestion) {\n      return this.suggestions = this.suggestions.filter(s => s.id !== suggestion.id);\n    }\n    applySuggestion(suggestion) {\n      const maxTags = this.siteSettings.max_tags_per_topic;\n      const model = this.args.composer ? this.args.composer : this.args.buffered;\n      if (!model) {\n        return;\n      }\n      const tags = model.get(\"tags\");\n      if (!tags) {\n        model.set(\"tags\", [suggestion.name]);\n        this.#removedAppliedTag(suggestion);\n        return;\n      }\n      if (tags?.length >= maxTags) {\n        return this.toasts.error({\n          class: \"ai-suggestion-error\",\n          duration: 3000,\n          data: {\n            message: (0, _i18n.default)(\"discourse_ai.ai_helper.suggest_errors.too_many_tags\", {\n              count: maxTags\n            })\n          }\n        });\n      }\n      tags.push(suggestion.name);\n      model.set(\"tags\", [...tags]);\n      suggestion.disabled = true;\n      this.#removedAppliedTag(suggestion);\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"applySuggestion\", [_object.action]))();\n    onRegisterApi(api) {\n      this.dMenu = api;\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"onRegisterApi\", [_object.action]))();\n    onClose() {\n      if (this.suggestions?.length > 0) {\n        // If all suggestions have been used,\n        // re-triggering when no suggestions present\n        // will cause computation issues with\n        // setting the icon, so we prevent it\n        this.triggerIcon = \"discourse-sparkles\";\n      }\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"onClose\", [_object.action]))();\n    static #_13 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.showSuggestionButton}}\n          <DMenu\n            @title={{i18n \"discourse_ai.ai_helper.suggest\"}}\n            @icon={{this.triggerIcon}}\n            @identifier=\"ai-tag-suggester\"\n            @onClose={{this.onClose}}\n            @triggerClass=\"btn-transparent suggestion-button suggest-tags-button {{if\n              this.loading\n              'is-loading'\n            }}\"\n            @contentClass=\"ai-suggestions-menu\"\n            @onRegisterApi={{this.onRegisterApi}}\n            @modalForMobile={{true}}\n            @untriggers={{this.untriggers}}\n            {{on \"click\" this.loadSuggestions}}\n          >\n            <:content>\n              {{#if this.showDropdown}}\n                <DropdownMenu as |dropdown|>\n                  {{#each this.suggestions as |suggestion index|}}\n                    <dropdown.item>\n                      <DButton\n                        class=\"tag-row\"\n                        data-name={{suggestion.name}}\n                        data-value={{index}}\n                        title={{suggestion.name}}\n                        @translatedLabel={{suggestion.name}}\n                        @disabled={{this.isDisabled suggestion}}\n                        @action={{fn this.applySuggestion suggestion}}\n                      >\n                        {{discourseTag\n                          suggestion.name\n                          count=suggestion.count\n                          noHref=true\n                        }}\n                      </DButton>\n                    </dropdown.item>\n                  {{/each}}\n                </DropdownMenu>\n              {{/if}}\n            </:content>\n          </DMenu>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"8IJI8bF5\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showSuggestionButton\\\"]],[[[1,\\\"      \\\"],[8,[32,0],[[4,[32,2],[\\\"click\\\",[30,0,[\\\"loadSuggestions\\\"]]],null]],[[\\\"@title\\\",\\\"@icon\\\",\\\"@identifier\\\",\\\"@onClose\\\",\\\"@triggerClass\\\",\\\"@contentClass\\\",\\\"@onRegisterApi\\\",\\\"@modalForMobile\\\",\\\"@untriggers\\\"],[[28,[32,1],[\\\"discourse_ai.ai_helper.suggest\\\"],null],[30,0,[\\\"triggerIcon\\\"]],\\\"ai-tag-suggester\\\",[30,0,[\\\"onClose\\\"]],[29,[\\\"btn-transparent suggestion-button suggest-tags-button \\\",[52,[30,0,[\\\"loading\\\"]],\\\"is-loading\\\"]]],\\\"ai-suggestions-menu\\\",[30,0,[\\\"onRegisterApi\\\"]],true,[30,0,[\\\"untriggers\\\"]]]],[[\\\"content\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showDropdown\\\"]],[[[1,\\\"            \\\"],[8,[32,3],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"suggestions\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[8,[30,1,[\\\"item\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[32,4],[[24,0,\\\"tag-row\\\"],[16,\\\"data-name\\\",[30,2,[\\\"name\\\"]]],[16,\\\"data-value\\\",[30,3]],[16,\\\"title\\\",[30,2,[\\\"name\\\"]]]],[[\\\"@translatedLabel\\\",\\\"@disabled\\\",\\\"@action\\\"],[[30,2,[\\\"name\\\"]],[28,[30,0,[\\\"isDisabled\\\"]],[[30,2]],null],[28,[32,5],[[30,0,[\\\"applySuggestion\\\"]],[30,2]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[1,[28,[32,6],[[30,2,[\\\"name\\\"]]],[[\\\"count\\\",\\\"noHref\\\"],[[30,2,[\\\"count\\\"]],true]]]],[1,\\\"\\\\n                  \\\"]],[]]]]],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[2,3]],null],[1,\\\"            \\\"]],[1]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"dropdown\\\",\\\"suggestion\\\",\\\"index\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-tag-suggester.js\",\n      \"scope\": () => [_dMenu.default, _i18n.default, _modifier.on, _dropdownMenu.default, _dButton.default, _helper.fn, _discourseTag.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiTagSuggester;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-title-suggester\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"discourse/components/d-button\", \"discourse/components/dropdown-menu\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse-common/helpers/i18n\", \"float-kit/components/d-menu\", \"discourse/plugins/discourse-ai/discourse/lib/ai-helper-suggestions\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _modifier, _object, _dButton, _dropdownMenu, _ajax, _ajaxError, _i18n, _dMenu, _aiHelperSuggestions, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTitleSuggester extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"suggestions\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #suggestions = (() => (dt7948.i(this, \"suggestions\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"untriggers\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #untriggers = (() => (dt7948.i(this, \"untriggers\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"triggerIcon\", [_tracking.tracked], function () {\n      return \"discourse-sparkles\";\n    }))();\n    #triggerIcon = (() => (dt7948.i(this, \"triggerIcon\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"content\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #content = (() => (dt7948.i(this, \"content\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"topicContent\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #topicContent = (() => (dt7948.i(this, \"topicContent\"), void 0))();\n    constructor() {\n      super(...arguments);\n      if (!this.topicContent && this.args.composer?.reply === undefined) {\n        this.fetchTopicContent();\n      }\n    }\n    async fetchTopicContent() {\n      await (0, _ajax.ajax)(`/t/${this.args.buffered.content.id}.json`).then(_ref => {\n        let {\n          post_stream\n        } = _ref;\n        this.topicContent = post_stream.posts[0].cooked;\n      });\n    }\n    get showSuggestionButton() {\n      const composerFields = document.querySelector(\".composer-fields\");\n      const editTopicTitleField = document.querySelector(\".edit-topic-title\");\n      this.content = this.args.composer?.reply || this.topicContent;\n      const showTrigger = this.content?.length > _aiHelperSuggestions.MIN_CHARACTER_COUNT;\n      if (composerFields) {\n        if (showTrigger) {\n          composerFields.classList.add(\"showing-ai-suggestions\");\n        } else {\n          composerFields.classList.remove(\"showing-ai-suggestions\");\n        }\n      }\n      if (editTopicTitleField) {\n        if (showTrigger) {\n          editTopicTitleField.classList.add(\"showing-ai-suggestions\");\n        } else {\n          editTopicTitleField.classList.remove(\"showing-ai-suggestions\");\n        }\n      }\n      return showTrigger;\n    }\n    async loadSuggestions() {\n      if (this.suggestions && !this.dMenu.expanded) {\n        return this.suggestions;\n      }\n      this.loading = true;\n      this.triggerIcon = \"spinner\";\n      try {\n        const {\n          suggestions\n        } = await (0, _ajax.ajax)(\"/discourse-ai/ai-helper/suggest_title\", {\n          method: \"POST\",\n          data: {\n            text: this.content\n          }\n        });\n        this.suggestions = suggestions;\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      } finally {\n        this.loading = false;\n        this.triggerIcon = \"rotate\";\n      }\n      return this.suggestions;\n    }\n    static #_7 = (() => dt7948.n(this.prototype, \"loadSuggestions\", [_object.action]))();\n    applySuggestion(suggestion) {\n      const model = this.args.composer ? this.args.composer : this.args.buffered;\n      if (!model) {\n        return;\n      }\n      model.set(\"title\", suggestion);\n      this.dMenu.close();\n    }\n    static #_8 = (() => dt7948.n(this.prototype, \"applySuggestion\", [_object.action]))();\n    onRegisterApi(api) {\n      this.dMenu = api;\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"onRegisterApi\", [_object.action]))();\n    onClose() {\n      this.triggerIcon = \"discourse-sparkles\";\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"onClose\", [_object.action]))();\n    static #_11 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.showSuggestionButton}}\n          <DMenu\n            @title={{i18n \"discourse_ai.ai_helper.suggest\"}}\n            @icon={{this.triggerIcon}}\n            @identifier=\"ai-title-suggester\"\n            @onClose={{this.onClose}}\n            @triggerClass=\"btn-transparent suggestion-button suggest-titles-button {{if\n              this.loading\n              'is-loading'\n            }}\"\n            @contentClass=\"ai-suggestions-menu\"\n            @onRegisterApi={{this.onRegisterApi}}\n            @modalForMobile={{true}}\n            @untriggers={{this.untriggers}}\n            {{on \"click\" this.loadSuggestions}}\n          >\n            <:content>\n              {{#unless this.loading}}\n                <DropdownMenu as |dropdown|>\n                  {{#each this.suggestions as |suggestion index|}}\n                    <dropdown.item>\n                      <DButton\n                        data-name={{suggestion}}\n                        data-value={{index}}\n                        title={{suggestion}}\n                        @action={{fn this.applySuggestion suggestion}}\n                      >\n                        {{suggestion}}\n                      </DButton>\n                    </dropdown.item>\n                  {{/each}}\n                </DropdownMenu>\n              {{/unless}}\n            </:content>\n          </DMenu>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"+B/3+brg\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showSuggestionButton\\\"]],[[[1,\\\"      \\\"],[8,[32,0],[[4,[32,2],[\\\"click\\\",[30,0,[\\\"loadSuggestions\\\"]]],null]],[[\\\"@title\\\",\\\"@icon\\\",\\\"@identifier\\\",\\\"@onClose\\\",\\\"@triggerClass\\\",\\\"@contentClass\\\",\\\"@onRegisterApi\\\",\\\"@modalForMobile\\\",\\\"@untriggers\\\"],[[28,[32,1],[\\\"discourse_ai.ai_helper.suggest\\\"],null],[30,0,[\\\"triggerIcon\\\"]],\\\"ai-title-suggester\\\",[30,0,[\\\"onClose\\\"]],[29,[\\\"btn-transparent suggestion-button suggest-titles-button \\\",[52,[30,0,[\\\"loading\\\"]],\\\"is-loading\\\"]]],\\\"ai-suggestions-menu\\\",[30,0,[\\\"onRegisterApi\\\"]],true,[30,0,[\\\"untriggers\\\"]]]],[[\\\"content\\\"],[[[[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"loading\\\"]]],[[[1,\\\"            \\\"],[8,[32,3],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,3],[[28,[31,3],[[30,0,[\\\"suggestions\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[8,[30,1,[\\\"item\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[32,4],[[16,\\\"data-name\\\",[30,2]],[16,\\\"data-value\\\",[30,3]],[16,\\\"title\\\",[30,2]]],[[\\\"@action\\\"],[[28,[32,5],[[30,0,[\\\"applySuggestion\\\"]],[30,2]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[1,[30,2]],[1,\\\"\\\\n                  \\\"]],[]]]]],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[2,3]],null],[1,\\\"            \\\"]],[1]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"dropdown\\\",\\\"suggestion\\\",\\\"index\\\"],false,[\\\"if\\\",\\\"unless\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-title-suggester.js\",\n      \"scope\": () => [_dMenu.default, _i18n.default, _modifier.on, _dropdownMenu.default, _dButton.default, _helper.fn],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiTitleSuggester;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/thumbnail-suggestion-item\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"discourse/components/d-button\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _dButton, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class ThumbnailSuggestionItem extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"selected\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #selected = (() => (dt7948.i(this, \"selected\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"selectIcon\", [_tracking.tracked], function () {\n      return \"far-circle\";\n    }))();\n    #selectIcon = (() => (dt7948.i(this, \"selectIcon\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"selectLabel\", [_tracking.tracked], function () {\n      return \"discourse_ai.ai_helper.thumbnail_suggestions.select\";\n    }))();\n    #selectLabel = (() => (dt7948.i(this, \"selectLabel\"), void 0))();\n    toggleSelection(thumbnail) {\n      if (this.selected) {\n        this.selectIcon = \"far-circle\";\n        this.selectLabel = \"discourse_ai.ai_helper.thumbnail_suggestions.select\";\n        this.selected = false;\n        return this.args.removeSelection(thumbnail);\n      }\n      this.selectIcon = \"check-circle\";\n      this.selectLabel = \"discourse_ai.ai_helper.thumbnail_suggestions.selected\";\n      this.selected = true;\n      return this.args.addSelection(thumbnail);\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"toggleSelection\", [_object.action]))();\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"ai-thumbnail-suggestions__item\">\n          <DButton\n            @icon={{this.selectIcon}}\n            @label={{this.selectLabel}}\n            @action={{fn this.toggleSelection @thumbnail}}\n            class={{if this.selected \"btn-primary\"}}\n          />\n          <img\n            src={{@thumbnail.url}}\n            loading=\"lazy\"\n            width={{@thumbnail.thumbnail_width}}\n            height={{@thumbnail.thumbnail_height}}\n          />\n        </div>\n      \n    */\n    {\n      \"id\": \"BsBgpDKw\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-thumbnail-suggestions__item\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,0],[[16,0,[52,[30,0,[\\\"selected\\\"]],\\\"btn-primary\\\"]]],[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\"],[[30,0,[\\\"selectIcon\\\"]],[30,0,[\\\"selectLabel\\\"]],[28,[32,1],[[30,0,[\\\"toggleSelection\\\"]],[30,1]],null]]],null],[1,\\\"\\\\n      \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[30,1,[\\\"url\\\"]]],[14,\\\"loading\\\",\\\"lazy\\\"],[15,\\\"width\\\",[30,1,[\\\"thumbnail_width\\\"]]],[15,\\\"height\\\",[30,1,[\\\"thumbnail_height\\\"]]],[12],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@thumbnail\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/thumbnail-suggestion-item.js\",\n      \"scope\": () => [_dButton.default, _helper.fn],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = ThumbnailSuggestionItem;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/admin-dashboard-tabs-after/admin-sentiment-dashbboard\", [\"exports\", \"@glimmer/component\", \"@ember/routing\", \"discourse-common/helpers/i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _routing, _i18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AISentimentDashboard extends _component.default {\n    static shouldRender(_outletArgs, helper) {\n      return helper.siteSettings.ai_sentiment_enabled;\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <li class=\"navigation-item sentiment\">\n          <LinkTo @route=\"admin.dashboardSentiment\" class=\"navigation-link\">\n            {{i18n \"discourse_ai.sentiments.dashboard.title\"}}\n          </LinkTo>\n        </li>\n      \n    */\n    {\n      \"id\": \"aCrw9598\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,\\\"li\\\"],[14,0,\\\"navigation-item sentiment\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,0],[[24,0,\\\"navigation-link\\\"]],[[\\\"@route\\\"],[\\\"admin.dashboardSentiment\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[32,1],[\\\"discourse_ai.sentiments.dashboard.title\\\"],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/admin-dashboard-tabs-after/admin-sentiment-dashbboard.js\",\n      \"scope\": () => [_routing.LinkTo, _i18n.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AISentimentDashboard;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/after-composer-category-input/ai-category-suggestion\", [\"exports\", \"@glimmer/component\", \"discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-category-suggester\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _aiCategorySuggester, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiCategorySuggestion extends _component.default {\n    static shouldRender(outletArgs, helper) {\n      return (0, _showAiHelper.showComposerAiHelper)(outletArgs?.composer, helper.siteSettings, helper.currentUser, \"suggestions\");\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiCategorySuggester @composer={{@outletArgs.composer}} />\n      \n    */\n    {\n      \"id\": \"KC2fBykS\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@composer\\\"],[[30,1,[\\\"composer\\\"]]]],null],[1,\\\"\\\\n  \\\"]],[\\\"@outletArgs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/after-composer-category-input/ai-category-suggestion.js\",\n      \"scope\": () => [_aiCategorySuggester.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiCategorySuggestion;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/after-composer-tag-input/ai-tag-suggestion\", [\"exports\", \"@glimmer/component\", \"discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-tag-suggester\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _aiTagSuggester, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTagSuggestion extends _component.default {\n    static shouldRender(outletArgs, helper) {\n      return (0, _showAiHelper.showComposerAiHelper)(outletArgs?.composer, helper.siteSettings, helper.currentUser, \"suggestions\");\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiTagSuggester @composer={{@outletArgs.composer}} />\n      \n    */\n    {\n      \"id\": \"kGrC+f/O\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@composer\\\"],[[30,1,[\\\"composer\\\"]]]],null],[1,\\\"\\\\n  \\\"]],[\\\"@outletArgs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/after-composer-tag-input/ai-tag-suggestion.js\",\n      \"scope\": () => [_aiTagSuggester.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiTagSuggestion;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/after-composer-title-input/ai-title-suggestion\", [\"exports\", \"@glimmer/component\", \"discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-title-suggester\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _aiTitleSuggester, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTitleSuggestion extends _component.default {\n    static shouldRender(outletArgs, helper) {\n      return (0, _showAiHelper.showComposerAiHelper)(outletArgs?.composer, helper.siteSettings, helper.currentUser, \"suggestions\");\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiTitleSuggester @composer={{@outletArgs.composer}} />\n      \n    */\n    {\n      \"id\": \"/0ln7rS4\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@composer\\\"],[[30,1,[\\\"composer\\\"]]]],null],[1,\\\"\\\\n  \\\"]],[\\\"@outletArgs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/after-composer-title-input/ai-title-suggestion.js\",\n      \"scope\": () => [_aiTitleSuggester.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiTitleSuggestion;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/after-d-editor/composer-open\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"discourse-i18n\"], function (_exports, _component, _object, _service, _discourseI18n) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class _default extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    get composerModel() {\n      return this.args?.outletArgs?.composer;\n    }\n    get renderChatWarning() {\n      return this.siteSettings.ai_bot_enable_chat_warning;\n    }\n    get aiBotClasses() {\n      if (this.composerModel?.title === (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.default_pm_prefix\")) {\n        return \"ai-bot-chat\";\n      } else {\n        return \"ai-bot-pm\";\n      }\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"aiBotClasses\", [(0, _object.computed)(\"composerModel.targetRecipients\", \"composerModel.title\")]))();\n    get isAiBotChat() {\n      if (this.composerModel && this.composerModel.targetRecipients && this.currentUser.ai_enabled_chat_bots) {\n        let recipients = this.composerModel.targetRecipients.split(\",\");\n        return this.currentUser.ai_enabled_chat_bots.any(bot => recipients.any(username => username === bot.username));\n      }\n      return false;\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"isAiBotChat\", [(0, _object.computed)(\"composerModel.targetRecipients\")]))();\n  }\n  _exports.default = _default;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/after-search-result-entry/search-result-decoration\", [\"exports\", \"discourse-common/helpers/d-icon\", \"discourse-common/helpers/i18n\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _dIcon, _i18n, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const SearchResultDecoration = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n    <div\n      class=\"ai-result__icon\"\n      title={{i18n \"discourse_ai.embeddings.ai_generated_result\"}}\n    >\n      {{icon \"discourse-sparkles\"}}\n    </div>\n  \n  */\n  {\n    \"id\": \"+zzrKPCx\",\n    \"block\": \"[[[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"ai-result__icon\\\"],[15,\\\"title\\\",[28,[32,0],[\\\"discourse_ai.embeddings.ai_generated_result\\\"],null]],[12],[1,\\\"\\\\n    \\\"],[1,[28,[32,1],[\\\"discourse-sparkles\\\"],null]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[],false,[]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/after-search-result-entry/search-result-decoration.js\",\n    \"scope\": () => [_i18n.default, _dIcon.default],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"search-result-decoration:SearchResultDecoration\"));\n  var _default = _exports.default = SearchResultDecoration;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/before-create-topic-button/topic-list-gist-toggle\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"discourse/plugins/discourse-ai/discourse/components/ai-gist-toggle\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _aiGistToggle, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTopicGist extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"topicThumbnails\", [_service.service]))();\n    #topicThumbnails = (() => (dt7948.i(this, \"topicThumbnails\"), void 0))();\n    get shouldShow() {\n      return !this.topicThumbnails?.enabledForRoute;\n    }\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiGistToggle />\n      \n    */\n    {\n      \"id\": \"QZDHnQQB\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,null,null],[1,\\\"\\\\n  \\\"]],[],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/before-create-topic-button/topic-list-gist-toggle.js\",\n      \"scope\": () => [_aiGistToggle.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiTopicGist;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/composer-after-save-or-cancel/ai-image-caption-loader\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"discourse/helpers/loading-spinner\", \"discourse-common/helpers/i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _loadingSpinner, _i18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiImageCaptionLoader extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"imageCaptionPopup\", [_service.service]))();\n    #imageCaptionPopup = (() => (dt7948.i(this, \"imageCaptionPopup\"), void 0))();\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.imageCaptionPopup.showAutoCaptionLoader}}\n          <div class=\"auto-image-caption-loader\">\n            {{loadingSpinner size=\"small\"}}\n            <span>{{i18n\n                \"discourse_ai.ai_helper.image_caption.automatic_caption_loading\"\n              }}</span>\n          </div>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"/15Zu2iM\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"imageCaptionPopup\\\",\\\"showAutoCaptionLoader\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"auto-image-caption-loader\\\"],[12],[1,\\\"\\\\n        \\\"],[1,[28,[32,0],null,[[\\\"size\\\"],[\\\"small\\\"]]]],[1,\\\"\\\\n        \\\"],[10,1],[12],[1,[28,[32,1],[\\\"discourse_ai.ai_helper.image_caption.automatic_caption_loading\\\"],null]],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/composer-after-save-or-cancel/ai-image-caption-loader.js\",\n      \"scope\": () => [_loadingSpinner.default, _i18n.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiImageCaptionLoader;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/composer-fields/persona-llm-selector\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/runloop\", \"@ember/service\", \"discourse/lib/key-value-store\", \"select-kit/components/dropdown-select-box\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _runloop, _service, _keyValueStore, _dropdownSelectBox, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  function isBotMessage(composer, currentUser) {\n    if (composer && composer.targetRecipients && currentUser.ai_enabled_chat_bots) {\n      const reciepients = composer.targetRecipients.split(\",\");\n      return currentUser.ai_enabled_chat_bots.filter(bot => bot.username).any(bot => reciepients.any(username => username === bot.username));\n    }\n    return false;\n  }\n  class BotSelector extends _component.default {\n    static shouldRender(args, container) {\n      return container?.currentUser?.ai_enabled_personas && isBotMessage(args.model, container.currentUser);\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"llm\", [_tracking.tracked]))();\n    #llm = (() => (dt7948.i(this, \"llm\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"allowLLMSelector\", [_tracking.tracked], function () {\n      return true;\n    }))();\n    #allowLLMSelector = (() => (dt7948.i(this, \"allowLLMSelector\"), void 0))();\n    STORE_NAMESPACE = \"discourse_ai_persona_selector_\";\n    LLM_STORE_NAMESPACE = \"discourse_ai_llm_selector_\";\n    preferredPersonaStore = (() => new _keyValueStore.default(this.STORE_NAMESPACE))();\n    preferredLlmStore = (() => new _keyValueStore.default(this.LLM_STORE_NAMESPACE))();\n    constructor() {\n      super(...arguments);\n      if (this.botOptions && this.botOptions.length && this.composer) {\n        let personaId = this.preferredPersonaStore.getObject(\"id\");\n        this._value = this.botOptions[0].id;\n        if (personaId) {\n          personaId = parseInt(personaId, 10);\n          if (this.botOptions.any(bot => bot.id === personaId)) {\n            this._value = personaId;\n          }\n        }\n        this.composer.metaData = {\n          ai_persona_id: this._value\n        };\n        this.setAllowLLMSelector();\n        if (this.hasLlmSelector) {\n          let llm = this.preferredLlmStore.getObject(\"id\");\n          const llmOption = this.llmOptions.find(innerLlmOption => innerLlmOption.id === llm) || this.llmOptions[0];\n          if (llmOption) {\n            llm = llmOption.id;\n          } else {\n            llm = \"\";\n          }\n          if (llm) {\n            (0, _runloop.next)(() => {\n              this.currentLlm = llm;\n            });\n          }\n        }\n        (0, _runloop.next)(() => {\n          this.resetTargetRecipients();\n        });\n      }\n    }\n    get composer() {\n      return this.args?.outletArgs?.model;\n    }\n    get hasLlmSelector() {\n      return this.currentUser.ai_enabled_chat_bots.any(bot => !bot.is_persona);\n    }\n    get botOptions() {\n      if (this.currentUser.ai_enabled_personas) {\n        let enabledPersonas = this.currentUser.ai_enabled_personas;\n        if (!this.hasLlmSelector) {\n          enabledPersonas = enabledPersonas.filter(persona => persona.username);\n        }\n        return enabledPersonas.map(persona => {\n          return {\n            id: persona.id,\n            name: persona.name,\n            description: persona.description\n          };\n        });\n      }\n    }\n    get filterable() {\n      return this.botOptions.length > 4;\n    }\n    get value() {\n      return this._value;\n    }\n    set value(newValue) {\n      this._value = newValue;\n      this.preferredPersonaStore.setObject({\n        key: \"id\",\n        value: newValue\n      });\n      this.composer.metaData = {\n        ai_persona_id: newValue\n      };\n      this.setAllowLLMSelector();\n      this.resetTargetRecipients();\n    }\n    setAllowLLMSelector() {\n      if (!this.hasLlmSelector) {\n        this.allowLLMSelector = false;\n        return;\n      }\n      const persona = this.currentUser.ai_enabled_personas.find(innerPersona => innerPersona.id === this._value);\n      this.allowLLMSelector = !persona?.force_default_llm;\n    }\n    get currentLlm() {\n      return this.llm;\n    }\n    set currentLlm(newValue) {\n      this.llm = newValue;\n      this.preferredLlmStore.setObject({\n        key: \"id\",\n        value: newValue\n      });\n      this.resetTargetRecipients();\n    }\n    resetTargetRecipients() {\n      if (this.allowLLMSelector) {\n        const botUsername = this.currentUser.ai_enabled_chat_bots.find(bot => bot.id === this.llm).username;\n        this.composer.set(\"targetRecipients\", botUsername);\n      } else {\n        const persona = this.currentUser.ai_enabled_personas.find(innerPersona => innerPersona.id === this._value);\n        this.composer.set(\"targetRecipients\", persona.username || \"\");\n      }\n    }\n    get llmOptions() {\n      const availableBots = this.currentUser.ai_enabled_chat_bots.filter(bot => !bot.is_persona).filter(Boolean);\n      return availableBots.map(bot => {\n        return {\n          id: bot.id,\n          name: bot.display_name\n        };\n      });\n    }\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"persona-llm-selector\">\n          <div class=\"gpt-persona\">\n            <DropdownSelectBox\n              class=\"persona-llm-selector__persona-dropdown\"\n              @value={{this.value}}\n              @content={{this.botOptions}}\n              @options={{hash icon=\"robot\" filterable=this.filterable}}\n            />\n          </div>\n          {{#if this.allowLLMSelector}}\n            <div class=\"llm-selector\">\n              <DropdownSelectBox\n                class=\"persona-llm-selector__llm-dropdown\"\n                @value={{this.currentLlm}}\n                @content={{this.llmOptions}}\n                @options={{hash icon=\"globe\"}}\n              />\n            </div>\n          {{/if}}\n        </div>\n      \n    */\n    {\n      \"id\": \"3PhHsEc5\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"persona-llm-selector\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"gpt-persona\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[32,0],[[24,0,\\\"persona-llm-selector__persona-dropdown\\\"]],[[\\\"@value\\\",\\\"@content\\\",\\\"@options\\\"],[[30,0,[\\\"value\\\"]],[30,0,[\\\"botOptions\\\"]],[28,[32,1],null,[[\\\"icon\\\",\\\"filterable\\\"],[\\\"robot\\\",[30,0,[\\\"filterable\\\"]]]]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"allowLLMSelector\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"llm-selector\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,0],[[24,0,\\\"persona-llm-selector__llm-dropdown\\\"]],[[\\\"@value\\\",\\\"@content\\\",\\\"@options\\\"],[[30,0,[\\\"currentLlm\\\"]],[30,0,[\\\"llmOptions\\\"]],[28,[32,1],null,[[\\\"icon\\\"],[\\\"globe\\\"]]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/composer-fields/persona-llm-selector.js\",\n      \"scope\": () => [_dropdownSelectBox.default, _helper.hash],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = BotSelector;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/edit-topic-category__after/ai-category-suggestion\", [\"exports\", \"@glimmer/component\", \"discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-category-suggester\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _aiCategorySuggester, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiCategorySuggestion extends _component.default {\n    static shouldRender(outletArgs, helper) {\n      return (0, _showAiHelper.showComposerAiHelper)(outletArgs?.composer, helper.siteSettings, helper.currentUser, \"suggestions\");\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiCategorySuggester @buffered={{@outletArgs.buffered}} />\n      \n    */\n    {\n      \"id\": \"pUU9xiYM\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@buffered\\\"],[[30,1,[\\\"buffered\\\"]]]],null],[1,\\\"\\\\n  \\\"]],[\\\"@outletArgs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/edit-topic-category__after/ai-category-suggestion.js\",\n      \"scope\": () => [_aiCategorySuggester.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiCategorySuggestion;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/edit-topic-tags__after/ai-tag-suggestion\", [\"exports\", \"@glimmer/component\", \"discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-tag-suggester\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _aiTagSuggester, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiCategorySuggestion extends _component.default {\n    static shouldRender(outletArgs, helper) {\n      return (0, _showAiHelper.showComposerAiHelper)(outletArgs?.composer, helper.siteSettings, helper.currentUser, \"suggestions\");\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiTagSuggester @buffered={{@outletArgs.buffered}} />\n      \n    */\n    {\n      \"id\": \"1tfDigvi\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@buffered\\\"],[[30,1,[\\\"buffered\\\"]]]],null],[1,\\\"\\\\n  \\\"]],[\\\"@outletArgs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/edit-topic-tags__after/ai-tag-suggestion.js\",\n      \"scope\": () => [_aiTagSuggester.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiCategorySuggestion;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/edit-topic-title__after/ai-title-suggestion\", [\"exports\", \"@glimmer/component\", \"discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-title-suggester\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _aiTitleSuggester, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTitleSuggestion extends _component.default {\n    static shouldRender(outletArgs, helper) {\n      return (0, _showAiHelper.showComposerAiHelper)(outletArgs?.composer, helper.siteSettings, helper.currentUser, \"suggestions\");\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiTitleSuggester @buffered={{@outletArgs.buffered}} />\n      \n    */\n    {\n      \"id\": \"IVWdzZFY\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@buffered\\\"],[[30,1,[\\\"buffered\\\"]]]],null],[1,\\\"\\\\n  \\\"]],[\\\"@outletArgs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/edit-topic-title__after/ai-title-suggestion.js\",\n      \"scope\": () => [_aiTitleSuggester.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiTitleSuggestion;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/editor-preview/ai-image-caption-container\", [\"exports\", \"@glimmer/component\", \"@ember/modifier\", \"@ember/object\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/render-modifiers/modifiers/did-update\", \"@ember/render-modifiers/modifiers/will-destroy\", \"@ember/service\", \"discourse/components/conditional-loading-spinner\", \"discourse/components/d-button\", \"discourse/components/d-textarea\", \"discourse/modifiers/auto-focus\", \"discourse-common/helpers/d-icon\", \"discourse-common/helpers/i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _modifier, _object, _didInsert, _didUpdate, _willDestroy, _service, _conditionalLoadingSpinner, _dButton, _dTextarea, _autoFocus, _dIcon, _i18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiImageCaptionContainer extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"imageCaptionPopup\", [_service.service]))();\n    #imageCaptionPopup = (() => (dt7948.i(this, \"imageCaptionPopup\"), void 0))();\n    updateCaption(event) {\n      event.preventDefault();\n      this.imageCaptionPopup.newCaption = event.target.value;\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"updateCaption\", [_object.action]))();\n    saveCaption() {\n      this.imageCaptionPopup.updateCaption();\n      this.hidePopup();\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"saveCaption\", [_object.action]))();\n    resizeTextarea(target) {\n      const style = window.getComputedStyle(target);\n      // scrollbars will show based on scrollHeight alone\n      // so we need to consider borders too\n      const borderTopWidth = parseInt(style.borderTopWidth, 10);\n      const borderBottomWidth = parseInt(style.borderBottomWidth, 10);\n      target.scrollTop = 0;\n      target.style.height = `${target.scrollHeight + borderTopWidth + borderBottomWidth}px`;\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"resizeTextarea\", [_object.action]))();\n    hidePopup() {\n      this.imageCaptionPopup.showPopup = false;\n      if (this.imageCaptionPopup._request) {\n        this.imageCaptionPopup._request.abort();\n        this.imageCaptionPopup._request = null;\n        this.imageCaptionPopup.toggleLoadingState(false);\n      }\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"hidePopup\", [_object.action]))();\n    static #_6 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.imageCaptionPopup.showPopup}}\n          <div\n            class=\"composer-popup education-message ai-caption-popup\"\n            {{willDestroy this.hidePopup}}\n          >\n            <ConditionalLoadingSpinner\n              @condition={{this.imageCaptionPopup.loading}}\n            >\n              <DTextarea\n                {{didInsert this.resizeTextarea}}\n                {{didUpdate this.resizeTextarea this.imageCaptionPopup.newCaption}}\n                @value={{this.imageCaptionPopup.newCaption}}\n                {{on \"change\" this.updateCaption}}\n                {{autoFocus}}\n              />\n            </ConditionalLoadingSpinner>\n    \n            <div class=\"actions\">\n              <DButton\n                class=\"btn-primary\"\n                @label=\"discourse_ai.ai_helper.image_caption.save_caption\"\n                @icon=\"check\"\n                @action={{this.saveCaption}}\n              />\n              <DButton\n                class=\"btn-flat cancel-request\"\n                @label=\"cancel\"\n                @action={{this.hidePopup}}\n              />\n    \n              <span class=\"credits\">\n                {{icon \"discourse-sparkles\"}}\n                <span>{{i18n \"discourse_ai.ai_helper.image_caption.credits\"}}</span>\n              </span>\n            </div>\n          </div>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"84lcZtW4\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"imageCaptionPopup\\\",\\\"showPopup\\\"]],[[[1,\\\"      \\\"],[11,0],[24,0,\\\"composer-popup education-message ai-caption-popup\\\"],[4,[32,0],[[30,0,[\\\"hidePopup\\\"]]],null],[12],[1,\\\"\\\\n        \\\"],[8,[32,1],null,[[\\\"@condition\\\"],[[30,0,[\\\"imageCaptionPopup\\\",\\\"loading\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[32,2],[[4,[32,3],[[30,0,[\\\"resizeTextarea\\\"]]],null],[4,[32,4],[[30,0,[\\\"resizeTextarea\\\"]],[30,0,[\\\"imageCaptionPopup\\\",\\\"newCaption\\\"]]],null],[4,[32,5],[\\\"change\\\",[30,0,[\\\"updateCaption\\\"]]],null],[4,[32,6],null,null]],[[\\\"@value\\\"],[[30,0,[\\\"imageCaptionPopup\\\",\\\"newCaption\\\"]]]],null],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"actions\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,7],[[24,0,\\\"btn-primary\\\"]],[[\\\"@label\\\",\\\"@icon\\\",\\\"@action\\\"],[\\\"discourse_ai.ai_helper.image_caption.save_caption\\\",\\\"check\\\",[30,0,[\\\"saveCaption\\\"]]]],null],[1,\\\"\\\\n          \\\"],[8,[32,7],[[24,0,\\\"btn-flat cancel-request\\\"]],[[\\\"@label\\\",\\\"@action\\\"],[\\\"cancel\\\",[30,0,[\\\"hidePopup\\\"]]]],null],[1,\\\"\\\\n\\\\n          \\\"],[10,1],[14,0,\\\"credits\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,8],[\\\"discourse-sparkles\\\"],null]],[1,\\\"\\\\n            \\\"],[10,1],[12],[1,[28,[32,9],[\\\"discourse_ai.ai_helper.image_caption.credits\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/editor-preview/ai-image-caption-container.js\",\n      \"scope\": () => [_willDestroy.default, _conditionalLoadingSpinner.default, _dTextarea.default, _didInsert.default, _didUpdate.default, _modifier.on, _autoFocus.default, _dButton.default, _dIcon.default, _i18n.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiImageCaptionContainer;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/fast-edit-footer-after/ai-edit-suggestion-button\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _service, _dButton, _ajax, _ajaxError, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiEditSuggestionButton extends _component.default {\n    static shouldRender(outletArgs, helper) {\n      return (0, _showAiHelper.showPostAIHelper)(outletArgs, helper);\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"suggestion\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #suggestion = (() => (dt7948.i(this, \"suggestion\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"_activeAIRequest\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #_activeAIRequest = (() => (dt7948.i(this, \"_activeAIRequest\"), void 0))();\n    get disabled() {\n      return this.loading || this.suggestion?.length > 0;\n    }\n    get mode() {\n      return this.currentUser?.ai_helper_prompts.find(prompt => prompt.name === \"proofread\");\n    }\n    suggest() {\n      this.loading = true;\n      this._activeAIRequest = (0, _ajax.ajax)(\"/discourse-ai/ai-helper/suggest\", {\n        method: \"POST\",\n        data: {\n          mode: this.mode.id,\n          text: this.args.outletArgs.initialValue,\n          custom_prompt: \"\"\n        }\n      });\n      this._activeAIRequest.then(_ref => {\n        let {\n          suggestions\n        } = _ref;\n        this.suggestion = suggestions[0].trim();\n        this.args.outletArgs.updateValue(this.suggestion);\n      }).catch(_ajaxError.popupAjaxError).finally(() => {\n        this.loading = false;\n      });\n      return this._activeAIRequest;\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"suggest\", [_object.action]))();\n    static #_6 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#unless @outletArgs.newValue}}\n          <DButton\n            class=\"btn-small btn-ai-suggest-edit\"\n            @action={{this.suggest}}\n            @icon=\"discourse-sparkles\"\n            @label=\"discourse_ai.ai_helper.fast_edit.suggest_button\"\n            @isLoading={{this.loading}}\n            @disabled={{this.disabled}}\n          />\n        {{/unless}}\n      \n    */\n    {\n      \"id\": \"9jHc25oQ\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[51,[30,1,[\\\"newValue\\\"]]],[[[1,\\\"      \\\"],[8,[32,0],[[24,0,\\\"btn-small btn-ai-suggest-edit\\\"]],[[\\\"@action\\\",\\\"@icon\\\",\\\"@label\\\",\\\"@isLoading\\\",\\\"@disabled\\\"],[[30,0,[\\\"suggest\\\"]],\\\"discourse-sparkles\\\",\\\"discourse_ai.ai_helper.fast_edit.suggest_button\\\",[30,0,[\\\"loading\\\"]],[30,0,[\\\"disabled\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@outletArgs\\\"],false,[\\\"unless\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/fast-edit-footer-after/ai-edit-suggestion-button.js\",\n      \"scope\": () => [_dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiEditSuggestionButton;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/full-page-search-below-search-header/ai-full-page-search\", [\"exports\", \"@glimmer/component\", \"discourse/plugins/discourse-ai/discourse/components/ai-full-page-search\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _aiFullPageSearch, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiFullPageSearchConnector extends _component.default {\n    static shouldRender(_args, _ref) {\n      let {\n        siteSettings\n      } = _ref;\n      return siteSettings.ai_embeddings_semantic_search_enabled;\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiFullPageSearch\n          @sortOrder={{@outletArgs.sortOrder}}\n          @searchTerm={{@outletArgs.search}}\n          @searchType={{@outletArgs.type}}\n          @addSearchResults={{@outletArgs.addSearchResults}}\n        />\n      \n    */\n    {\n      \"id\": \"4RggybC1\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@sortOrder\\\",\\\"@searchTerm\\\",\\\"@searchType\\\",\\\"@addSearchResults\\\"],[[30,1,[\\\"sortOrder\\\"]],[30,1,[\\\"search\\\"]],[30,1,[\\\"type\\\"]],[30,1,[\\\"addSearchResults\\\"]]]],null],[1,\\\"\\\\n  \\\"]],[\\\"@outletArgs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/full-page-search-below-search-header/ai-full-page-search.js\",\n      \"scope\": () => [_aiFullPageSearch.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiFullPageSearchConnector;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/post-text-buttons/ai-post-helper-trigger\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/lib/virtual-element-from-text-range\", \"truth-helpers/helpers/eq\", \"discourse/plugins/discourse-ai/discourse/components/ai-post-helper-menu\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _service, _dButton, _virtualElementFromTextRange, _eq, _aiPostHelperMenu, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiPostHelperTrigger extends _component.default {\n    static shouldRender(outletArgs, helper) {\n      return (0, _showAiHelper.showPostAIHelper)(outletArgs, helper);\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"site\", [_service.service]))();\n    #site = (() => (dt7948.i(this, \"site\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"menu\", [_service.service]))();\n    #menu = (() => (dt7948.i(this, \"menu\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"menuState\", [_tracking.tracked], function () {\n      return this.MENU_STATES.triggers;\n    }))();\n    #menuState = (() => (dt7948.i(this, \"menuState\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"showMainButtons\", [_tracking.tracked], function () {\n      return true;\n    }))();\n    #showMainButtons = (() => (dt7948.i(this, \"showMainButtons\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"showAiButtons\", [_tracking.tracked], function () {\n      return true;\n    }))();\n    #showAiButtons = (() => (dt7948.i(this, \"showAiButtons\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"originalPostHTML\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #originalPostHTML = (() => (dt7948.i(this, \"originalPostHTML\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"postHighlighted\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #postHighlighted = (() => (dt7948.i(this, \"postHighlighted\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"currentMenu\", [_tracking.tracked], function () {\n      return this.menu.getByIdentifier(\"post-text-selection-toolbar\");\n    }))();\n    #currentMenu = (() => (dt7948.i(this, \"currentMenu\"), void 0))();\n    MENU_STATES = {\n      triggers: \"TRIGGERS\",\n      options: \"OPTIONS\"\n    };\n    willDestroy() {\n      super.willDestroy(...arguments);\n      this.removeHighlightedText();\n    }\n    highlightSelectedText() {\n      const postId = this.args.outletArgs.data.quoteState.postId;\n      const postElement = document.querySelector(`article[data-post-id='${postId}'] .cooked`);\n      if (!postElement) {\n        return;\n      }\n      this.originalPostHTML = postElement.innerHTML;\n      this.selectedText = this.args.outletArgs.data.quoteState.buffer;\n      const selection = window.getSelection();\n      if (!selection.rangeCount) {\n        return;\n      }\n      const range = selection.getRangeAt(0);\n      // Split start/end text nodes at their range boundary\n      if (range.startContainer.nodeType === Node.TEXT_NODE && range.startOffset > 0) {\n        const newStartNode = range.startContainer.splitText(range.startOffset);\n        range.setStart(newStartNode, 0);\n      }\n      if (range.endContainer.nodeType === Node.TEXT_NODE && range.endOffset < range.endContainer.length) {\n        range.endContainer.splitText(range.endOffset);\n      }\n      // Create a Walker to traverse text nodes within range\n      const walker = document.createTreeWalker(range.commonAncestorContainer, NodeFilter.SHOW_TEXT, {\n        acceptNode: node => range.intersectsNode(node) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT\n      });\n      const textNodes = [];\n      if (walker.currentNode?.nodeType === Node.TEXT_NODE) {\n        textNodes.push(walker.currentNode);\n      } else {\n        while (walker.nextNode()) {\n          textNodes.push(walker.currentNode);\n        }\n      }\n      for (let textNode of textNodes) {\n        const highlight = document.createElement(\"span\");\n        highlight.classList.add(\"ai-helper-highlighted-selection\");\n        // Replace textNode with highlighted clone\n        const clone = textNode.cloneNode(true);\n        highlight.appendChild(clone);\n        textNode.parentNode.replaceChild(highlight, textNode);\n      }\n      selection.removeAllRanges();\n      this.postHighlighted = true;\n    }\n    removeHighlightedText() {\n      if (!this.postHighlighted) {\n        return;\n      }\n      const postId = this.args.outletArgs.data.quoteState.postId;\n      const postElement = document.querySelector(`article[data-post-id='${postId}'] .cooked`);\n      if (!postElement) {\n        return;\n      }\n      postElement.innerHTML = this.originalPostHTML;\n      this.postHighlighted = false;\n    }\n    async showAiPostHelperMenu() {\n      this.highlightSelectedText();\n      if (this.site.mobileView) {\n        this.currentMenu.close();\n        await this.menu.show((0, _virtualElementFromTextRange.default)(), {\n          identifier: \"ai-post-helper-menu\",\n          component: _aiPostHelperMenu.default,\n          inline: true,\n          interactive: true,\n          placement: this.shouldRenderUnder ? \"bottom-start\" : \"top-start\",\n          fallbackPlacements: this.shouldRenderUnder ? [\"bottom-end\", \"top-start\"] : [\"bottom-start\"],\n          trapTab: false,\n          closeOnScroll: false,\n          modalForMobile: true,\n          data: this.menuData\n        });\n      }\n      this.showMainButtons = false;\n      this.menuState = this.MENU_STATES.options;\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"showAiPostHelperMenu\", [_object.action]))();\n    get menuData() {\n      // Streamline of data model to be passed to the component when\n      // instantiated as a DMenu or a simple component in the template\n      return {\n        ...this.args.outletArgs.data,\n        quoteState: {\n          buffer: this.args.outletArgs.data.quoteState.buffer,\n          opts: this.args.outletArgs.data.quoteState.opts,\n          postId: this.args.outletArgs.data.quoteState.postId\n        },\n        post: this.args.outletArgs.post,\n        selectedText: this.selectedText\n      };\n    }\n    static #_10 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.showMainButtons}}\n          {{yield}}\n        {{/if}}\n    \n        {{#if this.showAiButtons}}\n          <div class=\"ai-post-helper\">\n            {{#if (eq this.menuState this.MENU_STATES.triggers)}}\n              <DButton\n                @icon=\"discourse-sparkles\"\n                @title=\"discourse_ai.ai_helper.post_options_menu.title\"\n                @label=\"discourse_ai.ai_helper.post_options_menu.trigger\"\n                @action={{this.showAiPostHelperMenu}}\n                class=\"btn-flat ai-post-helper__trigger\"\n              />\n    \n            {{else if (eq this.menuState this.MENU_STATES.options)}}\n              <AiPostHelperMenu @data={{this.menuData}} />\n            {{/if}}\n          </div>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"NUAbK/gN\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showMainButtons\\\"]],[[[1,\\\"      \\\"],[18,1,null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showAiButtons\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"ai-post-helper\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[32,0],[[30,0,[\\\"menuState\\\"]],[30,0,[\\\"MENU_STATES\\\",\\\"triggers\\\"]]],null],[[[1,\\\"          \\\"],[8,[32,1],[[24,0,\\\"btn-flat ai-post-helper__trigger\\\"]],[[\\\"@icon\\\",\\\"@title\\\",\\\"@label\\\",\\\"@action\\\"],[\\\"discourse-sparkles\\\",\\\"discourse_ai.ai_helper.post_options_menu.title\\\",\\\"discourse_ai.ai_helper.post_options_menu.trigger\\\",[30,0,[\\\"showAiPostHelperMenu\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"]],[]],[[[41,[28,[32,0],[[30,0,[\\\"menuState\\\"]],[30,0,[\\\"MENU_STATES\\\",\\\"options\\\"]]],null],[[[1,\\\"          \\\"],[8,[32,2],null,[[\\\"@data\\\"],[[30,0,[\\\"menuData\\\"]]]],null],[1,\\\"\\\\n        \\\"]],[]],null]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"&default\\\"],false,[\\\"if\\\",\\\"yield\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/post-text-buttons/ai-post-helper-trigger.js\",\n      \"scope\": () => [_eq.default, _dButton.default, _aiPostHelperMenu.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiPostHelperTrigger;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/search-menu-before-advanced-search/ai-quick-search-loader\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"discourse/helpers/loading-spinner\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _loadingSpinner, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiQuickSearchLoader extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"quickSearch\", [_service.service]))();\n    #quickSearch = (() => (dt7948.i(this, \"quickSearch\"), void 0))();\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.quickSearch.loading}}\n          <div class=\"ai-quick-search-spinner\">\n            {{loadingSpinner}}\n          </div>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"apo2cAJf\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"quickSearch\\\",\\\"loading\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"ai-quick-search-spinner\\\"],[12],[1,\\\"\\\\n        \\\"],[1,[32,0]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/search-menu-before-advanced-search/ai-quick-search-loader.js\",\n      \"scope\": () => [_loadingSpinner.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiQuickSearchLoader;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/search-menu-initial-options/ai-quick-semantic-search\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"discourse/components/search-menu/results/assistant-item\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/search\", \"discourse-common/helpers/i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _assistantItem, _ajax, _ajaxError, _search3, _i18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiQuickSemanticSearch extends _component.default {\n    static shouldRender(_args, _ref) {\n      let {\n        siteSettings\n      } = _ref;\n      return siteSettings.ai_embeddings_semantic_quick_search_enabled;\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"search\", [_service.service]))();\n    #search = (() => (dt7948.i(this, \"search\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"quickSearch\", [_service.service]))();\n    #quickSearch = (() => (dt7948.i(this, \"quickSearch\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    async searchTermChanged() {\n      if (!this.search.activeGlobalSearchTerm) {\n        this.search.noResults = false;\n        this.search.results = {};\n        this.quickSearch.loading = false;\n        this.quickSearch.invalidTerm = false;\n      } else if (!(0, _search3.isValidSearchTerm)(this.search.activeGlobalSearchTerm, this.siteSettings)) {\n        this.search.noResults = true;\n        this.search.results = {};\n        this.quickSearch.loading = false;\n        this.quickSearch.invalidTerm = true;\n        return;\n      } else {\n        await this.performSearch();\n      }\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"searchTermChanged\", [_object.action]))();\n    async performSearch() {\n      this.quickSearch.loading = true;\n      this.quickSearch.invalidTerm = false;\n      try {\n        const results = await (0, _ajax.ajax)(`/discourse-ai/embeddings/quick-search`, {\n          data: {\n            q: this.search.activeGlobalSearchTerm\n          }\n        });\n        const searchResults = await (0, _search3.translateResults)(results);\n        if (searchResults) {\n          this.search.noResults = results.resultTypes.length === 0;\n          this.search.results = searchResults;\n        }\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      } finally {\n        this.quickSearch.loading = false;\n      }\n    }\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{yield}}\n    \n        {{#if this.search.activeGlobalSearchTerm}}\n          <AssistantItem\n            @suffix={{i18n \"discourse_ai.embeddings.quick_search.suffix\"}}\n            @icon=\"discourse-sparkles\"\n            @closeSearchMenu={{@closeSearchMenu}}\n            @searchTermChanged={{this.searchTermChanged}}\n            @suggestionKeyword={{@suggestionKeyword}}\n          />\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"xqHDbd5x\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[18,3,null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"search\\\",\\\"activeGlobalSearchTerm\\\"]],[[[1,\\\"      \\\"],[8,[32,0],null,[[\\\"@suffix\\\",\\\"@icon\\\",\\\"@closeSearchMenu\\\",\\\"@searchTermChanged\\\",\\\"@suggestionKeyword\\\"],[[28,[32,1],[\\\"discourse_ai.embeddings.quick_search.suffix\\\"],null],\\\"discourse-sparkles\\\",[30,1],[30,0,[\\\"searchTermChanged\\\"]],[30,2]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@closeSearchMenu\\\",\\\"@suggestionKeyword\\\",\\\"&default\\\"],false,[\\\"yield\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/search-menu-initial-options/ai-quick-semantic-search.js\",\n      \"scope\": () => [_assistantItem.default, _i18n.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiQuickSemanticSearch;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/search-menu-results-top/ai-quick-search-info\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"discourse/lib/search\", \"discourse-common/helpers/i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _search3, _i18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiQuickSearchInfo extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"search\", [_service.service]))();\n    #search = (() => (dt7948.i(this, \"search\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"quickSearch\", [_service.service]))();\n    #quickSearch = (() => (dt7948.i(this, \"quickSearch\"), void 0))();\n    get termTooShort() {\n      // We check the validity again here because the input may have changed\n      // since the last time we checked, so we may want to stop showing the error\n      const validity = !(0, _search3.isValidSearchTerm)(this.search.activeGlobalSearchTerm, this.siteSettings);\n      return validity && this.quickSearch.invalidTerm && this.search.activeGlobalSearchTerm?.length > 0;\n    }\n    static #_4 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.termTooShort}}\n          <div class=\"no-results\">{{i18n \"search.too_short\"}}</div>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"k6uzZwr4\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"termTooShort\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"no-results\\\"],[12],[1,[28,[32,0],[\\\"search.too_short\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/search-menu-results-top/ai-quick-search-info.js\",\n      \"scope\": () => [_i18n.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiQuickSearchInfo;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/split-new-topic-category-after/ai-category-suggestion\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"discourse/plugins/discourse-ai/discourse/components/ai-split-topic-suggester\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _aiSplitTopicSuggester, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiCategorySuggestion extends _component.default {\n    static shouldRender(outletArgs, helper) {\n      return (0, _showAiHelper.showPostAIHelper)(outletArgs, helper);\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.siteSettings.ai_embeddings_enabled}}\n          <AiSplitTopicSuggester\n            @selectedPosts={{@outletArgs.selectedPosts}}\n            @mode=\"suggest_category\"\n            @updateAction={{@outletArgs.updateCategoryId}}\n          />\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"4O7HJkah\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"siteSettings\\\",\\\"ai_embeddings_enabled\\\"]],[[[1,\\\"      \\\"],[8,[32,0],null,[[\\\"@selectedPosts\\\",\\\"@mode\\\",\\\"@updateAction\\\"],[[30,1,[\\\"selectedPosts\\\"]],\\\"suggest_category\\\",[30,1,[\\\"updateCategoryId\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@outletArgs\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/split-new-topic-category-after/ai-category-suggestion.js\",\n      \"scope\": () => [_aiSplitTopicSuggester.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiCategorySuggestion;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/split-new-topic-tag-after/ai-tag-suggestion\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"discourse/plugins/discourse-ai/discourse/components/ai-split-topic-suggester\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _aiSplitTopicSuggester, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTagSuggestion extends _component.default {\n    static shouldRender(outletArgs, helper) {\n      return (0, _showAiHelper.showPostAIHelper)(outletArgs, helper);\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.siteSettings.ai_embeddings_enabled}}\n          <AiSplitTopicSuggester\n            @selectedPosts={{@outletArgs.selectedPosts}}\n            @mode=\"suggest_tags\"\n            @updateAction={{@outletArgs.updateTags}}\n            @currentValue={{@outletArgs.tags}}\n          />\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"jo6+zYZR\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"siteSettings\\\",\\\"ai_embeddings_enabled\\\"]],[[[1,\\\"      \\\"],[8,[32,0],null,[[\\\"@selectedPosts\\\",\\\"@mode\\\",\\\"@updateAction\\\",\\\"@currentValue\\\"],[[30,1,[\\\"selectedPosts\\\"]],\\\"suggest_tags\\\",[30,1,[\\\"updateTags\\\"]],[30,1,[\\\"tags\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@outletArgs\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/split-new-topic-tag-after/ai-tag-suggestion.js\",\n      \"scope\": () => [_aiSplitTopicSuggester.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiTagSuggestion;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/split-new-topic-title-after/ai-title-suggestion\", [\"exports\", \"@glimmer/component\", \"discourse/plugins/discourse-ai/discourse/components/ai-split-topic-suggester\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _aiSplitTopicSuggester, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTitleSuggestion extends _component.default {\n    static shouldRender(outletArgs, helper) {\n      return (0, _showAiHelper.showPostAIHelper)(outletArgs, helper);\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiSplitTopicSuggester\n          @selectedPosts={{@outletArgs.selectedPosts}}\n          @mode=\"suggest_title\"\n          @updateAction={{@outletArgs.updateTopicName}}\n        />\n      \n    */\n    {\n      \"id\": \"obhR2Q8M\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@selectedPosts\\\",\\\"@mode\\\",\\\"@updateAction\\\"],[[30,1,[\\\"selectedPosts\\\"]],\\\"suggest_title\\\",[30,1,[\\\"updateTopicName\\\"]]]],null],[1,\\\"\\\\n  \\\"]],[\\\"@outletArgs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/split-new-topic-title-after/ai-title-suggestion.js\",\n      \"scope\": () => [_aiSplitTopicSuggester.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiTitleSuggestion;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/topic-list-before-category/ai-topic-gist-placement\", [\"exports\", \"@glimmer/component\", \"discourse/plugins/discourse-ai/discourse/components/ai-topic-gist\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _aiTopicGist, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTopicGistPlacement extends _component.default {\n    static shouldRender(_outletArgs, helper) {\n      const settings = helper.siteSettings;\n      return settings.discourse_ai_enabled && settings.ai_summarization_enabled;\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiTopicGist @topic={{@outletArgs.topic}} />\n      \n    */\n    {\n      \"id\": \"SgsKZfRi\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@topic\\\"],[[30,1,[\\\"topic\\\"]]]],null],[1,\\\"\\\\n  \\\"]],[\\\"@outletArgs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/topic-list-before-category/ai-topic-gist-placement.js\",\n      \"scope\": () => [_aiTopicGist.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiTopicGistPlacement;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/topic-map-expanded-after/ai-summary-trigger\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/plugins/discourse-ai/discourse/components/modal/ai-summary-modal\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _dButton, _aiSummaryModal, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiSummaryTrigger extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    openAiSummaryModal() {\n      this.modal.show(_aiSummaryModal.default, {\n        model: {\n          topic: this.args.outletArgs.topic,\n          postStream: this.args.outletArgs.postStream\n        }\n      });\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"openAiSummaryModal\", [_object.action]))();\n    static #_3 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if @outletArgs.topic.summarizable}}\n          <DButton\n            @label=\"summary.buttons.generate\"\n            @icon=\"discourse-sparkles\"\n            @action={{this.openAiSummaryModal}}\n            class=\"btn-default ai-summarization-button\"\n          />\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"o3OIQhbz\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"topic\\\",\\\"summarizable\\\"]],[[[1,\\\"      \\\"],[8,[32,0],[[24,0,\\\"btn-default ai-summarization-button\\\"]],[[\\\"@label\\\",\\\"@icon\\\",\\\"@action\\\"],[\\\"summary.buttons.generate\\\",\\\"discourse-sparkles\\\",[30,0,[\\\"openAiSummaryModal\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@outletArgs\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/topic-map-expanded-after/ai-summary-trigger.js\",\n      \"scope\": () => [_dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiSummaryTrigger;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/user-preferences-nav/ai-preferences\", [\"exports\", \"@glimmer/component\", \"@ember/routing\", \"discourse-common/helpers/d-icon\", \"discourse-common/helpers/i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _routing, _dIcon, _i18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  function showAiPreferences(user, settings) {\n    // Since we only have one AI related user setting we don't show\n    // AI preferences if these conditions aren't met.\n    // If we add more user settings in the future we can move this\n    // logic to the the specific settings and conditionally show it in the template.\n    const aiHelperEnabledFeatures = settings.ai_helper_enabled_features.split(\"|\");\n    return user?.user_allowed_ai_auto_image_captions && aiHelperEnabledFeatures.includes(\"image_caption\") && settings.ai_helper_enabled;\n  }\n  class AutoImageCaptionSetting extends _component.default {\n    static shouldRender(outletArgs, helper) {\n      return helper.siteSettings.discourse_ai_enabled && showAiPreferences(outletArgs.model, helper.siteSettings);\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <li class=\"user-nav__preferences-ai\">\n          <LinkTo @route=\"preferences.ai\">\n            {{dIcon \"discourse-sparkles\"}}\n            <span>{{i18n \"discourse_ai.title\"}}</span>\n          </LinkTo>\n        </li>\n      \n    */\n    {\n      \"id\": \"/y5E1bgJ\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,\\\"li\\\"],[14,0,\\\"user-nav__preferences-ai\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,0],null,[[\\\"@route\\\"],[\\\"preferences.ai\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[32,1],[\\\"discourse-sparkles\\\"],null]],[1,\\\"\\\\n        \\\"],[10,1],[12],[1,[28,[32,2],[\\\"discourse_ai.title\\\"],null]],[13],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/user-preferences-nav/ai-preferences.js\",\n      \"scope\": () => [_routing.LinkTo, _dIcon.default, _i18n.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AutoImageCaptionSetting;\n});","define(\"discourse/plugins/discourse-ai/discourse/controllers/admin-dashboard-sentiment\", [\"exports\", \"@ember/object\", \"admin/controllers/admin-dashboard-tab\"], function (_exports, _object, _adminDashboardTab) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AdminDashboardSentiment extends _adminDashboardTab.default {\n    get filters() {\n      return {\n        startDate: this.startDate,\n        endDate: this.endDate\n      };\n    }\n    static #_ = (() => dt7948.n(this.prototype, \"filters\", [(0, _object.computed)(\"startDate\", \"endDate\")]))();\n    get emotionFilters() {\n      return {\n        startDate: moment().subtract(2, \"month\").format(\"YYYY-MM-DD\"),\n        endDate: moment().format(\"YYYY-MM-DD\")\n      };\n    }\n    get emotions() {\n      const emotions = [\"admiration\", \"amusement\", \"anger\", \"annoyance\", \"approval\", \"caring\", \"confusion\", \"curiosity\", \"desire\", \"disappointment\", \"disapproval\", \"disgust\", \"embarrassment\", \"excitement\", \"fear\", \"gratitude\", \"grief\", \"joy\", \"love\", \"nervousness\", \"neutral\", \"optimism\", \"pride\", \"realization\", \"relief\", \"remorse\", \"sadness\", \"surprise\"];\n      return emotions;\n    }\n  }\n  _exports.default = AdminDashboardSentiment;\n});","define(\"discourse/plugins/discourse-ai/discourse/controllers/preferences-ai\", [\"exports\", \"@glimmer/tracking\", \"@ember/controller\", \"@ember/object\", \"@ember/service\", \"discourse/lib/ajax-error\", \"discourse-common/config/environment\"], function (_exports, _tracking, _controller, _object, _service, _ajaxError, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const AI_ATTRS = [\"auto_image_caption\"];\n  class PreferencesAiController extends _controller.default {\n    static #_ = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"saved\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #saved = (() => (dt7948.i(this, \"saved\"), void 0))();\n    get showAutoImageCaptionSetting() {\n      const aiHelperEnabledFeatures = this.siteSettings.ai_helper_enabled_features.split(\"|\");\n      return this.model?.user_allowed_ai_auto_image_captions && aiHelperEnabledFeatures.includes(\"image_caption\") && this.siteSettings.ai_helper_enabled;\n    }\n    save() {\n      this.saved = false;\n      return this.model.save(AI_ATTRS).then(() => {\n        this.saved = true;\n        if (!(0, _environment.isTesting)()) {\n          location.reload();\n        }\n      }).catch(_ajaxError.popupAjaxError);\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"save\", [_object.action]))();\n  }\n  _exports.default = PreferencesAiController;\n});","define(\"discourse/plugins/discourse-ai/discourse/discourse-ai-shared-conversation-show-route-map\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _default;\n  function _default() {\n    this.route(\"discourse-ai-shared-conversation-show\", {\n      path: \"/discourse-ai/ai-bot/shared-ai-conversations/:share_key\"\n    });\n  }\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/ai-bot-helper\", [\"exports\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/models/composer\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/modal/share-full-topic-modal\"], function (_exports, _ajax, _ajaxError, _composer, _discourseI18n, _shareFullTopicModal) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.composeAiBotMessage = composeAiBotMessage;\n  _exports.isPostFromAiBot = isPostFromAiBot;\n  _exports.showShareConversationModal = showShareConversationModal;\n  const MAX_PERSONA_USER_ID = -1200;\n  function isPostFromAiBot(post, currentUser) {\n    return post.user_id <= MAX_PERSONA_USER_ID || !!currentUser?.ai_enabled_chat_bots?.any(bot => post.username === bot.username);\n  }\n  function showShareConversationModal(modal, topicId) {\n    (0, _ajax.ajax)(`/discourse-ai/ai-bot/shared-ai-conversations/preview/${topicId}.json`).then(payload => {\n      modal.show(_shareFullTopicModal.default, {\n        model: payload\n      });\n    }).catch(_ajaxError.popupAjaxError);\n  }\n  function composeAiBotMessage(targetBot, composer) {\n    const currentUser = composer.currentUser;\n    let botUsername = currentUser.ai_enabled_chat_bots.find(bot => bot.model_name === targetBot).username;\n    composer.focusComposer({\n      fallbackToNewTopic: true,\n      openOpts: {\n        action: _composer.default.PRIVATE_MESSAGE,\n        recipients: botUsername,\n        topicTitle: (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.default_pm_prefix\"),\n        archetypeId: \"private_message\",\n        draftKey: \"private_message_ai\",\n        hasGroups: false,\n        warningsDisabled: true,\n        skipDraftCheck: true\n      }\n    });\n  }\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/ai-helper-suggestions\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.MIN_CHARACTER_COUNT = void 0;\n  const MIN_CHARACTER_COUNT = _exports.MIN_CHARACTER_COUNT = 40;\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/ai-streamer/progress-handlers\", [\"exports\", \"@ember/runloop\", \"discourse/plugins/discourse-ai/discourse/lib/ai-streamer/updaters/post-updater\"], function (_exports, _runloop, _postUpdater) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.MIN_LETTERS_PER_INTERVAL = void 0;\n  _exports.addProgressDot = addProgressDot;\n  _exports.applyProgress = applyProgress;\n  _exports.default = streamUpdaterText;\n  _exports.streamPostText = streamPostText;\n  const PROGRESS_INTERVAL = 40;\n  const GIVE_UP_INTERVAL = 60000;\n  const MIN_LETTERS_PER_INTERVAL = _exports.MIN_LETTERS_PER_INTERVAL = 6;\n  const MAX_FLUSH_TIME = 800;\n  let progressTimer = null;\n\n  /**\n   * Finds the last non-empty child element or text node of a given DOM element.\n   * Iterates backward through the element's child nodes and skips over empty text nodes.\n   *\n   * @param {HTMLElement} element - The DOM element to inspect.\n   * @returns {Node} - The last non-empty child node or null if none found.\n   */\n  function lastNonEmptyChild(element) {\n    let lastChild = element.lastChild;\n    while (lastChild && lastChild.nodeType === Node.TEXT_NODE && !/\\S/.test(lastChild.textContent)) {\n      lastChild = lastChild.previousSibling;\n    }\n    return lastChild;\n  }\n\n  /**\n   * Adds a progress dot (a span element with a \"progress-dot\" class) at the end of the\n   * last non-empty block within a given DOM element. This is used to visually indicate\n   * progress while content is being streamed.\n   *\n   * @param {HTMLElement} element - The DOM element to which the progress dot will be added.\n   */\n  function addProgressDot(element) {\n    let lastBlock = element;\n    while (true) {\n      let lastChild = lastNonEmptyChild(lastBlock);\n      if (!lastChild) {\n        break;\n      }\n      if (lastChild.nodeType === Node.ELEMENT_NODE) {\n        lastBlock = lastChild;\n      } else {\n        break;\n      }\n    }\n    const dotElement = document.createElement(\"span\");\n    dotElement.classList.add(\"progress-dot\");\n    lastBlock.appendChild(dotElement);\n  }\n\n  /**\n   * Applies progress to a streaming operation, updating the raw and cooked text,\n   * handling progress dots, and stopping streaming when complete.\n   *\n   * @param {Object} status - The current streaming status object.\n   * @param {Object} updater - An instance of a stream updater (e.g., PostUpdater or SummaryUpdater).\n   * @returns {Promise<boolean>} - Resolves to true if streaming is complete, otherwise false.\n   */\n  async function applyProgress(status, updater) {\n    status.startTime = status.startTime || Date.now();\n    if (Date.now() - status.startTime > GIVE_UP_INTERVAL) {\n      updater.streaming = false;\n      return true;\n    }\n    if (!updater.element) {\n      // wait till later\n      return false;\n    }\n    const oldRaw = updater.raw;\n    if (status.raw === oldRaw && !status.done) {\n      const hasProgressDot = updater.element.querySelector(\".progress-dot\");\n      if (hasProgressDot) {\n        return false;\n      }\n    }\n    if (status.raw !== undefined) {\n      let newRaw = status.raw;\n      if (!status.done) {\n        // rush update if we have a </details> tag (function call)\n        if (oldRaw.length === 0 && newRaw.indexOf(\"</details>\") !== -1) {\n          newRaw = status.raw;\n        } else {\n          const diff = newRaw.length - oldRaw.length;\n\n          // progress interval is 40ms\n          // by default we add 6 letters per interval\n          // but ... we want to be done in MAX_FLUSH_TIME\n          let letters = Math.floor(diff / (MAX_FLUSH_TIME / PROGRESS_INTERVAL));\n          if (letters < MIN_LETTERS_PER_INTERVAL) {\n            letters = MIN_LETTERS_PER_INTERVAL;\n          }\n          newRaw = status.raw.substring(0, oldRaw.length + letters);\n        }\n      }\n      await updater.setRaw(newRaw, status.done);\n    }\n    if (status.done) {\n      if (status.cooked) {\n        await updater.setCooked(status.cooked);\n      }\n      updater.streaming = false;\n    }\n    return status.done;\n  }\n\n  /**\n   * Handles progress updates for a post stream by applying the streaming status of\n   * each post and updating its content accordingly. This function ensures that progress\n   * is tracked and handled for multiple posts simultaneously.\n   *\n   * @param {Object} postStream - The post stream object containing the posts to be updated.\n   * @returns {Promise<boolean>} - Resolves to true if polling should continue, otherwise false.\n   */\n  async function handleProgress(postStream) {\n    const status = postStream.aiStreamingStatus;\n    let keepPolling = false;\n    const promises = Object.keys(status).map(async postId => {\n      let postStatus = status[postId];\n      const postUpdater = new _postUpdater.default(postStream, postStatus.post_id);\n      const done = await applyProgress(postStatus, postUpdater);\n      if (done) {\n        delete status[postId];\n      } else {\n        keepPolling = true;\n      }\n    });\n    await Promise.all(promises);\n    return keepPolling;\n  }\n\n  /**\n   * Ensures that progress for a post stream is being updated. It starts a progress timer\n   * if one is not already active, and continues polling for progress updates at regular intervals.\n   *\n   * @param {Object} postStream - The post stream object containing the posts to be updated.\n   */\n  function ensureProgress(postStream) {\n    if (!progressTimer) {\n      progressTimer = (0, _runloop.later)(async () => {\n        const keepPolling = await handleProgress(postStream);\n        progressTimer = null;\n        if (keepPolling) {\n          ensureProgress(postStream);\n        }\n      }, PROGRESS_INTERVAL);\n    }\n  }\n\n  /**\n   * Streams the raw text for a post by tracking its status and applying progress updates.\n   * If streaming is already in progress, this function ensures it continues to update the content.\n   *\n   * @param {Object} postStream - The post stream object containing the post to be updated.\n   * @param {Object} data - The data object containing raw and cooked content of the post.\n   */\n  function streamPostText(postStream, data) {\n    if (data.noop) {\n      return;\n    }\n    let status = postStream.aiStreamingStatus = postStream.aiStreamingStatus || {};\n    status[data.post_id] = data;\n    ensureProgress(postStream);\n  }\n\n  /**\n   * A generalized function to handle streaming of content using any specified updater class.\n   * It applies progress updates to the content (raw and cooked) based on the given data.\n   * Use this function to stream content for Glimmer components.\n   *\n   * @param {Function} updaterClass - The updater class to be used for streaming (e.g., PostUpdater, SummaryUpdater).\n   * @param {Object} data - The data object containing the content to be streamed.\n   * @param {Object} context - Additional context required for the updater (typically the context of the Ember component).\n   */\n  function streamUpdaterText(updaterClass, data, context) {\n    const updaterInstance = new updaterClass(data, context);\n    if (!progressTimer) {\n      progressTimer = (0, _runloop.later)(async () => {\n        await applyProgress(data, updaterInstance);\n        progressTimer = null;\n        if (!data.done) {\n          await applyProgress(data, updaterInstance);\n        }\n      }, PROGRESS_INTERVAL);\n    }\n  }\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/ai-streamer/updaters/post-updater\", [\"exports\", \"discourse/lib/load-morphlex\", \"discourse/lib/text\", \"discourse/plugins/discourse-ai/discourse/lib/ai-streamer/progress-handlers\", \"discourse/plugins/discourse-ai/discourse/lib/ai-streamer/updaters/stream-updater\"], function (_exports, _loadMorphlex, _text, _progressHandlers, _streamUpdater) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class PostUpdater extends _streamUpdater.default {\n    morphingOptions = {\n      beforeAttributeUpdated: (element, attributeName) => {\n        return !(element.tagName === \"DETAILS\" && attributeName === \"open\");\n      }\n    };\n    constructor(postStream, postId) {\n      super();\n      this.postStream = postStream;\n      this.postId = postId;\n      this.post = postStream.findLoadedPost(postId);\n      if (this.post) {\n        this.postElement = document.querySelector(`#post_${this.post.post_number}`);\n      }\n    }\n    get element() {\n      return this.postElement;\n    }\n    set streaming(value) {\n      if (this.postElement) {\n        if (value) {\n          this.postElement.classList.add(\"streaming\");\n        } else {\n          this.postElement.classList.remove(\"streaming\");\n        }\n      }\n    }\n    async setRaw(value, done) {\n      this.post.set(\"raw\", value);\n      const cooked = await (0, _text.cook)(value);\n\n      // resets animation\n      this.element.classList.remove(\"streaming\");\n      void this.element.offsetWidth;\n      this.element.classList.add(\"streaming\");\n      const cookedElement = document.createElement(\"div\");\n      cookedElement.innerHTML = cooked;\n      if (!done) {\n        (0, _progressHandlers.addProgressDot)(cookedElement);\n      }\n      await this.setCooked(cookedElement.innerHTML);\n    }\n    async setCooked(value) {\n      this.post.set(\"cooked\", value);\n      (await (0, _loadMorphlex.default)()).morphInner(this.postElement.querySelector(\".cooked\"), `<div>${value}</div>`, this.morphingOptions);\n    }\n    get raw() {\n      return this.post.get(\"raw\") || \"\";\n    }\n  }\n  _exports.default = PostUpdater;\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/ai-streamer/updaters/stream-updater\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /**\n   * Interface needed to implement for a streaming updater\n   */\n  class StreamUpdater {\n    set streaming(value) {\n      throw \"not implemented\";\n    }\n    async setCooked() {\n      throw \"not implemented\";\n    }\n    async setRaw() {\n      throw \"not implemented\";\n    }\n    get element() {\n      throw \"not implemented\";\n    }\n    get raw() {\n      throw \"not implemented\";\n    }\n  }\n  _exports.default = StreamUpdater;\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/ai-topic-summary\", [\"exports\", \"@glimmer/tracking\", \"discourse/lib/ajax\", \"discourse/lib/formatter\", \"discourse/lib/text\"], function (_exports, _tracking, _ajax, _formatter, _text3) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTopicSummary {\n    static #_ = (() => dt7948.g(this.prototype, \"text\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #text = (() => (dt7948.i(this, \"text\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"summarizedOn\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #summarizedOn = (() => (dt7948.i(this, \"summarizedOn\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"summarizedBy\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #summarizedBy = (() => (dt7948.i(this, \"summarizedBy\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"newPostsSinceSummary\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #newPostsSinceSummary = (() => (dt7948.i(this, \"newPostsSinceSummary\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"outdated\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #outdated = (() => (dt7948.i(this, \"outdated\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"canRegenerate\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #canRegenerate = (() => (dt7948.i(this, \"canRegenerate\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"regenerated\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #regenerated = (() => (dt7948.i(this, \"regenerated\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"showSummaryBox\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showSummaryBox = (() => (dt7948.i(this, \"showSummaryBox\"), void 0))();\n    static #_9 = (() => dt7948.g(this.prototype, \"canCollapseSummary\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #canCollapseSummary = (() => (dt7948.i(this, \"canCollapseSummary\"), void 0))();\n    static #_10 = (() => dt7948.g(this.prototype, \"loadingSummary\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loadingSummary = (() => (dt7948.i(this, \"loadingSummary\"), void 0))();\n    processUpdate(update) {\n      const topicSummary = update.ai_topic_summary;\n      return (0, _text3.cook)(topicSummary.summarized_text).then(cooked => {\n        this.text = cooked;\n        this.loading = false;\n      }).then(() => {\n        if (update.done) {\n          this.summarizedOn = (0, _formatter.shortDateNoYear)(topicSummary.summarized_on);\n          this.summarizedBy = topicSummary.algorithm;\n          this.newPostsSinceSummary = topicSummary.new_posts_since_summary;\n          this.outdated = topicSummary.outdated;\n          this.newPostsSinceSummary = topicSummary.new_posts_since_summary;\n          this.canRegenerate = topicSummary.outdated && topicSummary.can_regenerate;\n        }\n      });\n    }\n    collapse() {\n      this.showSummaryBox = false;\n      this.canCollapseSummary = false;\n    }\n    generateSummary(currentUser, topicId) {\n      this.showSummaryBox = true;\n      if (this.text && !this.canRegenerate) {\n        this.canCollapseSummary = false;\n        return;\n      }\n      let fetchURL = `/discourse-ai/summarization/t/${topicId}?`;\n      if (currentUser) {\n        fetchURL += `stream=true`;\n        if (this.canRegenerate) {\n          fetchURL += \"&skip_age_check=true\";\n        }\n      }\n      this.loading = true;\n      return (0, _ajax.ajax)(fetchURL).then(data => {\n        if (!currentUser) {\n          data.done = true;\n          this.processUpdate(data);\n        }\n      });\n    }\n  }\n  _exports.default = AiTopicSummary;\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/copy-conversation\", [\"exports\", \"discourse/lib/ajax\", \"discourse/lib/utilities\", \"discourse-i18n\"], function (_exports, _ajax, _utilities, _discourseI18n) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _default;\n  async function _default(topic, fromPostNumber, toPostNumber) {\n    await (0, _utilities.clipboardCopyAsync)(async () => {\n      const text = await generateClipboard(topic, fromPostNumber, toPostNumber);\n      return new Blob([text], {\n        type: \"text/plain\"\n      });\n    });\n  }\n  async function generateClipboard(topic, fromPostNumber, toPostNumber) {\n    const stream = topic.get(\"postStream\");\n    let postNumbers = [];\n    // simpler to understand than Array.from\n    for (let i = fromPostNumber; i <= toPostNumber; i++) {\n      postNumbers.push(i);\n    }\n    const postIds = postNumbers.map(postNumber => {\n      return stream.findPostIdForPostNumber(postNumber);\n    });\n\n    // we need raw to construct so post stream will not help\n\n    const url = `/t/${topic.id}/posts.json`;\n    const data = {\n      post_ids: postIds,\n      include_raw: true\n    };\n    const response = await (0, _ajax.ajax)(url, {\n      data\n    });\n    let buffer = [];\n    buffer.push(\"<details class='ai-quote'>\");\n    buffer.push(\"<summary>\");\n    buffer.push(`<span>${topic.title}</span>`);\n    buffer.push(`<span title='${(0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.ai_title\")}'>${(0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.ai_label\")}</span>`);\n    buffer.push(\"</summary>\");\n    response.post_stream.posts.forEach(post => {\n      buffer.push(\"\");\n      buffer.push(`**${post.username}:**`);\n      buffer.push(\"\");\n      buffer.push(post.raw);\n    });\n    buffer.push(\"</details>\");\n    const text = buffer.join(\"\\n\");\n    return text;\n  }\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.showComposerAiHelper = showComposerAiHelper;\n  _exports.showPostAIHelper = showPostAIHelper;\n  function showComposerAiHelper(composerModel, siteSettings, currentUser, featureType) {\n    const enableHelper = _helperEnabled(siteSettings);\n    const enableAssistant = currentUser.can_use_assistant;\n    const canShowInPM = siteSettings.ai_helper_allowed_in_pm;\n    const enableFeature = siteSettings.ai_helper_enabled_features.includes(featureType);\n    if (composerModel?.privateMessage) {\n      return enableHelper && enableAssistant && canShowInPM && enableFeature;\n    }\n    return enableHelper && enableAssistant && enableFeature;\n  }\n  function showPostAIHelper(outletArgs, helper) {\n    return _helperEnabled(helper.siteSettings) && helper.currentUser?.can_use_assistant_in_post;\n  }\n  function _helperEnabled(siteSettings) {\n    return siteSettings.discourse_ai_enabled && siteSettings.ai_helper_enabled;\n  }\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/utilities\", [\"exports\", \"@ember/template\", \"discourse/lib/utilities\"], function (_exports, _template, _utilities) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.jsonToHtml = jsonToHtml;\n  function jsonToHtml(json) {\n    if (json === null) {\n      return \"null\";\n    }\n    if (typeof json !== \"object\") {\n      return (0, _utilities.escapeExpression)(json);\n    }\n    let html = \"<ul>\";\n    for (let [key, value] of Object.entries(json)) {\n      html += \"<li>\";\n      key = (0, _utilities.escapeExpression)(key);\n      if (typeof value === \"object\" && Array.isArray(value)) {\n        html += `<strong>${key}:</strong> ${jsonToHtml(value)}`;\n      } else if (typeof value === \"object\") {\n        html += `<strong>${key}:</strong> <ul><li>${jsonToHtml(value)}</li></ul>`;\n      } else {\n        if (typeof value === \"string\") {\n          value = (0, _utilities.escapeExpression)(value).replace(/\\n/g, \"<br>\");\n        }\n        html += `<strong>${key}:</strong> ${value}`;\n      }\n      html += \"</li>\";\n    }\n    html += \"</ul>\";\n    return (0, _template.htmlSafe)(html);\n  }\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/virtual-element-from-caret-coords\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = virtualElementFromCaretCoords;\n  class VirtualElementFromCaretCoords {\n    constructor(caretCoords) {\n      let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0];\n      this.caretCoords = caretCoords;\n      this.offset = offset;\n      this.updateRect();\n    }\n    updateRect() {\n      const [xOffset, yOffset] = this.offset;\n      this.rect = {\n        top: this.caretCoords.y + yOffset,\n        right: this.caretCoords.x,\n        bottom: this.caretCoords.y + yOffset,\n        left: this.caretCoords.x + xOffset,\n        width: 0,\n        height: 0,\n        x: this.caretCoords.x,\n        y: this.caretCoords.y,\n        toJSON() {\n          return this;\n        }\n      };\n      return this.rect;\n    }\n    getBoundingClientRect() {\n      return this.rect;\n    }\n    getClientRects() {\n      return [this.rect];\n    }\n    get clientWidth() {\n      return this.rect.width;\n    }\n    get clientHeight() {\n      return this.rect.height;\n    }\n  }\n  function virtualElementFromCaretCoords(caretCoords, offset) {\n    return new VirtualElementFromCaretCoords(caretCoords, offset);\n  }\n});","define(\"discourse/plugins/discourse-ai/discourse/preferences-ai-route-map\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = {\n    resource: \"user.preferences\",\n    map() {\n      this.route(\"ai\");\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/discourse/routes/discourse-ai-shared-conversation-show\", [\"exports\", \"@ember/service\", \"discourse/routes/discourse\"], function (_exports, _service, _discourse) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class DiscourseAiSharedConversationShowRoute extends _discourse.default {\n    static #_ = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    beforeModel(transition) {\n      if (this.currentUser?.user_option?.external_links_in_new_tab) {\n        window.open(transition.intent.url, \"_blank\");\n      } else {\n        this.redirect(transition.intent.url);\n      }\n      transition.abort();\n    }\n    redirect(url) {\n      window.location = url;\n    }\n  }\n  _exports.default = DiscourseAiSharedConversationShowRoute;\n});","define(\"discourse/plugins/discourse-ai/discourse/routes/preferences-ai\", [\"exports\", \"@ember/service\", \"discourse/lib/utilities\", \"discourse/routes/restricted-user\"], function (_exports, _service, _utilities, _restrictedUser) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class PreferencesAiRoute extends _restrictedUser.default {\n    static #_ = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    setupController(controller, user) {\n      if (!this.siteSettings.discourse_ai_enabled) {\n        return this.router.transitionTo(`discovery.${(0, _utilities.defaultHomepage)()}`);\n      }\n      controller.set(\"model\", user);\n    }\n  }\n  _exports.default = PreferencesAiRoute;\n});","define(\"discourse/plugins/discourse-ai/discourse/services/gists\", [\"exports\", \"@glimmer/tracking\", \"@ember/service\"], function (_exports, _tracking, _service) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class Gists extends _service.default {\n    static #_ = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"preference\", [_tracking.tracked], function () {\n      return localStorage.getItem(\"topicListLayout\");\n    }))();\n    #preference = (() => (dt7948.i(this, \"preference\"), void 0))();\n    get shouldShow() {\n      return this.router.currentRoute.attributes?.list?.topics?.some(topic => topic.ai_topic_gist);\n    }\n    setPreference(value) {\n      this.preference = value;\n      localStorage.setItem(\"topicListLayout\", value);\n      if (this.preference === \"table-ai\") {\n        localStorage.setItem(\"aiPreferred\", true);\n      }\n    }\n  }\n  _exports.default = Gists;\n});","define(\"discourse/plugins/discourse-ai/discourse/services/image-caption-popup\", [\"exports\", \"@glimmer/tracking\", \"@ember/service\", \"discourse/lib/uploads\"], function (_exports, _tracking, _service, _uploads) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class ImageCaptionPopup extends _service.default {\n    static #_ = (() => dt7948.g(this.prototype, \"composer\", [_service.service]))();\n    #composer = (() => (dt7948.i(this, \"composer\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"appEvents\", [_service.service]))();\n    #appEvents = (() => (dt7948.i(this, \"appEvents\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"showPopup\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showPopup = (() => (dt7948.i(this, \"showPopup\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"imageIndex\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #imageIndex = (() => (dt7948.i(this, \"imageIndex\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"imageSrc\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #imageSrc = (() => (dt7948.i(this, \"imageSrc\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"newCaption\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #newCaption = (() => (dt7948.i(this, \"newCaption\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"popupTrigger\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #popupTrigger = (() => (dt7948.i(this, \"popupTrigger\"), void 0))();\n    static #_9 = (() => dt7948.g(this.prototype, \"showAutoCaptionLoader\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showAutoCaptionLoader = (() => (dt7948.i(this, \"showAutoCaptionLoader\"), void 0))();\n    static #_10 = (() => dt7948.g(this.prototype, \"_request\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #_request = (() => (dt7948.i(this, \"_request\"), void 0))();\n    updateCaption() {\n      const matchingPlaceholder = this.composer.model.reply.match(_uploads.IMAGE_MARKDOWN_REGEX);\n      if (matchingPlaceholder) {\n        const match = matchingPlaceholder[this.imageIndex];\n        const replacement = match.replace(_uploads.IMAGE_MARKDOWN_REGEX, `![${this.newCaption}|$2$3$4]($5)`);\n        if (match) {\n          this.appEvents.trigger(\"composer:replace-text\", match, replacement);\n        }\n      }\n    }\n    toggleLoadingState(loading) {\n      if (loading) {\n        this.popupTrigger?.classList.add(\"disabled\");\n        return this.loading = true;\n      }\n      this.popupTrigger?.classList.remove(\"disabled\");\n      return this.loading = false;\n    }\n  }\n  _exports.default = ImageCaptionPopup;\n});","define(\"discourse/plugins/discourse-ai/discourse/services/quick-search\", [\"exports\", \"@glimmer/tracking\", \"@ember/service\"], function (_exports, _tracking, _service) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class QuickSearch extends _service.default {\n    static #_ = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"invalidTerm\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #invalidTerm = (() => (dt7948.i(this, \"invalidTerm\"), void 0))();\n  }\n  _exports.default = QuickSearch;\n});","define(\"discourse/plugins/discourse-ai/discourse/templates/admin-dashboard-sentiment\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"sentiment section\">\n    <div class=\"period-section\">\n      <div class=\"section-title\">\n        <h2>\n          {{i18n \"discourse_ai.sentiments.dashboard.title\"}}\n        </h2>\n  \n        <DashboardPeriodSelector\n          @period={{this.period}}\n          @setPeriod={{this.setPeriod}}\n          @startDate={{this.startDate}}\n          @endDate={{this.endDate}}\n          @setCustomDateRange={{this.setCustomDateRange}}\n        />\n      </div>\n    </div>\n  \n    <div class=\"section-body\">\n      <div class=\"charts\">\n        <AdminReport\n          @dataSourceName=\"overall_sentiment\"\n          @filters={{this.filters}}\n          @showHeader={{true}}\n        />\n        <div class=\"admin-report activity-metrics\">\n          <div class=\"header\">\n            <ul class=\"breadcrumb\">\n              <li class=\"item report\">\n                <LinkTo @route=\"adminReports\" class=\"report-url\">\n                  {{i18n \"admin.dashboard.emotion.title\"}}\n                </LinkTo>\n                <DTooltip @interactive=\"true\">\n                  <:trigger>\n                    {{d-icon \"circle-question\"}}\n                  </:trigger>\n                  <:content>\n                    <span>{{i18n \"admin.dashboard.emotion.description\"}}</span>\n                  </:content>\n                </DTooltip>\n              </li>\n            </ul>\n          </div>\n          <div class=\"report-body\">\n            <div class=\"counters-list\">\n              <div class=\"counters-header\">\n                <div class=\"counters-cell\"></div>\n                <div class=\"counters-cell\">{{i18n\n                    \"admin.dashboard.reports.today\"\n                  }}</div>\n                <div class=\"counters-cell\">{{i18n\n                    \"admin.dashboard.reports.yesterday\"\n                  }}</div>\n                <div class=\"counters-cell\">{{i18n\n                    \"admin.dashboard.reports.last_7_days\"\n                  }}</div>\n                <div class=\"counters-cell\">{{i18n\n                    \"admin.dashboard.reports.last_30_days\"\n                  }}</div>\n              </div>\n              {{#each this.emotions as |metric|}}\n                <AdminReport\n                  @showHeader={{false}}\n                  @filters={{this.emotionFilters}}\n                  @forcedModes=\"emotion\"\n                  @dataSourceName=\"emotion_{{metric}}\"\n                />\n              {{/each}}\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  */\n  {\n    \"id\": \"zVjOA3Ed\",\n    \"block\": \"[[[10,0],[14,0,\\\"sentiment section\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"period-section\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"section-title\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"h2\\\"],[12],[1,\\\"\\\\n        \\\"],[1,[28,[35,2],[\\\"discourse_ai.sentiments.dashboard.title\\\"],null]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[8,[39,3],null,[[\\\"@period\\\",\\\"@setPeriod\\\",\\\"@startDate\\\",\\\"@endDate\\\",\\\"@setCustomDateRange\\\"],[[30,0,[\\\"period\\\"]],[30,0,[\\\"setPeriod\\\"]],[30,0,[\\\"startDate\\\"]],[30,0,[\\\"endDate\\\"]],[30,0,[\\\"setCustomDateRange\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"section-body\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"charts\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,4],null,[[\\\"@dataSourceName\\\",\\\"@filters\\\",\\\"@showHeader\\\"],[\\\"overall_sentiment\\\",[30,0,[\\\"filters\\\"]],true]],null],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"admin-report activity-metrics\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"header\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"ul\\\"],[14,0,\\\"breadcrumb\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"li\\\"],[14,0,\\\"item report\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,7],[[24,0,\\\"report-url\\\"]],[[\\\"@route\\\"],[\\\"adminReports\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[1,[28,[35,2],[\\\"admin.dashboard.emotion.title\\\"],null]],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n              \\\"],[8,[39,8],null,[[\\\"@interactive\\\"],[\\\"true\\\"]],[[\\\"trigger\\\",\\\"content\\\"],[[[[1,\\\"\\\\n                  \\\"],[1,[28,[35,10],[\\\"circle-question\\\"],null]],[1,\\\"\\\\n                \\\"]],[]],[[[1,\\\"\\\\n                  \\\"],[10,1],[12],[1,[28,[35,2],[\\\"admin.dashboard.emotion.description\\\"],null]],[13],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"report-body\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"counters-list\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"counters-header\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"counters-cell\\\"],[12],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"counters-cell\\\"],[12],[1,[28,[35,2],[\\\"admin.dashboard.reports.today\\\"],null]],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"counters-cell\\\"],[12],[1,[28,[35,2],[\\\"admin.dashboard.reports.yesterday\\\"],null]],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"counters-cell\\\"],[12],[1,[28,[35,2],[\\\"admin.dashboard.reports.last_7_days\\\"],null]],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"counters-cell\\\"],[12],[1,[28,[35,2],[\\\"admin.dashboard.reports.last_30_days\\\"],null]],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"],[42,[28,[37,14],[[28,[37,14],[[30,0,[\\\"emotions\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[39,4],null,[[\\\"@showHeader\\\",\\\"@filters\\\",\\\"@forcedModes\\\",\\\"@dataSourceName\\\"],[false,[30,0,[\\\"emotionFilters\\\"]],\\\"emotion\\\",[29,[\\\"emotion_\\\",[30,1]]]]],null],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"metric\\\"],false,[\\\"div\\\",\\\"h2\\\",\\\"i18n\\\",\\\"dashboard-period-selector\\\",\\\"admin-report\\\",\\\"ul\\\",\\\"li\\\",\\\"link-to\\\",\\\"d-tooltip\\\",\\\":trigger\\\",\\\"d-icon\\\",\\\":content\\\",\\\"span\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n    \"moduleName\": \"discourse/plugins/discourse-ai/discourse/templates/admin-dashboard-sentiment.hbs\",\n    \"isStrictMode\": false\n  });\n});","define(\"discourse/plugins/discourse-ai/discourse/templates/connectors/after-d-editor/composer-open\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if this.isAiBotChat}}\n    {{body-class this.aiBotClasses}}\n    {{#if this.renderChatWarning}}\n      <div class=\"ai-bot-chat-warning\">{{i18n\n          \"discourse_ai.ai_bot.pm_warning\"\n        }}</div>\n    {{/if}}\n  {{/if}}\n  */\n  {\n    \"id\": \"t7q115/2\",\n    \"block\": \"[[[41,[30,0,[\\\"isAiBotChat\\\"]],[[[1,\\\"  \\\"],[1,[28,[35,1],[[30,0,[\\\"aiBotClasses\\\"]]],null]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"renderChatWarning\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"ai-bot-chat-warning\\\"],[12],[1,[28,[35,3],[\\\"discourse_ai.ai_bot.pm_warning\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null]],[],false,[\\\"if\\\",\\\"body-class\\\",\\\"div\\\",\\\"i18n\\\"]]\",\n    \"moduleName\": \"discourse/plugins/discourse-ai/discourse/templates/connectors/after-d-editor/composer-open.hbs\",\n    \"isStrictMode\": false\n  });\n});","define(\"discourse/plugins/discourse-ai/discourse/templates/preferences/ai\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{!   \n    Later when we have more preferences, \n    move the conditional (showAutoImageCaptionSetting)\n    to be only around the auto-image-caption preference.\n   }}\n  {{#if this.showAutoImageCaptionSetting}}\n    <label class=\"control-label\">{{i18n \"discourse_ai.title\"}}</label>\n  \n    <div class=\"control-group ai-setting\">\n      <PreferenceCheckbox\n        @labelKey=\"discourse_ai.ai_helper.image_caption.automatic_caption_setting\"\n        @checked={{this.model.user_option.auto_image_caption}}\n        data-setting-name=\"auto-image-caption\"\n        class=\"pref-auto-image-caption\"\n      />\n    </div>\n  \n    <SaveControls\n      @id=\"user_ai_preference_save\"\n      @model={{this.model}}\n      @action={{this.save}}\n      @saved={{this.saved}}\n    />\n  {{/if}}\n  */\n  {\n    \"id\": \"Y7rf83mm\",\n    \"block\": \"[[[41,[30,0,[\\\"showAutoImageCaptionSetting\\\"]],[[[1,\\\"  \\\"],[10,\\\"label\\\"],[14,0,\\\"control-label\\\"],[12],[1,[28,[35,2],[\\\"discourse_ai.title\\\"],null]],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"control-group ai-setting\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[39,4],[[24,\\\"data-setting-name\\\",\\\"auto-image-caption\\\"],[24,0,\\\"pref-auto-image-caption\\\"]],[[\\\"@labelKey\\\",\\\"@checked\\\"],[\\\"discourse_ai.ai_helper.image_caption.automatic_caption_setting\\\",[30,0,[\\\"model\\\",\\\"user_option\\\",\\\"auto_image_caption\\\"]]]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[8,[39,5],null,[[\\\"@id\\\",\\\"@model\\\",\\\"@action\\\",\\\"@saved\\\"],[\\\"user_ai_preference_save\\\",[30,0,[\\\"model\\\"]],[30,0,[\\\"save\\\"]],[30,0,[\\\"saved\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[],false,[\\\"if\\\",\\\"label\\\",\\\"i18n\\\",\\\"div\\\",\\\"preference-checkbox\\\",\\\"save-controls\\\"]]\",\n    \"moduleName\": \"discourse/plugins/discourse-ai/discourse/templates/preferences/ai.hbs\",\n    \"isStrictMode\": false\n  });\n});","define(\"discourse/plugins/discourse-ai/initializers/admin-plugin-configuration-nav\", [\"exports\", \"discourse/lib/plugin-api\"], function (_exports, _pluginApi) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = {\n    name: \"discourse-ai-admin-plugin-configuration-nav\",\n    initialize(container) {\n      const currentUser = container.lookup(\"service:current-user\");\n      if (!currentUser || !currentUser.admin) {\n        return;\n      }\n      (0, _pluginApi.withPluginApi)(\"1.1.0\", api => {\n        api.addAdminPluginConfigurationNav(\"discourse-ai\", [{\n          label: \"discourse_ai.usage.short_title\",\n          route: \"adminPlugins.show.discourse-ai-usage\"\n        }, {\n          label: \"discourse_ai.llms.short_title\",\n          route: \"adminPlugins.show.discourse-ai-llms\"\n        }, {\n          label: \"discourse_ai.ai_persona.short_title\",\n          route: \"adminPlugins.show.discourse-ai-personas\"\n        }, {\n          label: \"discourse_ai.embeddings.short_title\",\n          route: \"adminPlugins.show.discourse-ai-embeddings\"\n        }, {\n          label: \"discourse_ai.tools.short_title\",\n          route: \"adminPlugins.show.discourse-ai-tools\"\n        }, {\n          label: \"discourse_ai.spam.short_title\",\n          route: \"adminPlugins.show.discourse-ai-spam\"\n        }]);\n      });\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/initializers/admin-reports\", [\"exports\", \"discourse/lib/plugin-api\", \"discourse/plugins/discourse-ai/discourse/components/admin-report-emotion\"], function (_exports, _pluginApi, _adminReportEmotion) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = {\n    name: \"discourse-ai-admin-reports\",\n    initialize(container) {\n      const currentUser = container.lookup(\"service:current-user\");\n      if (!currentUser || !currentUser.admin) {\n        return;\n      }\n      (0, _pluginApi.withPluginApi)(\"2.0.1\", api => {\n        api.registerReportModeComponent(\"emotion\", _adminReportEmotion.default);\n      });\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/initializers/ai-artifacts\", [\"exports\", \"discourse/lib/plugin-api\", \"discourse/plugins/discourse-ai/discourse/components/ai-artifact\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _pluginApi, _aiArtifact, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  function initializeAiArtifacts(api) {\n    api.decorateCookedElement((element, helper) => {\n      if (!helper.renderGlimmer) {\n        return;\n      }\n      [...element.querySelectorAll(\"div.ai-artifact\")].forEach(artifactElement => {\n        const artifactId = artifactElement.getAttribute(\"data-ai-artifact-id\");\n        const artifactVersion = artifactElement.getAttribute(\"data-ai-artifact-version\");\n        helper.renderGlimmer(artifactElement, (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n        /*\n          \n                    <AiArtifact\n                      @artifactId={{artifactId}}\n                      @artifactVersion={{artifactVersion}}\n                    />\n                  \n        */\n        {\n          \"id\": \"pqt7PatD\",\n          \"block\": \"[[[1,\\\"\\\\n            \\\"],[8,[32,0],null,[[\\\"@artifactId\\\",\\\"@artifactVersion\\\"],[[32,1],[32,2]]],null],[1,\\\"\\\\n          \\\"]],[],false,[]]\",\n          \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/initializers/ai-artifacts.js\",\n          \"scope\": () => [_aiArtifact.default, artifactId, artifactVersion],\n          \"isStrictMode\": true\n        }), (0, _templateOnly.default)(undefined, undefined)));\n      });\n    }, {\n      id: \"ai-artifact\",\n      onlyStream: true\n    });\n  }\n  var _default = _exports.default = {\n    name: \"ai-artifact\",\n    initialize() {\n      (0, _pluginApi.withPluginApi)(\"0.8.7\", initializeAiArtifacts);\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/initializers/ai-bot-replies\", [\"exports\", \"discourse/lib/plugin-api\", \"discourse/widgets/render-glimmer\", \"discourse-common/lib/deprecated\", \"discourse/plugins/discourse-ai/discourse/components/ai-bot-header-icon\", \"discourse/plugins/discourse-ai/discourse/components/post-menu/ai-cancel-streaming-button\", \"discourse/plugins/discourse-ai/discourse/components/post-menu/ai-debug-button\", \"discourse/plugins/discourse-ai/discourse/components/post-menu/ai-share-button\", \"discourse/plugins/discourse-ai/discourse/lib/ai-bot-helper\", \"discourse/plugins/discourse-ai/discourse/lib/ai-streamer/progress-handlers\", \"@ember/template-factory\"], function (_exports, _pluginApi, _renderGlimmer, _deprecated, _aiBotHeaderIcon, _aiCancelStreamingButton, _aiDebugButton, _aiShareButton, _aiBotHelper, _progressHandlers, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  let enabledChatBotIds = [];\n  let allowDebug = false;\n  function isGPTBot(user) {\n    return user && enabledChatBotIds.includes(user.id);\n  }\n  function attachHeaderIcon(api) {\n    api.headerIcons.add(\"ai\", _aiBotHeaderIcon.default);\n  }\n  function initializeAIBotReplies(api) {\n    initializePauseButton(api);\n    api.modifyClass(\"controller:topic\", {\n      pluginId: \"discourse-ai\",\n      onAIBotStreamedReply: function (data) {\n        (0, _progressHandlers.streamPostText)(this.model.postStream, data);\n      },\n      subscribe: function () {\n        this._super();\n        if (this.model.isPrivateMessage && this.model.details.allowed_users && this.model.details.allowed_users.filter(isGPTBot).length >= 1) {\n          // we attempt to recover the last message in the bus\n          // so we subscribe at -2\n          this.messageBus.subscribe(`discourse-ai/ai-bot/topic/${this.model.id}`, this.onAIBotStreamedReply.bind(this), -2);\n        }\n      },\n      unsubscribe: function () {\n        this.messageBus.unsubscribe(\"discourse-ai/ai-bot/topic/*\");\n        this._super();\n      }\n    });\n  }\n  function initializePersonaDecorator(api) {\n    let topicController = null;\n    api.decorateWidget(`poster-name:after`, dec => {\n      if (!isGPTBot(dec.attrs.user)) {\n        return;\n      }\n      // this is hacky and will need to change\n      // trouble is we need to get the model for the topic\n      // and it is not available in the decorator\n      // long term this will not be a problem once we remove widgets and\n      // have a saner structure for our model\n      topicController = topicController || api.container.lookup(\"controller:topic\");\n      return dec.widget.attach(\"persona-flair\", {\n        topicController\n      });\n    });\n    (0, _renderGlimmer.registerWidgetShim)(\"persona-flair\", \"span.persona-flair\", (0, _templateFactory.createTemplateFactory)(\n    /*\n      {{@data.topicController.model.ai_persona_name}}\n    */\n    {\n      \"id\": \"9jYzNJdM\",\n      \"block\": \"[[[1,[30,1,[\\\"topicController\\\",\\\"model\\\",\\\"ai_persona_name\\\"]]]],[\\\"@data\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/initializers/ai-bot-replies.js\",\n      \"isStrictMode\": false\n    }));\n  }\n  function initializePauseButton(api) {\n    const transformerRegistered = api.registerValueTransformer(\"post-menu-buttons\", _ref2 => {\n      let {\n        value: dag,\n        context: {\n          post,\n          firstButtonKey\n        }\n      } = _ref2;\n      if (isGPTBot(post.user)) {\n        dag.add(\"ai-cancel-gpt\", _aiCancelStreamingButton.default, {\n          before: firstButtonKey,\n          after: [\"ai-share\", \"ai-debug\"]\n        });\n      }\n    });\n    const silencedKey = transformerRegistered && \"discourse.post-menu-widget-overrides\";\n    (0, _deprecated.withSilencedDeprecations)(silencedKey, () => initializePauseWidgetButton(api));\n  }\n  function initializePauseWidgetButton(api) {\n    api.addPostMenuButton(\"cancel-gpt\", post => {\n      if (isGPTBot(post.user)) {\n        return {\n          icon: \"pause\",\n          action: \"cancelStreaming\",\n          title: \"discourse_ai.ai_bot.cancel_streaming\",\n          className: \"btn btn-default cancel-streaming\",\n          position: \"first\"\n        };\n      }\n    });\n    api.attachWidgetAction(\"post\", \"cancelStreaming\", function () {\n      _aiCancelStreamingButton.default.cancelStreaming(this.model);\n    });\n  }\n  function initializeDebugButton(api) {\n    const currentUser = api.getCurrentUser();\n    if (!currentUser || !currentUser.ai_enabled_chat_bots || !allowDebug) {\n      return;\n    }\n    const transformerRegistered = api.registerValueTransformer(\"post-menu-buttons\", _ref3 => {\n      let {\n        value: dag,\n        context: {\n          post,\n          firstButtonKey\n        }\n      } = _ref3;\n      if (post.topic?.archetype === \"private_message\") {\n        dag.add(\"ai-debug\", _aiDebugButton.default, {\n          before: firstButtonKey,\n          after: \"ai-share\"\n        });\n      }\n    });\n    const silencedKey = transformerRegistered && \"discourse.post-menu-widget-overrides\";\n    (0, _deprecated.withSilencedDeprecations)(silencedKey, () => initializeDebugWidgetButton(api));\n  }\n  function initializeDebugWidgetButton(api) {\n    const currentUser = api.getCurrentUser();\n    let debugAiResponse = async function (_ref4) {\n      let {\n        post\n      } = _ref4;\n      const modal = api.container.lookup(\"service:modal\");\n      _aiDebugButton.default.debugAiResponse(post, modal);\n    };\n    api.addPostMenuButton(\"debugAi\", post => {\n      if (post.topic?.archetype !== \"private_message\") {\n        return;\n      }\n      if (!(0, _aiBotHelper.isPostFromAiBot)(post, currentUser)) {\n        return;\n      }\n      return {\n        action: debugAiResponse,\n        icon: \"info\",\n        className: \"post-action-menu__debug-ai\",\n        title: \"discourse_ai.ai_bot.debug_ai\",\n        position: \"first\"\n      };\n    });\n  }\n  function initializeShareButton(api) {\n    const currentUser = api.getCurrentUser();\n    if (!currentUser || !currentUser.ai_enabled_chat_bots) {\n      return;\n    }\n    const transformerRegistered = api.registerValueTransformer(\"post-menu-buttons\", _ref5 => {\n      let {\n        value: dag,\n        context: {\n          post,\n          firstButtonKey\n        }\n      } = _ref5;\n      if (post.topic?.archetype === \"private_message\") {\n        dag.add(\"ai-share\", _aiShareButton.default, {\n          before: firstButtonKey\n        });\n      }\n    });\n    const silencedKey = transformerRegistered && \"discourse.post-menu-widget-overrides\";\n    (0, _deprecated.withSilencedDeprecations)(silencedKey, () => initializeShareWidgetButton(api));\n  }\n  function initializeShareWidgetButton(api) {\n    const currentUser = api.getCurrentUser();\n    let shareAiResponse = async function (_ref6) {\n      let {\n        post,\n        showFeedback\n      } = _ref6;\n      const modal = api.container.lookup(\"service:modal\");\n      _aiShareButton.default.shareAiResponse(post, modal, showFeedback);\n    };\n    api.addPostMenuButton(\"share\", post => {\n      // for backwards compat so we don't break if topic is undefined\n      if (post.topic?.archetype !== \"private_message\") {\n        return;\n      }\n      if (!(0, _aiBotHelper.isPostFromAiBot)(post, currentUser)) {\n        return;\n      }\n      return {\n        action: shareAiResponse,\n        icon: \"far-copy\",\n        className: \"post-action-menu__share-ai\",\n        title: \"discourse_ai.ai_bot.share\",\n        position: \"first\"\n      };\n    });\n  }\n  function initializeShareTopicButton(api) {\n    const modal = api.container.lookup(\"service:modal\");\n    const currentUser = api.container.lookup(\"service:current-user\");\n    api.registerTopicFooterButton({\n      id: \"share-ai-conversation\",\n      icon: \"share-nodes\",\n      label: \"discourse_ai.ai_bot.share_ai_conversation.name\",\n      title: \"discourse_ai.ai_bot.share_ai_conversation.title\",\n      action() {\n        (0, _aiBotHelper.showShareConversationModal)(modal, this.topic.id);\n      },\n      classNames: [\"share-ai-conversation-button\"],\n      dependentKeys: [\"topic.ai_persona_name\"],\n      displayed() {\n        return currentUser?.can_share_ai_bot_conversations && this.topic.ai_persona_name;\n      }\n    });\n  }\n  var _default = _exports.default = {\n    name: \"discourse-ai-bot-replies\",\n    initialize(container) {\n      const user = container.lookup(\"service:current-user\");\n      if (user?.ai_enabled_chat_bots) {\n        enabledChatBotIds = user.ai_enabled_chat_bots.map(bot => bot.id);\n        allowDebug = user.can_debug_ai_bot_conversations;\n        (0, _pluginApi.withPluginApi)(\"1.6.0\", attachHeaderIcon);\n        (0, _pluginApi.withPluginApi)(\"1.34.0\", initializeAIBotReplies);\n        (0, _pluginApi.withPluginApi)(\"1.6.0\", initializePersonaDecorator);\n        (0, _pluginApi.withPluginApi)(\"1.34.0\", api => initializeDebugButton(api, container));\n        (0, _pluginApi.withPluginApi)(\"1.34.0\", api => initializeShareButton(api, container));\n        (0, _pluginApi.withPluginApi)(\"1.22.0\", api => initializeShareTopicButton(api, container));\n      }\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/initializers/ai-chat-summarization\", [\"exports\", \"discourse/lib/api\", \"discourse/plugins/discourse-ai/discourse/components/modal/chat-modal-channel-summary\"], function (_exports, _api, _chatModalChannelSummary) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _api.apiInitializer)(\"1.34.0\", api => {\n    const siteSettings = api.container.lookup(\"service:site-settings\");\n    const currentUser = api.getCurrentUser();\n    const chatService = api.container.lookup(\"service:chat\");\n    const modal = api.container.lookup(\"service:modal\");\n    const canSummarize = currentUser && currentUser.can_summarize;\n    if (!siteSettings.chat_enabled || !chatService?.userCanChat || !canSummarize) {\n      return;\n    }\n    api.registerChatComposerButton({\n      translatedLabel: \"discourse_ai.summarization.chat.title\",\n      id: \"channel-summary\",\n      icon: \"discourse-sparkles\",\n      position: \"dropdown\",\n      action: () => {\n        modal.show(_chatModalChannelSummary.default, {\n          model: {\n            channelId: chatService.activeChannel?.id\n          }\n        });\n      }\n    });\n  });\n});","define(\"discourse/plugins/discourse-ai/initializers/ai-helper\", [\"exports\", \"discourse/lib/plugin-api\", \"discourse-common/helpers/i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-composer-helper-menu\", \"discourse/plugins/discourse-ai/discourse/components/modal/diff-modal\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\"], function (_exports, _pluginApi, _i18n, _aiComposerHelperMenu, _diffModal, _showAiHelper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  function initializeAiHelperTrigger(api) {\n    api.onToolbarCreate(toolbar => {\n      const currentUser = api.getCurrentUser();\n      const modal = api.container.lookup(\"service:modal\");\n      const selectedText = toolbarEvent => {\n        const composerContent = toolbarEvent.getText();\n        const selected = toolbarEvent.selected.value;\n        if (selected && selected.length > 0) {\n          return selected;\n        }\n        if (composerContent && composerContent.length > 0) {\n          return composerContent;\n        }\n      };\n      toolbar.addButton({\n        id: \"ai-helper-trigger\",\n        group: \"extras\",\n        icon: \"discourse-sparkles\",\n        title: \"discourse_ai.ai_helper.context_menu.trigger\",\n        preventFocus: true,\n        shortcut: \"ALT+P\",\n        shortcutAction: toolbarEvent => {\n          if (toolbarEvent.getText().length === 0) {\n            const toasts = api.container.lookup(\"service:toasts\");\n            return toasts.error({\n              class: \"ai-proofread-error-toast\",\n              duration: 3000,\n              data: {\n                message: (0, _i18n.default)(\"discourse_ai.ai_helper.no_content_error\")\n              }\n            });\n          }\n          const mode = currentUser?.ai_helper_prompts.find(p => p.name === \"proofread\").id;\n          modal.show(_diffModal.default, {\n            model: {\n              mode,\n              selectedText: selectedText(toolbarEvent),\n              toolbarEvent\n            }\n          });\n        },\n        condition: () => (0, _showAiHelper.showComposerAiHelper)(api.container.lookup(\"service:composer\").model, api.container.lookup(\"service:site-settings\"), currentUser, \"context_menu\"),\n        sendAction: event => {\n          const menu = api.container.lookup(\"service:menu\");\n          menu.show(document.querySelector(\".ai-helper-trigger\"), {\n            identifier: \"ai-composer-helper-menu\",\n            component: _aiComposerHelperMenu.default,\n            modalForMobile: true,\n            interactive: true,\n            data: {\n              toolbarEvent: event,\n              selectedText: selectedText(event)\n            }\n          });\n        }\n      });\n    });\n  }\n  var _default = _exports.default = {\n    name: \"discourse-ai-helper\",\n    initialize() {\n      (0, _pluginApi.withPluginApi)(\"1.1.0\", api => {\n        initializeAiHelperTrigger(api);\n      });\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/initializers/ai-image-caption\", [\"exports\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/api\", \"discourse/lib/uploads\", \"discourse-i18n\"], function (_exports, _ajax, _ajaxError, _api, _uploads, _discourseI18n) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _api.apiInitializer)(\"1.25.0\", api => {\n    const buttonAttrs = {\n      label: (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.image_caption.button_label\"),\n      icon: \"discourse-sparkles\",\n      class: \"generate-caption\"\n    };\n    const settings = api.container.lookup(\"service:site-settings\");\n    const currentUser = api.getCurrentUser();\n    if (!settings.ai_helper_enabled_features.includes(\"image_caption\") || !currentUser?.can_use_assistant) {\n      return;\n    }\n    api.addSaveableUserOptionField(\"auto_image_caption\");\n    api.addComposerImageWrapperButton(buttonAttrs.label, buttonAttrs.class, buttonAttrs.icon, event => {\n      const imageCaptionPopup = api.container.lookup(\"service:imageCaptionPopup\");\n      imageCaptionPopup.popupTrigger = event.target;\n      if (imageCaptionPopup.popupTrigger.classList.contains(\"generate-caption\")) {\n        const buttonWrapper = event.target.closest(\".button-wrapper\");\n        const imageIndex = parseInt(buttonWrapper.getAttribute(\"data-image-index\"), 10);\n        const imageSrc = event.target.closest(\".image-wrapper\").querySelector(\"img\").getAttribute(\"src\");\n        imageCaptionPopup.toggleLoadingState(true);\n        const site = api.container.lookup(\"service:site\");\n        if (!site.mobileView) {\n          imageCaptionPopup.showPopup = !imageCaptionPopup.showPopup;\n        }\n        imageCaptionPopup._request = (0, _ajax.ajax)(`/discourse-ai/ai-helper/caption_image`, {\n          method: \"POST\",\n          data: {\n            image_url: imageSrc,\n            image_url_type: \"long_url\"\n          }\n        });\n        imageCaptionPopup._request.then(_ref => {\n          let {\n            caption\n          } = _ref;\n          imageCaptionPopup.imageSrc = imageSrc;\n          imageCaptionPopup.imageIndex = imageIndex;\n          imageCaptionPopup.newCaption = caption;\n          if (site.mobileView) {\n            // Auto-saves caption on mobile view\n            imageCaptionPopup.updateCaption();\n          }\n        }).catch(_ajaxError.popupAjaxError).finally(() => {\n          imageCaptionPopup.toggleLoadingState(false);\n        });\n      }\n    });\n\n    // Checks if image is small (≤ 0.1 MP)\n    function isSmallImage(width, height) {\n      const megapixels = width * height / 1000000;\n      return megapixels <= 0.1;\n    }\n    function needsImprovedCaption(caption) {\n      return caption.length < 20 || caption.split(\" \").length === 1;\n    }\n    function getUploadUrlFromMarkdown(markdown) {\n      const regex = /\\(upload:\\/\\/([^)]+)\\)/;\n      const match = markdown.match(regex);\n      return match ? `upload://${match[1]}` : null;\n    }\n    async function fetchImageCaption(imageUrl, urlType) {\n      try {\n        const response = await (0, _ajax.ajax)(`/discourse-ai/ai-helper/caption_image`, {\n          method: \"POST\",\n          data: {\n            image_url: imageUrl,\n            image_url_type: urlType\n          }\n        });\n        return response.caption;\n      } catch (error) {\n        toasts.error({\n          class: \"ai-image-caption-error-toast\",\n          duration: 3000,\n          data: {\n            message: (0, _ajaxError.extractError)(error)\n          }\n        });\n      }\n    }\n    const autoCaptionAllowedGroups = settings?.ai_auto_image_caption_allowed_groups.split(\"|\").map(id => parseInt(id, 10));\n    const currentUserGroups = currentUser.groups.map(g => g.id);\n    if (!currentUserGroups.some(groupId => autoCaptionAllowedGroups.includes(groupId))) {\n      return;\n    }\n    const toasts = api.container.lookup(\"service:toasts\");\n    // Automatically caption uploaded images\n    api.addComposerUploadMarkdownResolver(async upload => {\n      const autoCaptionEnabled = currentUser.get(\"user_option.auto_image_caption\");\n      if (!autoCaptionEnabled || !(0, _uploads.isImage)(upload.url) || !needsImprovedCaption(upload.original_filename) || isSmallImage(upload.width, upload.height)) {\n        return (0, _uploads.getUploadMarkdown)(upload);\n      }\n      const caption = await fetchImageCaption(upload.url, \"long_url\");\n      if (!caption) {\n        return (0, _uploads.getUploadMarkdown)(upload);\n      }\n      return `![${caption}|${upload.thumbnail_width}x${upload.thumbnail_height}](${upload.short_url})`;\n    });\n\n    // Conditionally show dialog to auto image caption\n    api.composerBeforeSave(() => {\n      return new Promise((resolve, reject) => {\n        const dialog = api.container.lookup(\"service:dialog\");\n        const composer = api.container.lookup(\"service:composer\");\n        const localePrefix = \"discourse_ai.ai_helper.image_caption.automatic_caption_dialog\";\n        const autoCaptionEnabled = currentUser.get(\"user_option.auto_image_caption\");\n        const imageUploads = composer.model.reply.match(_uploads.IMAGE_MARKDOWN_REGEX);\n        const hasImageUploads = imageUploads?.length > 0;\n        if (!hasImageUploads) {\n          resolve();\n        }\n        const imagesToCaption = imageUploads.filter(image => {\n          const caption = image.substring(image.indexOf(\"[\") + 1, image.indexOf(\"]\")).split(\"|\")[0];\n          // We don't check if the image is small to show the prompt here\n          // because the width/height are the thumbnail sizes so the mp count\n          // is incorrect. It doesn't matter because the auto caption won't\n          // happen anyways if its small because that uses the actual upload dimensions\n          return needsImprovedCaption(caption);\n        });\n        const needsBetterCaptions = imagesToCaption?.length > 0;\n        const keyValueStore = api.container.lookup(\"service:key-value-store\");\n        const imageCaptionPopup = api.container.lookup(\"service:imageCaptionPopup\");\n        const autoCaptionPromptKey = \"ai-auto-caption-seen\";\n        const seenAutoCaptionPrompt = keyValueStore.getItem(autoCaptionPromptKey);\n        if (autoCaptionEnabled || !needsBetterCaptions || seenAutoCaptionPrompt) {\n          return resolve();\n        }\n        keyValueStore.setItem(autoCaptionPromptKey, true);\n        dialog.confirm({\n          message: (0, _discourseI18n.i18n)(`${localePrefix}.prompt`),\n          confirmButtonLabel: `${localePrefix}.confirm`,\n          cancelButtonLabel: `${localePrefix}.cancel`,\n          class: \"ai-image-caption-prompt-dialog\",\n          didConfirm: async () => {\n            try {\n              currentUser.set(\"user_option.auto_image_caption\", true);\n              await currentUser.save([\"auto_image_caption\"]);\n              imagesToCaption.forEach(async imageMarkdown => {\n                const uploadUrl = getUploadUrlFromMarkdown(imageMarkdown);\n                imageCaptionPopup.showAutoCaptionLoader = true;\n                const caption = await fetchImageCaption(uploadUrl, \"short_url\");\n\n                // Find and replace the caption in the reply\n                const regex = new RegExp(`(!\\\\[)[^|]+(\\\\|[^\\\\]]+\\\\]\\\\(${uploadUrl}\\\\))`);\n                const newReply = composer.model.reply.replace(regex, `$1${caption}$2`);\n                composer.model.set(\"reply\", newReply);\n                imageCaptionPopup.showAutoCaptionLoader = false;\n                resolve();\n              });\n            } catch (error) {\n              // Reject the promise if an error occurs\n              // Show an error saying unable to generate captions\n              reject(error);\n            }\n          },\n          didCancel: () => {\n            // Don't enable auto captions and continue with the save\n            resolve();\n          }\n        });\n      });\n    });\n  });\n});","define(\"discourse/plugins/discourse-ai/initializers/ai-semantic-search\", [\"exports\", \"discourse/lib/api\"], function (_exports, _api) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _api.apiInitializer)(\"1.15.0\", api => {\n    api.modifyClass(\"component:search-result-entry\", {\n      pluginId: \"discourse-ai\",\n      classNameBindings: [\"bulkSelectEnabled\", \"post.generatedByAi:ai-result\"]\n    });\n  });\n});","define(\"discourse/plugins/discourse-ai/initializers/related-topics\", [\"exports\", \"@glimmer/tracking\", \"discourse/components/basic-topic-list\", \"discourse/lib/plugin-api\", \"discourse-common/helpers/d-icon\", \"discourse-common/helpers/i18n\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _tracking, _basicTopicList, _pluginApi, _dIcon, _i18n, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const RelatedTopics = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n    <div\n      role=\"complementary\"\n      aria-labelledby=\"related-topics-title\"\n      id=\"related-topics\"\n      class=\"more-topics__list\"\n    >\n      <h3 id=\"related-topics-title\" class=\"more-topics__list-title\">\n        {{icon \"discourse-sparkles\"}}{{i18n \"discourse_ai.related_topics.title\"}}\n      </h3>\n      <div class=\"topics\">\n        <BasicTopicList @topics={{@topic.relatedTopics}} />\n      </div>\n    </div>\n  \n  */\n  {\n    \"id\": \"ub/16OCY\",\n    \"block\": \"[[[1,\\\"\\\\n  \\\"],[10,0],[14,\\\"role\\\",\\\"complementary\\\"],[14,\\\"aria-labelledby\\\",\\\"related-topics-title\\\"],[14,1,\\\"related-topics\\\"],[14,0,\\\"more-topics__list\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h3\\\"],[14,1,\\\"related-topics-title\\\"],[14,0,\\\"more-topics__list-title\\\"],[12],[1,\\\"\\\\n      \\\"],[1,[28,[32,0],[\\\"discourse-sparkles\\\"],null]],[1,[28,[32,1],[\\\"discourse_ai.related_topics.title\\\"],null]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"topics\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,2],null,[[\\\"@topics\\\"],[[30,1,[\\\"relatedTopics\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@topic\\\"],false,[]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/initializers/related-topics.js\",\n    \"scope\": () => [_dIcon.default, _i18n.default, _basicTopicList.default],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"related-topics:RelatedTopics\"));\n  var _default = _exports.default = {\n    name: \"discourse-ai-related-topics\",\n    initialize(container) {\n      const settings = container.lookup(\"service:site-settings\");\n      if (!settings.ai_embeddings_enabled || !settings.ai_embeddings_semantic_related_topics_enabled) {\n        return;\n      }\n      (0, _pluginApi.withPluginApi)(\"1.37.2\", api => {\n        api.registerMoreTopicsTab({\n          id: \"related-topics\",\n          name: (0, _i18n.default)(\"discourse_ai.related_topics.pill\"),\n          icon: \"discourse-sparkles\",\n          component: RelatedTopics,\n          condition: _ref => {\n            let {\n              topic\n            } = _ref;\n            return topic.relatedTopics?.length;\n          }\n        });\n        api.modifyClass(\"model:topic\", Superclass => class extends Superclass {\n          static #_ = (() => dt7948.g(this.prototype, \"related_topics\", [_tracking.tracked]))();\n          #related_topics = (() => (dt7948.i(this, \"related_topics\"), void 0))();\n          relatedTopicsCache = [];\n          get relatedTopics() {\n            // Used to keep related topics when a user scrolls up from the\n            // bottom of the topic and then scrolls back down\n            if (this.related_topics) {\n              this.relatedTopicsCache = this.related_topics;\n            }\n            return this.relatedTopicsCache?.map(topic => this.store.createRecord(\"topic\", topic));\n          }\n          static #_2 = (() => dt7948.n(this.prototype, \"relatedTopics\", [_tracking.cached]))();\n        });\n        api.modifyClass(\"model:post-stream\", Superclass => class extends Superclass {\n          _setSuggestedTopics(result) {\n            super._setSuggestedTopics(...arguments);\n            this.topic.related_topics = result.related_topics;\n          }\n        });\n      });\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/lib/discourse-markdown/ai-tags\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.setup = setup;\n  function setup(helper) {\n    helper.allowList([\"details[class=ai-quote]\"]);\n    helper.allowList([\"div[class=ai-artifact]\", \"div[data-ai-artifact-id]\", \"div[data-ai-artifact-version]\"]);\n  }\n});"],"mappings":"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"}