{"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","AiFeatureAdapter","AiToolAdapter","_ajax","AiEmbedding","createProperties","getProperties","updateProperties","attrs","id","testConfig","ajax","data","ai_embedding","workingCopy","createRecord","AiFeature","AiLlm","llm_quotas","llmConfig","ai_llm","CREATE_ATTRIBUTES","SYSTEM_ATTRIBUTES","AiPersona","createUser","result","user","user_id","flattenedToolStructure","tools","tName","toolOptions","forcedTools","includes","populateTools","flatTools","tool","toolId","options","force","mappedOptions","optionId","hasOwnProperty","keys","length","push","system","fromPOJO","dataClone","JSON","parse","stringify","persona","create","toPOJO","forced_tool_count","response_format","examples","_trackedBuiltIns","AiTool","trackParameters","parameters","TrackedArray","p","parameter","TrackedObject","enum","_component","_component2","_dIcon","_number","_getUrl","_templateFactory","AdminReportEmotion","dt7948","c","todayLink","date","moment","format","_filterURL","yesterdayLink","subtract","lastSevenDaysLink","lastThirtyDaysLink","_baseFilter","_model","model","static","setComponentTemplate","createTemplateFactory","block","moduleName","scope","isStrictMode","attributeBindings","classNames","_tracking","_helper","_modifier","_object","_didInsert","_service","_emberModifier","_truthHelpers","_dButton","_horizontalOverflowNav","_postList","_bodyClass","_categoryBadge","_replaceEmoji","_ajaxError","_later","_utilities","_category","_post","_discourseI18n","_dTooltip","_doughnutChart","_aiSentimentHorizontalBar","AdminReportSentimentAnalysis","g","prototype","service","router","i","tracked","selectedChart","posts","hasMorePosts","nextOffset","showingSelectedChart","activeFilter","shareIcon","setActiveFilter","modifier","element","clearActiveFilters","querySelector","classList","add","filterButtons","querySelectorAll","button","remove","calculateNeutralScore","total_count","positive_count","negative_count","sentimentMapping","sentiment","text","i18n","icon","groupingType","localePrefix","args","category_name","colors","currentGroupFilter","available_filters","find","filter","currentSortFilter","transformedData","category","findById","category_id","title","tag_name","scores","score_map","positive","neutral","negative","total_score","widths","filteredPosts","post","topic_title","postFilters","action","postRequest","group_by","group_value","start_date","end_date","offset","openToChart","queryParams","currentRoute","response","has_more","next_offset","e","popupAjaxError","n","showDetails","currentQueryParams","currentFilters","filters","transitionTo","name","fetchMorePosts","mappedPosts","pushObjects","backToAllCharts","shareChart","url","currentURL","clipboardCopy","getAbsoluteURL","on","fn","and","_template","_htmlClass","AiArtifactComponent","siteSettings","expanded","showingArtifact","constructor","super","arguments","keydownHandler","handleKeydown","bind","popStateHandler","handlePopState","window","addEventListener","willDestroy","removeEventListener","event","key","history","back","state","artifactId","requireClickToRun","ai_artifact_security","autorun","artifactUrl","artifactVersion","showArtifact","toggleView","pushState","location","href","wrapperClasses","seamless","setDataAttributes","dataAttributes","entries","forEach","_ref","setAttribute","heightStyle","artifactHeight","height","parseInt","isNaN","htmlSafe","showFooter","_didUpdate","_willDestroy","_runloop","_concatClass","Block","show","shown","blinking","undefined","AiBlinkingAnimation","blocks","Array","from","nextBlockBlinkingTimer","blockBlinkingTimer","blockShownTimer","setupAnimation","firstObject","onBlinking","nextBlock","onShowing","lastObject","teardownAnimation","cancel","currentBlock","objectAt","indexOf","_owner","_jquery","_pluginOutlet","_lazyHash","_user","_hashtagAutocomplete","_uppyUpload","_uppyMediaOptimizationPlugin","_userSearch","_userStatusOnAutocomplete","_aiPersonaLlmSelector","AiBotConversations","aiBotConversationsHiddenSubmit","mediaOptimizationWorker","site","uploads","textarea","uppyUpload","fileInputEl","_handlePaste","document","activeElement","canUpload","canPasteHtml","types","clipboardHelpers","clipboardData","files","addFiles","pasted","init","getOwner","useMultipartUploadsIfAvailable","uppyReady","composer_media_optimization_image_enabled","uppyWrapper","useUploadPlugin","optimizeFn","opts","optimizeImage","runParallel","isMobileDevice","onPreProcessProgress","file","inProgressUpload","inProgressUploads","upl","processing","onPreProcessComplete","uploadDone","upload","onProgressUploadsChanged","notifyPropertyChange","teardown","autocomplete","loading","showUploadsContainer","setPersonaId","personaId","setTargetRecipient","username","targetUsername","updateInputValue","_autoExpandTextarea","inputValue","target","handleKeyDown","tagName","shiftKey","prepareAndSubmitToBot","setTextArea","setupAutocomplete","scheduleOnce","focusTextarea","focus","$textarea","applyUserAutocomplete","applyHashtagAutocomplete","enable_mentions","template","dataSource","term","destroyUserStatuses","includeGroups","then","initUserStatusHtml","users","onRender","renderUserStatusHtml","width","treatAsTextarea","autoSelectFirstSuggestion","transformComplete","obj","afterComplete","onClose","hashtagConfig","hashtag_configurations","setupHashtagAutocomplete","registerFileInput","setup","openFileUpload","click","removeUpload","u","cancelUpload","cancelSingleUpload","fileId","submitToBot","inProgressUploadsCount","error","style","scrollHeight","maxHeight","getComputedStyle","overflowY","_aiBotHelper","_aiConversationsSidebarManager","AiBotHeaderIcon","appEvents","composer","currentUser","navigationMenu","sidebarState","aiConversationsSidebarManager","bots","availableBots","ai_enabled_chat_bots","bot","is_persona","has_default_llm","Boolean","model_name","showHeaderButton","ai_bot_add_to_header","clickShouldRouteOutOfConversations","isHeaderDropdownMode","ai_bot_enable_dedicated_ux","currentPanel","AI_CONVERSATIONS_PANEL","lastKnownAppURL","onClick","composeAiBotMessage","trigger","_templateOnly","AiBotSidebarNewConversation","shouldRender","isCurrentPanel","getElementById","routeTo","currentRouteName","outletArgs","toggleNavigationMenu","_dToast","_dToastInstance","_aiHelperOptionsList","_diffModal","_thumbnailSuggestions","AiComposerHelperMenu","modal","newSelectedText","diff","customPromptValue","noContentError","prompts","promptTypes","toolbarEvent","getText","helperOptions","ai_helper_prompts","siteLocale","default_locale","locale","available_locales","l","translatedName","language","translated_name","customPromptIndex","findIndex","customPrompt","splice","unshift","can_use_custom_prompts","reduce","memo","prompt_type","toast","owner","close","duration","theme","message","suggestChanges","option","mode","selectedText","thumbnails","thumbnailSuggestions","showResultAsDiff","revert","undoAiAction","closeMenu","_siteSetting","_siteSetting2","AiDefaultLlmSelector","defaultLlmSetting","loadDefaultLlmSetting","site_settings","plugin","setting","_backButton","_conditionalLoadingSpinner","_form","_adminSectionLandingItem","_adminSectionLandingWrapper","AiEmbeddingEditor","toasts","dialog","isSaving","selectedPreset","testRunning","testResult","testError","currentProvider","provider","formData","originalData","_originalFormData","cached","selectedProviders","embeddings","resultSetMeta","providers","prov","provName","distanceFunctions","t","df","distance_functions","presets","preset","display_name","preset_id","unshiftObject","showPresets","isNew","metaProviderParams","provider_params","testErrorMessage","displayTestResult","seeded","configurePreset","findBy","setProvider","set","params","initialParams","providerParams","acc","_ref2","field","values","v","normalizeParam","resetForm","save","dataToSave","newModel","addObject","savedProvider","success","later","test","testModel","configTestResult","confirm","didConfirm","destroyRecord","removeObject","catch","providerKeys","concat","not","get","eq","_dBreadcrumbsItem","_dPageSubheader","_adminConfigAreaEmptyList","_aiEmbeddingEditor","AiEmbeddingsListEditor","adminPluginNavManager","hasEmbeddingElements","_routing","ExpandableList","isExpanded","maxItemsToShow","hasMore","items","visibleItems","slice","remainingCount","expandToggleLabel","count","toggleExpanded","isLastItem","index","AiFeatureCard","hasGroups","feature","groupList","groups","groupIds","Set","personas","allowed_groups","group","has","LinkTo","_aiFeatureCard","AiFeaturesList","sortedModules","modules","toArray","toSorted","a","b","module_name","localeCompare","isSpamModule","aModule","isAutomationModule","featureName","transitionToAutomations","_dSelect","_filterInput","_aiDefaultLlmSelector","_aiFeaturesList","CONFIGURED","UNCONFIGURED","AiFeatures","filterValue","selectedFeatureGroup","features","f","module_enabled","featureGroupOptions","label","filteredFeatures","trim","toLowerCase","featureMatches","module","personaMatches","some","llmMatches","llm_models","llm","groupMatches","console","matchingFeatures","assign","onFilterChange","onFeatureGroupChange","resetAndFocus","hash","_dToggleSwitch","_fullPageSearch","_search","_aiIndicatorWave","AiFullPageSearch","searching","AiResults","showingAiResults","sortOrder","initialSearchTerm","searchTerm","onSearch","off","searchEnabled","resetAiResults","performHyDESearch","disableToggleSwitch","validSearchOrder","searchStateText","settled","noResults","searchType","SEARCH_TYPE_DEFAULT","isValidSearchTerm","searchClass","tooltipText","toggleAiResults","enabled","addSearchResults","q","async","translateResults","results","generatedByAi","finally","sortChanged","_dropdownMenu","_dMenu","_gists3","AiGistToggle","gists","buttons","TABLE_LAYOUT","TABLE_AI_LAYOUT","description","selectedOptionId","currentPreference","currentButton","onRegisterApi","api","dMenu","onSelect","setPreference","isPm","_withEventValue","AiHelperCustomPrompt","sendInput","submit","promptArgs","AiHelperLoading","_keyboardShortcuts","_aiHelperCustomPrompt","AiHelperOptionsList","showShortcut","desktopView","shortcutVisible","shortcut","translateModKey","PLATFORM_KEY_MODIFIER","indicatorDots","AiIndicatorWave","_boundAvatarTemplate","_adminUser","_aiQuotaDurationSelector","_aiLlmQuotaModal","AiLlmEditorForm","llmTemplate","modelName","split","info","llms","modelInfo","models","max_prompt_tokens","tokens","max_output_tokens","tokenizer","endpoint","computeProviderParams","input_cost","output_cost","cached_input_cost","api_key","enabled_chat_bot","vision_enabled","sort","tokenizers","adminUser","modulesUsingModel","usedBy","used_by","m","join","inUseWarning","settings","showAddQuotaButton","currentParams","fromEntries","k","canEditURL","openAddQuotaModal","addItemToCollection","updatedData","replaceWith","_ref3","providerParamsKeys","gt","_aiLlmEditorForm","AiLlmEditor","_comboBox","AiLlmSelector","_aiLlmEditor","isPreseeded","AiLlmsListEditor","modelDescription","replace","lookup","ignoreMissing","preseededDescription","sanitizedTranslationKey","hasLlmElements","preconfiguredTitle","preConfiguredLlms","llmsContent","content","transitionToLlmEditor","localizeUsage","usage","_group","_groupChooser","_aiPersonaResponseFormatEditor","_aiLlmSelector","_aiPersonaExample","_aiPersonaToolOptions","_aiToolSelector","_ragOptionsFk","_ragUploader","PersonaEditor","allGroups","dirtyFormData","mapToolOptions","chatPluginEnabled","chat_enabled","allTools","maxPixelValues","forcedToolStrategies","updateAllGroups","findAll","include_everyone","everyoneGroupName","personaToSave","sortPersonas","rag_uploads","userClone","toggleEnabled","dirtyData","persistField","togglePriority","form","updateUploads","newUploads","currentUploads","updatedUploads","updateToolNames","currentData","updatedTools","removedTools","ct","updatedOptions","setProperties","updatedForcedTools","fct","availableForcedTools","addExamplesPair","newExamples","currentOptions","toolNames","newValue","updatedDirtyData","update","sorted","priority","clear","setObjects","exportPersona","exportUrl","or","AiPersonaCollapsableExample","collapsed","caretIcon","toggleExample","deletePair","examplesCollection","exampleNumber","exampleTitle","number","_avatar","_aiPersona","_aiPersonaEditor","LAYOUT_BUTTONS","AiPersonaListEditor","keyValueStore","capabilities","featureFilter","currentLayout","savedLayoutId","found","filteredPersonas","textMatches","default_llm","featureFilterOptions","oldValue","err","onNameFilterChange","onFeatureFilterChange","onLayoutSelect","layoutId","importPersona","fileInput","createElement","accept","display","onchange","handleFileSelect","body","appendChild","removeChild","reader","FileReader","onload","json","uploadPersona","alert","readAsText","personaData","payload","contentType","existingPersona","insertAt","jqXHR","status","responseJSON","errors","confirmButtonLabel","_dropdownSelectBox","PERSONA_SELECTOR_KEY","LLM_SELECTOR_KEY","AiPersonaLlmSelector","allowLLMSelector","botOptions","loadStoredPersona","loadStoredLlm","next","resetTargetRecipients","hasLlmSelector","any","ai_enabled_personas","enabledPersonas","allow_personal_messages","filterable","_value","setItem","setAllowLLMSelector","innerPersona","force_default_llm","currentLlm","botUsername","llmOptions","showLLMSelector","getPersonaIdFromAttrs","personaName","getLlmIdFromAttrs","llmName","getItem","llmId","llmOption","innerLlmOption","AiPersonaToolOptions","showToolOptions","toolsMetadata","metadata","formObjectKeys","toolOptionKeys","_cookText","_fastEdit","_fastEdit2","_decorators","_text","_aiHelperLoading","_smoothStreamer3","AiPostHelperMenu","messageBus","menu","tooltip","MENU_STATES","menuState","suggestion","copyButtonIcon","copyButtonLabel","showFastEdit","showAiButtons","streaming","lastSelectedOption","isSavingFootnote","supportsFastEdit","supportsAddFootnote","smoothStreamer","showFootnoteTooltip","instance","register","identifier","placement","triggers","destroy","_activeAiRequest","footnoteDisabled","item","_showUserCustomPrompts","canEditPost","highlightedTextToggleIcon","showHighlightedText","allowInsertFootnote","enable_markdown_footnotes","display_footnotes_inline","_sanitizeForFootnote","sanitize","progressChannel","_progressChannel","unsubscribe","subscribe","_updateResult","done","updateResult","toggleHighlightedTextPreview","performAiSuggestion","streamableOptions","streamedResult","_handleStreamedResult","progress_channel","method","quoteState","buffer","custom_prompt","suggestions","_handleProofreadOption","getByIdentifier","post_id","postId","client_id","clientId","initialValue","closeFastEdit","cancelAiAction","abort","copySuggestion","setTimeout","hideToolbar","insertFootnote","sanitizedSuggestion","credits","withFootnote","newRaw","raw","DURATION_PRESETS","seconds","nameKey","DurationSelector","selectedPresetId","customHours","Math","round","presetOptions","isCustom","currentDurationSeconds","onPresetChange","updateValue","onCustomHoursChange","onChange","AiSearchDiscoveriesTooltip","discobotDiscoveries","_pluginApi","_url","_topic","_aiBlinkingAnimation","AiSearchDiscoveries","search","loadingConversationTopic","hideDiscoveries","fullDiscoveryToggled","discoveryPreviewLength","discovery","discoveryTimeout","triggerDiscovery","detectSearch","query","resetDiscovery","resetStreaming","withPluginApi","addSearchMenuOnKeyDownCallback","searchMenu","lastQuery","_updateDiscovery","modelUsed","model_used","loadingDiscoveries","activeGlobalSearchTerm","toggleLabel","toggleIcon","canShowExpandtoggle","renderedText","renderPreviewOnly","canContinueConversation","discoveryTimedOut","discoverPersona","ai_bot_discover_persona","discoverPersonaHasBot","isStreaming","continueConvoBtnLabel","timeoutDiscovery","toggleDiscovery","continueConversation","context","continueRequest","topicJSON","topic_id","topic","afterRouteComplete","closeSearchMenu","focusComposer","AiSentimentHorizontalBar","_dStatTiles","_adminConfigAreaCard","_spamTestModal","AiSpam","scanned_count","spam_detected","false_positives","false_negatives","daily_data","stats","isEnabled","selectedLLM","selectedPersonaId","customInstructions","initializeFromModel","spam_scanning_user","admin","fixScanUserNotAdmin","spamScanningUser","reload","is_enabled","llm_id","availableLLMs","autoSelectedLLM","custom_instructions","ai_persona_id","available_llms","llm_model_id","updateLLM","updatePersona","showTestModal","metrics","detected","falsePositives","falseNegatives","flagging_username","spam_score_type","AiSplitTopicSuggester","SUGGESTION_TYPES","tag","input","selectedPosts","cooked","disabled","loadSuggestions","suggestionIds","assistant","s","suggestedCategories","categories","applySuggestion","updateAction","currentValue","isArray","updatedTags","AiSummarySkeleton","_aiToolTestModal","AiToolEditorForm","uploadedFiles","PARAMETER_TYPES","editingModel","mappedParameter","isEnum","tool_name","summary","script","toggleIsEnum","parentName","copiedData","pushObject","uniqueUploads","openTestModal","currentParameterSelection","ragUploadsDescription","rag_images_enabled","exportTool","_aiToolEditorForm","AiToolEditor","_aiTool","AiToolListEditor","lastIndexOfPresets","routeToNewTool","presetId","importTool","uploadTool","ai_tool","toolData","existingTool","_multiSelect","AiToolSelector","AiTopicGist","shouldShow","showToggle","hasGist","gist","escapedExcerpt","_dateTimeInputRange","_formatter","_chart","AiUsage","toDate","startDate","Date","endDate","selectedFeature","selectedModel","selectedPeriod","isCustomDateActive","loadingData","fetchData","timezone","user_option","tz","guess","_cachedFeatures","_cachedModels","onFeatureChanged","onModelChanged","addCurrencyChar","innerText","valueElement","closest","takeUsers","start","end","normalizeTimeSeriesData","normalized","interval","period","dataMap","Map","d","currentMoment","isSameOrBefore","dateKey","existingData","total_tokens","total_cached_tokens","total_request_tokens","total_response_tokens","total_requests","total_spending","chartConfig","normalizedData","chartEl","computedStyle","getPropertyValue","request","labels","row","datasets","backgroundColor","responsive","scales","x","stacked","y","beginAtZero","availableFeatures","feature_name","availableModels","periodOptions","setPeriodDates","now","clone","onPeriodSelect","onCustomDateClick","onDateChange","onChangeDateRange","to","_startDate","_endDate","onRefreshDateRange","totalSpending","inputSpending","cachedSpending","outputSpending","toFixed","lt","DoughnutChart","canvasSize","config","totalScore","cutout","radius","maintainAspectRatio","plugins","legend","displayLegend","position","afterDraw","chart","cssVarColor","documentElement","cssFontSize","cssFontFamily","ctx","chartArea","centerX","left","right","centerY","top","bottom","restore","textAlign","textBaseline","fillStyle","font","fillText","dataset","meta","getDatasetMeta","tooltipPosition","nonZeroCount","_dModal","AiLlmQuotaModal","quota","group_name","group_id","closeModal","onSave","availableGroups","existingQuotaGroupIds","max_tokens","max_usages","duration_seconds","asSeconds","setGroupId","validateForm","addError","removeError","_jsonSchemaEditor","AiPersonaResponseFormatEditor","showJsonEditorModal","jsonSchema","uniqueItems","properties","array_type","dependencies","required","editorTitle","responseFormatAsJSON","displayJSON","toDisplay","keyDesc","prettyJSON","openModal","updateResponseFormat","_aiSummarySkeleton","AiSummaryModal","summarizedOn","summarizedBy","newPostsSinceSummary","outdated","canRegenerate","currentIndex","outdatedSummaryWarningText","outdatedText","topRepliesSummaryEnabled","resetSummary","_channel","postStream","topicId","baseSummarizationURL","channel","_updateSummary","generateSummary","fetchURL","_requestSummary","regenerateSummary","ai_topic_summary","summarized_text","topicSummary","shortDateNoYear","updated_at","algorithm","new_posts_since_summary","can_regenerate","handleClose","triggerElement","array","AiToolTestModal","isLoading","parameterValues","updateParameter","runTest","jsonToHtml","output","_conditionalLoadingSection","_dModalCancel","ChatModalChannelSummary","sinceHours","availableSummaries","sinceOptions","hours","channelId","summarize","since","_utilities2","DebugAiModal","justCopiedText","activeTab","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","_diffStreamer3","ModalDiffModal","finalResult","escapedSelectedText","diffStreamer","diffResult","smoothStreamerResult","isDone","primaryBtnLabel","primaryBtnDisabled","cleanup","resetState","force_default_locale","triggerConfirmChanges","replaceText","cleanupAndClose","reset","ShareModal","shareKey","share_key","generateShareURL","Blob","primaryLabel","deleteLink","share","clipboardCopyAsync","maybeCopyEmbed","contains","stopPropagation","version","artifactEmbed","promise","Promise","resolve","_copyConversation","contextValue","maxContext","allPosts","postNumbers","post_number","postNumber","findPostIdForPostNumber","findLoadedPost","updateHtmlContext","copyContext","shareConversationModal","showShareConversationModal","Input","SpamTestModal","postUrl","scanLog","isSpam","post_url","is_spam","log","_thumbnailSuggestionItem","ThumbnailSuggestions","selectedImages","findThumbnails","isDisabled","addSelection","selection","thumbnailMarkdown","original_filename","short_url","removeSelection","thumbnail","appendSelectedImages","imageMarkdown","dEditorInput","setSelectionRange","execCommand","ModelAccuracies","AiCancelStreamingButton","cancelStreaming","_debugAiModal","AiDebugButton","isPostFromAiBot","debugAiResponse","_shareModal","shareAiResponse","showFeedback","AiPersonaFlair","isGPTBot","RagOptionsFk","showIndexingOptions","toggleIndexingOptions","indexingOptionsText","visionLlms","RagUploadProgress","updatedProgress","trackProgress","onIndexingUpdate","total","indexed","calculateProgress","progress","ceil","fullyIndexed","ragIndexingStatuses","_debounce","_ragUploadProgress","RagUploader","filteredUploads","ragUploads","maxFiles","uploadUrl","preventDirectS3Uploads","uploadedFile","newUpload","statusText","debouncedSearch","didReceiveAttrs","cancelAllUploads","targetName","statuses","_updateTargetWithUploads","acceptedFileTypes","allowImages","submitFiles","openPicker","cancelUploading","toUpperCase","onRemove","_reviewableCreatedBy","_reviewablePostHeader","_chatChannelTitle","_chatChannel","_modelAccuracies","ReviewableAiChatMessage","chatChannel","reviewable","chat_channel","_reviewablePostEdits","_reviewableTopicLink","ReviewableAiPost","_aiHelperSuggestions","AiCategorySuggester","untriggers","triggerIcon","showSuggestionButton","composerFields","reply","showTrigger","MIN_CHARACTER_COUNT","topicState","ai_embeddings_enabled","showDropdown","buffered","showSuggestionsError","_discourseTag","AiTagSuggester","disableTagsChooser","tagSelectorHasValues","removedAppliedTag","maxTags","max_tags_per_topic","tags","class","AiTitleSuggester","editTopicTitleField","ThumbnailSuggestionItem","selected","selectIcon","selectLabel","toggleSelection","AISentimentDashboard","ai_sentiment_enabled","_aiCategorySuggester","_showAiHelper","AiCategorySuggestion","showComposerAiHelper","_aiTagSuggester","AiTagSuggestion","_aiTitleSuggester","AiTitleSuggestion","_default","composerModel","renderChatWarning","ai_bot_enable_chat_warning","aiBotClasses","computed","isAiBotChat","targetRecipients","recipients","SearchResultDecoration","_aiGistToggle","topicThumbnails","enabledForRoute","BotSelector","reciepients","isBotMessage","setPersonaIdOnComposer","metaData","setTargetRecipientsOnComposer","_dTextarea","_autoFocus","AiImageCaptionContainer","imageCaptionPopup","updateCaption","newCaption","saveCaption","hidePopup","resizeTextarea","borderTopWidth","borderBottomWidth","scrollTop","showPopup","_request","toggleLoadingState","AiEditSuggestionButton","showPostAIHelper","_activeAIRequest","prompt","suggest","_aiSearchDiscoveries","_aiSearchDiscoveriesTooltip","AiFullPageDiscobotDiscoveries","can_use_ai_bot_discover_persona","ai_search_discoveries","previewLength","viewport","md","_aiFullPageSearch","AiFullPageSearchConnector","ai_embeddings_semantic_search_enabled","_aiPostHelperMenu","AiPostHelperTrigger","postHighlighted","currentMenu","menuData","selectedRange","highlightSelectedText","range","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","cloneNode","parentNode","replaceChild","getSelection","removeAllRanges","removeHighlightedText","span","createTextNode","textContent","showAiPostHelperMenu","component","interactive","trapTab","closeOnScroll","modalForMobile","fallbackPlacements","updateOnScroll","_loadingSpinner","AiQuickSearchLoader","quickSearch","_assistantItem","_search3","AiQuickSemanticSearch","ai_embeddings_semantic_quick_search_enabled","searchTermChanged","invalidTerm","performSearch","searchResults","resultTypes","AiDiscobotDiscoveries","AiQuickSearchInfo","termTooShort","_aiSplitTopicSuggester","_aiSummaryModal","AiSummaryTrigger","isAiConversation","is_bot_pm","openAiSummaryModal","_participant","_addPmParticipants","AiConversationInvite","header","participants","topicInfo","details","allowed_users","showInvite","inviteModel","AiPreferences","discourse_ai_enabled","_adminDashboardTab","AdminDashboardSentiment","emotionFilters","emotions","_controller","DiscourseAiBotConversations","_environment","PreferencesAiController","saved","booleanSettings","settingName","checked","isIncluded","ai_bot_enabled","userSettingAttributes","isTesting","initialize","container","addAdminPluginConfigurationNav","_adminReportEmotion","require","registerReportModeComponent","registerValueTransformer","_aiArtifact","initializeAiArtifacts","decorateCookedElement","helper","renderGlimmer","artifactElement","getAttribute","hasAttribute","attr","attributes","startsWith","onlyStream","_deprecated","_renderGlimmer","_aiBotHeaderIcon","_aiPersonaFlair","_aiCancelStreamingButton","_aiDebugButton","_aiShareButton","_progressHandlers","allowDebug","initializeAIBotReplies","dag","firstButtonKey","before","after","initializePauseButton","modifyClass","pluginId","onAIBotStreamedReply","streamPostText","_super","isPrivateMessage","initializePersonaDecorator","renderAfterWrapperOutlet","withSilencedDeprecations","decorateWidget","dec","botType","getBotType","widget","attach","ai_persona_name","llm_name","registerWidgetShim","initializeWidgetPersonaDecorator","can_debug_ai_bot_conversations","headerIcons","attachHeaderIcon","getCurrentUser","archetype","initializeDebugButton","_ref4","initializeShareButton","registerTopicFooterButton","dependentKeys","displayed","can_share_ai_bot_conversations","initializeShareTopicButton","_api","_chatModalChannelSummary","apiInitializer","chatService","canSummarize","can_summarize","userCanChat","registerChatComposerButton","translatedLabel","activeChannel","_aiBotSidebarNewConversation","addSidebarPanel","BaseCustomSidebarPanel","hidden","displayHeader","expandActiveSection","renderInOutlet","transition","forceCustomSidebar","stopForcingCustomSidebar","_aiTopicGist","ai_summarization_enabled","gistTemplate","outlet","mobileView","gistService","preference","_aiComposerHelperMenu","onToolbarCreate","toolbar","composerContent","addButton","preventFocus","hideShortcutInTitle","shortcutAction","condition","sendAction","initializeAiHelperTrigger","buttonAttrs","ai_helper_enabled_features","can_use_assistant","addComposerImageWrapperButton","popupTrigger","buttonWrapper","imageIndex","imageSrc","image_url","image_url_type","caption","addSaveableUserOptionField","classNameBindings","can_see_sentiment_reports","addAdminSidebarSectionLink","routeModels","_basicTopicList","RelatedTopics","ai_embeddings_semantic_related_topics_enabled","registerMoreTopicsTab","relatedTopics","Superclass","related_topics","relatedTopicsCache","_setSuggestedTopics","_cookie","ai_translation_enabled","registerCustomPostMessageCallback","topicController","triggerChangedPost","_getOwner","_composer","_shareFullTopicModal","targetBot","skipFocus","topicBody","personaUsername","draftKey","getTime","PRIVATE_MESSAGE","topicTitle","archetypeId","warningsDisabled","open","fallbackToNewTopic","openOpts","ensureBotMap","enabledChatBotMap","MAX_PERSONA_USER_ID","getOwnerWithFallback","_application","reloadFn","showProgressBar","actions","_postUpdater","MIN_LETTERS_PER_INTERVAL","addProgressDot","lastBlock","lastChild","lastNonEmptyChild","ELEMENT_NODE","dotElement","applyProgress","updaterClass","updaterInstance","progressTimer","PROGRESS_INTERVAL","noop","aiStreamingStatus","ensureProgress","GIVE_UP_INTERVAL","MAX_FLUSH_TIME","previousSibling","updater","startTime","oldRaw","letters","floor","substring","setRaw","setCooked","keepPolling","promises","postStatus","postUpdater","all","handleProgress","_loadMorphlex","_streamUpdater","PostUpdater","morphingOptions","beforeAttributeUpdated","attributeName","postElement","cook","offsetWidth","cookedElement","innerHTML","preventCloak","morphInner","_text3","AiTopicSummary","regenerated","showSummaryBox","canCollapseSummary","loadingSummary","processUpdate","summarized_on","collapse","fromPostNumber","toPostNumber","stream","postIds","post_ids","include_raw","post_stream","generateClipboard","_loadJsDiff","DiffStreamer","words","lastResultText","isThinking","typingTimer","currentWordIndex","currentCharIndex","jsDiff","bufferedToken","rushMode","rushBatchSize","rushTicksLeft","receivedFinalUpdate","typingDelay","loadJSDiff","newTextKey","newText","tail","tokenize","charsLeft","formatDiffWithTags","diffWordsWithSpace","streamNextChar","delta","combined","pop","streamingDiff","original","max","head","last","at","secondLast","added","removed","limit","emitted","token","charAt","refresh","useStreaming","delay","wrapChunk","diffArray","highlightLastWord","part","match","tok","lastIndex","chunk","buf","_helperEnabled","ai_helper_enabled","featureType","enableHelper","enableAssistant","canShowInPM","ai_helper_allowed_in_pm","enableFeature","privateMessage","can_use_assistant_in_post","SmoothStreamer","streamedText","streamedTextLength","getRealtimeText","setRealtimeText","realtimeText","cancelTypingTimer","onTextUpdate","typeCharacter","html","_discourse","DiscourseAiSharedConversationShowRoute","beforeModel","external_links_in_new_tab","intent","redirect","_restrictedUser","PreferencesAiRoute","setupController","controller","defaultHomepage","_uploads","AiBotConversationsHiddenSubmit","focusInput","destroyDraft","uploadData","min_personal_message_post_length","didCancel","rawContent","uploadMarkdown","getUploadMarkdown","target_recipients","meta_data","slug","topic_slug","_panels","_aiBotSidebarEmptyState","AiConversationsSidebarManager","routeHistory","topics","sections","isFetching","page","_registered","_hasScrollListener","_scrollElement","_didInit","_debouncedScrollHandler","clientHeight","fetchMessages","_handleNewBotPM","_attachScrollListener","addEmptyStateClass","toggle","isForcingSidebar","setPanel","setSeparatedMode","hideSwitchPanelButtons","_removeScrollListener","isAdmin","ADMIN_PANEL","MAIN_PANEL","urlFor","isFirstPage","conversations","per_page","_rebuildSections","_watchForTitleUpdate","_subscribedTopicIds","_applyTitleUpdate","newTitle","fresh","todaySection","links","postedAtMs","last_posted_at","valueOf","diffDays","dateGroup","sec","getFullYear","getMonth","autoUpdatingRelativeAge","last_read_post_number","addSidebarSection","BaseCustomSidebarSection","manager","events","triggerEvent","emptyStateComponent","DiscobotDiscoveries","showDiscoveryTitle","disableDiscoveries","TOPIC_LIST_LAYOUT_KEY","PM_TOPIC_LIST_LAYOUT_KEY","Gists","localStorage","pmPreference","routerAttributes","publicTopics","list","pmTopics","topicList","ai_topic_gist","ImageCaptionPopup","matchingPlaceholder","IMAGE_MARKDOWN_REGEX","replacement","QuickSearch","_emberRouteTemplate","_adminReport","_dashboardPeriodSelector","_aiBotConversations","_preferenceCheckbox","_saveControls","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-feature.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-feature.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/admin-report-sentiment-analysis.js","discourse/plugins/discourse-ai/discourse/components/ai-artifact.js","discourse/plugins/discourse-ai/discourse/components/ai-blinking-animation.js","discourse/plugins/discourse-ai/discourse/components/ai-bot-conversations.js","discourse/plugins/discourse-ai/discourse/components/ai-bot-header-icon.js","discourse/plugins/discourse-ai/discourse/components/ai-bot-sidebar-empty-state.js","discourse/plugins/discourse-ai/discourse/components/ai-bot-sidebar-new-conversation.js","discourse/plugins/discourse-ai/discourse/components/ai-composer-helper-menu.js","discourse/plugins/discourse-ai/discourse/components/ai-default-llm-selector.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-feature-card.js","discourse/plugins/discourse-ai/discourse/components/ai-features-list.js","discourse/plugins/discourse-ai/discourse/components/ai-features.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-example.js","discourse/plugins/discourse-ai/discourse/components/ai-persona-list-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-persona-llm-selector.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-search-discoveries-tooltip.js","discourse/plugins/discourse-ai/discourse/components/ai-search-discoveries.js","discourse/plugins/discourse-ai/discourse/components/ai-sentiment-horizontal-bar.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-form.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-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/doughnut-chart.js","discourse/plugins/discourse-ai/discourse/components/modal/ai-llm-quota-modal.js","discourse/plugins/discourse-ai/discourse/components/modal/ai-persona-response-format-editor.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/post/ai-persona-flair.js","discourse/plugins/discourse-ai/discourse/components/rag-options-fk.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-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-discobot-discoveries.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-discobot-discoveries.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-map-expanded-after/ai-summary-trigger.js","discourse/plugins/discourse-ai/discourse/connectors/topic-map-participants-after/ai-conversation-invite.js","discourse/plugins/discourse-ai/discourse/connectors/user-messages-controls-bottom/pm-list-gist-toggle.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/discourse-ai-bot-conversations.js","discourse/plugins/discourse-ai/discourse/controllers/preferences-ai.js","discourse/plugins/discourse-ai/discourse/discourse-ai-bot-dashboard-route-map.js","discourse/plugins/discourse-ai/discourse/discourse-ai-shared-conversation-show-route-map.js","discourse/plugins/discourse-ai/discourse/initializers/admin-plugin-configuration-nav.js","discourse/plugins/discourse-ai/discourse/initializers/admin-reports.js","discourse/plugins/discourse-ai/discourse/initializers/ai-artifacts.js","discourse/plugins/discourse-ai/discourse/initializers/ai-bot-replies.js","discourse/plugins/discourse-ai/discourse/initializers/ai-chat-summarization.js","discourse/plugins/discourse-ai/discourse/initializers/ai-conversations-sidebar.js","discourse/plugins/discourse-ai/discourse/initializers/ai-gist-connector.js","discourse/plugins/discourse-ai/discourse/initializers/ai-gist-topic-list-class.js","discourse/plugins/discourse-ai/discourse/initializers/ai-helper.js","discourse/plugins/discourse-ai/discourse/initializers/ai-image-caption.js","discourse/plugins/discourse-ai/discourse/initializers/ai-search-discoveries.js","discourse/plugins/discourse-ai/discourse/initializers/ai-semantic-search.js","discourse/plugins/discourse-ai/discourse/initializers/ai-sentiment-admin-nav.js","discourse/plugins/discourse-ai/discourse/initializers/related-topics.js","discourse/plugins/discourse-ai/discourse/initializers/translation.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/diff-streamer.js","discourse/plugins/discourse-ai/discourse/lib/show-ai-helper.js","discourse/plugins/discourse-ai/discourse/lib/smooth-streamer.js","discourse/plugins/discourse-ai/discourse/lib/utilities.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/ai-bot-conversations-hidden-submit.js","discourse/plugins/discourse-ai/discourse/services/ai-conversations-sidebar-manager.js","discourse/plugins/discourse-ai/discourse/services/discobot-discoveries.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/discourse-ai-bot-conversations.js","discourse/plugins/discourse-ai/discourse/templates/preferences/ai.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      this.route(\"discourse-ai-features\", {\n        path: \"ai-features\"\n      }, function () {\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-feature\", [\"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 AiFeatureAdapter 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-feature\";\n    }\n  }\n  _exports.default = AiFeatureAdapter;\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-feature\", [\"exports\", \"discourse/models/rest\"], function (_exports, _rest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiFeature extends _rest.default {\n    createProperties() {\n      return this.getProperties(\"id\", \"module\", \"global_enabled\", \"features\");\n    }\n  }\n  _exports.default = AiFeature;\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\", \"max_output_tokens\", \"url\", \"api_key\", \"enabled_chat_bot\", \"provider_params\", \"vision_enabled\", \"input_cost\", \"cached_input_cost\", \"output_cost\");\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\", \"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  const CREATE_ATTRIBUTES = [\"id\", \"name\", \"description\", \"tools\", \"system_prompt\", \"allowed_group_ids\", \"enabled\", \"system\", \"priority\", \"top_p\", \"temperature\", \"user_id\", \"default_llm_id\", \"force_default_llm\", \"user\", \"max_context_posts\", \"vision_enabled\", \"vision_max_pixels\", \"rag_uploads\", \"rag_chunk_tokens\", \"rag_chunk_overlap_tokens\", \"rag_conversation_chunks\", \"rag_llm_model_id\", \"question_consolidator_llm_id\", \"allow_chat\", \"tool_details\", \"forced_tool_count\", \"allow_personal_messages\", \"allow_topic_mentions\", \"allow_chat_channel_mentions\", \"allow_chat_direct_messages\", \"response_format\", \"examples\"];\n  const SYSTEM_ATTRIBUTES = [\"id\", \"allowed_group_ids\", \"enabled\", \"system\", \"priority\", \"tools\", \"user_id\", \"default_llm_id\", \"force_default_llm\", \"user\", \"max_context_posts\", \"vision_enabled\", \"vision_max_pixels\", \"rag_uploads\", \"rag_chunk_tokens\", \"rag_chunk_overlap_tokens\", \"rag_conversation_chunks\", \"rag_llm_model_id\", \"question_consolidator_llm_id\", \"tool_details\", \"allow_personal_messages\", \"allow_topic_mentions\", \"allow_chat_channel_mentions\", \"allow_chat_direct_messages\"];\n  class AiPersona extends _rest.default {\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    flattenedToolStructure(data) {\n      return (data.tools || []).map(tName => {\n        return [tName, data.toolOptions[tName] || {}, data.forcedTools.includes(tName)];\n      });\n    }\n\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    // We split it into tools, options and a list of forced ones.\n    populateTools(attrs) {\n      const forcedTools = [];\n      const toolOptions = {};\n      const flatTools = attrs.tools?.map(tool => {\n        if (typeof tool === \"string\") {\n          return tool;\n        } else {\n          let [toolId, options, force] = tool;\n          const mappedOptions = {};\n          for (const optionId in options) {\n            if (!options.hasOwnProperty(optionId)) {\n              continue;\n            }\n            mappedOptions[optionId] = options[optionId];\n          }\n          if (Object.keys(mappedOptions).length > 0) {\n            toolOptions[toolId] = mappedOptions;\n          }\n          if (force) {\n            forcedTools.push(toolId);\n          }\n          return toolId;\n        }\n      });\n      attrs.tools = flatTools;\n      attrs.forcedTools = forcedTools;\n      attrs.toolOptions = toolOptions;\n    }\n    updateProperties() {\n      const attrs = this.system ? this.getProperties(SYSTEM_ATTRIBUTES) : this.getProperties(CREATE_ATTRIBUTES);\n      attrs.id = this.id;\n      return attrs;\n    }\n    createProperties() {\n      return this.getProperties(CREATE_ATTRIBUTES);\n    }\n    fromPOJO(data) {\n      const dataClone = JSON.parse(JSON.stringify(data));\n      const persona = AiPersona.create(dataClone);\n      persona.tools = this.flattenedToolStructure(dataClone);\n      return persona;\n    }\n    toPOJO() {\n      const attrs = this.getProperties(CREATE_ATTRIBUTES);\n      this.populateTools(attrs);\n      attrs.forced_tool_count = this.forced_tool_count || -1;\n      attrs.response_format = attrs.response_format || [];\n      attrs.examples = attrs.examples || [];\n      return attrs;\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\", \"tool_name\", \"description\", \"parameters\", \"script\", \"summary\", \"rag_uploads\", \"rag_chunk_tokens\", \"rag_chunk_overlap_tokens\", \"rag_llm_model_id\", \"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/helpers/d-icon\", \"discourse/helpers/number\", \"discourse/lib/get-url\", \"@ember/template-factory\"], function (_exports, _component, _component2, _dIcon, _number, _getUrl, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /* eslint-disable ember/no-classic-components */\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    static #_ = (() => (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"cell title\">\n          {{#if this.model.icon}}\n            {{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          {{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          {{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            {{icon this.model.thirtyDaysTrendIcon}}\n          {{/if}}\n        </div>\n      \n    */\n    {\n      \"id\": \"ybkbu1Ax\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"cell title\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"model\\\",\\\"icon\\\"]],[[[1,\\\"        \\\"],[1,[28,[32,0],[[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,[32,1],[[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,[32,1],[[30,0,[\\\"model\\\",\\\"yesterdayCount\\\"]]],null]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[1,[28,[32,0],[[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,[32,1],[[30,0,[\\\"model\\\",\\\"lastSevenDaysCount\\\"]]],null]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[1,[28,[32,0],[[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,[32,1],[[30,0,[\\\"model\\\",\\\"lastThirtyDaysCount\\\"]]],null]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"model\\\",\\\"canDisplayTrendIcon\\\"]],[[[1,\\\"        \\\"],[1,[28,[32,0],[[30,0,[\\\"model\\\",\\\"thirtyDaysTrendIcon\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/admin-report-emotion.js\",\n      \"scope\": () => [_dIcon.default, _number.default],\n      \"isStrictMode\": true\n    }), this))();\n  }, [(0, _component2.attributeBindings)(\"model.description:title\"), (0, _component2.classNames)(\"admin-report-counters\")]);\n  var _default = _exports.default = AdminReportEmotion;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/admin-report-sentiment-analysis\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/service\", \"ember-modifier\", \"truth-helpers\", \"discourse/components/d-button\", \"discourse/components/horizontal-overflow-nav\", \"discourse/components/post-list\", \"discourse/helpers/body-class\", \"discourse/helpers/category-badge\", \"discourse/helpers/d-icon\", \"discourse/helpers/replace-emoji\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/get-url\", \"discourse/lib/later\", \"discourse/lib/utilities\", \"discourse/models/category\", \"discourse/models/post\", \"discourse-i18n\", \"float-kit/components/d-tooltip\", \"discourse/plugins/discourse-ai/discourse/components/doughnut-chart\", \"discourse/plugins/discourse-ai/discourse/components/ai-sentiment-horizontal-bar\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _modifier, _object, _didInsert, _service, _emberModifier, _truthHelpers, _dButton, _horizontalOverflowNav, _postList, _bodyClass, _categoryBadge, _dIcon, _replaceEmoji, _ajax, _ajaxError, _getUrl, _later, _utilities, _category, _post, _discourseI18n, _dTooltip, _doughnutChart, _aiSentimentHorizontalBar, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AdminReportSentimentAnalysis 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, \"selectedChart\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #selectedChart = (() => (dt7948.i(this, \"selectedChart\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"posts\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #posts = (() => (dt7948.i(this, \"posts\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"hasMorePosts\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #hasMorePosts = (() => (dt7948.i(this, \"hasMorePosts\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"nextOffset\", [_tracking.tracked], function () {\n      return 0;\n    }))();\n    #nextOffset = (() => (dt7948.i(this, \"nextOffset\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"showingSelectedChart\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showingSelectedChart = (() => (dt7948.i(this, \"showingSelectedChart\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"activeFilter\", [_tracking.tracked], function () {\n      return \"all\";\n    }))();\n    #activeFilter = (() => (dt7948.i(this, \"activeFilter\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"shareIcon\", [_tracking.tracked], function () {\n      return \"link\";\n    }))();\n    #shareIcon = (() => (dt7948.i(this, \"shareIcon\"), void 0))();\n    setActiveFilter = (() => (0, _emberModifier.modifier)(element => {\n      this.clearActiveFilters(element);\n      element.querySelector(`li[data-filter-type=\"${this.activeFilter}\"] button`).classList.add(\"active\");\n    }))();\n    clearActiveFilters(element) {\n      const filterButtons = element.querySelectorAll(\"li button\");\n      for (let button of filterButtons) {\n        button.classList.remove(\"active\");\n      }\n    }\n    calculateNeutralScore(data) {\n      return data.total_count - (data.positive_count + data.negative_count);\n    }\n    sentimentMapping(sentiment) {\n      switch (sentiment) {\n        case \"positive\":\n          return {\n            id: \"positive\",\n            text: (0, _discourseI18n.i18n)(\"discourse_ai.sentiments.sentiment_analysis.filter_types.positive\"),\n            icon: \"face-smile\"\n          };\n        case \"neutral\":\n          return {\n            id: \"neutral\",\n            text: (0, _discourseI18n.i18n)(\"discourse_ai.sentiments.sentiment_analysis.filter_types.neutral\"),\n            icon: \"face-meh\"\n          };\n        case \"negative\":\n          return {\n            id: \"negative\",\n            text: (0, _discourseI18n.i18n)(\"discourse_ai.sentiments.sentiment_analysis.filter_types.negative\"),\n            icon: \"face-angry\"\n          };\n      }\n    }\n    get groupingType() {\n      const dataSample = this.args.model.data[0];\n      const localePrefix = \"discourse_ai.sentiments.sentiment_analysis.group_types\";\n      return dataSample.category_name ? (0, _discourseI18n.i18n)(`${localePrefix}.category`) : (0, _discourseI18n.i18n)(`${localePrefix}.tag`);\n    }\n    get colors() {\n      return [\"#2ecc71\", \"#95a5a6\", \"#e74c3c\"];\n    }\n    get currentGroupFilter() {\n      return this.args.model.available_filters.find(filter => filter.id === \"group_by\").default;\n    }\n    get currentSortFilter() {\n      return this.args.model.available_filters.find(filter => filter.id === \"sort_by\").default;\n    }\n    get transformedData() {\n      return this.args.model.data.map(data => {\n        return {\n          category: _category.default.findById(data.category_id),\n          title: data.category_name || data.tag_name,\n          scores: [data.positive_count, this.calculateNeutralScore(data), data.negative_count],\n          score_map: {\n            positive: data.positive_count,\n            neutral: this.calculateNeutralScore(data),\n            negative: data.negative_count\n          },\n          total_score: data.total_count,\n          widths: {\n            positive: data.positive_count / data.total_count * 100,\n            neutral: this.calculateNeutralScore(data) / data.total_count * 100,\n            negative: data.negative_count / data.total_count * 100\n          }\n        };\n      });\n    }\n    get filteredPosts() {\n      if (!this.posts || !this.posts.length) {\n        return [];\n      }\n      return this.posts.filter(post => {\n        post.topic_title = (0, _replaceEmoji.default)(post.topic_title);\n        post.category = _category.default.findById(post.category_id);\n        if (this.activeFilter === \"all\") {\n          return true;\n        }\n        return post.sentiment === this.activeFilter;\n      });\n    }\n    get postFilters() {\n      return [{\n        id: \"all\",\n        text: `${(0, _discourseI18n.i18n)(\"discourse_ai.sentiments.sentiment_analysis.filter_types.all\")} (${this.selectedChart.total_score})`,\n        icon: \"bars-staggered\",\n        action: () => {\n          this.activeFilter = \"all\";\n        }\n      }, {\n        id: \"positive\",\n        text: `${(0, _discourseI18n.i18n)(\"discourse_ai.sentiments.sentiment_analysis.filter_types.positive\")} (${this.selectedChart.scores[0]})`,\n        icon: \"face-smile\",\n        action: () => {\n          this.activeFilter = \"positive\";\n        }\n      }, {\n        id: \"neutral\",\n        text: `${(0, _discourseI18n.i18n)(\"discourse_ai.sentiments.sentiment_analysis.filter_types.neutral\")} (${this.selectedChart.scores[1]})`,\n        icon: \"face-meh\",\n        action: () => {\n          this.activeFilter = \"neutral\";\n        }\n      }, {\n        id: \"negative\",\n        text: `${(0, _discourseI18n.i18n)(\"discourse_ai.sentiments.sentiment_analysis.filter_types.negative\")} (${this.selectedChart.scores[2]})`,\n        icon: \"face-angry\",\n        action: () => {\n          this.activeFilter = \"negative\";\n        }\n      }];\n    }\n    async postRequest() {\n      return await (0, _ajax.ajax)(\"/discourse-ai/sentiment/posts\", {\n        data: {\n          group_by: this.currentGroupFilter,\n          group_value: this.selectedChart?.title,\n          start_date: this.args.model.start_date,\n          end_date: this.args.model.end_date,\n          offset: this.nextOffset\n        }\n      });\n    }\n    async openToChart() {\n      const queryParams = this.router.currentRoute.queryParams;\n      if (queryParams.selectedChart) {\n        this.selectedChart = this.transformedData.find(data => data.title === queryParams.selectedChart);\n        if (!this.selectedChart) {\n          return;\n        }\n        this.showingSelectedChart = true;\n        try {\n          const response = await this.postRequest();\n          this.posts = response.posts.map(post => _post.default.create(post));\n          this.hasMorePosts = response.has_more;\n          this.nextOffset = response.next_offset;\n        } catch (e) {\n          (0, _ajaxError.popupAjaxError)(e);\n        }\n      }\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"openToChart\", [_object.action]))();\n    async showDetails(data) {\n      if (this.selectedChart === data) {\n        // Don't do anything if the same chart is clicked again\n        return;\n      }\n      const currentQueryParams = this.router.currentRoute.queryParams;\n      const currentFilters = currentQueryParams?.filters ? JSON.parse(currentQueryParams.filters) : {};\n      this.router.transitionTo(this.router.currentRoute.name, {\n        queryParams: {\n          ...currentQueryParams,\n          filters: currentFilters,\n          selectedChart: data.title\n        }\n      });\n      this.selectedChart = data;\n      this.showingSelectedChart = true;\n      try {\n        const response = await this.postRequest();\n        this.posts = response.posts.map(post => _post.default.create(post));\n        this.hasMorePosts = response.has_more;\n        this.nextOffset = response.next_offset;\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      }\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"showDetails\", [_object.action]))();\n    async fetchMorePosts() {\n      if (!this.hasMorePosts || this.selectedChart === null) {\n        return [];\n      }\n      try {\n        const response = await this.postRequest();\n        this.hasMorePosts = response.has_more;\n        this.nextOffset = response.next_offset;\n        const mappedPosts = response.posts.map(post => _post.default.create(post));\n        this.posts.pushObjects(mappedPosts);\n        return mappedPosts;\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      }\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"fetchMorePosts\", [_object.action]))();\n    backToAllCharts() {\n      this.showingSelectedChart = false;\n      this.selectedChart = null;\n      this.activeFilter = \"all\";\n      this.posts = [];\n      const currentQueryParams = this.router.currentRoute.queryParams;\n      const currentFilters = currentQueryParams?.filters ? JSON.parse(currentQueryParams.filters) : {};\n      this.router.transitionTo(this.router.currentRoute.name, {\n        queryParams: {\n          ...currentQueryParams,\n          filters: currentFilters,\n          selectedChart: null\n        }\n      });\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"backToAllCharts\", [_object.action]))();\n    shareChart() {\n      const url = this.router.currentURL;\n      if (!url) {\n        return;\n      }\n      (0, _utilities.clipboardCopy)((0, _getUrl.getAbsoluteURL)(url));\n      this.shareIcon = \"check\";\n      (0, _later.default)(() => {\n        this.shareIcon = \"link\";\n      }, 2000);\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"shareChart\", [_object.action]))();\n    static #_14 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <span {{didInsert this.openToChart}}></span>\n    \n        {{#unless this.showingSelectedChart}}\n          <div class=\"admin-report-sentiment-analysis\">\n            <table class=\"sentiment-analysis-table md-table\">\n              <thead>\n                <th>{{this.groupingType}}</th>\n                <th>{{i18n\n                    \"discourse_ai.sentiments.sentiment_analysis.table.total_count\"\n                  }}</th>\n                <th>{{i18n\n                    \"discourse_ai.sentiments.sentiment_analysis.table.sentiment\"\n                  }}</th>\n              </thead>\n    \n              <tbody>\n                {{#each this.transformedData as |data|}}\n                  <tr\n                    class=\"sentiment-analysis-table__row\"\n                    role=\"button\"\n                    {{on \"click\" (fn this.showDetails data)}}\n                  >\n                    <td class=\"sentiment-analysis-table__title\">\n                      {{#if data.category}}\n                        {{categoryBadge data.category}}\n                      {{else}}\n                        {{data.title}}\n                      {{/if}}\n                    </td>\n                    <td\n                      class=\"sentiment-analysis-table__total-score\"\n                    >{{data.total_score}}</td>\n                    <td class=\"sentiment-horizontal-bar\">\n                      <AiSentimentHorizontalBar\n                        @type=\"positive\"\n                        @score={{data.score_map.positive}}\n                        @width={{data.widths.positive}}\n                      />\n                      <AiSentimentHorizontalBar\n                        @type=\"negative\"\n                        @score={{data.score_map.negative}}\n                        @width={{data.widths.negative}}\n                      />\n                      <AiSentimentHorizontalBar\n                        @type=\"neutral\"\n                        @score={{data.score_map.neutral}}\n                        @width={{data.widths.neutral}}\n                      />\n                    </td>\n                  </tr>\n                {{/each}}\n              </tbody>\n            </table>\n          </div>\n        {{/unless}}\n    \n        {{#if (and this.selectedChart this.showingSelectedChart)}}\n          {{bodyClass \"showing-sentiment-analysis-chart\"}}\n          <div class=\"admin-report-sentiment-analysis__selected-chart\">\n            <div class=\"admin-report-sentiment-analysis__selected-chart-actions\">\n              <DButton\n                @label=\"back_button\"\n                @icon=\"chevron-left\"\n                class=\"btn-flat\"\n                @action={{this.backToAllCharts}}\n              />\n    \n              <DTooltip\n                class=\"share btn-flat\"\n                @icon={{this.shareIcon}}\n                {{on \"click\" this.shareChart}}\n                @content={{i18n\n                  \"discourse_ai.sentiments.sentiment_analysis.share_chart\"\n                }}\n              />\n            </div>\n    \n            <DoughnutChart\n              @labels={{@model.labels}}\n              @colors={{this.colors}}\n              @data={{this.selectedChart.scores}}\n              @totalScore={{this.selectedChart.total_score}}\n              @doughnutTitle={{this.selectedChart.title}}\n              @displayLegend={{true}}\n            />\n    \n          </div>\n          <div class=\"admin-report-sentiment-analysis-details\">\n            <HorizontalOverflowNav\n              {{this.setActiveFilter}}\n              class=\"admin-report-sentiment-analysis-details__filters\"\n            >\n              {{#each this.postFilters as |filter|}}\n                <li data-filter-type={{filter.id}}>\n                  <DButton\n                    @icon={{filter.icon}}\n                    @translatedLabel={{filter.text}}\n                    @action={{filter.action}}\n                    class=\"btn-transparent\"\n                  />\n                </li>\n              {{/each}}\n            </HorizontalOverflowNav>\n    \n            <PostList\n              @posts={{this.filteredPosts}}\n              @urlPath=\"url\"\n              @idPath=\"post_id\"\n              @titlePath=\"topic_title\"\n              @usernamePath=\"username\"\n              @fetchMorePosts={{this.fetchMorePosts}}\n              class=\"admin-report-sentiment-analysis-details__post-list\"\n            >\n              <:abovePostItemExcerpt as |post|>\n                {{#let (this.sentimentMapping post.sentiment) as |sentiment|}}\n                  <span\n                    class=\"admin-report-sentiment-analysis-details__post-score\"\n                    data-sentiment-score={{sentiment.id}}\n                  >\n                    {{icon sentiment.icon}}\n                    {{sentiment.text}}\n                  </span>\n                {{/let}}\n              </:abovePostItemExcerpt>\n            </PostList>\n          </div>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"vaenlI3f\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[11,1],[4,[32,0],[[30,0,[\\\"openToChart\\\"]]],null],[12],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[51,[30,0,[\\\"showingSelectedChart\\\"]]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"admin-report-sentiment-analysis\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"table\\\"],[14,0,\\\"sentiment-analysis-table md-table\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[12],[1,[30,0,[\\\"groupingType\\\"]]],[13],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.sentiments.sentiment_analysis.table.total_count\\\"],null]],[13],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.sentiments.sentiment_analysis.table.sentiment\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n          \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"transformedData\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[11,\\\"tr\\\"],[24,0,\\\"sentiment-analysis-table__row\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[32,2],[\\\"click\\\",[28,[32,3],[[30,0,[\\\"showDetails\\\"]],[30,1]],null]],null],[12],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[14,0,\\\"sentiment-analysis-table__title\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"category\\\"]],[[[1,\\\"                    \\\"],[1,[28,[32,4],[[30,1,[\\\"category\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                    \\\"],[1,[30,1,[\\\"title\\\"]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[14,0,\\\"sentiment-analysis-table__total-score\\\"],[12],[1,[30,1,[\\\"total_score\\\"]]],[13],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[14,0,\\\"sentiment-horizontal-bar\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[32,5],null,[[\\\"@type\\\",\\\"@score\\\",\\\"@width\\\"],[\\\"positive\\\",[30,1,[\\\"score_map\\\",\\\"positive\\\"]],[30,1,[\\\"widths\\\",\\\"positive\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[8,[32,5],null,[[\\\"@type\\\",\\\"@score\\\",\\\"@width\\\"],[\\\"negative\\\",[30,1,[\\\"score_map\\\",\\\"negative\\\"]],[30,1,[\\\"widths\\\",\\\"negative\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[8,[32,5],null,[[\\\"@type\\\",\\\"@score\\\",\\\"@width\\\"],[\\\"neutral\\\",[30,1,[\\\"score_map\\\",\\\"neutral\\\"]],[30,1,[\\\"widths\\\",\\\"neutral\\\"]]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[32,6],[[30,0,[\\\"selectedChart\\\"]],[30,0,[\\\"showingSelectedChart\\\"]]],null],[[[1,\\\"      \\\"],[1,[28,[32,7],[\\\"showing-sentiment-analysis-chart\\\"],null]],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"admin-report-sentiment-analysis__selected-chart\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"admin-report-sentiment-analysis__selected-chart-actions\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,8],[[24,0,\\\"btn-flat\\\"]],[[\\\"@label\\\",\\\"@icon\\\",\\\"@action\\\"],[\\\"back_button\\\",\\\"chevron-left\\\",[30,0,[\\\"backToAllCharts\\\"]]]],null],[1,\\\"\\\\n\\\\n          \\\"],[8,[32,9],[[24,0,\\\"share btn-flat\\\"],[4,[32,2],[\\\"click\\\",[30,0,[\\\"shareChart\\\"]]],null]],[[\\\"@icon\\\",\\\"@content\\\"],[[30,0,[\\\"shareIcon\\\"]],[28,[32,1],[\\\"discourse_ai.sentiments.sentiment_analysis.share_chart\\\"],null]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[8,[32,10],null,[[\\\"@labels\\\",\\\"@colors\\\",\\\"@data\\\",\\\"@totalScore\\\",\\\"@doughnutTitle\\\",\\\"@displayLegend\\\"],[[30,2,[\\\"labels\\\"]],[30,0,[\\\"colors\\\"]],[30,0,[\\\"selectedChart\\\",\\\"scores\\\"]],[30,0,[\\\"selectedChart\\\",\\\"total_score\\\"]],[30,0,[\\\"selectedChart\\\",\\\"title\\\"]],true]],null],[1,\\\"\\\\n\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"admin-report-sentiment-analysis-details\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[32,11],[[24,0,\\\"admin-report-sentiment-analysis-details__filters\\\"],[4,[30,0,[\\\"setActiveFilter\\\"]],null,null]],null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"postFilters\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[10,\\\"li\\\"],[15,\\\"data-filter-type\\\",[30,3,[\\\"id\\\"]]],[12],[1,\\\"\\\\n              \\\"],[8,[32,8],[[24,0,\\\"btn-transparent\\\"]],[[\\\"@icon\\\",\\\"@translatedLabel\\\",\\\"@action\\\"],[[30,3,[\\\"icon\\\"]],[30,3,[\\\"text\\\"]],[30,3,[\\\"action\\\"]]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[32,12],[[24,0,\\\"admin-report-sentiment-analysis-details__post-list\\\"]],[[\\\"@posts\\\",\\\"@urlPath\\\",\\\"@idPath\\\",\\\"@titlePath\\\",\\\"@usernamePath\\\",\\\"@fetchMorePosts\\\"],[[30,0,[\\\"filteredPosts\\\"]],\\\"url\\\",\\\"post_id\\\",\\\"topic_title\\\",\\\"username\\\",[30,0,[\\\"fetchMorePosts\\\"]]]],[[\\\"abovePostItemExcerpt\\\"],[[[[1,\\\"\\\\n\\\"],[44,[[28,[30,0,[\\\"sentimentMapping\\\"]],[[30,4,[\\\"sentiment\\\"]]],null]],[[[1,\\\"              \\\"],[10,1],[14,0,\\\"admin-report-sentiment-analysis-details__post-score\\\"],[15,\\\"data-sentiment-score\\\",[30,5,[\\\"id\\\"]]],[12],[1,\\\"\\\\n                \\\"],[1,[28,[32,13],[[30,5,[\\\"icon\\\"]]],null]],[1,\\\"\\\\n                \\\"],[1,[30,5,[\\\"text\\\"]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[5]]],[1,\\\"          \\\"]],[4]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"data\\\",\\\"@model\\\",\\\"filter\\\",\\\"post\\\",\\\"sentiment\\\"],false,[\\\"unless\\\",\\\"each\\\",\\\"-track-array\\\",\\\"if\\\",\\\"let\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/admin-report-sentiment-analysis.js\",\n      \"scope\": () => [_didInsert.default, _discourseI18n.i18n, _modifier.on, _helper.fn, _categoryBadge.default, _aiSentimentHorizontalBar.default, _truthHelpers.and, _bodyClass.default, _dButton.default, _dTooltip.default, _doughnutChart.default, _horizontalOverflowNav.default, _postList.default, _dIcon.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AdminReportSentimentAnalysis;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-artifact\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/service\", \"@ember/template\", \"discourse/components/d-button\", \"discourse/helpers/html-class\", \"discourse/lib/get-url\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _didInsert, _service, _template, _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      if (this.siteSettings.ai_artifact_security === \"strict\") {\n        return true;\n      }\n      if (this.siteSettings.ai_artifact_security === \"hybrid\") {\n        const shouldAutorun = this.args.autorun === \"true\" || this.args.autorun === true || this.args.autorun === \"1\";\n        return !shouldAutorun;\n      }\n      return this.siteSettings.ai_artifact_security !== \"lax\";\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\" : \"\"} ${this.seamless ? \"ai-artifact__seamless\" : \"\"}`;\n    }\n    setDataAttributes(element) {\n      if (this.args.dataAttributes) {\n        Object.entries(this.args.dataAttributes).forEach(_ref => {\n          let [key, value] = _ref;\n          element.setAttribute(key, value);\n        });\n      }\n    }\n    static #_8 = (() => dt7948.n(this.prototype, \"setDataAttributes\", [_object.action]))();\n    get heightStyle() {\n      if (this.args.artifactHeight) {\n        let height = parseInt(this.args.artifactHeight, 10);\n        if (isNaN(height) || height <= 0) {\n          height = 500; // default height if the provided value is invalid\n        }\n        if (height > 2000) {\n          height = 2000; // cap the height to a maximum of 2000px\n        }\n        return (0, _template.htmlSafe)(`height: ${height}px;`);\n      }\n    }\n    get seamless() {\n      return this.args.seamless === \"true\" || this.args.seamless === true || this.args.seamless === \"1\";\n    }\n    get showFooter() {\n      return !this.seamless && !this.requireClickToRun;\n    }\n    static #_9 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.expanded}}\n          {{htmlClass \"ai-artifact-expanded\"}}\n        {{/if}}\n        <div class={{this.wrapperClasses}} style={{this.heightStyle}}>\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              {{didInsert this.setDataAttributes}}\n            ></iframe>\n          {{/if}}\n          {{#if this.showFooter}}\n            <div class=\"ai-artifact__footer\">\n              <DButton\n                class=\"btn-transparent 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          {{/if}}\n        </div>\n      \n    */\n    {\n      \"id\": \"QA/bSjnx\",\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\\\"]]],[15,5,[30,0,[\\\"heightStyle\\\"]]],[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,\\\"        \\\"],[11,\\\"iframe\\\"],[24,\\\"title\\\",\\\"AI Artifact\\\"],[16,\\\"src\\\",[30,0,[\\\"artifactUrl\\\"]]],[24,\\\"width\\\",\\\"100%\\\"],[24,\\\"frameborder\\\",\\\"0\\\"],[4,[32,2],[[30,0,[\\\"setDataAttributes\\\"]]],null],[12],[13],[1,\\\"\\\\n\\\"]],[]]],[41,[30,0,[\\\"showFooter\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"ai-artifact__footer\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,1],[[24,0,\\\"btn-transparent 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\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-artifact.js\",\n      \"scope\": () => [_htmlClass.default, _dButton.default, _didInsert.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiArtifactComponent;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-blinking-animation\", [\"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/lib/later\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _didInsert, _didUpdate, _willDestroy, _runloop, _concatClass, _later, _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 AiBlinkingAnimation 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        <ul class=\"ai-blinking-animation\" {{didInsert this.setupAnimation}}>\n          {{#each this.blocks as |block|}}\n            <li\n              class={{concatClass\n                \"ai-blinking-animation__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    */\n    {\n      \"id\": \"cWbDH+g8\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[11,\\\"ul\\\"],[24,0,\\\"ai-blinking-animation\\\"],[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-blinking-animation__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  \\\"]],[\\\"block\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-blinking-animation.js\",\n      \"scope\": () => [_didInsert.default, _concatClass.default, _didUpdate.default, _helper.fn, _willDestroy.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiBlinkingAnimation;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-bot-conversations\", [\"exports\", \"@glimmer/tracking\", \"@ember/component\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"@ember/owner\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/runloop\", \"@ember/service\", \"@ember-compat/tracked-built-ins\", \"jquery\", \"discourse/components/d-button\", \"discourse/components/plugin-outlet\", \"discourse/helpers/body-class\", \"discourse/helpers/lazy-hash\", \"discourse/lib/ajax-error\", \"discourse/lib/autocomplete/user\", \"discourse/lib/hashtag-autocomplete\", \"discourse/lib/uppy/uppy-upload\", \"discourse/lib/uppy-media-optimization-plugin\", \"discourse/lib/user-search\", \"discourse/lib/user-status-on-autocomplete\", \"discourse/lib/utilities\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-persona-llm-selector\", \"@ember/template-factory\"], function (_exports, _tracking, _component, _helper, _modifier, _object, _owner, _didInsert, _runloop, _service, _trackedBuiltIns, _jquery, _dButton, _pluginOutlet, _bodyClass, _lazyHash, _ajaxError, _user, _hashtagAutocomplete, _uppyUpload, _uppyMediaOptimizationPlugin, _userSearch, _userStatusOnAutocomplete, _utilities, _discourseI18n, _aiPersonaLlmSelector, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /* eslint-disable ember/no-classic-components */\n\n  class AiBotConversations extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"aiBotConversationsHiddenSubmit\", [_service.service]))();\n    #aiBotConversationsHiddenSubmit = (() => (dt7948.i(this, \"aiBotConversationsHiddenSubmit\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"mediaOptimizationWorker\", [_service.service]))();\n    #mediaOptimizationWorker = (() => (dt7948.i(this, \"mediaOptimizationWorker\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"site\", [_service.service]))();\n    #site = (() => (dt7948.i(this, \"site\"), 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, \"uploads\", [_tracking.tracked], function () {\n      return new _trackedBuiltIns.TrackedArray();\n    }))();\n    #uploads = (() => (dt7948.i(this, \"uploads\"), void 0))();\n    // Don't track this directly - we'll get it from uppyUpload\n    textarea = null;\n    uppyUpload = null;\n    fileInputEl = null;\n    _handlePaste = event => {\n      if (document.activeElement !== this.textarea) {\n        return;\n      }\n      const {\n        canUpload,\n        canPasteHtml,\n        types\n      } = (0, _utilities.clipboardHelpers)(event, {\n        siteSettings: this.siteSettings,\n        canUpload: true\n      });\n      if (!canUpload || canPasteHtml || types.includes(\"text/plain\")) {\n        return;\n      }\n      if (event && event.clipboardData && event.clipboardData.files) {\n        this.uppyUpload.addFiles([...event.clipboardData.files], {\n          pasted: true\n        });\n      }\n    };\n    init() {\n      super.init(...arguments);\n      this.uppyUpload = new _uppyUpload.default((0, _owner.getOwner)(this), {\n        id: \"ai-bot-file-uploader\",\n        type: \"ai-bot-conversation\",\n        useMultipartUploadsIfAvailable: true,\n        uppyReady: () => {\n          if (this.siteSettings.composer_media_optimization_image_enabled) {\n            this.uppyUpload.uppyWrapper.useUploadPlugin(_uppyMediaOptimizationPlugin.default, {\n              optimizeFn: (data, opts) => this.mediaOptimizationWorker.optimizeImage(data, opts),\n              runParallel: !this.site.isMobileDevice\n            });\n          }\n          this.uppyUpload.uppyWrapper.onPreProcessProgress(file => {\n            const inProgressUpload = this.inProgressUploads?.find(upl => upl.id === file.id);\n            if (inProgressUpload && !inProgressUpload.processing) {\n              inProgressUpload.processing = true;\n            }\n          });\n          this.uppyUpload.uppyWrapper.onPreProcessComplete(file => {\n            const inProgressUpload = this.inProgressUploads?.find(upl => upl.id === file.id);\n            if (inProgressUpload) {\n              inProgressUpload.processing = false;\n            }\n          });\n          this.textarea?.addEventListener(\"paste\", this._handlePaste);\n        },\n        uploadDone: upload => {\n          this.uploads.push(upload);\n        },\n        // Fix: Don't try to set inProgressUploads directly\n        onProgressUploadsChanged: () => {\n          // This is just for UI triggers - we're already tracking inProgressUploads\n          this.notifyPropertyChange(\"inProgressUploads\");\n        }\n      });\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      this.textarea?.removeEventListener(\"paste\", this._handlePaste);\n      this.uppyUpload?.teardown();\n      // needed for safety (textarea may not have a autocomplete)\n      if (this.textarea.autocomplete) {\n        this.textarea.autocomplete(\"destroy\");\n      }\n    }\n    get loading() {\n      return this.aiBotConversationsHiddenSubmit?.loading;\n    }\n    get inProgressUploads() {\n      return this.uppyUpload?.inProgressUploads || [];\n    }\n    get showUploadsContainer() {\n      return this.uploads?.length > 0 || this.inProgressUploads?.length > 0;\n    }\n    setPersonaId(id) {\n      this.aiBotConversationsHiddenSubmit.personaId = id;\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"setPersonaId\", [_object.action]))();\n    setTargetRecipient(username) {\n      this.aiBotConversationsHiddenSubmit.targetUsername = username;\n    }\n    static #_7 = (() => dt7948.n(this.prototype, \"setTargetRecipient\", [_object.action]))();\n    updateInputValue(value) {\n      this._autoExpandTextarea();\n      this.aiBotConversationsHiddenSubmit.inputValue = value.target?.value || value;\n    }\n    static #_8 = (() => dt7948.n(this.prototype, \"updateInputValue\", [_object.action]))();\n    handleKeyDown(event) {\n      if (event.target.tagName !== \"TEXTAREA\") {\n        return;\n      }\n      if (event.key === \"Enter\" && !event.shiftKey) {\n        this.prepareAndSubmitToBot();\n      }\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"handleKeyDown\", [_object.action]))();\n    setTextArea(element) {\n      this.textarea = element;\n      this.setupAutocomplete(element);\n      (0, _runloop.scheduleOnce)(\"afterRender\", this, this.focusTextarea);\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"setTextArea\", [_object.action]))();\n    focusTextarea() {\n      this.textarea?.focus();\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"focusTextarea\", [_object.action]))();\n    setupAutocomplete(textarea) {\n      const $textarea = (0, _jquery.default)(textarea);\n      this.applyUserAutocomplete($textarea);\n      this.applyHashtagAutocomplete($textarea);\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"setupAutocomplete\", [_object.action]))();\n    applyUserAutocomplete($textarea) {\n      if (!this.siteSettings.enable_mentions) {\n        return;\n      }\n      $textarea.autocomplete({\n        template: _user.default,\n        dataSource: term => {\n          (0, _userStatusOnAutocomplete.destroyUserStatuses)();\n          return (0, _userSearch.default)({\n            term,\n            includeGroups: true\n          }).then(result => {\n            (0, _userStatusOnAutocomplete.initUserStatusHtml)((0, _owner.getOwner)(this), result.users);\n            return result;\n          });\n        },\n        onRender: options => (0, _userStatusOnAutocomplete.renderUserStatusHtml)(options),\n        key: \"@\",\n        width: \"100%\",\n        treatAsTextarea: true,\n        autoSelectFirstSuggestion: true,\n        transformComplete: obj => obj.username || obj.name,\n        afterComplete: text => {\n          this.textarea.value = text;\n          this.focusTextarea();\n          this.updateInputValue({\n            target: {\n              value: text\n            }\n          });\n        },\n        onClose: _userStatusOnAutocomplete.destroyUserStatuses\n      });\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"applyUserAutocomplete\", [_object.action]))();\n    applyHashtagAutocomplete($textarea) {\n      // Use the \"topic-composer\" configuration or create a specific one for AI bot\n      // You can change this to \"chat-composer\" if that's more appropriate\n      const hashtagConfig = this.site.hashtag_configurations[\"topic-composer\"];\n      (0, _hashtagAutocomplete.setupHashtagAutocomplete)(hashtagConfig, $textarea, this.siteSettings, {\n        treatAsTextarea: true,\n        afterComplete: text => {\n          this.textarea.value = text;\n          this.focusTextarea();\n          this.updateInputValue({\n            target: {\n              value: text\n            }\n          });\n        }\n      });\n    }\n    static #_14 = (() => dt7948.n(this.prototype, \"applyHashtagAutocomplete\", [_object.action]))();\n    registerFileInput(element) {\n      if (element) {\n        this.fileInputEl = element;\n        if (this.uppyUpload) {\n          this.uppyUpload.setup(element);\n        }\n      }\n    }\n    static #_15 = (() => dt7948.n(this.prototype, \"registerFileInput\", [_object.action]))();\n    openFileUpload() {\n      if (this.fileInputEl) {\n        this.fileInputEl.click();\n      }\n    }\n    static #_16 = (() => dt7948.n(this.prototype, \"openFileUpload\", [_object.action]))();\n    removeUpload(upload) {\n      this.uploads = new _trackedBuiltIns.TrackedArray(this.uploads.filter(u => u !== upload));\n    }\n    static #_17 = (() => dt7948.n(this.prototype, \"removeUpload\", [_object.action]))();\n    cancelUpload(upload) {\n      this.uppyUpload.cancelSingleUpload({\n        fileId: upload.id\n      });\n    }\n    static #_18 = (() => dt7948.n(this.prototype, \"cancelUpload\", [_object.action]))();\n    async prepareAndSubmitToBot() {\n      try {\n        await this.aiBotConversationsHiddenSubmit.submitToBot({\n          uploads: this.uploads,\n          inProgressUploadsCount: this.inProgressUploads.length\n        });\n        this.uploads = new _trackedBuiltIns.TrackedArray();\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      }\n    }\n    static #_19 = (() => dt7948.n(this.prototype, \"prepareAndSubmitToBot\", [_object.action]))();\n    _autoExpandTextarea() {\n      this.textarea.style.height = \"auto\";\n      this.textarea.style.height = this.textarea.scrollHeight + \"px\";\n      // Get the max-height value from CSS (30vh)\n      const maxHeight = parseInt(getComputedStyle(this.textarea).maxHeight, 10);\n      // Only enable scrolling if content exceeds max-height\n      if (this.textarea.scrollHeight > maxHeight) {\n        this.textarea.style.overflowY = \"auto\";\n      } else {\n        this.textarea.style.overflowY = \"hidden\";\n      }\n    }\n    static #_20 = (() => (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"ai-bot-conversations\">\n          {{bodyClass \"ai-bot-conversations-page\"}}\n          <AiPersonaLlmSelector\n            @showLabels={{true}}\n            @setPersonaId={{this.setPersonaId}}\n            @setTargetRecipient={{this.setTargetRecipient}}\n            @personaName={{@controller.persona}}\n            @llmName={{@controller.llm}}\n          />\n    \n          <div class=\"ai-bot-conversations__content-wrapper\">\n            <div class=\"ai-bot-conversations__title\">\n              {{i18n \"discourse_ai.ai_bot.conversations.header\"}}\n            </div>\n            <PluginOutlet\n              @name=\"ai-bot-conversations-above-input\"\n              @outletArgs={{lazyHash\n                updateInput=this.updateInputValue\n                submit=this.prepareAndSubmitToBot\n              }}\n            />\n    \n            <div class=\"ai-bot-conversations__input-wrapper\">\n              <DButton\n                @icon=\"upload\"\n                @action={{this.openFileUpload}}\n                @title=\"discourse_ai.ai_bot.conversations.upload_files\"\n                class=\"btn btn-transparent ai-bot-upload-btn\"\n              />\n              <textarea\n                {{didInsert this.setTextArea}}\n                {{on \"input\" this.updateInputValue}}\n                {{on \"keydown\" this.handleKeyDown}}\n                id=\"ai-bot-conversations-input\"\n                autofocus=\"true\"\n                placeholder={{i18n \"discourse_ai.ai_bot.conversations.placeholder\"}}\n                minlength=\"10\"\n                disabled={{this.loading}}\n                rows=\"1\"\n              />\n              <DButton\n                @action={{this.prepareAndSubmitToBot}}\n                @icon=\"paper-plane\"\n                @isLoading={{this.loading}}\n                @title=\"discourse_ai.ai_bot.conversations.header\"\n                class=\"ai-bot-button btn-transparent ai-conversation-submit\"\n              />\n              <input\n                type=\"file\"\n                id=\"ai-bot-file-uploader\"\n                class=\"hidden-upload-field\"\n                multiple=\"multiple\"\n                {{didInsert this.registerFileInput}}\n              />\n            </div>\n    \n            <p class=\"ai-disclaimer\">\n              {{i18n \"discourse_ai.ai_bot.conversations.disclaimer\"}}\n            </p>\n    \n            {{#if this.showUploadsContainer}}\n              <div class=\"ai-bot-conversations__uploads-container\">\n                {{#each this.uploads as |upload|}}\n                  <div class=\"ai-bot-upload\">\n                    <span class=\"ai-bot-upload__filename\">\n                      {{upload.original_filename}}\n                    </span>\n                    <DButton\n                      @icon=\"xmark\"\n                      @action={{fn this.removeUpload upload}}\n                      class=\"btn-transparent ai-bot-upload__remove\"\n                    />\n                  </div>\n                {{/each}}\n    \n                {{#each this.inProgressUploads as |upload|}}\n                  <div class=\"ai-bot-upload ai-bot-upload--in-progress\">\n                    <span class=\"ai-bot-upload__filename\">{{upload.fileName}}</span>\n                    <span class=\"ai-bot-upload__progress\">\n                      {{upload.progress}}%\n                    </span>\n                    <DButton\n                      @icon=\"xmark\"\n                      @action={{fn this.cancelUpload upload}}\n                      class=\"btn-flat ai-bot-upload__cancel\"\n                    />\n                  </div>\n                {{/each}}\n              </div>\n            {{/if}}\n          </div>\n        </div>\n      \n    */\n    {\n      \"id\": \"mtM0Tits\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-bot-conversations\\\"],[12],[1,\\\"\\\\n      \\\"],[1,[28,[32,0],[\\\"ai-bot-conversations-page\\\"],null]],[1,\\\"\\\\n      \\\"],[8,[32,1],null,[[\\\"@showLabels\\\",\\\"@setPersonaId\\\",\\\"@setTargetRecipient\\\",\\\"@personaName\\\",\\\"@llmName\\\"],[true,[30,0,[\\\"setPersonaId\\\"]],[30,0,[\\\"setTargetRecipient\\\"]],[30,1,[\\\"persona\\\"]],[30,1,[\\\"llm\\\"]]]],null],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"ai-bot-conversations__content-wrapper\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-bot-conversations__title\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[28,[32,2],[\\\"discourse_ai.ai_bot.conversations.header\\\"],null]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[8,[32,3],null,[[\\\"@name\\\",\\\"@outletArgs\\\"],[\\\"ai-bot-conversations-above-input\\\",[28,[32,4],null,[[\\\"updateInput\\\",\\\"submit\\\"],[[30,0,[\\\"updateInputValue\\\"]],[30,0,[\\\"prepareAndSubmitToBot\\\"]]]]]]],null],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"ai-bot-conversations__input-wrapper\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,5],[[24,0,\\\"btn btn-transparent ai-bot-upload-btn\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@title\\\"],[\\\"upload\\\",[30,0,[\\\"openFileUpload\\\"]],\\\"discourse_ai.ai_bot.conversations.upload_files\\\"]],null],[1,\\\"\\\\n          \\\"],[11,\\\"textarea\\\"],[24,1,\\\"ai-bot-conversations-input\\\"],[24,\\\"autofocus\\\",\\\"true\\\"],[16,\\\"placeholder\\\",[28,[32,2],[\\\"discourse_ai.ai_bot.conversations.placeholder\\\"],null]],[24,\\\"minlength\\\",\\\"10\\\"],[16,\\\"disabled\\\",[30,0,[\\\"loading\\\"]]],[24,\\\"rows\\\",\\\"1\\\"],[4,[32,6],[[30,0,[\\\"setTextArea\\\"]]],null],[4,[32,7],[\\\"input\\\",[30,0,[\\\"updateInputValue\\\"]]],null],[4,[32,7],[\\\"keydown\\\",[30,0,[\\\"handleKeyDown\\\"]]],null],[12],[13],[1,\\\"          \\\"],[8,[32,5],[[24,0,\\\"ai-bot-button btn-transparent ai-conversation-submit\\\"]],[[\\\"@action\\\",\\\"@icon\\\",\\\"@isLoading\\\",\\\"@title\\\"],[[30,0,[\\\"prepareAndSubmitToBot\\\"]],\\\"paper-plane\\\",[30,0,[\\\"loading\\\"]],\\\"discourse_ai.ai_bot.conversations.header\\\"]],null],[1,\\\"\\\\n          \\\"],[11,\\\"input\\\"],[24,1,\\\"ai-bot-file-uploader\\\"],[24,0,\\\"hidden-upload-field\\\"],[24,\\\"multiple\\\",\\\"multiple\\\"],[24,4,\\\"file\\\"],[4,[32,6],[[30,0,[\\\"registerFileInput\\\"]]],null],[12],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,2],[14,0,\\\"ai-disclaimer\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[28,[32,2],[\\\"discourse_ai.ai_bot.conversations.disclaimer\\\"],null]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showUploadsContainer\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"ai-bot-conversations__uploads-container\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"uploads\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[10,0],[14,0,\\\"ai-bot-upload\\\"],[12],[1,\\\"\\\\n                \\\"],[10,1],[14,0,\\\"ai-bot-upload__filename\\\"],[12],[1,\\\"\\\\n                  \\\"],[1,[30,2,[\\\"original_filename\\\"]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[8,[32,5],[[24,0,\\\"btn-transparent ai-bot-upload__remove\\\"]],[[\\\"@icon\\\",\\\"@action\\\"],[\\\"xmark\\\",[28,[32,8],[[30,0,[\\\"removeUpload\\\"]],[30,2]],null]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"inProgressUploads\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[10,0],[14,0,\\\"ai-bot-upload ai-bot-upload--in-progress\\\"],[12],[1,\\\"\\\\n                \\\"],[10,1],[14,0,\\\"ai-bot-upload__filename\\\"],[12],[1,[30,3,[\\\"fileName\\\"]]],[13],[1,\\\"\\\\n                \\\"],[10,1],[14,0,\\\"ai-bot-upload__progress\\\"],[12],[1,\\\"\\\\n                  \\\"],[1,[30,3,[\\\"progress\\\"]]],[1,\\\"%\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[8,[32,5],[[24,0,\\\"btn-flat ai-bot-upload__cancel\\\"]],[[\\\"@icon\\\",\\\"@action\\\"],[\\\"xmark\\\",[28,[32,8],[[30,0,[\\\"cancelUpload\\\"]],[30,3]],null]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@controller\\\",\\\"upload\\\",\\\"upload\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-bot-conversations.js\",\n      \"scope\": () => [_bodyClass.default, _aiPersonaLlmSelector.default, _discourseI18n.i18n, _pluginOutlet.default, _lazyHash.default, _dButton.default, _didInsert.default, _modifier.on, _helper.fn],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiBotConversations;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-bot-header-icon\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/components/plugin-outlet\", \"discourse/helpers/lazy-hash\", \"discourse/lib/get-url\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/lib/ai-bot-helper\", \"discourse/plugins/discourse-ai/discourse/services/ai-conversations-sidebar-manager\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _dButton, _pluginOutlet, _lazyHash, _getUrl, _discourseI18n, _aiBotHelper, _aiConversationsSidebarManager, _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, \"appEvents\", [_service.service]))();\n    #appEvents = (() => (dt7948.i(this, \"appEvents\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"composer\", [_service.service]))();\n    #composer = (() => (dt7948.i(this, \"composer\"), 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, \"navigationMenu\", [_service.service]))();\n    #navigationMenu = (() => (dt7948.i(this, \"navigationMenu\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"sidebarState\", [_service.service]))();\n    #sidebarState = (() => (dt7948.i(this, \"sidebarState\"), 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, \"aiConversationsSidebarManager\", [_service.service]))();\n    #aiConversationsSidebarManager = (() => (dt7948.i(this, \"aiConversationsSidebarManager\"), void 0))();\n    get bots() {\n      const availableBots = this.currentUser.ai_enabled_chat_bots.filter(bot => !bot.is_persona || bot.has_default_llm).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    get title() {\n      if (this.clickShouldRouteOutOfConversations) {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.exit\");\n      }\n      return (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.shortcut_title\");\n    }\n    get icon() {\n      if (this.clickShouldRouteOutOfConversations) {\n        return \"shuffle\";\n      }\n      return \"robot\";\n    }\n    get clickShouldRouteOutOfConversations() {\n      return !this.navigationMenu.isHeaderDropdownMode && this.siteSettings.ai_bot_enable_dedicated_ux && this.sidebarState.currentPanel?.key === _aiConversationsSidebarManager.AI_CONVERSATIONS_PANEL;\n    }\n    get href() {\n      if (this.clickShouldRouteOutOfConversations) {\n        return (0, _getUrl.default)(this.aiConversationsSidebarManager.lastKnownAppURL || \"/\");\n      }\n      if (this.siteSettings.ai_bot_enable_dedicated_ux) {\n        return (0, _getUrl.default)(\"/discourse-ai/ai-bot/conversations\");\n      }\n      return null;\n    }\n    onClick() {\n      if (!this.siteSettings.ai_bot_enable_dedicated_ux) {\n        (0, _aiBotHelper.composeAiBotMessage)(this.bots[0], this.composer);\n      }\n      if (this.siteSettings.ai_bot_enable_dedicated_ux && !this.clickShouldRouteOutOfConversations) {\n        this.appEvents.trigger(\"discourse-ai:bot-header-icon-clicked\");\n      }\n    }\n    static #_8 = (() => dt7948.n(this.prototype, \"onClick\", [_object.action]))();\n    static #_9 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.showHeaderButton}}\n          <li>\n            <PluginOutlet\n              @name=\"ai-bot-header-icon\"\n              @outletArgs={{lazyHash onClick=this.onClick icon=this.icon}}\n            >\n              <DButton\n                @href={{this.href}}\n                @action={{unless this.href this.onClick}}\n                @icon={{this.icon}}\n                title={{this.title}}\n                class=\"ai-bot-button icon btn-flat\"\n              />\n            </PluginOutlet>\n          </li>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"OEVI+RDb\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showHeaderButton\\\"]],[[[1,\\\"      \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[32,0],null,[[\\\"@name\\\",\\\"@outletArgs\\\"],[\\\"ai-bot-header-icon\\\",[28,[32,1],null,[[\\\"onClick\\\",\\\"icon\\\"],[[30,0,[\\\"onClick\\\"]],[30,0,[\\\"icon\\\"]]]]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[32,2],[[16,\\\"title\\\",[30,0,[\\\"title\\\"]]],[24,0,\\\"ai-bot-button icon btn-flat\\\"]],[[\\\"@href\\\",\\\"@action\\\",\\\"@icon\\\"],[[30,0,[\\\"href\\\"]],[52,[51,[30,0,[\\\"href\\\"]]],[30,0,[\\\"onClick\\\"]]],[30,0,[\\\"icon\\\"]]]],null],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[],false,[\\\"if\\\",\\\"unless\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-bot-header-icon.js\",\n      \"scope\": () => [_pluginOutlet.default, _lazyHash.default, _dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiBotHeaderIcon;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-bot-sidebar-empty-state\", [\"exports\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _discourseI18n, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n    <div class=\"ai-bot-sidebar-empty-state\">\n      {{i18n \"discourse_ai.ai_bot.sidebar_empty\"}}\n    </div>\n  \n  */\n  {\n    \"id\": \"m29KA1Bv\",\n    \"block\": \"[[[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"ai-bot-sidebar-empty-state\\\"],[12],[1,\\\"\\\\n    \\\"],[1,[28,[32,0],[\\\"discourse_ai.ai_bot.sidebar_empty\\\"],null]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[],false,[]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-bot-sidebar-empty-state.js\",\n    \"scope\": () => [_discourseI18n.i18n],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"ai-bot-sidebar-empty-state\"));\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-bot-sidebar-new-conversation\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/plugins/discourse-ai/discourse/services/ai-conversations-sidebar-manager\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _dButton, _aiConversationsSidebarManager, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const TEXTAREA_ID = \"ai-bot-conversations-input\";\n  class AiBotSidebarNewConversation 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, \"sidebarState\", [_service.service]))();\n    #sidebarState = (() => (dt7948.i(this, \"sidebarState\"), void 0))();\n    get shouldRender() {\n      return this.sidebarState.isCurrentPanel(_aiConversationsSidebarManager.AI_CONVERSATIONS_PANEL);\n    }\n    focusTextarea() {\n      document.getElementById(TEXTAREA_ID)?.focus();\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"focusTextarea\", [_object.action]))();\n    routeTo() {\n      this.appEvents.trigger(\"discourse-ai:new-conversation-btn-clicked\");\n      if (this.router.currentRouteName !== \"discourse-ai-bot-conversations\") {\n        this.router.transitionTo(\"/discourse-ai/ai-bot/conversations\");\n      } else {\n        this.focusTextarea();\n      }\n      this.args.outletArgs?.toggleNavigationMenu?.();\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"routeTo\", [_object.action]))();\n    static #_6 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.shouldRender}}\n          <div class=\"ai-new-question-button__wrapper\">\n            <DButton\n              @label=\"discourse_ai.ai_bot.conversations.new\"\n              @icon=\"plus\"\n              @action={{this.routeTo}}\n              class=\"ai-new-question-button btn-default\"\n            />\n          </div>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"0JyS5UZF\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"shouldRender\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"ai-new-question-button__wrapper\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[32,0],[[24,0,\\\"ai-new-question-button btn-default\\\"]],[[\\\"@label\\\",\\\"@icon\\\",\\\"@action\\\"],[\\\"discourse_ai.ai_bot.conversations.new\\\",\\\"plus\\\",[30,0,[\\\"routeTo\\\"]]]],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-sidebar-new-conversation.js\",\n      \"scope\": () => [_dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiBotSidebarNewConversation;\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 = 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.name] = 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: \"short\",\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.name,\n            selectedText: this.args.data.selectedText,\n            thumbnails: this.thumbnailSuggestions\n          }\n        });\n      }\n      const showResultAsDiff = option.prompt_type === \"diff\" && option.name !== \"markdown_table\";\n      return this.modal.show(_diffModal.default, {\n        model: {\n          mode: option.name,\n          selectedText: this.args.data.selectedText,\n          revert: this.undoAiAction,\n          toolbarEvent: this.args.data.toolbarEvent,\n          customPromptValue: this.customPromptValue,\n          showResultAsDiff\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-default-llm-selector\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"discourse/lib/ajax\", \"discourse-i18n\", \"admin/components/site-setting\", \"admin/models/site-setting\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _ajax, _discourseI18n, _siteSetting, _siteSetting2, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiDefaultLlmSelector extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"defaultLlmSetting\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #defaultLlmSetting = (() => (dt7948.i(this, \"defaultLlmSetting\"), void 0))();\n    constructor() {\n      super(...arguments);\n      this.#loadDefaultLlmSetting();\n    }\n    async #loadDefaultLlmSetting() {\n      const {\n        site_settings\n      } = await (0, _ajax.ajax)(\"/admin/config/site_settings.json\", {\n        data: {\n          plugin: \"discourse-ai\",\n          category: \"discourse_ai\"\n        }\n      });\n      const defaultLlmSetting = site_settings.find(setting => setting.setting === \"ai_default_llm_model\");\n      this.defaultLlmSetting = _siteSetting2.default.create(defaultLlmSetting);\n    }\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"ai-configure-default-llm\">\n          <div class=\"ai-configure-default-llm__header\">\n            <h3>{{i18n \"discourse_ai.default_llm.title\"}}</h3>\n            <p>{{i18n \"discourse_ai.default_llm.description\"}}</p>\n          </div>\n    \n          {{#if this.defaultLlmSetting}}\n            <SiteSettingComponent\n              @setting={{this.defaultLlmSetting}}\n              class=\"ai-configure-default-llm__setting\"\n            />\n          {{/if}}\n        </div>\n      \n    */\n    {\n      \"id\": \"H9NPJOFZ\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-configure-default-llm\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"ai-configure-default-llm__header\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"h3\\\"],[12],[1,[28,[32,0],[\\\"discourse_ai.default_llm.title\\\"],null]],[13],[1,\\\"\\\\n        \\\"],[10,2],[12],[1,[28,[32,0],[\\\"discourse_ai.default_llm.description\\\"],null]],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"defaultLlmSetting\\\"]],[[[1,\\\"        \\\"],[8,[32,1],[[24,0,\\\"ai-configure-default-llm__setting\\\"]],[[\\\"@setting\\\"],[[30,0,[\\\"defaultLlmSetting\\\"]]]],null],[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-default-llm-selector.js\",\n      \"scope\": () => [_discourseI18n.i18n, _siteSetting.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiDefaultLlmSelector;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-embedding-editor\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"@ember/runloop\", \"@ember/service\", \"truth-helpers\", \"discourse/components/back-button\", \"discourse/components/conditional-loading-spinner\", \"discourse/components/d-button\", \"discourse/components/form\", \"discourse/helpers/d-icon\", \"discourse/lib/ajax-error\", \"discourse-i18n\", \"admin/components/admin-section-landing-item\", \"admin/components/admin-section-landing-wrapper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _runloop, _service, _truthHelpers, _backButton, _conditionalLoadingSpinner, _dButton, _form, _dIcon, _ajaxError, _discourseI18n, _adminSectionLandingItem, _adminSectionLandingWrapper, _component2, _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, \"currentProvider\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #currentProvider = (() => (dt7948.i(this, \"currentProvider\"), void 0))();\n    constructor() {\n      super(...arguments);\n      if (this.args.model) {\n        this.currentProvider = this.args.model.provider;\n      }\n    }\n    get formData() {\n      let data;\n      if (this.selectedPreset) {\n        data = this.store.createRecord(\"ai-embedding\", this.selectedPreset).workingCopy();\n      } else {\n        data = this.args.model.workingCopy();\n      }\n      const originalData = JSON.parse(JSON.stringify(data));\n      this._originalFormData = originalData;\n      return originalData;\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"formData\", [_tracking.cached]))();\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        return {\n          id: df,\n          name: t(df)\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      const provider = this.currentProvider;\n      if (!provider) {\n        return {};\n      }\n      const embeddings = this.args.embeddings || {};\n      const meta = embeddings.resultSetMeta || {};\n      const providerParams = meta.provider_params || {};\n      return providerParams[provider] || {};\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 seeded() {\n      return this.args.model.id < 0;\n    }\n    configurePreset(preset) {\n      this.selectedPreset = this.args.embeddings.resultSetMeta.presets.findBy(\"preset_id\", preset.id) || {};\n      if (this.selectedPreset.provider) {\n        this.currentProvider = this.selectedPreset.provider;\n      }\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"configurePreset\", [_object.action]))();\n    setProvider(provider, _ref) {\n      let {\n        set\n      } = _ref;\n      set(\"provider\", provider);\n      this.currentProvider = provider;\n      const providerParams = this.args.embeddings?.resultSetMeta?.provider_params || {};\n      const params = providerParams[provider] || {};\n      const initialParams = {};\n      if (params) {\n        const keys = Object.keys(params);\n        keys.forEach(key => {\n          initialParams[key] = null;\n        });\n      }\n      set(\"provider_params\", initialParams);\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"setProvider\", [_object.action]))();\n    get providerParams() {\n      const normalizeParam = value => {\n        if (!value) {\n          return {\n            type: \"text\"\n          };\n        }\n        if (typeof value === \"string\") {\n          return {\n            type: value\n          };\n        }\n        return {\n          type: value.type || \"text\",\n          values: (value.values || []).map(v => ({\n            id: v,\n            name: v\n          })),\n          default: value.default\n        };\n      };\n      return Object.entries(this.metaProviderParams).reduce((acc, _ref2) => {\n        let [field, value] = _ref2;\n        acc[field] = normalizeParam(value);\n        return acc;\n      }, {});\n    }\n    resetForm() {\n      this.selectedPreset = null;\n      this.currentProvider = null;\n    }\n    static #_14 = (() => dt7948.n(this.prototype, \"resetForm\", [_object.action]))();\n    async save(formData) {\n      this.isSaving = true;\n      const isNew = this.args.model.isNew;\n      try {\n        const dataToSave = {\n          ...formData\n        };\n        if (this.selectedPreset) {\n          // new embeddings\n          const newModel = this.store.createRecord(\"ai-embedding\", {\n            ...this.selectedPreset,\n            ...dataToSave\n          });\n          await newModel.save();\n          this.args.embeddings.addObject(newModel);\n        } else {\n          // existing embeddings\n          await this.args.model.save(dataToSave);\n        }\n        if (isNew) {\n          this.router.transitionTo(\"adminPlugins.show.discourse-ai-embeddings.index\");\n        } else {\n          const savedProvider = this.currentProvider;\n          this._originalFormData = JSON.parse(JSON.stringify(dataToSave));\n          this.currentProvider = savedProvider;\n          this.toasts.success({\n            data: {\n              message: (0, _discourseI18n.i18n)(\"discourse_ai.embeddings.saved\")\n            },\n            duration: \"short\"\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 #_15 = (() => dt7948.n(this.prototype, \"save\", [_object.action]))();\n    async test(data) {\n      this.testRunning = true;\n      try {\n        let testModel;\n        // new embeddings\n        if (this.args.model.isNew || this.selectedPreset) {\n          testModel = this.store.createRecord(\"ai-embedding\", {\n            ...this.selectedPreset,\n            ...data\n          });\n        } else {\n          // existing embeddings\n          testModel = this.args.model;\n        }\n        const configTestResult = await testModel.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 #_16 = (() => 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.embeddings.removeObject(this.args.model);\n            this.router.transitionTo(\"adminPlugins.show.discourse-ai-embeddings.index\");\n          }).catch(_ajaxError.popupAjaxError);\n        }\n      });\n    }\n    static #_17 = (() => dt7948.n(this.prototype, \"delete\", [_object.action]))();\n    providerKeys(providerParams) {\n      return providerParams ? Object.keys(providerParams) : [];\n    }\n    static #_18 = (() => dt7948.n(this.prototype, \"providerKeys\", [_object.action]))();\n    static #_19 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\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              {{/each}}\n            </AdminSectionLandingWrapper>\n          </div>\n        {{else}}\n          <Form\n            @onSubmit={{this.save}}\n            @data={{this.formData}}\n            class=\"form-horizontal ai-embedding-editor {{if this.seeded 'seeded'}}\"\n            as |form data|\n          >\n            {{#if @model.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    \n            <form.Field\n              @name=\"display_name\"\n              @title={{i18n \"discourse_ai.embeddings.display_name\"}}\n              @validation=\"required|length:1,100\"\n              @format=\"large\"\n              class=\"ai-embedding-editor__display-name\"\n              as |field|\n            >\n              <field.Input />\n            </form.Field>\n    \n            <form.Field\n              @name=\"provider\"\n              @title={{i18n \"discourse_ai.embeddings.provider\"}}\n              @validation=\"required\"\n              @format=\"large\"\n              @onSet={{this.setProvider}}\n              class=\"ai-embedding-editor__provider\"\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            <form.Field\n              @name=\"url\"\n              @title={{i18n \"discourse_ai.embeddings.url\"}}\n              @validation=\"required\"\n              @format=\"large\"\n              class=\"ai-embedding-editor__url\"\n              as |field|\n            >\n              <field.Input />\n            </form.Field>\n    \n            <form.Field\n              @name=\"api_key\"\n              @title={{i18n \"discourse_ai.embeddings.api_key\"}}\n              @validation=\"required\"\n              @format=\"large\"\n              class=\"ai-embedding-editor__api-key\"\n              as |field|\n            >\n              <field.Password />\n            </form.Field>\n    \n            <form.Field\n              @name=\"tokenizer_class\"\n              @title={{i18n \"discourse_ai.embeddings.tokenizer\"}}\n              @validation=\"required\"\n              @format=\"large\"\n              class=\"ai-embedding-editor__tokenizer\"\n              as |field|\n            >\n              <field.Select as |select|>\n                {{#each @embeddings.resultSetMeta.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=\"dimensions\"\n              @title={{i18n \"discourse_ai.embeddings.dimensions\"}}\n              @validation=\"required\"\n              @format=\"large\"\n              @tooltip={{if\n                @model.isNew\n                (i18n \"discourse_ai.embeddings.hints.dimensions_warning\")\n              }}\n              class=\"ai-embedding-editor__dimensions\"\n              as |field|\n            >\n              <field.Input\n                @type=\"number\"\n                step=\"any\"\n                min=\"0\"\n                lang=\"en\"\n                disabled={{not @model.isNew}}\n              />\n            </form.Field>\n    \n            <form.Field\n              @name=\"matryoshka_dimensions\"\n              @title={{i18n \"discourse_ai.embeddings.matryoshka_dimensions\"}}\n              @tooltip={{i18n\n                \"discourse_ai.embeddings.hints.matryoshka_dimensions\"\n              }}\n              @format=\"large\"\n              class=\"ai-embedding-editor__matryoshka_dimensions\"\n              as |field|\n            >\n              <field.Checkbox />\n            </form.Field>\n    \n            <form.Field\n              @name=\"embed_prompt\"\n              @title={{i18n \"discourse_ai.embeddings.embed_prompt\"}}\n              @tooltip={{i18n \"discourse_ai.embeddings.hints.embed_prompt\"}}\n              @format=\"large\"\n              class=\"ai-embedding-editor__embed_prompt\"\n              as |field|\n            >\n              <field.Textarea />\n            </form.Field>\n    \n            <form.Field\n              @name=\"search_prompt\"\n              @title={{i18n \"discourse_ai.embeddings.search_prompt\"}}\n              @tooltip={{i18n \"discourse_ai.embeddings.hints.search_prompt\"}}\n              @format=\"large\"\n              class=\"ai-embedding-editor__search_prompt\"\n              as |field|\n            >\n              <field.Textarea />\n            </form.Field>\n    \n            <form.Field\n              @name=\"max_sequence_length\"\n              @title={{i18n \"discourse_ai.embeddings.max_sequence_length\"}}\n              @tooltip={{i18n \"discourse_ai.embeddings.hints.sequence_length\"}}\n              @validation=\"required\"\n              @format=\"large\"\n              class=\"ai-embedding-editor__max_sequence_length\"\n              as |field|\n            >\n              <field.Input @type=\"number\" step=\"any\" min=\"0\" lang=\"en\" />\n            </form.Field>\n    \n            <form.Field\n              @name=\"pg_function\"\n              @title={{i18n \"discourse_ai.embeddings.distance_function\"}}\n              @tooltip={{i18n \"discourse_ai.embeddings.hints.distance_function\"}}\n              @format=\"large\"\n              @validation=\"required\"\n              class=\"ai-embedding-editor__distance_functions\"\n              as |field|\n            >\n              <field.Select @includeNone={{false}} as |select|>\n                {{#each this.distanceFunctions as |df|}}\n                  <select.Option @value={{df.id}}>{{df.name}}</select.Option>\n                {{/each}}\n              </field.Select>\n            </form.Field>\n    \n            {{! provider-specific content }}\n            {{#if this.currentProvider}}\n              <form.Object @name=\"provider_params\" as |object providerData|>\n                {{#each (this.providerKeys providerData) as |name|}}\n                  {{#let (get this.providerParams name) as |params|}}\n                    {{#if params}}\n                      <object.Field\n                        @name={{name}}\n                        @title={{i18n\n                          (concat \"discourse_ai.embeddings.provider_fields.\" name)\n                        }}\n                        @format=\"large\"\n                        @validation=\"required\"\n                        class=\"ai-embedding-editor-provider-param__{{params.type}}\"\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                    {{/if}}\n                  {{/let}}\n                {{/each}}\n              </form.Object>\n            {{/if}}\n    \n            <form.Actions class=\"ai-embedding-editor__action_panel\">\n              <form.Button\n                @action={{fn this.test data}}\n                @disabled={{this.testRunning}}\n                @label=\"discourse_ai.embeddings.tests.title\"\n                class=\"ai-embedding-editor__test\"\n              />\n    \n              <form.Submit\n                @label=\"discourse_ai.embeddings.save\"\n                class=\"btn-primary ai-embedding-editor__save\"\n              />\n    \n              {{#unless data.isNew}}\n                <form.Button\n                  @action={{this.delete}}\n                  @label=\"discourse_ai.embeddings.delete\"\n                  class=\"btn-danger ai-embedding-editor__delete\"\n                />\n              {{/unless}}\n            </form.Actions>\n    \n            {{#if this.displayTestResult}}\n              <form.Container @format=\"full\" class=\"ai-embedding-editor-tests\">\n                <ConditionalLoadingSpinner\n                  @size=\"small\"\n                  @condition={{this.testRunning}}\n                >\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                </ConditionalLoadingSpinner>\n              </form.Container>\n            {{/if}}\n          </Form>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"kJ5LIVvb\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showPresets\\\"]],[[[1,\\\"      \\\"],[8,[32,0],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,1],[\\\"discourse_ai.embeddings.presets\\\"],null]],[13],[1,\\\"\\\\n        \\\"],[8,[32,2],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"presets\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[8,[32,3],[[16,\\\"data-preset-id\\\",[30,1,[\\\"id\\\"]]],[24,0,\\\"ai-llms-list-editor__templates-list-item\\\"]],[[\\\"@titleLabelTranslated\\\",\\\"@taglineLabel\\\"],[[30,1,[\\\"name\\\"]],[28,[32,4],[\\\"discourse_ai.embeddings.providers.\\\",[30,1,[\\\"provider\\\"]]],null]]],[[\\\"buttons\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,2,[\\\"Default\\\"]],null,[[\\\"@action\\\",\\\"@icon\\\",\\\"@label\\\"],[[28,[32,5],[[30,0,[\\\"configurePreset\\\"]],[30,1]],null],\\\"gear\\\",\\\"discourse_ai.llms.preconfigured.button\\\"]],null],[1,\\\"\\\\n              \\\"]],[2]]]]],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[8,[32,6],[[16,0,[29,[\\\"form-horizontal ai-embedding-editor \\\",[52,[30,0,[\\\"seeded\\\"]],\\\"seeded\\\"]]]]],[[\\\"@onSubmit\\\",\\\"@data\\\"],[[30,0,[\\\"save\\\"]],[30,0,[\\\"formData\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,5,[\\\"isNew\\\"]],[[[1,\\\"          \\\"],[8,[32,7],[[24,0,\\\"btn-flat back-button\\\"]],[[\\\"@action\\\",\\\"@label\\\",\\\"@icon\\\"],[[30,0,[\\\"resetForm\\\"]],\\\"back_button\\\",\\\"chevron-left\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[8,[32,0],null,[[\\\"@route\\\",\\\"@label\\\"],[\\\"adminPlugins.show.discourse-ai-embeddings\\\",\\\"discourse_ai.embeddings.back\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n        \\\"],[8,[30,3,[\\\"Field\\\"]],[[24,0,\\\"ai-embedding-editor__display-name\\\"]],[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"display_name\\\",[28,[32,1],[\\\"discourse_ai.embeddings.display_name\\\"],null],\\\"required|length:1,100\\\",\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,6,[\\\"Input\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[6]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,3,[\\\"Field\\\"]],[[24,0,\\\"ai-embedding-editor__provider\\\"]],[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\",\\\"@onSet\\\"],[\\\"provider\\\",[28,[32,1],[\\\"discourse_ai.embeddings.provider\\\"],null],\\\"required\\\",\\\"large\\\",[30,0,[\\\"setProvider\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,7,[\\\"Select\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"selectedProviders\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[30,8,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,9,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,9,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[9]],null],[1,\\\"          \\\"]],[8]]]]],[1,\\\"\\\\n        \\\"]],[7]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,3,[\\\"Field\\\"]],[[24,0,\\\"ai-embedding-editor__url\\\"]],[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"url\\\",[28,[32,1],[\\\"discourse_ai.embeddings.url\\\"],null],\\\"required\\\",\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,10,[\\\"Input\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[10]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,3,[\\\"Field\\\"]],[[24,0,\\\"ai-embedding-editor__api-key\\\"]],[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"api_key\\\",[28,[32,1],[\\\"discourse_ai.embeddings.api_key\\\"],null],\\\"required\\\",\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,11,[\\\"Password\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[11]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,3,[\\\"Field\\\"]],[[24,0,\\\"ai-embedding-editor__tokenizer\\\"]],[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"tokenizer_class\\\",[28,[32,1],[\\\"discourse_ai.embeddings.tokenizer\\\"],null],\\\"required\\\",\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,12,[\\\"Select\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,14,[\\\"resultSetMeta\\\",\\\"tokenizers\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[30,13,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,15,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,15,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[15]],null],[1,\\\"          \\\"]],[13]]]]],[1,\\\"\\\\n        \\\"]],[12]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,3,[\\\"Field\\\"]],[[24,0,\\\"ai-embedding-editor__dimensions\\\"]],[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\",\\\"@tooltip\\\"],[\\\"dimensions\\\",[28,[32,1],[\\\"discourse_ai.embeddings.dimensions\\\"],null],\\\"required\\\",\\\"large\\\",[52,[30,5,[\\\"isNew\\\"]],[28,[32,1],[\\\"discourse_ai.embeddings.hints.dimensions_warning\\\"],null]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,16,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"min\\\",\\\"0\\\"],[24,\\\"lang\\\",\\\"en\\\"],[16,\\\"disabled\\\",[28,[32,8],[[30,5,[\\\"isNew\\\"]]],null]]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n        \\\"]],[16]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,3,[\\\"Field\\\"]],[[24,0,\\\"ai-embedding-editor__matryoshka_dimensions\\\"]],[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"matryoshka_dimensions\\\",[28,[32,1],[\\\"discourse_ai.embeddings.matryoshka_dimensions\\\"],null],[28,[32,1],[\\\"discourse_ai.embeddings.hints.matryoshka_dimensions\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,17,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[17]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,3,[\\\"Field\\\"]],[[24,0,\\\"ai-embedding-editor__embed_prompt\\\"]],[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"embed_prompt\\\",[28,[32,1],[\\\"discourse_ai.embeddings.embed_prompt\\\"],null],[28,[32,1],[\\\"discourse_ai.embeddings.hints.embed_prompt\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,18,[\\\"Textarea\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[18]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,3,[\\\"Field\\\"]],[[24,0,\\\"ai-embedding-editor__search_prompt\\\"]],[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"search_prompt\\\",[28,[32,1],[\\\"discourse_ai.embeddings.search_prompt\\\"],null],[28,[32,1],[\\\"discourse_ai.embeddings.hints.search_prompt\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,19,[\\\"Textarea\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[19]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,3,[\\\"Field\\\"]],[[24,0,\\\"ai-embedding-editor__max_sequence_length\\\"]],[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"max_sequence_length\\\",[28,[32,1],[\\\"discourse_ai.embeddings.max_sequence_length\\\"],null],[28,[32,1],[\\\"discourse_ai.embeddings.hints.sequence_length\\\"],null],\\\"required\\\",\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,20,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"min\\\",\\\"0\\\"],[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n        \\\"]],[20]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,3,[\\\"Field\\\"]],[[24,0,\\\"ai-embedding-editor__distance_functions\\\"]],[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\",\\\"@validation\\\"],[\\\"pg_function\\\",[28,[32,1],[\\\"discourse_ai.embeddings.distance_function\\\"],null],[28,[32,1],[\\\"discourse_ai.embeddings.hints.distance_function\\\"],null],\\\"large\\\",\\\"required\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,21,[\\\"Select\\\"]],null,[[\\\"@includeNone\\\"],[false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"distanceFunctions\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[30,22,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,23,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,23,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[23]],null],[1,\\\"          \\\"]],[22]]]]],[1,\\\"\\\\n        \\\"]],[21]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"currentProvider\\\"]],[[[1,\\\"          \\\"],[8,[30,3,[\\\"Object\\\"]],null,[[\\\"@name\\\"],[\\\"provider_params\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[28,[30,0,[\\\"providerKeys\\\"]],[[30,25]],null]],null]],null],null,[[[44,[[28,[32,9],[[30,0,[\\\"providerParams\\\"]],[30,26]],null]],[[[41,[30,27],[[[1,\\\"                  \\\"],[8,[30,24,[\\\"Field\\\"]],[[16,0,[29,[\\\"ai-embedding-editor-provider-param__\\\",[30,27,[\\\"type\\\"]]]]]],[[\\\"@name\\\",\\\"@title\\\",\\\"@format\\\",\\\"@validation\\\"],[[30,26],[28,[32,1],[[28,[32,4],[\\\"discourse_ai.embeddings.provider_fields.\\\",[30,26]],null]],null],\\\"large\\\",\\\"required\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[28,[32,10],[[30,27,[\\\"type\\\"]],\\\"enum\\\"],null],[[[1,\\\"                      \\\"],[8,[30,28,[\\\"Select\\\"]],null,[[\\\"@includeNone\\\"],[false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,27,[\\\"values\\\"]]],null]],null],null,[[[1,\\\"                          \\\"],[8,[30,29,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,30,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,30,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[30]],null],[1,\\\"                      \\\"]],[29]]]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[32,10],[[30,27,[\\\"type\\\"]],\\\"checkbox\\\"],null],[[[1,\\\"                      \\\"],[8,[30,28,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                      \\\"],[8,[30,28,[\\\"Input\\\"]],null,[[\\\"@type\\\"],[[30,27,[\\\"type\\\"]]]],null],[1,\\\"\\\\n                    \\\"]],[]]]],[]]],[1,\\\"                  \\\"]],[28]]]]],[1,\\\"\\\\n\\\"]],[]],null]],[27]]]],[26]],null],[1,\\\"          \\\"]],[24,25]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n        \\\"],[8,[30,3,[\\\"Actions\\\"]],[[24,0,\\\"ai-embedding-editor__action_panel\\\"]],null,[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,3,[\\\"Button\\\"]],[[24,0,\\\"ai-embedding-editor__test\\\"]],[[\\\"@action\\\",\\\"@disabled\\\",\\\"@label\\\"],[[28,[32,5],[[30,0,[\\\"test\\\"]],[30,4]],null],[30,0,[\\\"testRunning\\\"]],\\\"discourse_ai.embeddings.tests.title\\\"]],null],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,3,[\\\"Submit\\\"]],[[24,0,\\\"btn-primary ai-embedding-editor__save\\\"]],[[\\\"@label\\\"],[\\\"discourse_ai.embeddings.save\\\"]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[51,[30,4,[\\\"isNew\\\"]]],[[[1,\\\"            \\\"],[8,[30,3,[\\\"Button\\\"]],[[24,0,\\\"btn-danger ai-embedding-editor__delete\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"delete\\\"]],\\\"discourse_ai.embeddings.delete\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"displayTestResult\\\"]],[[[1,\\\"          \\\"],[8,[30,3,[\\\"Container\\\"]],[[24,0,\\\"ai-embedding-editor-tests\\\"]],[[\\\"@format\\\"],[\\\"full\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[32,11],null,[[\\\"@size\\\",\\\"@condition\\\"],[\\\"small\\\",[30,0,[\\\"testRunning\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"testResult\\\"]],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"ai-embedding-editor-tests__success\\\"],[12],[1,\\\"\\\\n                  \\\"],[1,[28,[32,12],[\\\"check\\\"],null]],[1,\\\"\\\\n                  \\\"],[1,[28,[32,1],[\\\"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,12],[\\\"xmark\\\"],null]],[1,\\\"\\\\n                  \\\"],[1,[30,0,[\\\"testErrorMessage\\\"]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"            \\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"]],[3,4]]]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"  \\\"]],[\\\"preset\\\",\\\"buttons\\\",\\\"form\\\",\\\"data\\\",\\\"@model\\\",\\\"field\\\",\\\"field\\\",\\\"select\\\",\\\"provider\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"select\\\",\\\"@embeddings\\\",\\\"tokenizer\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"select\\\",\\\"df\\\",\\\"object\\\",\\\"providerData\\\",\\\"name\\\",\\\"params\\\",\\\"field\\\",\\\"select\\\",\\\"option\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\",\\\"let\\\",\\\"unless\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-embedding-editor.js\",\n      \"scope\": () => [_backButton.default, _discourseI18n.i18n, _adminSectionLandingWrapper.default, _adminSectionLandingItem.default, _helper.concat, _helper.fn, _form.default, _dButton.default, _truthHelpers.not, _helper.get, _truthHelpers.eq, _conditionalLoadingSpinner.default, _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-feature-card\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"@ember/routing\", \"discourse/components/d-button\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _routing, _dButton, _discourseI18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class ExpandableList extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"isExpanded\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isExpanded = (() => (dt7948.i(this, \"isExpanded\"), void 0))();\n    get maxItemsToShow() {\n      return this.args.maxItemsToShow ?? 5;\n    }\n    get hasMore() {\n      return this.args.items?.length > this.maxItemsToShow;\n    }\n    get visibleItems() {\n      if (!this.args.items) {\n        return [];\n      }\n      return this.isExpanded ? this.args.items : this.args.items.slice(0, this.maxItemsToShow);\n    }\n    get remainingCount() {\n      return this.args.items?.length - this.maxItemsToShow;\n    }\n    get expandToggleLabel() {\n      if (this.isExpanded) {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.features.collapse_list\");\n      } else {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.features.expand_list\", {\n          count: this.remainingCount\n        });\n      }\n    }\n    toggleExpanded() {\n      this.isExpanded = !this.isExpanded;\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"toggleExpanded\", [_object.action]))();\n    isLastItem(index) {\n      return index === this.visibleItems.length - 1;\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"isLastItem\", [_object.action]))();\n    static #_4 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#each this.visibleItems as |item index|}}\n          {{yield item index this.isLastItem}}\n        {{/each}}\n    \n        {{#if this.hasMore}}\n          <DButton\n            class=\"btn-flat ai-expanded-list__toggle-button\"\n            @translatedLabel={{this.expandToggleLabel}}\n            @action={{this.toggleExpanded}}\n          />\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"6yrVrxxR\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"visibleItems\\\"]]],null]],null],null,[[[1,\\\"      \\\"],[18,3,[[30,1],[30,2],[30,0,[\\\"isLastItem\\\"]]]],[1,\\\"\\\\n\\\"]],[1,2]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasMore\\\"]],[[[1,\\\"      \\\"],[8,[32,0],[[24,0,\\\"btn-flat ai-expanded-list__toggle-button\\\"]],[[\\\"@translatedLabel\\\",\\\"@action\\\"],[[30,0,[\\\"expandToggleLabel\\\"]],[30,0,[\\\"toggleExpanded\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"item\\\",\\\"index\\\",\\\"&default\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"yield\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-feature-card.js\",\n      \"scope\": () => [_dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  class AiFeatureCard extends _component.default {\n    hasGroups(feature) {\n      return this.groupList(feature).length > 0;\n    }\n    static #_ = (() => dt7948.n(this.prototype, \"hasGroups\", [_object.action]))();\n    groupList(feature) {\n      const groups = [];\n      const groupIds = new Set();\n      if (feature.personas) {\n        feature.personas.forEach(persona => {\n          if (persona.allowed_groups) {\n            persona.allowed_groups.forEach(group => {\n              if (!groupIds.has(group.id)) {\n                groupIds.add(group.id);\n                groups.push(group);\n              }\n            });\n          }\n        });\n      }\n      return groups;\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"groupList\", [_object.action]))();\n    static #_3 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div\n          class=\"admin-section-landing-item ai-feature-card\"\n          data-feature-name={{@feature.name}}\n        >\n          <div class=\"admin-section-landing-item__content\">\n            <div class=\"ai-feature-card__feature-name\">\n              {{@localizedFeatureName}}\n              {{#unless @feature.enabled}}\n                <span>{{i18n \"discourse_ai.features.disabled\"}}</span>\n              {{/unless}}\n            </div>\n            <div class=\"ai-feature-card__persona\">\n              <span class=\"ai-feature-card__label\">\n                {{i18n\n                  \"discourse_ai.features.persona\"\n                  count=@feature.personas.length\n                }}\n              </span>\n              {{#if @feature.personas}}\n                <ExpandableList\n                  @items={{@feature.personas}}\n                  @maxItemsToShow={{5}}\n                  as |persona index isLastItem|\n                >\n                  <LinkTo\n                    @route=\"adminPlugins.show.discourse-ai-personas.edit\"\n                    @model={{persona.id}}\n                    class=\"ai-feature-card__persona-link\"\n                  >\n                    {{concat persona.name (unless (isLastItem index) \", \")}}\n                  </LinkTo>\n                </ExpandableList>\n              {{else}}\n                <span class=\"ai-feature-card__label\">\n                  {{i18n \"discourse_ai.features.no_persona\"}}\n                </span>\n              {{/if}}\n            </div>\n            <div class=\"ai-feature-card__llm\">\n              {{#if @feature.llm_models}}\n                <span class=\"ai-feature-card__label\">\n                  {{i18n\n                    \"discourse_ai.features.llm\"\n                    count=@feature.llm_models.length\n                  }}\n                </span>\n                <ExpandableList\n                  @items={{@feature.llm_models}}\n                  @maxItemsToShow={{5}}\n                  as |llm index isLastItem|\n                >\n                  <LinkTo\n                    @route=\"adminPlugins.show.discourse-ai-llms.edit\"\n                    @model={{llm.id}}\n                    class=\"ai-feature-card__llm-link\"\n                  >\n                    {{concat llm.name (unless (isLastItem index) \", \")}}\n                  </LinkTo>\n                </ExpandableList>\n              {{else}}\n                <span class=\"ai-feature-card__label\">\n                  {{i18n \"discourse_ai.features.no_llm\"}}\n                </span>\n              {{/if}}\n            </div>\n            {{#if @showGroups}}\n              {{#if @feature.personas}}\n                <div class=\"ai-feature-card__groups\">\n                  <span class=\"ai-feature-card__label\">\n                    {{i18n \"discourse_ai.features.groups\"}}\n                  </span>\n                  {{#if (this.hasGroups @feature)}}\n                    <ul class=\"ai-feature-card__item-groups\">\n                      {{#each (this.groupList @feature) as |group|}}\n                        <li>{{group.name}}</li>\n                      {{/each}}\n                    </ul>\n                  {{else}}\n                    <span class=\"ai-feature-card__label\">\n                      {{i18n \"discourse_ai.features.no_groups\"}}\n                    </span>\n                  {{/if}}\n                </div>\n              {{/if}}\n            {{/if}}\n          </div>\n        </div>\n      \n    */\n    {\n      \"id\": \"uIPap7dM\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"admin-section-landing-item ai-feature-card\\\"],[15,\\\"data-feature-name\\\",[30,1,[\\\"name\\\"]]],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"admin-section-landing-item__content\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-feature-card__feature-name\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[30,2]],[1,\\\"\\\\n\\\"],[41,[51,[30,1,[\\\"enabled\\\"]]],[[[1,\\\"            \\\"],[10,1],[12],[1,[28,[32,0],[\\\"discourse_ai.features.disabled\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-feature-card__persona\\\"],[12],[1,\\\"\\\\n          \\\"],[10,1],[14,0,\\\"ai-feature-card__label\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,0],[\\\"discourse_ai.features.persona\\\"],[[\\\"count\\\"],[[30,1,[\\\"personas\\\",\\\"length\\\"]]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"personas\\\"]],[[[1,\\\"            \\\"],[8,[32,1],null,[[\\\"@items\\\",\\\"@maxItemsToShow\\\"],[[30,1,[\\\"personas\\\"]],5]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[32,2],[[24,0,\\\"ai-feature-card__persona-link\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"adminPlugins.show.discourse-ai-personas.edit\\\",[30,3,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[1,[28,[32,3],[[30,3,[\\\"name\\\"]],[52,[51,[28,[30,5],[[30,4]],null]],\\\", \\\"]],null]],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n            \\\"]],[3,4,5]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[10,1],[14,0,\\\"ai-feature-card__label\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[28,[32,0],[\\\"discourse_ai.features.no_persona\\\"],null]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-feature-card__llm\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"llm_models\\\"]],[[[1,\\\"            \\\"],[10,1],[14,0,\\\"ai-feature-card__label\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[28,[32,0],[\\\"discourse_ai.features.llm\\\"],[[\\\"count\\\"],[[30,1,[\\\"llm_models\\\",\\\"length\\\"]]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[8,[32,1],null,[[\\\"@items\\\",\\\"@maxItemsToShow\\\"],[[30,1,[\\\"llm_models\\\"]],5]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[32,2],[[24,0,\\\"ai-feature-card__llm-link\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"adminPlugins.show.discourse-ai-llms.edit\\\",[30,6,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[1,[28,[32,3],[[30,6,[\\\"name\\\"]],[52,[51,[28,[30,8],[[30,7]],null]],\\\", \\\"]],null]],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n            \\\"]],[6,7,8]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[10,1],[14,0,\\\"ai-feature-card__label\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[28,[32,0],[\\\"discourse_ai.features.no_llm\\\"],null]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,9],[[[41,[30,1,[\\\"personas\\\"]],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"ai-feature-card__groups\\\"],[12],[1,\\\"\\\\n              \\\"],[10,1],[14,0,\\\"ai-feature-card__label\\\"],[12],[1,\\\"\\\\n                \\\"],[1,[28,[32,0],[\\\"discourse_ai.features.groups\\\"],null]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[30,0,[\\\"hasGroups\\\"]],[[30,1]],null],[[[1,\\\"                \\\"],[10,\\\"ul\\\"],[14,0,\\\"ai-feature-card__item-groups\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,3],[[28,[31,3],[[28,[30,0,[\\\"groupList\\\"]],[[30,1]],null]],null]],null],null,[[[1,\\\"                    \\\"],[10,\\\"li\\\"],[12],[1,[30,10,[\\\"name\\\"]]],[13],[1,\\\"\\\\n\\\"]],[10]],null],[1,\\\"                \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[10,1],[14,0,\\\"ai-feature-card__label\\\"],[12],[1,\\\"\\\\n                  \\\"],[1,[28,[32,0],[\\\"discourse_ai.features.no_groups\\\"],null]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@feature\\\",\\\"@localizedFeatureName\\\",\\\"persona\\\",\\\"index\\\",\\\"isLastItem\\\",\\\"llm\\\",\\\"index\\\",\\\"isLastItem\\\",\\\"@showGroups\\\",\\\"group\\\"],false,[\\\"unless\\\",\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-feature-card.js\",\n      \"scope\": () => [_discourseI18n.i18n, ExpandableList, _routing.LinkTo, _helper.concat],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiFeatureCard;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-features-list\", [\"exports\", \"@glimmer/component\", \"@ember/helper\", \"@ember/object\", \"@ember/service\", \"truth-helpers\", \"discourse/components/d-button\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-feature-card\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _object, _service, _truthHelpers, _dButton, _discourseI18n, _aiFeatureCard, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiFeaturesList extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    get sortedModules() {\n      const modules = this.args.modules?.toArray() || this.args.modules;\n      return [...(modules || [])].toSorted((a, b) => (a.module_name || \"\").localeCompare(b.module_name || \"\"));\n    }\n    isSpamModule(aModule) {\n      return aModule.module_name === \"spam\";\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"isSpamModule\", [_object.action]))();\n    isAutomationModule(aModule) {\n      return aModule.module_name === \"automation_reports\" || aModule.module_name === \"automation_triage\";\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"isAutomationModule\", [_object.action]))();\n    featureName(feature, aModule) {\n      if (this.isAutomationModule(aModule)) {\n        return feature.name;\n      } else {\n        return (0, _discourseI18n.i18n)(`discourse_ai.features.${aModule.module_name}.${feature.name}`);\n      }\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"featureName\", [_object.action]))();\n    transitionToAutomations() {\n      this.router.transitionTo(\"/admin/plugins/automation/automation\");\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"transitionToAutomations\", [_object.action]))();\n    static #_6 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"ai-features-list\">\n          {{#each this.sortedModules as |module|}}\n            <div class=\"ai-module\" data-module-name={{module.module_name}}>\n              <div class=\"ai-module__header\">\n                <div class=\"ai-module__module-title\">\n                  <h3>{{i18n\n                      (concat \"discourse_ai.features.\" module.module_name \".name\")\n                    }}</h3>\n                  {{#if (this.isSpamModule module)}}\n                    <DButton\n                      class=\"edit\"\n                      @label=\"discourse_ai.features.edit\"\n                      @route=\"adminPlugins.show.discourse-ai-spam\"\n                    />\n                  {{else if (this.isAutomationModule module)}}\n                    <DButton\n                      class=\"edit\"\n                      @label=\"discourse_ai.features.edit\"\n                      @action={{this.transitionToAutomations}}\n                    />\n                  {{else}}\n                    <DButton\n                      class=\"edit\"\n                      @label=\"discourse_ai.features.edit\"\n                      @route=\"adminPlugins.show.discourse-ai-features.edit\"\n                      @routeModels={{module.id}}\n                    />\n                  {{/if}}\n                </div>\n                <div>{{i18n\n                    (concat\n                      \"discourse_ai.features.\" module.module_name \".description\"\n                    )\n                  }}</div>\n              </div>\n    \n              <div class=\"admin-section-landing-wrapper ai-feature-cards\">\n                {{#if\n                  (and\n                    (this.isAutomationModule module) (eq module.features.length 0)\n                  )\n                }}\n                  <div>{{i18n \"discourse_ai.features.no_automations\"}}</div>\n                {{else}}\n                  {{#each module.features as |feature|}}\n                    <AiFeatureCard\n                      @localizedFeatureName={{this.featureName feature module}}\n                      @feature={{feature}}\n                      @showGroups={{not (this.isSpamModule module)}}\n                    />\n                  {{/each}}\n                {{/if}}\n              </div>\n            </div>\n          {{/each}}\n        </div>\n      \n    */\n    {\n      \"id\": \"cjQAGBSD\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-features-list\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"sortedModules\\\"]]],null]],null],null,[[[1,\\\"        \\\"],[10,0],[14,0,\\\"ai-module\\\"],[15,\\\"data-module-name\\\",[30,1,[\\\"module_name\\\"]]],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"ai-module__header\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"ai-module__module-title\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"h3\\\"],[12],[1,[28,[32,0],[[28,[32,1],[\\\"discourse_ai.features.\\\",[30,1,[\\\"module_name\\\"]],\\\".name\\\"],null]],null]],[13],[1,\\\"\\\\n\\\"],[41,[28,[30,0,[\\\"isSpamModule\\\"]],[[30,1]],null],[[[1,\\\"                \\\"],[8,[32,2],[[24,0,\\\"edit\\\"]],[[\\\"@label\\\",\\\"@route\\\"],[\\\"discourse_ai.features.edit\\\",\\\"adminPlugins.show.discourse-ai-spam\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[30,0,[\\\"isAutomationModule\\\"]],[[30,1]],null],[[[1,\\\"                \\\"],[8,[32,2],[[24,0,\\\"edit\\\"]],[[\\\"@label\\\",\\\"@action\\\"],[\\\"discourse_ai.features.edit\\\",[30,0,[\\\"transitionToAutomations\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[8,[32,2],[[24,0,\\\"edit\\\"]],[[\\\"@label\\\",\\\"@route\\\",\\\"@routeModels\\\"],[\\\"discourse_ai.features.edit\\\",\\\"adminPlugins.show.discourse-ai-features.edit\\\",[30,1,[\\\"id\\\"]]]],null],[1,\\\"\\\\n              \\\"]],[]]]],[]]],[1,\\\"            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,0],[12],[1,[28,[32,0],[[28,[32,1],[\\\"discourse_ai.features.\\\",[30,1,[\\\"module_name\\\"]],\\\".description\\\"],null]],null]],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n          \\\"],[10,0],[14,0,\\\"admin-section-landing-wrapper ai-feature-cards\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[32,3],[[28,[30,0,[\\\"isAutomationModule\\\"]],[[30,1]],null],[28,[32,4],[[30,1,[\\\"features\\\",\\\"length\\\"]],0],null]],null],[[[1,\\\"              \\\"],[10,0],[12],[1,[28,[32,0],[\\\"discourse_ai.features.no_automations\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]],[[[42,[28,[31,1],[[28,[31,1],[[30,1,[\\\"features\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[8,[32,5],null,[[\\\"@localizedFeatureName\\\",\\\"@feature\\\",\\\"@showGroups\\\"],[[28,[30,0,[\\\"featureName\\\"]],[[30,2],[30,1]],null],[30,2],[28,[32,6],[[28,[30,0,[\\\"isSpamModule\\\"]],[[30,1]],null]],null]]],null],[1,\\\"\\\\n\\\"]],[2]],null]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"module\\\",\\\"feature\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-features-list.js\",\n      \"scope\": () => [_discourseI18n.i18n, _helper.concat, _dButton.default, _truthHelpers.and, _truthHelpers.eq, _aiFeatureCard.default, _truthHelpers.not],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiFeaturesList;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-features\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-breadcrumbs-item\", \"discourse/components/d-button\", \"discourse/components/d-page-subheader\", \"discourse/components/d-select\", \"discourse/components/filter-input\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-default-llm-selector\", \"discourse/plugins/discourse-ai/discourse/components/ai-features-list\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _service, _dBreadcrumbsItem, _dButton, _dPageSubheader, _dSelect, _filterInput, _discourseI18n, _aiDefaultLlmSelector, _aiFeaturesList, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ALL = \"all\";\n  const CONFIGURED = \"configured\";\n  const UNCONFIGURED = \"unconfigured\";\n  class AiFeatures 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, \"filterValue\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #filterValue = (() => (dt7948.i(this, \"filterValue\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"selectedFeatureGroup\", [_tracking.tracked], function () {\n      return CONFIGURED;\n    }))();\n    #selectedFeatureGroup = (() => (dt7948.i(this, \"selectedFeatureGroup\"), void 0))();\n    constructor() {\n      super(...arguments);\n      // if there are features but none are configured, show unconfigured\n      if (this.args.features?.length > 0) {\n        const configuredCount = this.args.features.filter(f => f.module_enabled === true).length;\n        if (configuredCount === 0) {\n          this.selectedFeatureGroup = UNCONFIGURED;\n        }\n      }\n    }\n    get featureGroupOptions() {\n      return [{\n        value: ALL,\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.features.filters.all\")\n      }, {\n        value: CONFIGURED,\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.features.nav.configured\")\n      }, {\n        value: UNCONFIGURED,\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.features.nav.unconfigured\")\n      }];\n    }\n    get filteredFeatures() {\n      if (!this.args.features || this.args.features.length === 0) {\n        return [];\n      }\n      let features = this.args.features;\n      if (this.selectedFeatureGroup === CONFIGURED) {\n        features = features.filter(feature => feature.module_enabled === true);\n      } else if (this.selectedFeatureGroup === UNCONFIGURED) {\n        features = features.filter(feature => feature.module_enabled === false);\n      }\n      if (this.filterValue && this.filterValue.trim() !== \"\") {\n        const term = this.filterValue.toLowerCase().trim();\n        const featureMatches = (module, feature) => {\n          try {\n            const featureName = (0, _discourseI18n.i18n)(`discourse_ai.features.${module.module_name}.${feature.name}`).toLowerCase();\n            if (featureName.includes(term)) {\n              return true;\n            }\n            const personaMatches = feature.personas?.some(persona => persona.name?.toLowerCase().includes(term));\n            const llmMatches = feature.llm_models?.some(llm => llm.name?.toLowerCase().includes(term));\n            const groupMatches = feature.personas?.some(persona => persona.allowed_groups?.some(group => group.name?.toLowerCase().includes(term)));\n            return personaMatches || llmMatches || groupMatches;\n          } catch (error) {\n            // eslint-disable-next-line no-console\n            console.error(`Error filtering features`, error);\n            return false;\n          }\n        };\n        // Filter modules by name or features\n        features = features.filter(module => {\n          try {\n            const moduleName = (0, _discourseI18n.i18n)(`discourse_ai.features.${module.module_name}.name`).toLowerCase();\n            if (moduleName.includes(term)) {\n              return true;\n            }\n            return (module.features || []).some(feature => featureMatches(module, feature));\n          } catch (error) {\n            // eslint-disable-next-line no-console\n            console.error(`Error filtering features`, error);\n            return false;\n          }\n        });\n        // For modules that don't match by name, filter features\n        features = features.map(module => {\n          try {\n            const moduleName = (0, _discourseI18n.i18n)(`discourse_ai.features.${module.module_name}.name`).toLowerCase();\n            // if name matches\n            if (moduleName.includes(term)) {\n              return module;\n            }\n            // if no name match\n            const matchingFeatures = (module.features || []).filter(feature => featureMatches(module, feature));\n            // recreate with matching features\n            return Object.assign({}, module, {\n              features: matchingFeatures\n            });\n          } catch (error) {\n            // eslint-disable-next-line no-console\n            console.error(`Error filtering features`, error);\n            return module;\n          }\n        }).filter(module => module.features && module.features.length > 0);\n      }\n      return features;\n    }\n    onFilterChange(event) {\n      this.filterValue = event.target?.value || \"\";\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"onFilterChange\", [_object.action]))();\n    onFeatureGroupChange(value) {\n      this.selectedFeatureGroup = value;\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"onFeatureGroupChange\", [_object.action]))();\n    resetAndFocus() {\n      this.filterValue = \"\";\n      this.selectedFeatureGroup = CONFIGURED;\n      document.querySelector(\".admin-filter__input\").focus();\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"resetAndFocus\", [_object.action]))();\n    static #_7 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DBreadcrumbsItem\n          @path=\"/admin/plugins/{{this.adminPluginNavManager.currentPlugin.name}}/ai-features\"\n          @label={{i18n \"discourse_ai.features.short_title\"}}\n        />\n        <section class=\"ai-features admin-detail\">\n          <DPageSubheader\n            @titleLabel={{i18n \"discourse_ai.features.short_title\"}}\n            @descriptionLabel={{i18n \"discourse_ai.features.description\"}}\n            @learnMoreUrl=\"todo\"\n          />\n    \n          <div class=\"ai-features__controls\">\n            <DSelect\n              @value={{this.selectedFeatureGroup}}\n              @includeNone={{false}}\n              @onChange={{this.onFeatureGroupChange}}\n              as |select|\n            >\n              {{#each this.featureGroupOptions as |option|}}\n                <select.Option @value={{option.value}}>\n                  {{option.label}}\n                </select.Option>\n              {{/each}}\n            </DSelect>\n    \n            <FilterInput\n              placeholder={{i18n \"discourse_ai.features.filters.text\"}}\n              @filterAction={{this.onFilterChange}}\n              @value={{this.filterValue}}\n              class=\"admin-filter__input\"\n              @icons={{hash left=\"magnifying-glass\"}}\n            />\n          </div>\n    \n          <AiDefaultLlmSelector />\n    \n          {{#if this.filteredFeatures.length}}\n            <AiFeaturesList @modules={{this.filteredFeatures}} />\n          {{else}}\n            <div class=\"ai-features__no-results\">\n              <h3>{{i18n \"discourse_ai.features.filters.no_results\"}}</h3>\n              <DButton\n                @icon=\"arrow-rotate-left\"\n                @label=\"discourse_ai.features.filters.reset\"\n                @action={{this.resetAndFocus}}\n                class=\"btn-default\"\n              />\n            </div>\n          {{/if}}\n        </section>\n      \n    */\n    {\n      \"id\": \"EVQauSDQ\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@path\\\",\\\"@label\\\"],[[29,[\\\"/admin/plugins/\\\",[30,0,[\\\"adminPluginNavManager\\\",\\\"currentPlugin\\\",\\\"name\\\"]],\\\"/ai-features\\\"]],[28,[32,1],[\\\"discourse_ai.features.short_title\\\"],null]]],null],[1,\\\"\\\\n    \\\"],[10,\\\"section\\\"],[14,0,\\\"ai-features admin-detail\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,2],null,[[\\\"@titleLabel\\\",\\\"@descriptionLabel\\\",\\\"@learnMoreUrl\\\"],[[28,[32,1],[\\\"discourse_ai.features.short_title\\\"],null],[28,[32,1],[\\\"discourse_ai.features.description\\\"],null],\\\"todo\\\"]],null],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"ai-features__controls\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[32,3],null,[[\\\"@value\\\",\\\"@includeNone\\\",\\\"@onChange\\\"],[[30,0,[\\\"selectedFeatureGroup\\\"]],false,[30,0,[\\\"onFeatureGroupChange\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"featureGroupOptions\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[8,[30,1,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,2,[\\\"value\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[30,2,[\\\"label\\\"]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"        \\\"]],[1]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[32,4],[[16,\\\"placeholder\\\",[28,[32,1],[\\\"discourse_ai.features.filters.text\\\"],null]],[24,0,\\\"admin-filter__input\\\"]],[[\\\"@filterAction\\\",\\\"@value\\\",\\\"@icons\\\"],[[30,0,[\\\"onFilterChange\\\"]],[30,0,[\\\"filterValue\\\"]],[28,[32,5],null,[[\\\"left\\\"],[\\\"magnifying-glass\\\"]]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[8,[32,6],null,null,null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"filteredFeatures\\\",\\\"length\\\"]],[[[1,\\\"        \\\"],[8,[32,7],null,[[\\\"@modules\\\"],[[30,0,[\\\"filteredFeatures\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"ai-features__no-results\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"h3\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.features.filters.no_results\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,8],[[24,0,\\\"btn-default\\\"]],[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\"],[\\\"arrow-rotate-left\\\",\\\"discourse_ai.features.filters.reset\\\",[30,0,[\\\"resetAndFocus\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"select\\\",\\\"option\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-features.js\",\n      \"scope\": () => [_dBreadcrumbsItem.default, _discourseI18n.i18n, _dPageSubheader.default, _dSelect.default, _filterInput.default, _helper.hash, _aiDefaultLlmSelector.default, _aiFeaturesList.default, _dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiFeatures;\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/helpers/d-icon\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/search\", \"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, _dIcon, _ajax, _ajaxError, _search, _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, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"searching\", [_tracking.tracked]))();\n    #searching = (() => (dt7948.i(this, \"searching\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"AiResults\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #AiResults = (() => (dt7948.i(this, \"AiResults\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"showingAiResults\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showingAiResults = (() => (dt7948.i(this, \"showingAiResults\"), void 0))();\n    static #_6 = (() => 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 #_7 = (() => 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 #_8 = (() => dt7948.n(this.prototype, \"toggleAiResults\", [_object.action]))();\n    resetAiResults() {\n      this.AiResults = [];\n      this.showingAiResults = false;\n      this.args.addSearchResults([], \"topic_id\");\n    }\n    static #_9 = (() => 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      }).catch(_ajaxError.popupAjaxError).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 #_10 = (() => dt7948.n(this.prototype, \"sortChanged\", [_object.action]))();\n    static #_11 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div\n          {{didUpdate this.sortChanged @sortOrder}}\n          class=\"semantic-search__container search-results\"\n          role=\"region\"\n        >\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\": \"XAcP21aU\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[11,0],[24,0,\\\"semantic-search__container search-results\\\"],[24,\\\"role\\\",\\\"region\\\"],[4,[32,0],[[30,0,[\\\"sortChanged\\\"]],[30,1]],null],[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\", \"truth-helpers\", \"discourse/components/d-button\", \"discourse/components/dropdown-menu\", \"discourse/helpers/body-class\", \"discourse/helpers/d-icon\", \"discourse-i18n\", \"float-kit/components/d-menu\", \"discourse/plugins/discourse-ai/discourse/services/gists\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _object, _service, _truthHelpers, _dButton, _dropdownMenu, _bodyClass, _dIcon, _discourseI18n, _dMenu, _gists3, _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: _gists3.TABLE_LAYOUT,\n        label: \"discourse_ai.summarization.topic_list_layout.button.compact\",\n        icon: \"discourse-table\"\n      }, {\n        id: _gists3.TABLE_AI_LAYOUT,\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.currentPreference;\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, this.gists.isPm);\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.showToggle}}\n          {{bodyClass (concat \"topic-list-layout-\" this.gists.currentPreference)}}\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\": \"JTMrWFi1\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"gists\\\",\\\"showToggle\\\"]],[[[1,\\\"      \\\"],[1,[28,[32,0],[[28,[32,1],[\\\"topic-list-layout-\\\",[30,0,[\\\"gists\\\",\\\"currentPreference\\\"]]],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, _truthHelpers.eq, _helper.fn, _discourseI18n.i18n],\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\", \"truth-helpers\", \"discourse/components/d-button\", \"discourse/helpers/with-event-value\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _modifier, _object, _truthHelpers, _dButton, _withEventValue, _discourseI18n, _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\": () => [_discourseI18n.i18n, _modifier.on, _withEventValue.default, _helper.fn, _dButton.default, _truthHelpers.not],\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-i18n\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _dButton, _discourseI18n, _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\": () => [_discourseI18n.i18n, _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\", \"discourse/plugins/discourse-ai/discourse/components/ai-helper-custom-prompt\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _service, _truthHelpers, _dButton, _keyboardShortcuts, _utilities, _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.name}}>\n                <DButton\n                  @icon={{option.icon}}\n                  @translatedLabel={{option.translated_name}}\n                  @action={{fn @performAction option}}\n                  data-name={{option.name}}\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\": \"s635M6zL\",\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,[\\\"name\\\"]]],[12],[1,\\\"\\\\n            \\\"],[8,[32,2],[[16,\\\"data-name\\\",[30,2,[\\\"name\\\"]]],[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\": () => [_truthHelpers.eq, _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/helpers/d-icon\", \"discourse/lib/ajax-error\", \"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, _dIcon, _ajaxError, _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        return {\n          max_prompt_tokens: modelInfo.tokens,\n          max_output_tokens: modelInfo.max_output_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: this.computeProviderParams(info.provider),\n          input_cost: modelInfo.input_cost,\n          output_cost: modelInfo.output_cost,\n          cached_input_cost: modelInfo.cached_input_cost\n        };\n      }\n      const {\n        model\n      } = this.args;\n      return {\n        max_prompt_tokens: model.max_prompt_tokens,\n        max_output_tokens: model.max_output_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        input_cost: model.input_cost,\n        output_cost: model.output_cost,\n        cached_input_cost: model.cached_input_cost,\n        provider_params: this.computeProviderParams(model.provider, 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 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 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    computeProviderParams(provider) {\n      let currentParams = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const params = this.args.llms.resultSetMeta.provider_params[provider] ?? {};\n      return Object.fromEntries(Object.entries(params).map(_ref => {\n        let [k, v] = _ref;\n        return [k, currentParams[k] ?? (v?.type === \"enum\" ? v.default : null)];\n      }));\n    }\n    canEditURL(provider) {\n      return provider !== \"aws_bedrock\";\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"canEditURL\", [_object.action]))();\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      const updatedData = {\n        ...data\n      };\n      // If max_prompt_tokens input is cleared,\n      // we want the db to store null\n      if (!data.max_output_tokens) {\n        updatedData.max_output_tokens = null;\n      }\n      try {\n        await this.args.model.save(updatedData);\n        if (isNew) {\n          this.args.llms.addObject(this.args.model);\n          await this.router.replaceWith(\"adminPlugins.show.discourse-ai-llms.edit\", this.args.model.id);\n        }\n        this.toasts.success({\n          data: {\n            message: (0, _discourseI18n.i18n)(\"discourse_ai.llms.saved\")\n          },\n          duration: \"short\"\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    setProvider(provider, _ref3) {\n      let {\n        set\n      } = _ref3;\n      set(\"provider_params\", this.computeProviderParams(provider));\n      set(\"provider\", provider);\n    }\n    static #_15 = (() => dt7948.n(this.prototype, \"setProvider\", [_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 #_16 = (() => dt7948.n(this.prototype, \"delete\", [_object.action]))();\n    providerParamsKeys(providerParams) {\n      return providerParams ? Object.keys(providerParams) : [];\n    }\n    static #_17 = (() => dt7948.n(this.prototype, \"providerParamsKeys\", [_object.action]))();\n    static #_18 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <Form\n          @onSubmit={{this.save}}\n          @data={{this.formData}}\n          class=\"ai-llm-editor\"\n          as |form data|\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            @format=\"large\"\n            @tooltip={{i18n \"discourse_ai.llms.hints.display_name\"}}\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            @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            @format=\"large\"\n            @validation=\"required\"\n            @onSet={{this.setProvider}}\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          {{#if (this.canEditURL data.provider)}}\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 autocomplete=\"off\" data-1p-ignore />\n          </form.Field>\n    \n          <form.Object @name=\"provider_params\" as |object providerParamsData|>\n            {{#each (this.providerParamsKeys providerParamsData) as |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            {{/each}}\n          </form.Object>\n    \n          <form.Field\n            @name=\"tokenizer\"\n            @title={{i18n \"discourse_ai.llms.tokenizer\"}}\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.InputGroup as |inputGroup|>\n            <inputGroup.Field\n              @name=\"input_cost\"\n              @title={{i18n \"discourse_ai.llms.cost_input\"}}\n              @tooltip={{i18n \"discourse_ai.llms.hints.cost_input\"}}\n              @helpText={{i18n \"discourse_ai.llms.hints.cost_measure\"}}\n              as |field|\n            >\n              <field.Input @type=\"number\" step=\"any\" min=\"0\" lang=\"en\" />\n            </inputGroup.Field>\n    \n            <inputGroup.Field\n              @name=\"cached_input_cost\"\n              @title={{i18n \"discourse_ai.llms.cost_cached_input\"}}\n              @tooltip={{i18n \"discourse_ai.llms.hints.cost_cached_input\"}}\n              @helpText={{i18n \"discourse_ai.llms.hints.cost_measure\"}}\n              as |field|\n            >\n              <field.Input @type=\"number\" step=\"any\" min=\"0\" lang=\"en\" />\n            </inputGroup.Field>\n    \n            <inputGroup.Field\n              @name=\"output_cost\"\n              @title={{i18n \"discourse_ai.llms.cost_output\"}}\n              @tooltip={{i18n \"discourse_ai.llms.hints.cost_output\"}}\n              @helpText={{i18n \"discourse_ai.llms.hints.cost_measure\"}}\n              as |field|\n            >\n              <field.Input @type=\"number\" step=\"any\" min=\"0\" lang=\"en\" />\n            </inputGroup.Field>\n          </form.InputGroup>\n    \n          <form.Field\n            @name=\"max_output_tokens\"\n            @title={{i18n \"discourse_ai.llms.max_output_tokens\"}}\n            @tooltip={{i18n \"discourse_ai.llms.hints.max_output_tokens\"}}\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    \n          {{#if this.displayTestResult}}\n            <form.Container @format=\"full\">\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            </form.Container>\n          {{/if}}\n        </Form>\n      \n    */\n    {\n      \"id\": \"q+K6kmsR\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"ai-llm-editor\\\"]],[[\\\"@onSubmit\\\",\\\"@data\\\"],[[30,0,[\\\"save\\\"]],[30,0,[\\\"formData\\\"]]]],[[\\\"default\\\"],[[[[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\\\",\\\"@format\\\",\\\"@tooltip\\\"],[\\\"display_name\\\",[28,[32,1],[\\\"discourse_ai.llms.display_name\\\"],null],\\\"required|length:1,100\\\",\\\"large\\\",[28,[32,1],[\\\"discourse_ai.llms.hints.display_name\\\"],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\\\",\\\"@format\\\"],[\\\"name\\\",[28,[32,1],[\\\"discourse_ai.llms.name\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.hints.name\\\"],null],\\\"required\\\",\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,4,[\\\"Input\\\"]],null,null,null],[1,\\\"\\\\n      \\\"]],[4]]]]],[1,\\\"\\\\n\\\\n      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@format\\\",\\\"@validation\\\",\\\"@onSet\\\"],[\\\"provider\\\",[28,[32,1],[\\\"discourse_ai.llms.provider\\\"],null],\\\"large\\\",\\\"required\\\",[30,0,[\\\"setProvider\\\"]]]],[[\\\"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,[28,[30,0,[\\\"canEditURL\\\"]],[[30,2,[\\\"provider\\\"]]],null],[[[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\\\"]],[[24,\\\"autocomplete\\\",\\\"off\\\"],[24,\\\"data-1p-ignore\\\",\\\"\\\"]],null,null],[1,\\\"\\\\n      \\\"]],[9]]]]],[1,\\\"\\\\n\\\\n      \\\"],[8,[30,1,[\\\"Object\\\"]],null,[[\\\"@name\\\"],[\\\"provider_params\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[28,[30,0,[\\\"providerParamsKeys\\\"]],[[30,11]],null]],null]],null],null,[[[44,[[28,[32,2],[[28,[30,0,[\\\"metaProviderParams\\\"]],[[30,2,[\\\"provider\\\"]]],null],[30,12]],null]],[[[1,\\\"            \\\"],[8,[30,10,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@format\\\"],[[30,12],[28,[32,1],[[28,[32,3],[\\\"discourse_ai.llms.provider_fields.\\\",[30,12]],null]],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[28,[32,4],[[30,13,[\\\"type\\\"]],\\\"enum\\\"],null],[[[1,\\\"                \\\"],[8,[30,14,[\\\"Select\\\"]],null,[[\\\"@includeNone\\\"],[false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,13,[\\\"values\\\"]]],null]],null],null,[[[1,\\\"                    \\\"],[8,[30,15,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,16,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,16,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[16]],null],[1,\\\"                \\\"]],[15]]]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[32,4],[[30,13,[\\\"type\\\"]],\\\"checkbox\\\"],null],[[[1,\\\"                \\\"],[8,[30,14,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[8,[30,14,[\\\"Input\\\"]],null,[[\\\"@type\\\"],[[30,13,[\\\"type\\\"]]]],null],[1,\\\"\\\\n              \\\"]],[]]]],[]]],[1,\\\"            \\\"]],[14]]]]],[1,\\\"\\\\n\\\"]],[13]]]],[12]],null],[1,\\\"      \\\"]],[10,11]]]]],[1,\\\"\\\\n\\\\n      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@format\\\",\\\"@validation\\\"],[\\\"tokenizer\\\",[28,[32,1],[\\\"discourse_ai.llms.tokenizer\\\"],null],\\\"large\\\",\\\"required\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,17,[\\\"Select\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"tokenizers\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[8,[30,18,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,19,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,19,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[19]],null],[1,\\\"        \\\"]],[18]]]]],[1,\\\"\\\\n      \\\"]],[17]]]]],[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,20,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"min\\\",\\\"0\\\"],[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n      \\\"]],[20]]]]],[1,\\\"\\\\n\\\\n      \\\"],[8,[30,1,[\\\"InputGroup\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,21,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@helpText\\\"],[\\\"input_cost\\\",[28,[32,1],[\\\"discourse_ai.llms.cost_input\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.hints.cost_input\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.hints.cost_measure\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,22,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"min\\\",\\\"0\\\"],[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n        \\\"]],[22]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,21,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@helpText\\\"],[\\\"cached_input_cost\\\",[28,[32,1],[\\\"discourse_ai.llms.cost_cached_input\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.hints.cost_cached_input\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.hints.cost_measure\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,23,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"min\\\",\\\"0\\\"],[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n        \\\"]],[23]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,21,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@helpText\\\"],[\\\"output_cost\\\",[28,[32,1],[\\\"discourse_ai.llms.cost_output\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.hints.cost_output\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.hints.cost_measure\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,24,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"min\\\",\\\"0\\\"],[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n        \\\"]],[24]]]]],[1,\\\"\\\\n      \\\"]],[21]]]]],[1,\\\"\\\\n\\\\n      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"max_output_tokens\\\",[28,[32,1],[\\\"discourse_ai.llms.max_output_tokens\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.hints.max_output_tokens\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,25,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"min\\\",\\\"0\\\"],[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n      \\\"]],[25]]]]],[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,26,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n      \\\"]],[26]]]]],[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,27,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n      \\\"]],[27]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,28,[\\\"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,28,[\\\"user\\\",\\\"path\\\"]]],[15,\\\"data-user-card\\\",[30,28,[\\\"user\\\",\\\"username\\\"]]],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,5],[[30,28,[\\\"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,28,[\\\"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,31,[\\\"group_name\\\"]]],[13],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-llm-quotas__cell\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[30,29,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@showTitle\\\"],[\\\"max_tokens\\\",\\\"max_tokens\\\",false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[8,[30,32,[\\\"Input\\\"]],[[24,0,\\\"ai-llm-quotas__input\\\"],[24,\\\"min\\\",\\\"1\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n                  \\\"]],[32]]]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-llm-quotas__cell\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[30,29,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@showTitle\\\"],[\\\"max_usages\\\",\\\"max_usages\\\",false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[8,[30,33,[\\\"Input\\\"]],[[24,0,\\\"ai-llm-quotas__input\\\"],[24,\\\"min\\\",\\\"1\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n                  \\\"]],[33]]]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-llm-quotas__cell\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[30,29,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@showTitle\\\"],[\\\"duration_seconds\\\",\\\"duration_seconds\\\",false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[8,[30,34,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                      \\\"],[8,[32,8],null,[[\\\"@value\\\",\\\"@onChange\\\"],[[30,31,[\\\"duration_seconds\\\"]],[30,34,[\\\"set\\\"]]]],null],[1,\\\"\\\\n                    \\\"]],[]]]]],[1,\\\"\\\\n                  \\\"]],[34]]]]],[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,29,[\\\"remove\\\"]],[30,30]],null]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"]],[29,30,31]]]]],[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,28,[\\\"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\\\\n\\\"],[41,[30,0,[\\\"displayTestResult\\\"]],[[[1,\\\"        \\\"],[8,[30,1,[\\\"Container\\\"]],null,[[\\\"@format\\\"],[\\\"full\\\"]],[[\\\"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\\\"]],[]],null],[1,\\\"    \\\"]],[1,2]]]]],[1,\\\"\\\\n  \\\"]],[\\\"form\\\",\\\"data\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"select\\\",\\\"provider\\\",\\\"field\\\",\\\"field\\\",\\\"object\\\",\\\"providerParamsData\\\",\\\"name\\\",\\\"params\\\",\\\"field\\\",\\\"select\\\",\\\"option\\\",\\\"field\\\",\\\"select\\\",\\\"tokenizer\\\",\\\"field\\\",\\\"inputGroup\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"@model\\\",\\\"collection\\\",\\\"index\\\",\\\"collectionData\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\",\\\"let\\\",\\\"unless\\\"]]\",\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/helper\", \"select-kit/components/combo-box\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _helper, _comboBox, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const AiLlmSelector = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n    <ComboBox\n      @value={{@value}}\n      @content={{@llms}}\n      @onChange={{@onChange}}\n      @options={{hash\n        filterable=true\n        none=\"discourse_ai.ai_persona.no_llm_selected\"\n      }}\n      class={{@class}}\n    />\n  \n  */\n  {\n    \"id\": \"nJvrK5ml\",\n    \"block\": \"[[[1,\\\"\\\\n  \\\"],[8,[32,0],[[16,0,[30,1]]],[[\\\"@value\\\",\\\"@content\\\",\\\"@onChange\\\",\\\"@options\\\"],[[30,2],[30,3],[30,4],[28,[32,1],null,[[\\\"filterable\\\",\\\"none\\\"],[true,\\\"discourse_ai.ai_persona.no_llm_selected\\\"]]]]],null],[1,\\\"\\\\n\\\"]],[\\\"@class\\\",\\\"@value\\\",\\\"@llms\\\",\\\"@onChange\\\"],false,[]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-llm-selector.js\",\n    \"scope\": () => [_comboBox.default, _helper.hash],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"ai-llm-selector:AiLlmSelector\"));\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-default-llm-selector\", \"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, _aiDefaultLlmSelector, _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      return (0, _discourseI18n.i18n)(`discourse_ai.llms.usage.${usage.type}`, {\n        persona: usage.name\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    \n            <AiDefaultLlmSelector />\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\": \"xuJzafVf\",\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\\\\n        \\\"],[8,[32,4],null,null,null],[1,\\\"\\\\n\\\\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,5],[\\\"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,6],[[30,4]],null],[[[1,\\\"                        \\\"],[8,[32,7],[[24,0,\\\"ai-llm-list__edit-disabled-tooltip\\\"]],null,[[\\\"trigger\\\",\\\"content\\\"],[[[[1,\\\"\\\\n                            \\\"],[8,[32,8],[[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,8],[[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,9],[[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,10],[[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,5],[\\\"discourse_ai.llms.providers.\\\",[30,6,[\\\"provider\\\"]]],null]]],[[\\\"buttons\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[30,7,[\\\"Default\\\"]],null,[[\\\"@action\\\",\\\"@icon\\\",\\\"@label\\\"],[[28,[32,11],[[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, _aiDefaultLlmSelector.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/helper\", \"@ember/object\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/routing\", \"@ember/runloop\", \"@ember/service\", \"truth-helpers\", \"discourse/components/back-button\", \"discourse/components/form\", \"discourse/helpers/bound-avatar-template\", \"discourse/lib/ajax-error\", \"discourse/lib/get-url\", \"discourse/models/group\", \"discourse-i18n\", \"admin/models/admin-user\", \"select-kit/components/group-chooser\", \"discourse/plugins/discourse-ai/discourse/components/modal/ai-persona-response-format-editor\", \"discourse/plugins/discourse-ai/discourse/components/ai-llm-selector\", \"discourse/plugins/discourse-ai/discourse/components/ai-persona-example\", \"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-fk\", \"discourse/plugins/discourse-ai/discourse/components/rag-uploader\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _didInsert, _routing, _runloop, _service, _truthHelpers, _backButton, _form, _boundAvatarTemplate, _ajaxError, _getUrl, _group, _discourseI18n, _adminUser, _groupChooser, _aiPersonaResponseFormatEditor, _aiLlmSelector, _aiPersonaExample, _aiPersonaToolOptions, _aiToolSelector, _ragOptionsFk, _ragUploader, _component2, _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, \"dialog\", [_service.service]))();\n    #dialog = (() => (dt7948.i(this, \"dialog\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"toasts\", [_service.service]))();\n    #toasts = (() => (dt7948.i(this, \"toasts\"), 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, \"allGroups\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #allGroups = (() => (dt7948.i(this, \"allGroups\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"isSaving\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isSaving = (() => (dt7948.i(this, \"isSaving\"), void 0))();\n    dirtyFormData = null;\n    get formData() {\n      // This is to recover a dirty state after persisting a single form field.\n      // It's meant to be consumed only once.\n      if (this.dirtyFormData) {\n        const data = this.dirtyFormData;\n        this.dirtyFormData = null;\n        return data;\n      } else {\n        const data = this.args.model.toPOJO();\n        if (data.tools) {\n          data.toolOptions = this.mapToolOptions(data.toolOptions, data.tools);\n        }\n        return data;\n      }\n    }\n    static #_7 = (() => dt7948.n(this.prototype, \"formData\", [_tracking.cached]))();\n    get chatPluginEnabled() {\n      return this.siteSettings.chat_enabled;\n    }\n    get allTools() {\n      return this.args.personas.resultSetMeta.tools;\n    }\n    get maxPixelValues() {\n      const l = key => (0, _discourseI18n.i18n)(`discourse_ai.ai_persona.vision_max_pixel_sizes.${key}`);\n      return [{\n        name: l(\"low\"),\n        id: 65536\n      }, {\n        name: l(\"medium\"),\n        id: 262144\n      }, {\n        name: l(\"high\"),\n        id: 1048576\n      }];\n    }\n    get forcedToolStrategies() {\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    async updateAllGroups() {\n      const groups = await _group.default.findAll({\n        include_everyone: true\n      });\n      // Backwards-compatibility code. TODO(roman): Remove 01-09-2025\n      const hasEveryoneGroup = groups.find(g => g.id === 0);\n      if (!hasEveryoneGroup) {\n        const everyoneGroupName = \"everyone\";\n        groups.push({\n          id: 0,\n          name: everyoneGroupName\n        });\n      }\n      this.allGroups = groups;\n    }\n    static #_8 = (() => dt7948.n(this.prototype, \"updateAllGroups\", [_object.action]))();\n    async save(data) {\n      const isNew = this.args.model.isNew;\n      this.isSaving = true;\n      try {\n        const personaToSave = Object.assign(this.args.model, this.args.model.fromPOJO(data));\n        await personaToSave.save();\n        this.#sortPersonas();\n        if (isNew && this.args.model.rag_uploads.length === 0) {\n          this.args.personas.addObject(personaToSave);\n          await this.router.replaceWith(\"adminPlugins.show.discourse-ai-personas.edit\", personaToSave);\n        }\n        this.toasts.success({\n          data: {\n            message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_persona.saved\")\n          },\n          duration: \"short\"\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 #_9 = (() => dt7948.n(this.prototype, \"save\", [_object.action]))();\n    get adminUser() {\n      // Work around user not being extensible.\n      const userClone = Object.assign({}, this.args.model?.user);\n      return _adminUser.default.create(userClone);\n    }\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 #_10 = (() => dt7948.n(this.prototype, \"delete\", [_object.action]))();\n    async toggleEnabled(dirtyData, value, _ref) {\n      let {\n        set\n      } = _ref;\n      set(\"enabled\", value);\n      await this.persistField(dirtyData, \"enabled\", value);\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"toggleEnabled\", [_object.action]))();\n    async togglePriority(dirtyData, value, _ref2) {\n      let {\n        set\n      } = _ref2;\n      set(\"priority\", value);\n      await this.persistField(dirtyData, \"priority\", value, true);\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"togglePriority\", [_object.action]))();\n    async createUser(form) {\n      try {\n        let user = await this.args.model.createUser();\n        form.set(\"user\", user);\n        form.set(\"user_id\", user.id);\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      }\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"createUser\", [_object.action]))();\n    updateUploads(form, newUploads) {\n      form.set(\"rag_uploads\", newUploads);\n    }\n    static #_14 = (() => dt7948.n(this.prototype, \"updateUploads\", [_object.action]))();\n    async removeUpload(form, dirtyData, currentUploads, upload) {\n      const updatedUploads = currentUploads.filter(file => file.id !== upload.id);\n      form.set(\"rag_uploads\", updatedUploads);\n      if (!this.args.model.isNew) {\n        await this.persistField(dirtyData, \"rag_uploads\", updatedUploads);\n      }\n    }\n    static #_15 = (() => dt7948.n(this.prototype, \"removeUpload\", [_object.action]))();\n    updateToolNames(form, currentData, updatedTools) {\n      const removedTools = currentData?.tools?.filter(ct => !updatedTools.includes(ct)) || [];\n      const updatedOptions = this.mapToolOptions(currentData.toolOptions, updatedTools);\n      form.setProperties({\n        tools: updatedTools,\n        toolOptions: updatedOptions\n      });\n      if (currentData.forcedTools?.length > 0) {\n        const updatedForcedTools = currentData.forcedTools.filter(fct => !removedTools.includes(fct));\n        form.set(\"forcedTools\", updatedForcedTools);\n      }\n    }\n    static #_16 = (() => dt7948.n(this.prototype, \"updateToolNames\", [_object.action]))();\n    availableForcedTools(tools) {\n      return this.allTools.filter(tool => tools.includes(tool.id));\n    }\n    static #_17 = (() => dt7948.n(this.prototype, \"availableForcedTools\", [_object.action]))();\n    addExamplesPair(form, data) {\n      const newExamples = [...data.examples, [\"\", \"\"]];\n      form.set(\"examples\", newExamples);\n    }\n    static #_18 = (() => dt7948.n(this.prototype, \"addExamplesPair\", [_object.action]))();\n    mapToolOptions(currentOptions, toolNames) {\n      const updatedOptions = Object.assign({}, currentOptions);\n      toolNames.forEach(toolId => {\n        const tool = this.allTools.findBy(\"id\", toolId);\n        const toolOptions = tool?.options;\n        if (!toolOptions || updatedOptions[toolId]) {\n          return;\n        }\n        const mappedOptions = {};\n        Object.keys(toolOptions).forEach(key => {\n          mappedOptions[key] = null;\n        });\n        updatedOptions[toolId] = mappedOptions;\n      });\n      return updatedOptions;\n    }\n    async persistField(dirtyData, field, newValue, sortPersonas) {\n      if (!this.args.model.isNew) {\n        const updatedDirtyData = Object.assign({}, dirtyData);\n        updatedDirtyData[field] = newValue;\n        try {\n          const args = {};\n          args[field] = newValue;\n          this.dirtyFormData = updatedDirtyData;\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    exportPersona() {\n      const exportUrl = `/admin/plugins/discourse-ai/ai-personas/${this.args.model.id}/export.json`;\n      window.location.href = (0, _getUrl.default)(exportUrl);\n    }\n    static #_19 = (() => dt7948.n(this.prototype, \"exportPersona\", [_object.action]))();\n    static #_20 = (() => (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        <div class=\"ai-persona-editor\" {{didInsert this.updateAllGroups @model.id}}>\n          <Form @onSubmit={{this.save}} @data={{this.formData}} as |form data|>\n            <form.Field\n              @name=\"name\"\n              @title={{i18n \"discourse_ai.ai_persona.name\"}}\n              @validation=\"required|length:1,100\"\n              @disabled={{data.system}}\n              @format=\"large\"\n              as |field|\n            >\n              <field.Input />\n            </form.Field>\n    \n            <form.Field\n              @name=\"description\"\n              @title={{i18n \"discourse_ai.ai_persona.description\"}}\n              @validation=\"required|length:1,100\"\n              @disabled={{data.system}}\n              @format=\"large\"\n              as |field|\n            >\n              <field.Textarea />\n            </form.Field>\n    \n            <form.Field\n              @name=\"system_prompt\"\n              @title={{i18n \"discourse_ai.ai_persona.system_prompt\"}}\n              @validation=\"required|length:1,100000\"\n              @disabled={{data.system}}\n              @format=\"large\"\n              as |field|\n            >\n              <field.Textarea />\n            </form.Field>\n    \n            <AiPersonaResponseFormatEditor @form={{form}} @data={{data}} />\n    \n            <form.Field\n              @name=\"default_llm_id\"\n              @title={{i18n \"discourse_ai.ai_persona.default_llm\"}}\n              @tooltip={{i18n \"discourse_ai.ai_persona.default_llm_help\"}}\n              @format=\"large\"\n              as |field|\n            >\n              <field.Custom>\n                <AiLlmSelector\n                  @value={{field.value}}\n                  @llms={{@personas.resultSetMeta.llms}}\n                  @onChange={{field.set}}\n                  @class=\"ai-persona-editor__llms\"\n                />\n              </field.Custom>\n            </form.Field>\n    \n            <form.Field\n              @name=\"allowed_group_ids\"\n              @title={{i18n \"discourse_ai.ai_persona.allowed_groups\"}}\n              @format=\"large\"\n              as |field|\n            >\n              <field.Custom>\n                <GroupChooser\n                  @value={{data.allowed_group_ids}}\n                  @content={{this.allGroups}}\n                  @onChange={{field.set}}\n                />\n              </field.Custom>\n            </form.Field>\n    \n            <form.Field\n              @name=\"vision_enabled\"\n              @title={{i18n \"discourse_ai.ai_persona.vision_enabled\"}}\n              @tooltip={{i18n \"discourse_ai.ai_persona.vision_enabled_help\"}}\n              @format=\"large\"\n              as |field|\n            >\n              <field.Checkbox />\n            </form.Field>\n    \n            {{#if data.vision_enabled}}\n              <form.Field\n                @name=\"vision_max_pixels\"\n                @title={{i18n \"discourse_ai.ai_persona.vision_max_pixels\"}}\n                @onSet={{this.onChangeMaxPixels}}\n                @format=\"large\"\n                as |field|\n              >\n                <field.Select @includeNone={{false}} as |select|>\n                  {{#each this.maxPixelValues as |pixelValue|}}\n                    <select.Option\n                      @value={{pixelValue.id}}\n                    >{{pixelValue.name}}</select.Option>\n                  {{/each}}\n                </field.Select>\n              </form.Field>\n            {{/if}}\n    \n            <form.Field\n              @name=\"max_context_posts\"\n              @title={{i18n \"discourse_ai.ai_persona.max_context_posts\"}}\n              @tooltip={{i18n \"discourse_ai.ai_persona.max_context_posts_help\"}}\n              @format=\"large\"\n              as |field|\n            >\n              <field.Input @type=\"number\" lang=\"en\" />\n            </form.Field>\n    \n            {{#unless data.system}}\n              <form.Field\n                @name=\"temperature\"\n                @title={{i18n \"discourse_ai.ai_persona.temperature\"}}\n                @tooltip={{i18n \"discourse_ai.ai_persona.temperature_help\"}}\n                @disabled={{data.system}}\n                @format=\"large\"\n                as |field|\n              >\n                <field.Input @type=\"number\" step=\"any\" lang=\"en\" />\n              </form.Field>\n    \n              <form.Field\n                @name=\"top_p\"\n                @title={{i18n \"discourse_ai.ai_persona.top_p\"}}\n                @tooltip={{i18n \"discourse_ai.ai_persona.top_p_help\"}}\n                @disabled={{data.system}}\n                @format=\"large\"\n                as |field|\n              >\n                <field.Input @type=\"number\" step=\"any\" lang=\"en\" />\n              </form.Field>\n            {{/unless}}\n    \n            <form.Section\n              @title={{i18n \"discourse_ai.ai_persona.examples.title\"}}\n              @subtitle={{i18n \"discourse_ai.ai_persona.examples.examples_help\"}}\n            >\n              {{#unless data.system}}\n                <form.Container>\n                  <form.Button\n                    @action={{fn this.addExamplesPair form data}}\n                    @label=\"discourse_ai.ai_persona.examples.new\"\n                    class=\"ai-persona-editor__new_example\"\n                  />\n                </form.Container>\n              {{/unless}}\n    \n              {{#if (gt data.examples.length 0)}}\n                <form.Collection @name=\"examples\" as |exCollection exCollectionIdx|>\n                  <AiPersonaCollapsableExample\n                    @examplesCollection={{exCollection}}\n                    @exampleNumber={{exCollectionIdx}}\n                    @system={{data.system}}\n                    @form={{form}}\n                  />\n                </form.Collection>\n              {{/if}}\n            </form.Section>\n    \n            <form.Section @title={{i18n \"discourse_ai.ai_persona.ai_tools\"}}>\n              <form.Field\n                @name=\"tools\"\n                @title={{i18n \"discourse_ai.ai_persona.tools\"}}\n                @format=\"large\"\n                as |field|\n              >\n                <field.Custom>\n                  <AiToolSelector\n                    @value={{field.value}}\n                    @disabled={{data.system}}\n                    @onChange={{fn this.updateToolNames form data}}\n                    @content={{@personas.resultSetMeta.tools}}\n                  />\n                </field.Custom>\n              </form.Field>\n    \n              {{#if (gt data.tools.length 0)}}\n                <form.Field\n                  @name=\"forcedTools\"\n                  @title={{i18n \"discourse_ai.ai_persona.forced_tools\"}}\n                  @format=\"large\"\n                  as |field|\n                >\n                  <field.Custom>\n                    <AiToolSelector\n                      @value={{field.value}}\n                      @disabled={{data.system}}\n                      @onChange={{field.set}}\n                      @content={{this.availableForcedTools data.tools}}\n                    />\n                  </field.Custom>\n                </form.Field>\n              {{/if}}\n    \n              {{#if (gt data.forcedTools.length 0)}}\n                <form.Field\n                  @name=\"forced_tool_count\"\n                  @title={{i18n \"discourse_ai.ai_persona.forced_tool_strategy\"}}\n                  @format=\"large\"\n                  as |field|\n                >\n                  <field.Select @includeNone={{false}} as |select|>\n                    {{#each this.forcedToolStrategies as |fts|}}\n                      <select.Option @value={{fts.id}}>{{fts.name}}</select.Option>\n                    {{/each}}\n                  </field.Select>\n                </form.Field>\n              {{/if}}\n    \n              {{#if (gt data.tools.length 0)}}\n                <form.Field\n                  @name=\"tool_details\"\n                  @title={{i18n \"discourse_ai.ai_persona.tool_details\"}}\n                  @tooltip={{i18n \"discourse_ai.ai_persona.tool_details_help\"}}\n                  @format=\"large\"\n                  as |field|\n                >\n                  <field.Checkbox />\n                </form.Field>\n    \n                <AiPersonaToolOptions\n                  @form={{form}}\n                  @data={{data}}\n                  @llms={{@personas.resultSetMeta.llms}}\n                  @allTools={{@personas.resultSetMeta.tools}}\n                />\n              {{/if}}\n            </form.Section>\n    \n            {{#if this.siteSettings.ai_embeddings_enabled}}\n              <form.Section @title={{i18n \"discourse_ai.rag.title\"}}>\n                <form.Field\n                  @name=\"rag_uploads\"\n                  @title={{i18n \"discourse_ai.rag.uploads.title\"}}\n                  @format=\"full\"\n                  as |field|\n                >\n                  <field.Custom>\n                    <RagUploader\n                      @target={{data}}\n                      @targetName=\"AiPersona\"\n                      @updateUploads={{fn this.updateUploads form}}\n                      @onRemove={{fn this.removeUpload form data field.value}}\n                      @allowImages={{@personas.resultSetMeta.settings.rag_images_enabled}}\n                    />\n                  </field.Custom>\n                </form.Field>\n    \n                <RagOptionsFk\n                  @form={{form}}\n                  @data={{data}}\n                  @llms={{@personas.resultSetMeta.llms}}\n                  @allowImages={{@personas.resultSetMeta.settings.rag_images_enabled}}\n                >\n                  <form.Field\n                    @name=\"rag_conversation_chunks\"\n                    @title={{i18n\n                      \"discourse_ai.ai_persona.rag_conversation_chunks\"\n                    }}\n                    @tooltip={{i18n\n                      \"discourse_ai.ai_persona.rag_conversation_chunks_help\"\n                    }}\n                    @format=\"large\"\n                    as |field|\n                  >\n                    <field.Input @type=\"number\" step=\"any\" lang=\"en\" />\n                  </form.Field>\n    \n                  <form.Field\n                    @name=\"question_consolidator_llm_id\"\n                    @title={{i18n\n                      \"discourse_ai.ai_persona.question_consolidator_llm\"\n                    }}\n                    @tooltip={{i18n\n                      \"discourse_ai.ai_persona.question_consolidator_llm_help\"\n                    }}\n                    @format=\"large\"\n                    as |field|\n                  >\n                    <field.Custom>\n                      <AiLlmSelector\n                        @value={{field.value}}\n                        @llms={{@personas.resultSetMeta.llms}}\n                        @onChange={{field.set}}\n                        @class=\"ai-persona-editor__llms\"\n                      />\n                    </field.Custom>\n                  </form.Field>\n                </RagOptionsFk>\n              </form.Section>\n            {{/if}}\n    \n            <form.Section @title={{i18n \"discourse_ai.ai_persona.ai_bot.title\"}}>\n              <form.Field\n                @name=\"enabled\"\n                @title={{i18n \"discourse_ai.ai_persona.enabled\"}}\n                @onSet={{fn this.toggleEnabled data}}\n                as |field|\n              >\n                <field.Toggle />\n              </form.Field>\n    \n              <form.Field\n                @name=\"priority\"\n                @title={{i18n \"discourse_ai.ai_persona.priority\"}}\n                @onSet={{fn this.togglePriority data}}\n                @tooltip={{i18n \"discourse_ai.ai_persona.priority_help\"}}\n                as |field|\n              >\n                <field.Toggle />\n              </form.Field>\n    \n              {{#if @model.isNew}}\n                <div>{{i18n \"discourse_ai.ai_persona.ai_bot.save_first\"}}</div>\n              {{else}}\n                {{#if data.default_llm_id}}\n                  <form.Field\n                    @name=\"force_default_llm\"\n                    @title={{i18n \"discourse_ai.ai_persona.force_default_llm\"}}\n                    @format=\"large\"\n                    as |field|\n                  >\n                    <field.Checkbox />\n                  </form.Field>\n                {{/if}}\n    \n                <form.Container\n                  @title={{i18n \"discourse_ai.ai_persona.user\"}}\n                  @tooltip={{unless\n                    data.user\n                    (i18n \"discourse_ai.ai_persona.create_user_help\")\n                  }}\n                  class=\"ai-persona-editor__ai_bot_user\"\n                >\n                  {{#if data.user}}\n                    <a\n                      class=\"avatar\"\n                      href={{data.user.path}}\n                      data-user-card={{data.user.username}}\n                    >\n                      {{Avatar data.user.avatar_template \"small\"}}\n                    </a>\n                    <LinkTo @route=\"adminUser\" @model={{this.adminUser}}>\n                      {{data.user.username}}\n                    </LinkTo>\n                  {{else}}\n                    <form.Button\n                      @action={{fn this.createUser form}}\n                      @label=\"discourse_ai.ai_persona.create_user\"\n                      class=\"ai-persona-editor__create-user\"\n                    />\n                  {{/if}}\n                </form.Container>\n    \n                {{#if data.user}}\n                  <form.Field\n                    @name=\"allow_personal_messages\"\n                    @title={{i18n\n                      \"discourse_ai.ai_persona.allow_personal_messages\"\n                    }}\n                    @tooltip={{i18n\n                      \"discourse_ai.ai_persona.allow_personal_messages_help\"\n                    }}\n                    @format=\"large\"\n                    as |field|\n                  >\n                    <field.Checkbox />\n                  </form.Field>\n    \n                  <form.Field\n                    @name=\"allow_topic_mentions\"\n                    @title={{i18n \"discourse_ai.ai_persona.allow_topic_mentions\"}}\n                    @tooltip={{i18n\n                      \"discourse_ai.ai_persona.allow_topic_mentions_help\"\n                    }}\n                    @format=\"large\"\n                    as |field|\n                  >\n                    <field.Checkbox />\n                  </form.Field>\n    \n                  {{#if this.chatPluginEnabled}}\n                    <form.Field\n                      @name=\"allow_chat_direct_messages\"\n                      @title={{i18n\n                        \"discourse_ai.ai_persona.allow_chat_direct_messages\"\n                      }}\n                      @tooltip={{i18n\n                        \"discourse_ai.ai_persona.allow_chat_direct_messages_help\"\n                      }}\n                      @format=\"large\"\n                      as |field|\n                    >\n                      <field.Checkbox />\n                    </form.Field>\n    \n                    <form.Field\n                      @name=\"allow_chat_channel_mentions\"\n                      @title={{i18n\n                        \"discourse_ai.ai_persona.allow_chat_channel_mentions\"\n                      }}\n                      @tooltip={{i18n\n                        \"discourse_ai.ai_persona.allow_chat_channel_mentions_help\"\n                      }}\n                      @format=\"large\"\n                      as |field|\n                    >\n                      <field.Checkbox />\n                    </form.Field>\n                  {{/if}}\n                {{/if}}\n              {{/if}}\n            </form.Section>\n    \n            <form.Actions>\n              <form.Submit />\n    \n              {{#unless (or @model.isNew @model.system)}}\n                <form.Button\n                  @label=\"discourse_ai.ai_persona.export\"\n                  @action={{this.exportPersona}}\n                  class=\"ai-persona-editor__export\"\n                />\n                <form.Button\n                  @action={{this.delete}}\n                  @label=\"discourse_ai.ai_persona.delete\"\n                  class=\"btn-danger\"\n                />\n              {{/unless}}\n            </form.Actions>\n          </Form>\n        </div>\n      \n    */\n    {\n      \"id\": \"AkaXQyvI\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@route\\\",\\\"@label\\\"],[\\\"adminPlugins.show.discourse-ai-personas\\\",\\\"discourse_ai.ai_persona.back\\\"]],null],[1,\\\"\\\\n    \\\"],[11,0],[24,0,\\\"ai-persona-editor\\\"],[4,[32,1],[[30,0,[\\\"updateAllGroups\\\"]],[30,1,[\\\"id\\\"]]],null],[12],[1,\\\"\\\\n      \\\"],[8,[32,2],null,[[\\\"@onSubmit\\\",\\\"@data\\\"],[[30,0,[\\\"save\\\"]],[30,0,[\\\"formData\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@disabled\\\",\\\"@format\\\"],[\\\"name\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.name\\\"],null],\\\"required|length:1,100\\\",[30,3,[\\\"system\\\"]],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,4,[\\\"Input\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[4]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@disabled\\\",\\\"@format\\\"],[\\\"description\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.description\\\"],null],\\\"required|length:1,100\\\",[30,3,[\\\"system\\\"]],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,5,[\\\"Textarea\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[5]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@disabled\\\",\\\"@format\\\"],[\\\"system_prompt\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.system_prompt\\\"],null],\\\"required|length:1,100000\\\",[30,3,[\\\"system\\\"]],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,6,[\\\"Textarea\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[6]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[32,4],null,[[\\\"@form\\\",\\\"@data\\\"],[[30,2],[30,3]]],null],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"default_llm_id\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.default_llm\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.default_llm_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,7,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[32,5],null,[[\\\"@value\\\",\\\"@llms\\\",\\\"@onChange\\\",\\\"@class\\\"],[[30,7,[\\\"value\\\"]],[30,8,[\\\"resultSetMeta\\\",\\\"llms\\\"]],[30,7,[\\\"set\\\"]],\\\"ai-persona-editor__llms\\\"]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[7]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@format\\\"],[\\\"allowed_group_ids\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.allowed_groups\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,9,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[32,6],null,[[\\\"@value\\\",\\\"@content\\\",\\\"@onChange\\\"],[[30,3,[\\\"allowed_group_ids\\\"]],[30,0,[\\\"allGroups\\\"]],[30,9,[\\\"set\\\"]]]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[9]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"vision_enabled\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.vision_enabled\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.vision_enabled_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,10,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[10]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,3,[\\\"vision_enabled\\\"]],[[[1,\\\"          \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@onSet\\\",\\\"@format\\\"],[\\\"vision_max_pixels\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.vision_max_pixels\\\"],null],[30,0,[\\\"onChangeMaxPixels\\\"]],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,11,[\\\"Select\\\"]],null,[[\\\"@includeNone\\\"],[false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"maxPixelValues\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[8,[30,12,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,13,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,13,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[13]],null],[1,\\\"            \\\"]],[12]]]]],[1,\\\"\\\\n          \\\"]],[11]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n        \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"max_context_posts\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.max_context_posts\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.max_context_posts_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,14,[\\\"Input\\\"]],[[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n        \\\"]],[14]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[51,[30,3,[\\\"system\\\"]]],[[[1,\\\"          \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@disabled\\\",\\\"@format\\\"],[\\\"temperature\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.temperature\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.temperature_help\\\"],null],[30,3,[\\\"system\\\"]],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,15,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n          \\\"]],[15]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@disabled\\\",\\\"@format\\\"],[\\\"top_p\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.top_p\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.top_p_help\\\"],null],[30,3,[\\\"system\\\"]],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,16,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n          \\\"]],[16]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n        \\\"],[8,[30,2,[\\\"Section\\\"]],null,[[\\\"@title\\\",\\\"@subtitle\\\"],[[28,[32,3],[\\\"discourse_ai.ai_persona.examples.title\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.examples.examples_help\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[51,[30,3,[\\\"system\\\"]]],[[[1,\\\"            \\\"],[8,[30,2,[\\\"Container\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,2,[\\\"Button\\\"]],[[24,0,\\\"ai-persona-editor__new_example\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[28,[32,7],[[30,0,[\\\"addExamplesPair\\\"]],[30,2],[30,3]],null],\\\"discourse_ai.ai_persona.examples.new\\\"]],null],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[32,8],[[30,3,[\\\"examples\\\",\\\"length\\\"]],0],null],[[[1,\\\"            \\\"],[8,[30,2,[\\\"Collection\\\"]],null,[[\\\"@name\\\"],[\\\"examples\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[32,9],null,[[\\\"@examplesCollection\\\",\\\"@exampleNumber\\\",\\\"@system\\\",\\\"@form\\\"],[[30,17],[30,18],[30,3,[\\\"system\\\"]],[30,2]]],null],[1,\\\"\\\\n            \\\"]],[17,18]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,2,[\\\"Section\\\"]],null,[[\\\"@title\\\"],[[28,[32,3],[\\\"discourse_ai.ai_persona.ai_tools\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@format\\\"],[\\\"tools\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.tools\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,19,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[32,10],null,[[\\\"@value\\\",\\\"@disabled\\\",\\\"@onChange\\\",\\\"@content\\\"],[[30,19,[\\\"value\\\"]],[30,3,[\\\"system\\\"]],[28,[32,7],[[30,0,[\\\"updateToolNames\\\"]],[30,2],[30,3]],null],[30,8,[\\\"resultSetMeta\\\",\\\"tools\\\"]]]],null],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[19]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[32,8],[[30,3,[\\\"tools\\\",\\\"length\\\"]],0],null],[[[1,\\\"            \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@format\\\"],[\\\"forcedTools\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.forced_tools\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,20,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[32,10],null,[[\\\"@value\\\",\\\"@disabled\\\",\\\"@onChange\\\",\\\"@content\\\"],[[30,20,[\\\"value\\\"]],[30,3,[\\\"system\\\"]],[30,20,[\\\"set\\\"]],[28,[30,0,[\\\"availableForcedTools\\\"]],[[30,3,[\\\"tools\\\"]]],null]]],null],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n            \\\"]],[20]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[32,8],[[30,3,[\\\"forcedTools\\\",\\\"length\\\"]],0],null],[[[1,\\\"            \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@format\\\"],[\\\"forced_tool_count\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.forced_tool_strategy\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,21,[\\\"Select\\\"]],null,[[\\\"@includeNone\\\"],[false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"forcedToolStrategies\\\"]]],null]],null],null,[[[1,\\\"                  \\\"],[8,[30,22,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,23,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,23,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[23]],null],[1,\\\"              \\\"]],[22]]]]],[1,\\\"\\\\n            \\\"]],[21]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[32,8],[[30,3,[\\\"tools\\\",\\\"length\\\"]],0],null],[[[1,\\\"            \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"tool_details\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.tool_details\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.tool_details_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,24,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n            \\\"]],[24]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[32,11],null,[[\\\"@form\\\",\\\"@data\\\",\\\"@llms\\\",\\\"@allTools\\\"],[[30,2],[30,3],[30,8,[\\\"resultSetMeta\\\",\\\"llms\\\"]],[30,8,[\\\"resultSetMeta\\\",\\\"tools\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"siteSettings\\\",\\\"ai_embeddings_enabled\\\"]],[[[1,\\\"          \\\"],[8,[30,2,[\\\"Section\\\"]],null,[[\\\"@title\\\"],[[28,[32,3],[\\\"discourse_ai.rag.title\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@format\\\"],[\\\"rag_uploads\\\",[28,[32,3],[\\\"discourse_ai.rag.uploads.title\\\"],null],\\\"full\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,25,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[32,12],null,[[\\\"@target\\\",\\\"@targetName\\\",\\\"@updateUploads\\\",\\\"@onRemove\\\",\\\"@allowImages\\\"],[[30,3],\\\"AiPersona\\\",[28,[32,7],[[30,0,[\\\"updateUploads\\\"]],[30,2]],null],[28,[32,7],[[30,0,[\\\"removeUpload\\\"]],[30,2],[30,3],[30,25,[\\\"value\\\"]]],null],[30,8,[\\\"resultSetMeta\\\",\\\"settings\\\",\\\"rag_images_enabled\\\"]]]],null],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n            \\\"]],[25]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[32,13],null,[[\\\"@form\\\",\\\"@data\\\",\\\"@llms\\\",\\\"@allowImages\\\"],[[30,2],[30,3],[30,8,[\\\"resultSetMeta\\\",\\\"llms\\\"]],[30,8,[\\\"resultSetMeta\\\",\\\"settings\\\",\\\"rag_images_enabled\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"rag_conversation_chunks\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.rag_conversation_chunks\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.rag_conversation_chunks_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,26,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n              \\\"]],[26]]]]],[1,\\\"\\\\n\\\\n              \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"question_consolidator_llm_id\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.question_consolidator_llm\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.question_consolidator_llm_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,27,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[32,5],null,[[\\\"@value\\\",\\\"@llms\\\",\\\"@onChange\\\",\\\"@class\\\"],[[30,27,[\\\"value\\\"]],[30,8,[\\\"resultSetMeta\\\",\\\"llms\\\"]],[30,27,[\\\"set\\\"]],\\\"ai-persona-editor__llms\\\"]],null],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n              \\\"]],[27]]]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n        \\\"],[8,[30,2,[\\\"Section\\\"]],null,[[\\\"@title\\\"],[[28,[32,3],[\\\"discourse_ai.ai_persona.ai_bot.title\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@onSet\\\"],[\\\"enabled\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.enabled\\\"],null],[28,[32,7],[[30,0,[\\\"toggleEnabled\\\"]],[30,3]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,28,[\\\"Toggle\\\"]],null,null,null],[1,\\\"\\\\n          \\\"]],[28]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@onSet\\\",\\\"@tooltip\\\"],[\\\"priority\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.priority\\\"],null],[28,[32,7],[[30,0,[\\\"togglePriority\\\"]],[30,3]],null],[28,[32,3],[\\\"discourse_ai.ai_persona.priority_help\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,29,[\\\"Toggle\\\"]],null,null,null],[1,\\\"\\\\n          \\\"]],[29]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,1,[\\\"isNew\\\"]],[[[1,\\\"            \\\"],[10,0],[12],[1,[28,[32,3],[\\\"discourse_ai.ai_persona.ai_bot.save_first\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,3,[\\\"default_llm_id\\\"]],[[[1,\\\"              \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@format\\\"],[\\\"force_default_llm\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.force_default_llm\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,30,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n              \\\"]],[30]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n            \\\"],[8,[30,2,[\\\"Container\\\"]],[[24,0,\\\"ai-persona-editor__ai_bot_user\\\"]],[[\\\"@title\\\",\\\"@tooltip\\\"],[[28,[32,3],[\\\"discourse_ai.ai_persona.user\\\"],null],[52,[51,[30,3,[\\\"user\\\"]]],[28,[32,3],[\\\"discourse_ai.ai_persona.create_user_help\\\"],null]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,3,[\\\"user\\\"]],[[[1,\\\"                \\\"],[10,3],[14,0,\\\"avatar\\\"],[15,6,[30,3,[\\\"user\\\",\\\"path\\\"]]],[15,\\\"data-user-card\\\",[30,3,[\\\"user\\\",\\\"username\\\"]]],[12],[1,\\\"\\\\n                  \\\"],[1,[28,[32,14],[[30,3,[\\\"user\\\",\\\"avatar_template\\\"]],\\\"small\\\"],null]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[8,[32,15],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"adminUser\\\",[30,0,[\\\"adminUser\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[1,[30,3,[\\\"user\\\",\\\"username\\\"]]],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[8,[30,2,[\\\"Button\\\"]],[[24,0,\\\"ai-persona-editor__create-user\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[28,[32,7],[[30,0,[\\\"createUser\\\"]],[30,2]],null],\\\"discourse_ai.ai_persona.create_user\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"            \\\"]],[]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,3,[\\\"user\\\"]],[[[1,\\\"              \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"allow_personal_messages\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.allow_personal_messages\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.allow_personal_messages_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,31,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n              \\\"]],[31]]]]],[1,\\\"\\\\n\\\\n              \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"allow_topic_mentions\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.allow_topic_mentions\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.allow_topic_mentions_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,32,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n              \\\"]],[32]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"chatPluginEnabled\\\"]],[[[1,\\\"                \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"allow_chat_direct_messages\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.allow_chat_direct_messages\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.allow_chat_direct_messages_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[30,33,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n                \\\"]],[33]]]]],[1,\\\"\\\\n\\\\n                \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"allow_chat_channel_mentions\\\",[28,[32,3],[\\\"discourse_ai.ai_persona.allow_chat_channel_mentions\\\"],null],[28,[32,3],[\\\"discourse_ai.ai_persona.allow_chat_channel_mentions_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[30,34,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n                \\\"]],[34]]]]],[1,\\\"\\\\n\\\"]],[]],null]],[]],null]],[]]],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n\\\\n        \\\"],[8,[30,2,[\\\"Actions\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,2,[\\\"Submit\\\"]],null,null,null],[1,\\\"\\\\n\\\\n\\\"],[41,[51,[28,[32,16],[[30,1,[\\\"isNew\\\"]],[30,1,[\\\"system\\\"]]],null]],[[[1,\\\"            \\\"],[8,[30,2,[\\\"Button\\\"]],[[24,0,\\\"ai-persona-editor__export\\\"]],[[\\\"@label\\\",\\\"@action\\\"],[\\\"discourse_ai.ai_persona.export\\\",[30,0,[\\\"exportPersona\\\"]]]],null],[1,\\\"\\\\n            \\\"],[8,[30,2,[\\\"Button\\\"]],[[24,0,\\\"btn-danger\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"delete\\\"]],\\\"discourse_ai.ai_persona.delete\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[2,3]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@model\\\",\\\"form\\\",\\\"data\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"@personas\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"select\\\",\\\"pixelValue\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"exCollection\\\",\\\"exCollectionIdx\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"select\\\",\\\"fts\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\",\\\"unless\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-persona-editor.js\",\n      \"scope\": () => [_backButton.default, _didInsert.default, _form.default, _discourseI18n.i18n, _aiPersonaResponseFormatEditor.default, _aiLlmSelector.default, _groupChooser.default, _helper.fn, _truthHelpers.gt, _aiPersonaExample.default, _aiToolSelector.default, _aiPersonaToolOptions.default, _ragUploader.default, _ragOptionsFk.default, _boundAvatarTemplate.default, _routing.LinkTo, _truthHelpers.or],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = PersonaEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-persona-example\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"truth-helpers\", \"discourse/helpers/d-icon\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _modifier, _object, _truthHelpers, _dIcon, _discourseI18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiPersonaCollapsableExample extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"collapsed\", [_tracking.tracked], function () {\n      return true;\n    }))();\n    #collapsed = (() => (dt7948.i(this, \"collapsed\"), void 0))();\n    get caretIcon() {\n      return this.collapsed ? \"angle-right\" : \"angle-down\";\n    }\n    toggleExample() {\n      this.collapsed = !this.collapsed;\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"toggleExample\", [_object.action]))();\n    deletePair() {\n      this.collapsed = true;\n      this.args.examplesCollection.remove(this.args.exampleNumber);\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"deletePair\", [_object.action]))();\n    get exampleTitle() {\n      return (0, _discourseI18n.i18n)(\"discourse_ai.ai_persona.examples.collapsable_title\", {\n        number: this.args.exampleNumber + 1\n      });\n    }\n    static #_4 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div role=\"button\" {{on \"click\" this.toggleExample}}>\n          <span>{{icon this.caretIcon}}</span>\n          {{this.exampleTitle}}\n        </div>\n        {{#unless this.collapsed}}\n          <@examplesCollection.Collection as |exPair pairIdx|>\n            <exPair.Field\n              @title={{i18n\n                (concat\n                  \"discourse_ai.ai_persona.examples.\"\n                  (if (eq pairIdx 0) \"user\" \"model\")\n                )\n              }}\n              @validation=\"required|length:1,5000\"\n              @disabled={{@system}}\n              as |field|\n            >\n              <field.Textarea />\n            </exPair.Field>\n          </@examplesCollection.Collection>\n    \n          {{#unless @system}}\n            <@form.Container>\n              <@form.Button\n                @action={{this.deletePair}}\n                @label=\"discourse_ai.ai_persona.examples.remove\"\n                class=\"ai-persona-editor__delete_example btn-danger\"\n              />\n            </@form.Container>\n          {{/unless}}\n        {{/unless}}\n      \n    */\n    {\n      \"id\": \"VT1ymzpg\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[11,0],[24,\\\"role\\\",\\\"button\\\"],[4,[32,0],[\\\"click\\\",[30,0,[\\\"toggleExample\\\"]]],null],[12],[1,\\\"\\\\n      \\\"],[10,1],[12],[1,[28,[32,1],[[30,0,[\\\"caretIcon\\\"]]],null]],[13],[1,\\\"\\\\n      \\\"],[1,[30,0,[\\\"exampleTitle\\\"]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"collapsed\\\"]]],[[[1,\\\"      \\\"],[8,[30,1,[\\\"Collection\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@title\\\",\\\"@validation\\\",\\\"@disabled\\\"],[[28,[32,2],[[28,[32,3],[\\\"discourse_ai.ai_persona.examples.\\\",[52,[28,[32,4],[[30,3],0],null],\\\"user\\\",\\\"model\\\"]],null]],null],\\\"required|length:1,5000\\\",[30,4]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,5,[\\\"Textarea\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[5]]]]],[1,\\\"\\\\n      \\\"]],[2,3]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[51,[30,4]],[[[1,\\\"        \\\"],[8,[30,6,[\\\"Container\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,6,[\\\"Button\\\"]],[[24,0,\\\"ai-persona-editor__delete_example btn-danger\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"deletePair\\\"]],\\\"discourse_ai.ai_persona.examples.remove\\\"]],null],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"  \\\"]],[\\\"@examplesCollection\\\",\\\"exPair\\\",\\\"pairIdx\\\",\\\"@system\\\",\\\"field\\\",\\\"@form\\\"],false,[\\\"unless\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-persona-example.js\",\n      \"scope\": () => [_modifier.on, _dIcon.default, _discourseI18n.i18n, _helper.concat, _truthHelpers.eq],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiPersonaCollapsableExample;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-persona-list-editor\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"@ember/routing\", \"@ember/service\", \"truth-helpers\", \"discourse/components/d-breadcrumbs-item\", \"discourse/components/d-button\", \"discourse/components/d-page-subheader\", \"discourse/components/d-select\", \"discourse/components/dropdown-menu\", \"discourse/components/filter-input\", \"discourse/helpers/avatar\", \"discourse/helpers/concat-class\", \"discourse/helpers/d-icon\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse-i18n\", \"admin/components/admin-config-area-empty-list\", \"float-kit/components/d-menu\", \"discourse/plugins/discourse-ai/discourse/admin/models/ai-persona\", \"discourse/plugins/discourse-ai/discourse/components/ai-persona-editor\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _routing, _service, _truthHelpers, _dBreadcrumbsItem, _dButton, _dPageSubheader, _dSelect, _dropdownMenu, _filterInput, _avatar, _concatClass, _dIcon, _ajax, _ajaxError, _discourseI18n, _adminConfigAreaEmptyList, _dMenu, _aiPersona, _aiPersonaEditor, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const LAYOUT_BUTTONS = [{\n    id: \"table\",\n    label: \"discourse_ai.layout.table\",\n    icon: \"discourse-table\"\n  }, {\n    id: \"card\",\n    label: \"discourse_ai.layout.card\",\n    icon: \"table\"\n  }];\n  class AiPersonaListEditor 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, \"keyValueStore\", [_service.service]))();\n    #keyValueStore = (() => (dt7948.i(this, \"keyValueStore\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"capabilities\", [_service.service]))();\n    #capabilities = (() => (dt7948.i(this, \"capabilities\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"dialog\", [_service.service]))();\n    #dialog = (() => (dt7948.i(this, \"dialog\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"filterValue\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #filterValue = (() => (dt7948.i(this, \"filterValue\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"featureFilter\", [_tracking.tracked], function () {\n      return \"all\";\n    }))();\n    #featureFilter = (() => (dt7948.i(this, \"featureFilter\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"currentLayout\", [_tracking.tracked], function () {\n      return LAYOUT_BUTTONS[0];\n    }))();\n    #currentLayout = (() => (dt7948.i(this, \"currentLayout\"), void 0))();\n    constructor() {\n      super(...arguments);\n      const savedLayoutId = this.keyValueStore.get(\"ai-persona-list-layout\");\n      if (savedLayoutId) {\n        const found = LAYOUT_BUTTONS.find(b => b.id === savedLayoutId);\n        if (found) {\n          this.currentLayout = found;\n        }\n      }\n    }\n    get filteredPersonas() {\n      let personas = this.args.personas || [];\n      // Filter by feature if not \"all\"\n      if (this.featureFilter !== \"all\") {\n        personas = personas.filter(persona => (persona.features || []).some(feature => feature.module_name === this.featureFilter));\n      }\n      // Filter by search term if present\n      if (this.filterValue) {\n        const term = this.filterValue.toLowerCase();\n        personas = personas.filter(persona => {\n          const textMatches = persona.name?.toLowerCase().includes(term) || persona.description?.toLowerCase().includes(term);\n          const featureMatches = (persona.features || []).some(feature => feature.module_name?.toLowerCase().includes(term));\n          const llmMatches = persona.default_llm?.display_name?.toLowerCase().includes(term);\n          return textMatches || featureMatches || llmMatches;\n        });\n      }\n      return personas;\n    }\n    get featureFilterOptions() {\n      let features = [];\n      (this.args.personas || []).forEach(persona => {\n        (persona.features || []).forEach(feature => {\n          if (feature?.module_name && !features.includes(feature.module_name)) {\n            features.push(feature.module_name);\n          }\n        });\n      });\n      features.sort();\n      return [{\n        value: \"all\",\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.ai_persona.filters.all_features\")\n      }, ...features.map(name => ({\n        value: name,\n        label: (0, _discourseI18n.i18n)(`discourse_ai.features.${name}.name`)\n      }))];\n    }\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 #_8 = (() => dt7948.n(this.prototype, \"toggleEnabled\", [_object.action]))();\n    onNameFilterChange(event) {\n      this.filterValue = event.target?.value || \"\";\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"onNameFilterChange\", [_object.action]))();\n    onFeatureFilterChange(value) {\n      this.featureFilter = value;\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"onFeatureFilterChange\", [_object.action]))();\n    resetAndFocus() {\n      this.filterValue = \"\";\n      this.featureFilter = \"all\";\n      document.querySelector(\".admin-filter__input\").focus();\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"resetAndFocus\", [_object.action]))();\n    onRegisterApi(api) {\n      this.dMenu = api;\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"onRegisterApi\", [_object.action]))();\n    onLayoutSelect(layoutId) {\n      const found = LAYOUT_BUTTONS.find(b => b.id === layoutId);\n      if (found) {\n        this.currentLayout = found;\n        this.keyValueStore.set({\n          key: \"ai-persona-list-layout\",\n          value: layoutId\n        });\n      }\n      this.dMenu.close();\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"onLayoutSelect\", [_object.action]))();\n    importPersona() {\n      const fileInput = document.createElement(\"input\");\n      fileInput.type = \"file\";\n      fileInput.accept = \".json\";\n      fileInput.style.display = \"none\";\n      fileInput.onchange = event => this.handleFileSelect(event);\n      document.body.appendChild(fileInput);\n      fileInput.click();\n      document.body.removeChild(fileInput);\n    }\n    static #_14 = (() => dt7948.n(this.prototype, \"importPersona\", [_object.action]))();\n    handleFileSelect(event) {\n      const file = event.target.files[0];\n      if (!file) {\n        return;\n      }\n      const reader = new FileReader();\n      reader.onload = e => {\n        try {\n          const json = JSON.parse(e.target.result);\n          this.uploadPersona(json);\n        } catch {\n          this.dialog.alert((0, _discourseI18n.i18n)(\"discourse_ai.ai_persona.import_error_not_json\"));\n        }\n      };\n      reader.readAsText(file);\n    }\n    static #_15 = (() => dt7948.n(this.prototype, \"handleFileSelect\", [_object.action]))();\n    uploadPersona(personaData) {\n      let force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      let url = `/admin/plugins/discourse-ai/ai-personas/import.json`;\n      const payload = personaData;\n      if (force) {\n        payload.force = true;\n      }\n      return (0, _ajax.ajax)(url, {\n        type: \"POST\",\n        data: JSON.stringify(payload),\n        contentType: \"application/json\"\n      }).then(result => {\n        let persona = _aiPersona.default.create(result);\n        let existingPersona = this.args.personas.findBy(\"id\", persona.id);\n        if (existingPersona) {\n          this.args.personas.removeObject(existingPersona);\n        }\n        this.args.personas.insertAt(0, persona);\n      }).catch(error => {\n        if (error.jqXHR?.status === 422) {\n          this.dialog.confirm({\n            message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_persona.import_error_conflict\", {\n              name: personaData.persona.name\n            }) + \"\\n\" + error.jqXHR.responseJSON?.errors?.join(\"\\n\"),\n            confirmButtonLabel: \"discourse_ai.ai_persona.overwrite\",\n            didConfirm: () => this.uploadPersona(personaData, true)\n          });\n        } else {\n          (0, _ajaxError.popupAjaxError)(error);\n        }\n      });\n    }\n    static #_16 = (() => (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\">\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.Default\n                  @label=\"discourse_ai.ai_persona.import\"\n                  @action={{this.importPersona}}\n                  @icon=\"upload\"\n                  class=\"ai-persona-list-editor__import-button\"\n                />\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              <div class=\"ai-persona-list-editor__controls\">\n                <FilterInput\n                  placeholder={{i18n \"discourse_ai.ai_persona.filters.text\"}}\n                  @filterAction={{this.onNameFilterChange}}\n                  @value={{this.filterValue}}\n                  class=\"admin-filter__input\"\n                  @icons={{hash left=\"magnifying-glass\"}}\n                />\n                <DSelect\n                  @value={{this.featureFilter}}\n                  @includeNone={{false}}\n                  @onChange={{this.onFeatureFilterChange}}\n                  as |select|\n                >\n                  {{#each this.featureFilterOptions as |option|}}\n                    <select.Option @value={{option.value}}>\n                      {{option.label}}\n                    </select.Option>\n                  {{/each}}\n                </DSelect>\n                {{#if this.capabilities.viewport.md}}\n                  <DMenu\n                    @modalForMobile={{true}}\n                    @autofocus={{true}}\n                    @identifier=\"persona-list-layout\"\n                    @onRegisterApi={{this.onRegisterApi}}\n                    @triggerClass=\"btn-default btn-icon\"\n                  >\n                    <:trigger>\n                      {{icon this.currentLayout.icon}}\n                    </:trigger>\n                    <:content>\n                      <DropdownMenu as |dropdown|>\n                        {{#each LAYOUT_BUTTONS as |button|}}\n                          <dropdown.item>\n                            <DButton\n                              @label={{button.label}}\n                              @icon={{button.icon}}\n                              class=\"btn-transparent\"\n                              @action={{fn this.onLayoutSelect button.id}}\n                            />\n                          </dropdown.item>\n                        {{/each}}\n                      </DropdownMenu>\n                    </:content>\n                  </DMenu>\n                {{/if}}\n              </div>\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    \n            {{#if this.filteredPersonas}}\n              <table\n                class={{concatClass\n                  \"content-list ai-persona-list-editor d-admin-table\"\n                  (concat \"--layout-\" this.currentLayout.id)\n                }}\n              >\n                <thead>\n                  <tr>\n                    <th>{{i18n \"discourse_ai.ai_persona.name\"}}</th>\n                    <th>{{i18n \"discourse_ai.llms.short_title\"}}</th>\n                    <th>{{i18n \"discourse_ai.features.short_title\"}}</th>\n                  </tr>\n                </thead>\n                <tbody>\n                  {{#each this.filteredPersonas 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                        (if persona.enabled \"--enabled\")\n                      }}\n                    >\n                      <td class=\"d-admin-row__overview\">\n                        <div class=\"ai-persona-list__name-with-description\">\n                          <h3 class=\"ai-persona-list__name\">\n                            {{#if persona.user}}\n                              {{avatar persona.user imageSize=\"tiny\"}}\n                            {{/if}}\n                            {{persona.name}}\n                          </h3>\n                          <div class=\"ai-persona-list__description\">\n                            {{persona.description}}\n                          </div>\n                        </div>\n                      </td>\n                      <td class=\"d-admin-row__llms\">\n                        {{#if persona.default_llm}}\n                          <span class=\"--card-label\">\n                            {{i18n \"discourse_ai.ai_persona.llms_list\"}}\n                          </span>\n                          <DButton\n                            class=\"btn-flat btn-small ai-persona-list__row-item-feature\"\n                            @translatedLabel={{persona.default_llm.display_name}}\n                            @route=\"adminPlugins.show.discourse-ai-llms.edit\"\n                            @routeModels={{persona.default_llm.id}}\n                          />\n                        {{/if}}\n                      </td>\n                      <td class=\"d-admin-row__features\">\n                        {{#if persona.features.length}}\n                          <span class=\"--card-label\">\n                            {{i18n\n                              \"discourse_ai.ai_persona.features_list\"\n                              count=persona.features.length\n                            }}\n                          </span>\n                          {{#each persona.features as |feature index|}}\n                            <span class=\"d-admin-row__row-feature-list\">\n                              {{#if (gt index 0)}}, {{/if}}\n                              <DButton\n                                class=\"btn-flat btn-small ai-persona-list__row-item-feature\"\n                                @translatedLabel={{i18n\n                                  (concat\n                                    \"discourse_ai.features.\"\n                                    feature.module_name\n                                    \".name\"\n                                  )\n                                }}\n                                @route=\"adminPlugins.show.discourse-ai-features.edit\"\n                                @routeModels={{feature.id}}\n                              />\n                            </span>\n                          {{/each}}\n                        {{/if}}\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              <div class=\"ai-persona-list-editor__no-results\">\n    \n                <h3>{{i18n \"discourse_ai.ai_persona.filters.no_results\"}}</h3>\n    \n                <DButton\n                  @icon=\"arrow-rotate-left\"\n                  @label=\"discourse_ai.ai_persona.filters.reset\"\n                  @action={{this.resetAndFocus}}\n                  class=\"btn-default\"\n                />\n              </div>\n            {{/if}}\n          {{/if}}\n        </section>\n      \n    */\n    {\n      \"id\": \"YumSRZqm\",\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\\\"],[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,[\\\"Default\\\"]],[[24,0,\\\"ai-persona-list-editor__import-button\\\"]],[[\\\"@label\\\",\\\"@action\\\",\\\"@icon\\\"],[\\\"discourse_ai.ai_persona.import\\\",[30,0,[\\\"importPersona\\\"]],\\\"upload\\\"]],null],[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,0],[14,0,\\\"ai-persona-list-editor__controls\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[32,4],[[16,\\\"placeholder\\\",[28,[32,1],[\\\"discourse_ai.ai_persona.filters.text\\\"],null]],[24,0,\\\"admin-filter__input\\\"]],[[\\\"@filterAction\\\",\\\"@value\\\",\\\"@icons\\\"],[[30,0,[\\\"onNameFilterChange\\\"]],[30,0,[\\\"filterValue\\\"]],[28,[32,5],null,[[\\\"left\\\"],[\\\"magnifying-glass\\\"]]]]],null],[1,\\\"\\\\n            \\\"],[8,[32,6],null,[[\\\"@value\\\",\\\"@includeNone\\\",\\\"@onChange\\\"],[[30,0,[\\\"featureFilter\\\"]],false,[30,0,[\\\"onFeatureFilterChange\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"featureFilterOptions\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[8,[30,4,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,5,[\\\"value\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[1,[30,5,[\\\"label\\\"]]],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[5]],null],[1,\\\"            \\\"]],[4]]]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"capabilities\\\",\\\"viewport\\\",\\\"md\\\"]],[[[1,\\\"              \\\"],[8,[32,7],null,[[\\\"@modalForMobile\\\",\\\"@autofocus\\\",\\\"@identifier\\\",\\\"@onRegisterApi\\\",\\\"@triggerClass\\\"],[true,true,\\\"persona-list-layout\\\",[30,0,[\\\"onRegisterApi\\\"]],\\\"btn-default btn-icon\\\"]],[[\\\"trigger\\\",\\\"content\\\"],[[[[1,\\\"\\\\n                  \\\"],[1,[28,[32,8],[[30,0,[\\\"currentLayout\\\",\\\"icon\\\"]]],null]],[1,\\\"\\\\n                \\\"]],[]],[[[1,\\\"\\\\n                  \\\"],[8,[32,9],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[32,10]],null]],null],null,[[[1,\\\"                      \\\"],[8,[30,6,[\\\"item\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                        \\\"],[8,[32,11],[[24,0,\\\"btn-transparent\\\"]],[[\\\"@label\\\",\\\"@icon\\\",\\\"@action\\\"],[[30,7,[\\\"label\\\"]],[30,7,[\\\"icon\\\"]],[28,[32,12],[[30,0,[\\\"onLayoutSelect\\\"]],[30,7,[\\\"id\\\"]]],null]]],null],[1,\\\"\\\\n                      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[7]],null],[1,\\\"                  \\\"]],[6]]]]],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[8,[32,13],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,\\\"\\\\n\\\"],[41,[30,0,[\\\"filteredPersonas\\\"]],[[[1,\\\"          \\\"],[10,\\\"table\\\"],[15,0,[28,[32,14],[\\\"content-list ai-persona-list-editor d-admin-table\\\",[28,[32,15],[\\\"--layout-\\\",[30,0,[\\\"currentLayout\\\",\\\"id\\\"]]],null]],null]],[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.llms.short_title\\\"],null]],[13],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.features.short_title\\\"],null]],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"filteredPersonas\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[10,\\\"tr\\\"],[15,\\\"data-persona-id\\\",[30,8,[\\\"id\\\"]]],[15,0,[28,[32,14],[\\\"ai-persona-list__row d-admin-row__content\\\",[52,[30,8,[\\\"priority\\\"]],\\\"--priority\\\"],[52,[30,8,[\\\"enabled\\\"]],\\\"--enabled\\\"]],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,\\\"h3\\\"],[14,0,\\\"ai-persona-list__name\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,8,[\\\"user\\\"]],[[[1,\\\"                          \\\"],[1,[28,[32,16],[[30,8,[\\\"user\\\"]]],[[\\\"imageSize\\\"],[\\\"tiny\\\"]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                        \\\"],[1,[30,8,[\\\"name\\\"]]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"ai-persona-list__description\\\"],[12],[1,\\\"\\\\n                        \\\"],[1,[30,8,[\\\"description\\\"]]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__llms\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,8,[\\\"default_llm\\\"]],[[[1,\\\"                      \\\"],[10,1],[14,0,\\\"--card-label\\\"],[12],[1,\\\"\\\\n                        \\\"],[1,[28,[32,1],[\\\"discourse_ai.ai_persona.llms_list\\\"],null]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[8,[32,11],[[24,0,\\\"btn-flat btn-small ai-persona-list__row-item-feature\\\"]],[[\\\"@translatedLabel\\\",\\\"@route\\\",\\\"@routeModels\\\"],[[30,8,[\\\"default_llm\\\",\\\"display_name\\\"]],\\\"adminPlugins.show.discourse-ai-llms.edit\\\",[30,8,[\\\"default_llm\\\",\\\"id\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__features\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,8,[\\\"features\\\",\\\"length\\\"]],[[[1,\\\"                      \\\"],[10,1],[14,0,\\\"--card-label\\\"],[12],[1,\\\"\\\\n                        \\\"],[1,[28,[32,1],[\\\"discourse_ai.ai_persona.features_list\\\"],[[\\\"count\\\"],[[30,8,[\\\"features\\\",\\\"length\\\"]]]]]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,8,[\\\"features\\\"]]],null]],null],null,[[[1,\\\"                        \\\"],[10,1],[14,0,\\\"d-admin-row__row-feature-list\\\"],[12],[1,\\\"\\\\n                          \\\"],[41,[28,[32,17],[[30,10],0],null],[[[1,\\\", \\\"]],[]],null],[1,\\\"\\\\n                          \\\"],[8,[32,11],[[24,0,\\\"btn-flat btn-small ai-persona-list__row-item-feature\\\"]],[[\\\"@translatedLabel\\\",\\\"@route\\\",\\\"@routeModels\\\"],[[28,[32,1],[[28,[32,15],[\\\"discourse_ai.features.\\\",[30,9,[\\\"module_name\\\"]],\\\".name\\\"],null]],null],\\\"adminPlugins.show.discourse-ai-features.edit\\\",[30,9,[\\\"id\\\"]]]],null],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n\\\"]],[9,10]],null]],[]],null],[1,\\\"                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__controls\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[32,18],[[24,0,\\\"btn btn-text btn-small\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"adminPlugins.show.discourse-ai-personas.edit\\\",[30,8]]],[[\\\"default\\\"],[[[[1,[28,[32,1],[\\\"discourse_ai.ai_persona.edit\\\"],null]],[1,\\\" \\\"]],[]]]]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[8]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"ai-persona-list-editor__no-results\\\"],[12],[1,\\\"\\\\n\\\\n            \\\"],[10,\\\"h3\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.ai_persona.filters.no_results\\\"],null]],[13],[1,\\\"\\\\n\\\\n            \\\"],[8,[32,11],[[24,0,\\\"btn-default\\\"]],[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\"],[\\\"arrow-rotate-left\\\",\\\"discourse_ai.ai_persona.filters.reset\\\",[30,0,[\\\"resetAndFocus\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@currentPersona\\\",\\\"@personas\\\",\\\"actions\\\",\\\"select\\\",\\\"option\\\",\\\"dropdown\\\",\\\"button\\\",\\\"persona\\\",\\\"feature\\\",\\\"index\\\"],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, _discourseI18n.i18n, _aiPersonaEditor.default, _dPageSubheader.default, _filterInput.default, _helper.hash, _dSelect.default, _dMenu.default, _dIcon.default, _dropdownMenu.default, LAYOUT_BUTTONS, _dButton.default, _helper.fn, _adminConfigAreaEmptyList.default, _concatClass.default, _helper.concat, _avatar.default, _truthHelpers.gt, _routing.LinkTo],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiPersonaListEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-persona-llm-selector\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/runloop\", \"@ember/service\", \"discourse-i18n\", \"select-kit/components/dropdown-select-box\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _runloop, _service, _discourseI18n, _dropdownSelectBox, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const PERSONA_SELECTOR_KEY = \"ai_persona_selector_id\";\n  const LLM_SELECTOR_KEY = \"ai_llm_selector_id\";\n  class AiPersonaLlmSelector 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, \"keyValueStore\", [_service.service]))();\n    #keyValueStore = (() => (dt7948.i(this, \"keyValueStore\"), 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    constructor() {\n      super(...arguments);\n      if (this.botOptions?.length) {\n        this.#loadStoredPersona();\n        this.#loadStoredLlm();\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        return;\n      }\n      let enabledPersonas = this.currentUser.ai_enabled_personas;\n      enabledPersonas = enabledPersonas.filter(persona => persona.allow_personal_messages);\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    get filterable() {\n      return this.botOptions.length > 8;\n    }\n    get value() {\n      return this._value;\n    }\n    set value(newValue) {\n      this._value = newValue;\n      this.keyValueStore.setItem(PERSONA_SELECTOR_KEY, newValue);\n      this.args.setPersonaId(newValue);\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.keyValueStore.setItem(LLM_SELECTOR_KEY, newValue);\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.args.setTargetRecipient(botUsername);\n      } else {\n        const persona = this.currentUser.ai_enabled_personas.find(innerPersona => innerPersona.id === this._value);\n        this.args.setTargetRecipient(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      }).sort((a, b) => a.name.localeCompare(b.name));\n    }\n    get showLLMSelector() {\n      return this.allowLLMSelector && this.llmOptions.length > 1;\n    }\n    #getPersonaIdFromAttrs() {\n      const personaName = this.args?.personaName;\n      if (personaName) {\n        const persona = this.botOptions.find(p => p.name === personaName);\n        if (persona) {\n          return persona.id;\n        }\n      }\n    }\n    #getLlmIdFromAttrs() {\n      const llmName = this.args?.llmName;\n      if (llmName) {\n        const llm = this.llmOptions.find(l => l.name === llmName);\n        if (llm) {\n          return llm.id;\n        }\n      }\n    }\n    #loadStoredPersona() {\n      let personaId = this.#getPersonaIdFromAttrs() || this.keyValueStore.getItem(PERSONA_SELECTOR_KEY);\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.args.setPersonaId(this._value);\n    }\n    #loadStoredLlm() {\n      this.setAllowLLMSelector();\n      if (this.hasLlmSelector) {\n        let llmId = this.#getLlmIdFromAttrs() || this.keyValueStore.getItem(LLM_SELECTOR_KEY);\n        if (llmId) {\n          llmId = parseInt(llmId, 10);\n        }\n        const llmOption = this.llmOptions.find(innerLlmOption => innerLlmOption.id === llmId) || this.llmOptions[0];\n        if (llmOption) {\n          llmId = llmOption.id;\n        } else {\n          llmId = \"\";\n        }\n        if (llmId) {\n          (0, _runloop.next)(() => {\n            this.currentLlm = llmId;\n          });\n        }\n      }\n    }\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"persona-llm-selector\">\n          <div class=\"persona-llm-selector__selection-wrapper gpt-persona\">\n            {{#if @showLabels}}\n              <label>{{i18n \"discourse_ai.ai_bot.persona\"}}</label>\n            {{/if}}\n            <DropdownSelectBox\n              class=\"persona-llm-selector__persona-dropdown\"\n              @value={{this.value}}\n              @content={{this.botOptions}}\n              @options={{hash\n                icon=(if @showLabels \"angle-down\" \"robot\")\n                filterable=this.filterable\n              }}\n            />\n          </div>\n          {{#if this.showLLMSelector}}\n            <div class=\"persona-llm-selector__selection-wrapper llm-selector\">\n              {{#if @showLabels}}\n                <label>{{i18n \"discourse_ai.ai_bot.llm\"}}</label>\n              {{/if}}\n              <DropdownSelectBox\n                class=\"persona-llm-selector__llm-dropdown\"\n                @value={{this.currentLlm}}\n                @content={{this.llmOptions}}\n                @options={{hash icon=(if @showLabels \"angle-down\" \"globe\")}}\n              />\n            </div>\n          {{/if}}\n        </div>\n      \n    */\n    {\n      \"id\": \"38qykDxh\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"persona-llm-selector\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"persona-llm-selector__selection-wrapper gpt-persona\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,0],[\\\"discourse_ai.ai_bot.persona\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[8,[32,1],[[24,0,\\\"persona-llm-selector__persona-dropdown\\\"]],[[\\\"@value\\\",\\\"@content\\\",\\\"@options\\\"],[[30,0,[\\\"value\\\"]],[30,0,[\\\"botOptions\\\"]],[28,[32,2],null,[[\\\"icon\\\",\\\"filterable\\\"],[[52,[30,1],\\\"angle-down\\\",\\\"robot\\\"],[30,0,[\\\"filterable\\\"]]]]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showLLMSelector\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"persona-llm-selector__selection-wrapper llm-selector\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"            \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,0],[\\\"discourse_ai.ai_bot.llm\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[8,[32,1],[[24,0,\\\"persona-llm-selector__llm-dropdown\\\"]],[[\\\"@value\\\",\\\"@content\\\",\\\"@options\\\"],[[30,0,[\\\"currentLlm\\\"]],[30,0,[\\\"llmOptions\\\"]],[28,[32,2],null,[[\\\"icon\\\"],[[52,[30,1],\\\"angle-down\\\",\\\"globe\\\"]]]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@showLabels\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-persona-llm-selector.js\",\n      \"scope\": () => [_discourseI18n.i18n, _dropdownSelectBox.default, _helper.hash],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiPersonaLlmSelector;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-persona-tool-options\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"truth-helpers\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-llm-selector\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _truthHelpers, _discourseI18n, _aiLlmSelector, _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 || !this.args.data.tools) {\n        return false;\n      }\n      return this.args.data?.tools.any(tool => allTools.findBy(\"id\", tool)?.options);\n    }\n    get toolsMetadata() {\n      const metadata = {};\n      this.args.allTools.map(t => {\n        metadata[t.id] = {\n          name: t.name,\n          ...t?.options\n        };\n      });\n      return metadata;\n    }\n    formObjectKeys(toolOptions) {\n      return toolOptions ? Object.keys(toolOptions) : [];\n    }\n    static #_ = (() => dt7948.n(this.prototype, \"formObjectKeys\", [_object.action]))();\n    toolOptionKeys(toolId) {\n      // this is important, some tools may not have all options defined (for example if a tool option is added)\n      const metadata = this.toolsMetadata[toolId];\n      if (!metadata) {\n        return [];\n      }\n      // a bit more verbose for clarity of our selection\n      const availableOptions = Object.keys(metadata).filter(k => k !== \"name\");\n      return availableOptions;\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"toolOptionKeys\", [_object.action]))();\n    static #_3 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.showToolOptions}}\n          <@form.Container\n            @title={{i18n \"discourse_ai.ai_persona.tool_options\"}}\n            @direction=\"column\"\n            @format=\"full\"\n          >\n            <@form.Object\n              @name=\"toolOptions\"\n              @title={{i18n \"discourse_ai.ai_persona.tool_options\"}}\n              as |toolObj optsPerTool|\n            >\n              {{#each (this.formObjectKeys optsPerTool) as |toolId|}}\n                <div class=\"ai-persona-editor__tool-options\">\n                  {{#let (get this.toolsMetadata toolId) as |toolMeta|}}\n                    <div class=\"ai-persona-editor__tool-options-name\">\n                      {{toolMeta.name}}\n                    </div>\n                    <toolObj.Object @name={{toolId}} as |optionsObj|>\n                      {{#each (this.toolOptionKeys toolId) as |optionName|}}\n                        {{#let (get toolMeta optionName) as |optionMeta|}}\n                          <optionsObj.Field\n                            @name={{optionName}}\n                            @title={{optionMeta.name}}\n                            @helpText={{optionMeta.description}}\n                            @format=\"full\"\n                            as |field|\n                          >\n                            {{#if (eq optionMeta.type \"enum\")}}\n                              <field.Select @includeNone={{false}} as |select|>\n                                {{#each optionMeta.values as |v|}}\n                                  <select.Option @value={{v}}>{{v}}</select.Option>\n                                {{/each}}\n                              </field.Select>\n                            {{else if (eq optionMeta.type \"llm\")}}\n                              <field.Custom>\n                                <AiLlmSelector\n                                  @value={{field.value}}\n                                  @llms={{@llms}}\n                                  @onChange={{field.set}}\n                                  @class=\"ai-persona-tool-option-editor__llms\"\n                                />\n                              </field.Custom>\n                            {{else if (eq optionMeta.type \"boolean\")}}\n                              <field.Checkbox />\n                            {{else}}\n                              <field.Input />\n                            {{/if}}\n                          </optionsObj.Field>\n                        {{/let}}\n                      {{/each}}\n                    </toolObj.Object>\n                  {{/let}}\n                </div>\n              {{/each}}\n            </@form.Object>\n          </@form.Container>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"FyUiSBtg\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showToolOptions\\\"]],[[[1,\\\"      \\\"],[8,[30,1,[\\\"Container\\\"]],null,[[\\\"@title\\\",\\\"@direction\\\",\\\"@format\\\"],[[28,[32,0],[\\\"discourse_ai.ai_persona.tool_options\\\"],null],\\\"column\\\",\\\"full\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,1,[\\\"Object\\\"]],null,[[\\\"@name\\\",\\\"@title\\\"],[\\\"toolOptions\\\",[28,[32,0],[\\\"discourse_ai.ai_persona.tool_options\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[28,[30,0,[\\\"formObjectKeys\\\"]],[[30,3]],null]],null]],null],null,[[[1,\\\"            \\\"],[10,0],[14,0,\\\"ai-persona-editor__tool-options\\\"],[12],[1,\\\"\\\\n\\\"],[44,[[28,[32,1],[[30,0,[\\\"toolsMetadata\\\"]],[30,4]],null]],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"ai-persona-editor__tool-options-name\\\"],[12],[1,\\\"\\\\n                  \\\"],[1,[30,5,[\\\"name\\\"]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[8,[30,2,[\\\"Object\\\"]],null,[[\\\"@name\\\"],[[30,4]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[28,[30,0,[\\\"toolOptionKeys\\\"]],[[30,4]],null]],null]],null],null,[[[44,[[28,[32,1],[[30,5],[30,7]],null]],[[[1,\\\"                      \\\"],[8,[30,6,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@helpText\\\",\\\"@format\\\"],[[30,7],[30,8,[\\\"name\\\"]],[30,8,[\\\"description\\\"]],\\\"full\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[28,[32,2],[[30,8,[\\\"type\\\"]],\\\"enum\\\"],null],[[[1,\\\"                          \\\"],[8,[30,9,[\\\"Select\\\"]],null,[[\\\"@includeNone\\\"],[false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,8,[\\\"values\\\"]]],null]],null],null,[[[1,\\\"                              \\\"],[8,[30,10,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,11]]],[[\\\"default\\\"],[[[[1,[30,11]]],[]]]]],[1,\\\"\\\\n\\\"]],[11]],null],[1,\\\"                          \\\"]],[10]]]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[32,2],[[30,8,[\\\"type\\\"]],\\\"llm\\\"],null],[[[1,\\\"                          \\\"],[8,[30,9,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                            \\\"],[8,[32,3],null,[[\\\"@value\\\",\\\"@llms\\\",\\\"@onChange\\\",\\\"@class\\\"],[[30,9,[\\\"value\\\"]],[30,12],[30,9,[\\\"set\\\"]],\\\"ai-persona-tool-option-editor__llms\\\"]],null],[1,\\\"\\\\n                          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[32,2],[[30,8,[\\\"type\\\"]],\\\"boolean\\\"],null],[[[1,\\\"                          \\\"],[8,[30,9,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                          \\\"],[8,[30,9,[\\\"Input\\\"]],null,null,null],[1,\\\"\\\\n                        \\\"]],[]]]],[]]]],[]]],[1,\\\"                      \\\"]],[9]]]]],[1,\\\"\\\\n\\\"]],[8]]]],[7]],null],[1,\\\"                \\\"]],[6]]]]],[1,\\\"\\\\n\\\"]],[5]]],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"        \\\"]],[2,3]]]]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@form\\\",\\\"toolObj\\\",\\\"optsPerTool\\\",\\\"toolId\\\",\\\"toolMeta\\\",\\\"optionsObj\\\",\\\"optionName\\\",\\\"optionMeta\\\",\\\"field\\\",\\\"select\\\",\\\"v\\\",\\\"@llms\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\",\\\"let\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-persona-tool-options.js\",\n      \"scope\": () => [_discourseI18n.i18n, _object.get, _truthHelpers.eq, _aiLlmSelector.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/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/helpers/concat-class\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/decorators\", \"discourse/lib/text\", \"discourse/lib/utilities\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-helper-loading\", \"discourse/plugins/discourse-ai/discourse/components/ai-helper-options-list\", \"discourse/plugins/discourse-ai/discourse/lib/smooth-streamer\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _willDestroy, _service, _emberModifier, _truthHelpers, _cookText, _dButton, _fastEdit, _fastEdit2, _concatClass, _ajax, _ajaxError, _decorators, _text, _utilities, _discourseI18n, _aiHelperLoading, _aiHelperOptionsList, _smoothStreamer3, _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    static #_20 = (() => dt7948.g(this.prototype, \"smoothStreamer\", [_tracking.tracked], function () {\n      return new _smoothStreamer3.default(() => this.suggestion, newValue => this.suggestion = newValue);\n    }))();\n    #smoothStreamer = (() => (dt7948.i(this, \"smoothStreamer\"), 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 #_21 = (() => 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    set progressChannel(value) {\n      if (this._progressChannel) {\n        this.unsubscribe();\n      }\n      this._progressChannel = value;\n      this.subscribe();\n    }\n    subscribe() {\n      this.messageBus.subscribe(this._progressChannel, this._updateResult, 0);\n    }\n    unsubscribe() {\n      if (!this._progressChannel) {\n        return;\n      }\n      this.messageBus.unsubscribe(this._progressChannel, this._updateResult);\n      this._progressChannel = null;\n    }\n    static #_22 = (() => dt7948.n(this.prototype, \"unsubscribe\", [_decorators.bind]))();\n    async _updateResult(result) {\n      this.streaming = !result.done;\n      await this.smoothStreamer.updateResult(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      try {\n        if (streamableOptions.includes(option.name)) {\n          const streamedResult = await this._handleStreamedResult(option);\n          this.progressChannel = streamedResult.progress_channel;\n          return;\n        } else {\n          this._activeAiRequest = (0, _ajax.ajax)(\"/discourse-ai/ai-helper/suggest\", {\n            method: \"POST\",\n            data: {\n              mode: option.name,\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        }).finally(() => {\n          this.loading = false;\n          this.menuState = this.MENU_STATES.result;\n        });\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\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          location: \"post\",\n          mode: option.name,\n          text: this.args.data.quoteState.buffer,\n          post_id: this.args.data.quoteState.postId,\n          custom_prompt: this.customPromptValue,\n          client_id: this.messageBus.clientId\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      // reset state and close\n      this.suggestion = \"\";\n      this.customPromptValue = \"\";\n      return this.args.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.quoteState.buffer} ^[${sanitizedSuggestion} (${credits})]`;\n          const newRaw = result.raw.replace(this.args.data.quoteState.buffer, 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.quoteState.buffer}}\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                {{willDestroy this.unsubscribe}}\n              >\n                {{#if this.suggestion}}\n                  <div\n                    class={{concatClass\n                      (if this.smoothStreamer.isStreaming \"streaming\")\n                      \"streamable-content\"\n                      \"ai-post-helper__suggestion__text\"\n                    }}\n                    dir=\"auto\"\n                  >\n                    <CookText\n                      @rawText={{this.smoothStreamer.renderedText}}\n                      class=\"cooked\"\n                    />\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\": \"uIh/QidT\",\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,[\\\"quoteState\\\",\\\"buffer\\\"]]],[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,[\\\"unsubscribe\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"suggestion\\\"]],[[[1,\\\"              \\\"],[10,0],[15,0,[28,[32,5],[[52,[30,0,[\\\"smoothStreamer\\\",\\\"isStreaming\\\"]],\\\"streaming\\\"],\\\"streamable-content\\\",\\\"ai-post-helper__suggestion__text\\\"],null]],[14,\\\"dir\\\",\\\"auto\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[32,6],[[24,0,\\\"cooked\\\"]],[[\\\"@rawText\\\"],[[30,0,[\\\"smoothStreamer\\\",\\\"renderedText\\\"]]]],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, _truthHelpers.eq, _aiHelperOptionsList.default, _aiHelperLoading.default, _willDestroy.default, _concatClass.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-search-discoveries-tooltip\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/helpers/d-icon\", \"discourse-i18n\", \"float-kit/components/d-tooltip\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _dButton, _dIcon, _discourseI18n, _dTooltip, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiSearchDiscoveriesTooltip extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"discobotDiscoveries\", [_service.service]))();\n    #discobotDiscoveries = (() => (dt7948.i(this, \"discobotDiscoveries\"), void 0))();\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <span class=\"ai-search-discoveries-tooltip\">\n          <DTooltip @placement=\"top-end\" @interactive={{true}}>\n            <:trigger>\n              {{icon \"circle-info\"}}\n            </:trigger>\n            <:content>\n              <div class=\"ai-search-discoveries-tooltip__content\">\n                <div class=\"ai-search-discoveries-tooltip__header\">\n                  {{i18n \"discourse_ai.discobot_discoveries.tooltip.header\"}}\n                </div>\n    \n                <div class=\"ai-search-discoveries-tooltip__description\">\n                  {{#if this.discobotDiscoveries.modelUsed}}\n                    {{i18n\n                      \"discourse_ai.discobot_discoveries.tooltip.content\"\n                      model=this.discobotDiscoveries.modelUsed\n                    }}\n                  {{/if}}\n                </div>\n    \n                <div class=\"ai-search-discoveries-tooltip__actions\">\n                  <DButton\n                    class=\"btn-transparent btn-primary\"\n                    @label=\"discourse_ai.discobot_discoveries.tooltip.actions.info\"\n                    @href=\"https://meta.discourse.org/t/conversational-ai-search-coming-to-discourse-ai/355939\"\n                  />\n                  <DButton\n                    class=\"btn-transparent btn-danger\"\n                    @label=\"discourse_ai.discobot_discoveries.tooltip.actions.disable\"\n                    @action={{this.discobotDiscoveries.disableDiscoveries}}\n                  />\n                </div>\n              </div>\n            </:content>\n          </DTooltip>\n        </span>\n      \n    */\n    {\n      \"id\": \"0UF2Kv3u\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,1],[14,0,\\\"ai-search-discoveries-tooltip\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,0],null,[[\\\"@placement\\\",\\\"@interactive\\\"],[\\\"top-end\\\",true]],[[\\\"trigger\\\",\\\"content\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[32,1],[\\\"circle-info\\\"],null]],[1,\\\"\\\\n        \\\"]],[]],[[[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"ai-search-discoveries-tooltip__content\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"ai-search-discoveries-tooltip__header\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[28,[32,2],[\\\"discourse_ai.discobot_discoveries.tooltip.header\\\"],null]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[10,0],[14,0,\\\"ai-search-discoveries-tooltip__description\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"discobotDiscoveries\\\",\\\"modelUsed\\\"]],[[[1,\\\"                \\\"],[1,[28,[32,2],[\\\"discourse_ai.discobot_discoveries.tooltip.content\\\"],[[\\\"model\\\"],[[30,0,[\\\"discobotDiscoveries\\\",\\\"modelUsed\\\"]]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[10,0],[14,0,\\\"ai-search-discoveries-tooltip__actions\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[32,3],[[24,0,\\\"btn-transparent btn-primary\\\"]],[[\\\"@label\\\",\\\"@href\\\"],[\\\"discourse_ai.discobot_discoveries.tooltip.actions.info\\\",\\\"https://meta.discourse.org/t/conversational-ai-search-coming-to-discourse-ai/355939\\\"]],null],[1,\\\"\\\\n              \\\"],[8,[32,3],[[24,0,\\\"btn-transparent btn-danger\\\"]],[[\\\"@label\\\",\\\"@action\\\"],[\\\"discourse_ai.discobot_discoveries.tooltip.actions.disable\\\",[30,0,[\\\"discobotDiscoveries\\\",\\\"disableDiscoveries\\\"]]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-search-discoveries-tooltip.js\",\n      \"scope\": () => [_dTooltip.default, _dIcon.default, _discourseI18n.i18n, _dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiSearchDiscoveriesTooltip;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-search-discoveries\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/render-modifiers/modifiers/did-update\", \"@ember/render-modifiers/modifiers/will-destroy\", \"@ember/runloop\", \"@ember/service\", \"discourse/components/cook-text\", \"discourse/components/d-button\", \"discourse/helpers/concat-class\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/decorators\", \"discourse/lib/plugin-api\", \"discourse/lib/url\", \"discourse/models/topic\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/lib/smooth-streamer\", \"discourse/plugins/discourse-ai/discourse/components/ai-blinking-animation\", \"discourse/plugins/discourse-ai/discourse/components/ai-indicator-wave\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _didInsert, _didUpdate, _willDestroy, _runloop, _service, _cookText, _dButton, _concatClass, _ajax, _ajaxError, _decorators, _pluginApi, _url, _topic, _discourseI18n, _smoothStreamer3, _aiBlinkingAnimation, _aiIndicatorWave, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DISCOVERY_TIMEOUT_MS = 10000;\n  class AiSearchDiscoveries 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, \"messageBus\", [_service.service]))();\n    #messageBus = (() => (dt7948.i(this, \"messageBus\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"discobotDiscoveries\", [_service.service]))();\n    #discobotDiscoveries = (() => (dt7948.i(this, \"discobotDiscoveries\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"appEvents\", [_service.service]))();\n    #appEvents = (() => (dt7948.i(this, \"appEvents\"), 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, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"composer\", [_service.service]))();\n    #composer = (() => (dt7948.i(this, \"composer\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"loadingConversationTopic\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loadingConversationTopic = (() => (dt7948.i(this, \"loadingConversationTopic\"), void 0))();\n    static #_9 = (() => dt7948.g(this.prototype, \"hideDiscoveries\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #hideDiscoveries = (() => (dt7948.i(this, \"hideDiscoveries\"), void 0))();\n    static #_10 = (() => dt7948.g(this.prototype, \"fullDiscoveryToggled\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #fullDiscoveryToggled = (() => (dt7948.i(this, \"fullDiscoveryToggled\"), void 0))();\n    static #_11 = (() => dt7948.g(this.prototype, \"discoveryPreviewLength\", [_tracking.tracked], function () {\n      return this.args.discoveryPreviewLength || 150;\n    }))();\n    #discoveryPreviewLength = (() => (dt7948.i(this, \"discoveryPreviewLength\"), void 0))();\n    static #_12 = (() => dt7948.g(this.prototype, \"smoothStreamer\", [_tracking.tracked], function () {\n      return new _smoothStreamer3.default(() => this.discobotDiscoveries.discovery, newValue => this.discobotDiscoveries.discovery = newValue);\n    }))();\n    #smoothStreamer = (() => (dt7948.i(this, \"smoothStreamer\"), void 0))();\n    discoveryTimeout = null;\n    constructor() {\n      super(...arguments);\n      this.appEvents.on(\"full-page-search:trigger-search\", this, this.triggerDiscovery);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      this.appEvents.off(\"full-page-search:trigger-search\", this, this.triggerDiscovery);\n    }\n    detectSearch() {\n      if (this.query?.length === 0 && this.discobotDiscoveries.discovery?.length > 0) {\n        this.discobotDiscoveries.resetDiscovery();\n        this.smoothStreamer.resetStreaming();\n      }\n      (0, _pluginApi.withPluginApi)(api => {\n        api.addSearchMenuOnKeyDownCallback((searchMenu, event) => {\n          if (!searchMenu) {\n            return;\n          }\n          if (this.discobotDiscoveries.lastQuery === this.query) {\n            return true;\n          }\n          if (event.key === \"Enter\" && this.query) {\n            this.triggerDiscovery();\n          }\n          return true;\n        });\n      });\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"detectSearch\", [_decorators.bind]))();\n    async _updateDiscovery(update) {\n      if (this.query === update.query) {\n        if (this.discoveryTimeout) {\n          (0, _runloop.cancel)(this.discoveryTimeout);\n        }\n        if (!this.discobotDiscoveries.discovery) {\n          this.discobotDiscoveries.discovery = \"\";\n        }\n        this.discobotDiscoveries.modelUsed = update.model_used;\n        this.discobotDiscoveries.loadingDiscoveries = false;\n        this.smoothStreamer.updateResult(update, \"ai_discover_reply\");\n      }\n    }\n    static #_14 = (() => dt7948.n(this.prototype, \"_updateDiscovery\", [_decorators.bind]))();\n    unsubscribe() {\n      this.messageBus.unsubscribe(\"/discourse-ai/ai-bot/discover\", this._updateDiscovery);\n    }\n    static #_15 = (() => dt7948.n(this.prototype, \"unsubscribe\", [_decorators.bind]))();\n    subscribe() {\n      this.messageBus.subscribe(\"/discourse-ai/ai-bot/discover\", this._updateDiscovery);\n    }\n    static #_16 = (() => dt7948.n(this.prototype, \"subscribe\", [_decorators.bind]))();\n    get query() {\n      return this.args?.searchTerm || this.search.activeGlobalSearchTerm;\n    }\n    get toggleLabel() {\n      if (this.fullDiscoveryToggled) {\n        return \"discourse_ai.discobot_discoveries.collapse\";\n      } else {\n        return \"discourse_ai.discobot_discoveries.tell_me_more\";\n      }\n    }\n    get toggleIcon() {\n      if (this.fullDiscoveryToggled) {\n        return \"chevron-up\";\n      } else {\n        return \"\";\n      }\n    }\n    get canShowExpandtoggle() {\n      return !this.discobotDiscoveries.loadingDiscoveries && this.smoothStreamer.renderedText.length > this.discoveryPreviewLength;\n    }\n    get renderPreviewOnly() {\n      return !this.fullDiscoveryToggled && this.canShowExpandtoggle;\n    }\n    get canContinueConversation() {\n      const personas = this.currentUser?.ai_enabled_personas;\n      if (!personas) {\n        return false;\n      }\n      if (this.discobotDiscoveries.discoveryTimedOut) {\n        return false;\n      }\n      const discoverPersona = personas.find(persona => persona.id === parseInt(this.siteSettings?.ai_bot_discover_persona, 10));\n      const discoverPersonaHasBot = discoverPersona?.username;\n      return this.discobotDiscoveries.discovery?.length > 0 && !this.smoothStreamer.isStreaming && discoverPersonaHasBot;\n    }\n    get continueConvoBtnLabel() {\n      if (this.loadingConversationTopic) {\n        return \"discourse_ai.discobot_discoveries.loading_convo\";\n      }\n      return \"discourse_ai.discobot_discoveries.continue_convo\";\n    }\n    async triggerDiscovery() {\n      if (this.query?.length === 0) {\n        this.discobotDiscoveries.resetDiscovery();\n        this.smoothStreamer.resetStreaming();\n        return;\n      }\n      if (this.discobotDiscoveries.lastQuery === this.query) {\n        this.hideDiscoveries = false;\n        return;\n      } else {\n        this.smoothStreamer.resetStreaming();\n        this.discobotDiscoveries.resetDiscovery();\n      }\n      this.hideDiscoveries = false;\n      this.discobotDiscoveries.loadingDiscoveries = true;\n      this.discoveryTimeout = (0, _runloop.later)(this, this.timeoutDiscovery, DISCOVERY_TIMEOUT_MS);\n      try {\n        this.discobotDiscoveries.lastQuery = this.query;\n        await (0, _ajax.ajax)(\"/discourse-ai/ai-bot/discover\", {\n          data: {\n            query: this.query\n          }\n        });\n      } catch {\n        this.hideDiscoveries = true;\n      }\n    }\n    static #_17 = (() => dt7948.n(this.prototype, \"triggerDiscovery\", [_object.action]))();\n    toggleDiscovery() {\n      this.fullDiscoveryToggled = !this.fullDiscoveryToggled;\n    }\n    static #_18 = (() => dt7948.n(this.prototype, \"toggleDiscovery\", [_object.action]))();\n    async continueConversation() {\n      const data = {\n        user_id: this.currentUser.id,\n        query: this.query,\n        context: this.discobotDiscoveries.discovery\n      };\n      try {\n        this.loadingConversationTopic = true;\n        const continueRequest = await (0, _ajax.ajax)(`/discourse-ai/ai-bot/discover/continue-convo`, {\n          type: \"POST\",\n          data\n        });\n        const topicJSON = await _topic.default.find(continueRequest.topic_id, {});\n        const topic = _topic.default.create(topicJSON);\n        _url.default.routeTo(`/t/${continueRequest.topic_id}`, {\n          afterRouteComplete: () => {\n            if (this.args.closeSearchMenu) {\n              this.args.closeSearchMenu();\n            }\n            this.composer.focusComposer({\n              topic\n            });\n          }\n        });\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      } finally {\n        this.loadingConversationTopic = false;\n      }\n    }\n    static #_19 = (() => dt7948.n(this.prototype, \"continueConversation\", [_object.action]))();\n    timeoutDiscovery() {\n      if (this.discobotDiscoveries.discovery?.length > 0) {\n        return;\n      }\n      this.discobotDiscoveries.loadingDiscoveries = false;\n      this.discobotDiscoveries.discovery = \"\";\n      this.discobotDiscoveries.discoveryTimedOut = true;\n    }\n    static #_20 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div\n          class=\"ai-search-discoveries\"\n          {{didInsert this.subscribe this.query}}\n          {{didUpdate this.subscribe this.query}}\n          {{didUpdate this.detectSearch this.query}}\n          {{didInsert this.triggerDiscovery this.query}}\n          {{willDestroy this.unsubscribe}}\n        >\n          <div class=\"ai-search-discoveries__completion\">\n            {{#if this.discobotDiscoveries.loadingDiscoveries}}\n              <AiBlinkingAnimation />\n            {{else if this.discobotDiscoveries.discoveryTimedOut}}\n              {{i18n \"discourse_ai.discobot_discoveries.timed_out\"}}\n            {{else}}\n              <article\n                class={{concatClass\n                  \"ai-search-discoveries__discovery\"\n                  (if this.renderPreviewOnly \"preview\")\n                  (if this.smoothStreamer.isStreaming \"streaming\")\n                  \"streamable-content\"\n                }}\n              >\n                <CookText\n                  @rawText={{this.smoothStreamer.renderedText}}\n                  class=\"cooked\"\n                />\n              </article>\n    \n              {{#if this.canShowExpandtoggle}}\n                <DButton\n                  class=\"btn-flat btn-text ai-search-discoveries__toggle\"\n                  @label={{this.toggleLabel}}\n                  @icon={{this.toggleIcon}}\n                  @action={{this.toggleDiscovery}}\n                />\n              {{/if}}\n            {{/if}}\n          </div>\n    \n          {{#if this.canContinueConversation}}\n            <div class=\"ai-search-discoveries__continue-conversation\">\n              <DButton\n                @action={{this.continueConversation}}\n                @label={{this.continueConvoBtnLabel}}\n                class=\"btn-small\"\n              >\n                <AiIndicatorWave @loading={{this.loadingConversationTopic}} />\n              </DButton>\n            </div>\n          {{/if}}\n        </div>\n      \n    */\n    {\n      \"id\": \"beVZ2Biz\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[11,0],[24,0,\\\"ai-search-discoveries\\\"],[4,[32,0],[[30,0,[\\\"subscribe\\\"]],[30,0,[\\\"query\\\"]]],null],[4,[32,1],[[30,0,[\\\"subscribe\\\"]],[30,0,[\\\"query\\\"]]],null],[4,[32,1],[[30,0,[\\\"detectSearch\\\"]],[30,0,[\\\"query\\\"]]],null],[4,[32,0],[[30,0,[\\\"triggerDiscovery\\\"]],[30,0,[\\\"query\\\"]]],null],[4,[32,2],[[30,0,[\\\"unsubscribe\\\"]]],null],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"ai-search-discoveries__completion\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"discobotDiscoveries\\\",\\\"loadingDiscoveries\\\"]],[[[1,\\\"          \\\"],[8,[32,3],null,null,null],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"discobotDiscoveries\\\",\\\"discoveryTimedOut\\\"]],[[[1,\\\"          \\\"],[1,[28,[32,4],[\\\"discourse_ai.discobot_discoveries.timed_out\\\"],null]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[10,\\\"article\\\"],[15,0,[28,[32,5],[\\\"ai-search-discoveries__discovery\\\",[52,[30,0,[\\\"renderPreviewOnly\\\"]],\\\"preview\\\"],[52,[30,0,[\\\"smoothStreamer\\\",\\\"isStreaming\\\"]],\\\"streaming\\\"],\\\"streamable-content\\\"],null]],[12],[1,\\\"\\\\n            \\\"],[8,[32,6],[[24,0,\\\"cooked\\\"]],[[\\\"@rawText\\\"],[[30,0,[\\\"smoothStreamer\\\",\\\"renderedText\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"canShowExpandtoggle\\\"]],[[[1,\\\"            \\\"],[8,[32,7],[[24,0,\\\"btn-flat btn-text ai-search-discoveries__toggle\\\"]],[[\\\"@label\\\",\\\"@icon\\\",\\\"@action\\\"],[[30,0,[\\\"toggleLabel\\\"]],[30,0,[\\\"toggleIcon\\\"]],[30,0,[\\\"toggleDiscovery\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"]],[]]]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"canContinueConversation\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"ai-search-discoveries__continue-conversation\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,7],[[24,0,\\\"btn-small\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"continueConversation\\\"]],[30,0,[\\\"continueConvoBtnLabel\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[32,8],null,[[\\\"@loading\\\"],[[30,0,[\\\"loadingConversationTopic\\\"]]]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[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-search-discoveries.js\",\n      \"scope\": () => [_didInsert.default, _didUpdate.default, _willDestroy.default, _aiBlinkingAnimation.default, _discourseI18n.i18n, _concatClass.default, _cookText.default, _dButton.default, _aiIndicatorWave.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiSearchDiscoveries;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-sentiment-horizontal-bar\", [\"exports\", \"@ember/helper\", \"@ember/template\", \"truth-helpers\", \"discourse-i18n\", \"float-kit/components/d-tooltip\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _helper, _template, _truthHelpers, _discourseI18n, _dTooltip, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const AiSentimentHorizontalBar = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n    {{#if (gt @score 0)}}\n      <DTooltip\n        class={{concat \"sentiment-horizontal-bar__\" @type}}\n        style={{htmlSafe (concat \"width: \" @width \"%\")}}\n      >\n        <:trigger>\n          <span class=\"sentiment-horizontal-bar__count\">\n            {{@score}}\n          </span>\n        </:trigger>\n        <:content>\n          {{i18n\n            (concat\n              \"discourse_ai.sentiments.sentiment_analysis.filter_types.\" @type\n            )\n          }}:\n          {{@score}}\n        </:content>\n      </DTooltip>\n    {{/if}}\n  \n  */\n  {\n    \"id\": \"RxLInASj\",\n    \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[28,[32,0],[[30,1],0],null],[[[1,\\\"    \\\"],[8,[32,1],[[16,0,[28,[32,2],[\\\"sentiment-horizontal-bar__\\\",[30,2]],null]],[16,5,[28,[32,3],[[28,[32,2],[\\\"width: \\\",[30,3],\\\"%\\\"],null]],null]]],null,[[\\\"trigger\\\",\\\"content\\\"],[[[[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"sentiment-horizontal-bar__count\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[30,1]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[1,[28,[32,4],[[28,[32,2],[\\\"discourse_ai.sentiments.sentiment_analysis.filter_types.\\\",[30,2]],null]],null]],[1,\\\":\\\\n        \\\"],[1,[30,1]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@score\\\",\\\"@type\\\",\\\"@width\\\"],false,[\\\"if\\\"]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-sentiment-horizontal-bar.js\",\n    \"scope\": () => [_truthHelpers.gt, _dTooltip.default, _helper.concat, _template.htmlSafe, _discourseI18n.i18n],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"ai-sentiment-horizontal-bar:AiSentimentHorizontalBar\"));\n  var _default = _exports.default = AiSentimentHorizontalBar;\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/d-icon\", \"discourse/helpers/with-event-value\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/get-url\", \"discourse-i18n\", \"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, _dIcon, _withEventValue, _ajax, _ajaxError, _getUrl, _discourseI18n, _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, \"toasts\", [_service.service]))();\n    #toasts = (() => (dt7948.i(this, \"toasts\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    static #_3 = (() => 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 #_4 = (() => dt7948.g(this.prototype, \"isEnabled\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isEnabled = (() => (dt7948.i(this, \"isEnabled\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"selectedLLM\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #selectedLLM = (() => (dt7948.i(this, \"selectedLLM\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"selectedPersonaId\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #selectedPersonaId = (() => (dt7948.i(this, \"selectedPersonaId\"), 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, _discourseI18n.i18n)(\"discourse_ai.spam.errors.scan_not_admin.message\"),\n          button: {\n            label: (0, _discourseI18n.i18n)(\"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, _discourseI18n.i18n)(\"discourse_ai.spam.errors.resolved\")\n            },\n            duration: \"short\"\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 = 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      this.selectedPersonaId = model.ai_persona_id;\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;\n    }\n    async updateLLM(value) {\n      this.selectedLLM = value;\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"updateLLM\", [_object.action]))();\n    async updatePersona(value) {\n      this.selectedPersonaId = value;\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"updatePersona\", [_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            ai_persona_id: this.selectedPersonaId\n          }\n        });\n        this.toasts.success({\n          data: {\n            message: (0, _discourseI18n.i18n)(\"discourse_ai.spam.settings_saved\")\n          },\n          duration: \"short\"\n        });\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      }\n    }\n    static #_14 = (() => 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 #_15 = (() => dt7948.n(this.prototype, \"showTestModal\", [_object.action]))();\n    get metrics() {\n      const detected = {\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.spam.spam_detected\"),\n        value: this.stats.spam_detected\n      };\n      const falsePositives = {\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.spam.false_positives\"),\n        value: this.stats.false_positives,\n        tooltip: (0, _discourseI18n.i18n)(\"discourse_ai.spam.stat_tooltips.incorrectly_flagged\")\n      };\n      const falseNegatives = {\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.spam.false_negatives\"),\n        value: this.stats.false_negatives,\n        tooltip: (0, _discourseI18n.i18n)(\"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, _discourseI18n.i18n)(\"discourse_ai.spam.scanned_count\"),\n        value: this.stats.scanned_count\n      }, detected, falsePositives, falseNegatives];\n    }\n    static #_16 = (() => (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                  {{icon \"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__persona\">\n              <label class=\"ai-spam__persona-label\">{{i18n\n                  \"discourse_ai.spam.select_persona\"\n                }}</label>\n              <ComboBox\n                @value={{this.selectedPersonaId}}\n                @content={{@model.available_personas}}\n                @onChange={{this.updatePersona}}\n                class=\"ai-spam__persona-selector\"\n              />\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\": \"ezZxWZ3g\",\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__persona\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[14,0,\\\"ai-spam__persona-label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.spam.select_persona\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,7],[[24,0,\\\"ai-spam__persona-selector\\\"]],[[\\\"@value\\\",\\\"@content\\\",\\\"@onChange\\\"],[[30,0,[\\\"selectedPersonaId\\\"]],[30,2,[\\\"available_personas\\\"]],[30,0,[\\\"updatePersona\\\"]]]],null],[1,\\\"\\\\n        \\\"],[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,3,[\\\"Tile\\\"]],null,[[\\\"@label\\\",\\\"@url\\\",\\\"@value\\\",\\\"@tooltip\\\"],[[30,4,[\\\"label\\\"]],[30,4,[\\\"href\\\"]],[30,4,[\\\"value\\\"]],[30,4,[\\\"tooltip\\\"]]]],null],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"          \\\"]],[3]]]]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"e\\\",\\\"@model\\\",\\\"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, _discourseI18n.i18n, _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\", \"truth-helpers\", \"discourse/components/d-button\", \"discourse/helpers/category-badge\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"float-kit/components/d-menu\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _modifier, _object, _service, _truthHelpers, _dButton, _categoryBadge, _ajax, _ajaxError, _dMenu, _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, \"suggestions\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #suggestions = (() => (dt7948.i(this, \"suggestions\"), 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, \"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 suggestionIds = result.assistant.map(s => s.id);\n          const suggestedCategories = this.site.categories.filter(category => suggestionIds.includes(category.id));\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 #_5 = (() => 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          if (Array.isArray(suggestion)) {\n            this.args.updateAction([...suggestion]);\n          } else {\n            this.args.updateAction([suggestion]);\n          }\n        }\n        return menu.close();\n      }\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"applySuggestion\", [_object.action]))();\n    static #_7 = (() => (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, _truthHelpers.eq, _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\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-blinking-animation\", \"discourse/plugins/discourse-ai/discourse/components/ai-indicator-wave\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _discourseI18n, _aiBlinkingAnimation, _aiIndicatorWave, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const AiSummarySkeleton = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n    <div class=\"ai-summary__container\">\n      <AiBlinkingAnimation />\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\": \"ndQrZh9f\",\n    \"block\": \"[[[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"ai-summary__container\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[32,0],null,null,null],[1,\\\"\\\\n\\\\n    \\\"],[10,1],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"ai-summary__generating-text\\\"],[12],[1,\\\"\\\\n        \\\"],[1,[28,[32,1],[\\\"summary.in_progress\\\"],null]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[8,[32,2],null,[[\\\"@loading\\\"],[true]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[],false,[]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-summary-skeleton.js\",\n    \"scope\": () => [_aiBlinkingAnimation.default, _discourseI18n.i18n, _aiIndicatorWave.default],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"ai-summary-skeleton:AiSummarySkeleton\"));\n  var _default = _exports.default = AiSummarySkeleton;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-tool-editor-form\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"@ember/service\", \"truth-helpers\", \"discourse/components/form\", \"discourse/lib/ajax-error\", \"discourse/lib/get-url\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/modal/ai-tool-test-modal\", \"discourse/plugins/discourse-ai/discourse/components/rag-options-fk\", \"discourse/plugins/discourse-ai/discourse/components/rag-uploader\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _service, _truthHelpers, _form, _ajaxError, _getUrl, _discourseI18n, _aiToolTestModal, _ragOptionsFk, _ragUploader, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiToolEditorForm 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, \"dialog\", [_service.service]))();\n    #dialog = (() => (dt7948.i(this, \"dialog\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"toasts\", [_service.service]))();\n    #toasts = (() => (dt7948.i(this, \"toasts\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"uploadedFiles\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #uploadedFiles = (() => (dt7948.i(this, \"uploadedFiles\"), 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    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    get formData() {\n      const parameters = (this.args.editingModel.parameters ?? []).map(parameter => {\n        const mappedParameter = {\n          ...parameter\n        };\n        mappedParameter.isEnum = parameter.enum && parameter.enum.length > 0;\n        if (!mappedParameter.isEnum) {\n          delete mappedParameter.enum;\n        }\n        return mappedParameter;\n      });\n      return {\n        name: this.args.editingModel.name || \"\",\n        tool_name: this.args.editingModel.tool_name || \"\",\n        description: this.args.editingModel.description || \"\",\n        summary: this.args.editingModel.summary || \"\",\n        parameters,\n        script: this.args.editingModel.script || \"\",\n        rag_uploads: this.args.editingModel.rag_uploads || []\n      };\n    }\n    toggleIsEnum(value, _ref) {\n      let {\n        name,\n        parentName,\n        set\n      } = _ref;\n      if (value) {\n        set(`${parentName}.enum`, [\"\"]);\n      } else {\n        set(`${parentName}.enum`, []);\n      }\n      set(name, value);\n    }\n    static #_8 = (() => dt7948.n(this.prototype, \"toggleIsEnum\", [_object.action]))();\n    async save(data) {\n      this.isSaving = true;\n      // we injected a isEnum thing, we need to clean it up\n      const copiedData = JSON.parse(JSON.stringify(data));\n      if (copiedData.parameters) {\n        copiedData.parameters.forEach(parameter => {\n          if (!parameter.isEnum) {\n            delete parameter.enum;\n          }\n          delete parameter.isEnum;\n        });\n      }\n      try {\n        await this.args.model.save(copiedData);\n        this.toasts.success({\n          data: {\n            message: (0, _discourseI18n.i18n)(\"discourse_ai.tools.saved\")\n          },\n          duration: \"short\"\n        });\n        if (!this.args.tools.any(tool => tool.id === this.args.model.id)) {\n          this.args.tools.pushObject(this.args.model);\n        }\n        await this.router.replaceWith(\"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 #_9 = (() => 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 #_10 = (() => dt7948.n(this.prototype, \"delete\", [_object.action]))();\n    updateUploads(addItemToCollection, uploads) {\n      const uniqueUploads = uploads.filter(upload => !this.uploadedFiles.some(file => file.id === upload.id));\n      addItemToCollection(\"rag_uploads\", uniqueUploads);\n      this.uploadedFiles = [...this.uploadedFiles, ...uniqueUploads];\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"updateUploads\", [_object.action]))();\n    removeUpload(form, upload) {\n      this.uploadedFiles = this.uploadedFiles.filter(file => file.id !== upload.id);\n      form.set(\"rag_uploads\", this.uploadedFiles);\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"removeUpload\", [_object.action]))();\n    openTestModal() {\n      this.modal.show(_aiToolTestModal.default, {\n        model: {\n          tool: this.args.editingModel\n        }\n      });\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"openTestModal\", [_object.action]))();\n    currentParameterSelection(data, index) {\n      return data.parameters[index].type;\n    }\n    get ragUploadsDescription() {\n      return this.siteSettings.rag_images_enabled ? (0, _discourseI18n.i18n)(\"discourse_ai.rag.uploads.description_with_images\") : (0, _discourseI18n.i18n)(\"discourse_ai.rag.uploads.description\");\n    }\n    exportTool() {\n      const exportUrl = `/admin/plugins/discourse-ai/ai-tools/${this.args.model.id}/export.json`;\n      window.location.href = (0, _getUrl.default)(exportUrl);\n    }\n    static #_14 = (() => dt7948.n(this.prototype, \"exportTool\", [_object.action]))();\n    static #_15 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <Form\n          @onSubmit={{this.save}}\n          @data={{this.formData}}\n          class=\"ai-tool-editor\"\n          as |form data|\n        >\n          {{! NAME }}\n          <form.Field\n            @name=\"name\"\n            @title={{i18n \"discourse_ai.tools.name\"}}\n            @validation=\"required|length:1,100\"\n            @format=\"large\"\n            @tooltip={{i18n \"discourse_ai.tools.name_help\"}}\n            as |field|\n          >\n            <field.Input class=\"ai-tool-editor__name\" />\n          </form.Field>\n    \n          {{! TOOL NAME }}\n          <form.Field\n            @name=\"tool_name\"\n            @title={{i18n \"discourse_ai.tools.tool_name\"}}\n            @validation=\"required|length:1,100\"\n            @format=\"large\"\n            @tooltip={{i18n \"discourse_ai.tools.tool_name_help\"}}\n            as |field|\n          >\n            <field.Input class=\"ai-tool-editor__tool_name\" />\n          </form.Field>\n    \n          {{! DESCRIPTION }}\n          <form.Field\n            @name=\"description\"\n            @title={{i18n \"discourse_ai.tools.description\"}}\n            @validation=\"required|length:1,1000\"\n            @format=\"full\"\n            @tooltip={{i18n \"discourse_ai.tools.description_help\"}}\n            as |field|\n          >\n            <field.Textarea\n              @height={{60}}\n              class=\"ai-tool-editor__description\"\n              placeholder={{i18n \"discourse_ai.tools.description_help\"}}\n            />\n          </form.Field>\n    \n          {{! SUMMARY }}\n          <form.Field\n            @name=\"summary\"\n            @title={{i18n \"discourse_ai.tools.summary\"}}\n            @validation=\"required|length:1,255\"\n            @format=\"large\"\n            @tooltip={{i18n \"discourse_ai.tools.summary_help\"}}\n            as |field|\n          >\n            <field.Input class=\"ai-tool-editor__summary\" />\n          </form.Field>\n    \n          {{! PARAMETERS }}\n          <form.Collection @name=\"parameters\" as |collection index collectionData|>\n            <form.Container class=\"ai-tool-parameter\">\n              <form.Row as |row|>\n                <row.Col @size={{6}}>\n                  <collection.Field\n                    @name=\"name\"\n                    @title={{i18n \"discourse_ai.tools.parameter_name\"}}\n                    @validation=\"required|length:1,100\"\n                    @format=\"full\"\n                    as |field|\n                  >\n                    <field.Input />\n                  </collection.Field>\n                </row.Col>\n    \n                <row.Col @size={{6}}>\n                  <collection.Field\n                    @name=\"type\"\n                    @title={{i18n \"discourse_ai.tools.parameter_type\"}}\n                    @validation=\"required\"\n                    @format=\"full\"\n                    as |field|\n                  >\n                    <field.Select as |select|>\n                      {{#each this.PARAMETER_TYPES as |type|}}\n                        <select.Option\n                          @value={{type.id}}\n                        >{{type.name}}</select.Option>\n                      {{/each}}\n                    </field.Select>\n                  </collection.Field>\n                </row.Col>\n              </form.Row>\n    \n              <form.Row as |row|>\n                <row.Col @size={{12}}>\n                  <collection.Field\n                    @name=\"description\"\n                    @title={{i18n \"discourse_ai.tools.parameter_description\"}}\n                    @validation=\"required|length:1,1000\"\n                    @format=\"full\"\n                    as |field|\n                  >\n                    <field.Input class=\"ai-tool-editor__parameter-description\" />\n                  </collection.Field>\n                </row.Col>\n              </form.Row>\n    \n              <form.Row as |row|>\n                <row.Col>\n                  <collection.Field @name=\"required\" @title=\"Required\" as |field|>\n                    <field.Checkbox />\n                  </collection.Field>\n                </row.Col>\n    \n                <row.Col>\n                  <collection.Field\n                    @name=\"isEnum\"\n                    @title=\"Enum\"\n                    @onSet={{this.toggleIsEnum}}\n                    as |field|\n                  >\n                    <field.Checkbox />\n                  </collection.Field>\n                </row.Col>\n    \n                {{#if collectionData.isEnum}}\n                  <row.Col @size={{8}}>\n                    <collection.Collection @name=\"enum\" as |child childIndex|>\n                      <form.Container class=\"ai-tool-parameter__enum-values\">\n                        <child.Field\n                          @title={{i18n \"discourse_ai.tools.enum_value\"}}\n                          @validation=\"required\"\n                          as |field|\n                        >\n                          <field.Input />\n    \n                          {{#if\n                            (and\n                              (gt collectionData.enum.length 1) (gt childIndex 0)\n                            )\n                          }}\n                            <form.Button\n                              class=\"btn-danger\"\n                              @icon=\"trash-can\"\n                              @action={{fn child.remove childIndex}}\n                            />\n                          {{/if}}\n                        </child.Field>\n                      </form.Container>\n                    </collection.Collection>\n                  </row.Col>\n    \n                  <row.Col @size={{8}}>\n                    <form.Button\n                      @icon=\"plus\"\n                      @label=\"discourse_ai.tools.add_enum_value\"\n                      @action={{fn\n                        form.addItemToCollection\n                        (concat \"parameters.\" index \".enum\")\n                        \"\"\n                      }}\n                    />\n                  </row.Col>\n                {{/if}}\n              </form.Row>\n              <form.Row as |row|>\n                <row.Col class=\"ai-tool-parameter-actions\">\n                  <form.Button\n                    @label=\"discourse_ai.tools.remove_parameter\"\n                    @icon=\"trash-can\"\n                    @action={{fn collection.remove index}}\n                    class=\"btn-danger\"\n                  />\n                </row.Col>\n              </form.Row>\n            </form.Container>\n          </form.Collection>\n    \n          <form.Button\n            @icon=\"plus\"\n            @label=\"discourse_ai.tools.add_parameter\"\n            @action={{fn\n              form.addItemToCollection\n              \"parameters\"\n              (hash\n                name=\"\" type=\"string\" description=\"\" required=false isEnum=false\n              )\n            }}\n          />\n    \n          {{! SCRIPT }}\n          <form.Field\n            @name=\"script\"\n            @title={{i18n \"discourse_ai.tools.script\"}}\n            @validation=\"required|length:1,100000\"\n            @format=\"full\"\n            as |field|\n          >\n            <field.Code @lang=\"javascript\" @height={{600}} />\n          </form.Field>\n    \n          {{! UPLOADS }}\n          {{#if this.siteSettings.ai_embeddings_enabled}}\n            <form.Field\n              @name=\"rag_uploads\"\n              @title={{i18n \"discourse_ai.rag.uploads.title\"}}\n              @tooltip={{this.ragUploadsDescription}}\n              @format=\"full\"\n              as |field|\n            >\n              <field.Custom>\n                <RagUploader\n                  @target={{@editingModel}}\n                  @updateUploads={{fn this.updateUploads form.addItemToCollection}}\n                  @onRemove={{fn this.removeUpload form}}\n                  @allowImages={{@settings.rag_images_enabled}}\n                />\n                <RagOptionsFk\n                  @form={{form}}\n                  @data={{data}}\n                  @llms={{@llms}}\n                  @allowImages={{@settings.rag_images_enabled}}\n                />\n              </field.Custom>\n            </form.Field>\n          {{/if}}\n    \n          <form.Actions>\n            {{#unless @isNew}}\n              <form.Button\n                @label=\"discourse_ai.tools.test\"\n                @action={{this.openTestModal}}\n                class=\"ai-tool-editor__test-button\"\n              />\n              <form.Button\n                @label=\"discourse_ai.tools.export\"\n                @action={{this.exportTool}}\n                class=\"ai-tool-editor__export\"\n              />\n              <form.Button\n                @label=\"discourse_ai.tools.delete\"\n                @icon=\"trash-can\"\n                @action={{this.delete}}\n                class=\"btn-danger ai-tool-editor__delete\"\n              />\n            {{/unless}}\n    \n            <form.Submit\n              @label=\"discourse_ai.tools.save\"\n              class=\"ai-tool-editor__save\"\n            />\n          </form.Actions>\n        </Form>\n      \n    */\n    {\n      \"id\": \"kA857xo2\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"ai-tool-editor\\\"]],[[\\\"@onSubmit\\\",\\\"@data\\\"],[[30,0,[\\\"save\\\"]],[30,0,[\\\"formData\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[1,\\\"      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\",\\\"@tooltip\\\"],[\\\"name\\\",[28,[32,1],[\\\"discourse_ai.tools.name\\\"],null],\\\"required|length:1,100\\\",\\\"large\\\",[28,[32,1],[\\\"discourse_ai.tools.name_help\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,3,[\\\"Input\\\"]],[[24,0,\\\"ai-tool-editor__name\\\"]],null,null],[1,\\\"\\\\n      \\\"]],[3]]]]],[1,\\\"\\\\n\\\\n\\\"],[1,\\\"      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\",\\\"@tooltip\\\"],[\\\"tool_name\\\",[28,[32,1],[\\\"discourse_ai.tools.tool_name\\\"],null],\\\"required|length:1,100\\\",\\\"large\\\",[28,[32,1],[\\\"discourse_ai.tools.tool_name_help\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,4,[\\\"Input\\\"]],[[24,0,\\\"ai-tool-editor__tool_name\\\"]],null,null],[1,\\\"\\\\n      \\\"]],[4]]]]],[1,\\\"\\\\n\\\\n\\\"],[1,\\\"      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\",\\\"@tooltip\\\"],[\\\"description\\\",[28,[32,1],[\\\"discourse_ai.tools.description\\\"],null],\\\"required|length:1,1000\\\",\\\"full\\\",[28,[32,1],[\\\"discourse_ai.tools.description_help\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,5,[\\\"Textarea\\\"]],[[24,0,\\\"ai-tool-editor__description\\\"],[16,\\\"placeholder\\\",[28,[32,1],[\\\"discourse_ai.tools.description_help\\\"],null]]],[[\\\"@height\\\"],[60]],null],[1,\\\"\\\\n      \\\"]],[5]]]]],[1,\\\"\\\\n\\\\n\\\"],[1,\\\"      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\",\\\"@tooltip\\\"],[\\\"summary\\\",[28,[32,1],[\\\"discourse_ai.tools.summary\\\"],null],\\\"required|length:1,255\\\",\\\"large\\\",[28,[32,1],[\\\"discourse_ai.tools.summary_help\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,6,[\\\"Input\\\"]],[[24,0,\\\"ai-tool-editor__summary\\\"]],null,null],[1,\\\"\\\\n      \\\"]],[6]]]]],[1,\\\"\\\\n\\\\n\\\"],[1,\\\"      \\\"],[8,[30,1,[\\\"Collection\\\"]],null,[[\\\"@name\\\"],[\\\"parameters\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,1,[\\\"Container\\\"]],[[24,0,\\\"ai-tool-parameter\\\"]],null,[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,1,[\\\"Row\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,10,[\\\"Col\\\"]],null,[[\\\"@size\\\"],[6]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,7,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"name\\\",[28,[32,1],[\\\"discourse_ai.tools.parameter_name\\\"],null],\\\"required|length:1,100\\\",\\\"full\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,11,[\\\"Input\\\"]],null,null,null],[1,\\\"\\\\n              \\\"]],[11]]]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[30,10,[\\\"Col\\\"]],null,[[\\\"@size\\\"],[6]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,7,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"type\\\",[28,[32,1],[\\\"discourse_ai.tools.parameter_type\\\"],null],\\\"required\\\",\\\"full\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,12,[\\\"Select\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"PARAMETER_TYPES\\\"]]],null]],null],null,[[[1,\\\"                    \\\"],[8,[30,13,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,14,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,14,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[14]],null],[1,\\\"                \\\"]],[13]]]]],[1,\\\"\\\\n              \\\"]],[12]]]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[10]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,1,[\\\"Row\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,15,[\\\"Col\\\"]],null,[[\\\"@size\\\"],[12]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,7,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"description\\\",[28,[32,1],[\\\"discourse_ai.tools.parameter_description\\\"],null],\\\"required|length:1,1000\\\",\\\"full\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,16,[\\\"Input\\\"]],[[24,0,\\\"ai-tool-editor__parameter-description\\\"]],null,null],[1,\\\"\\\\n              \\\"]],[16]]]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[15]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[30,1,[\\\"Row\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,17,[\\\"Col\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,7,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\"],[\\\"required\\\",\\\"Required\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,18,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n              \\\"]],[18]]]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[30,17,[\\\"Col\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,7,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@onSet\\\"],[\\\"isEnum\\\",\\\"Enum\\\",[30,0,[\\\"toggleIsEnum\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,19,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n              \\\"]],[19]]]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,9,[\\\"isEnum\\\"]],[[[1,\\\"              \\\"],[8,[30,17,[\\\"Col\\\"]],null,[[\\\"@size\\\"],[8]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,7,[\\\"Collection\\\"]],null,[[\\\"@name\\\"],[\\\"enum\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[30,1,[\\\"Container\\\"]],[[24,0,\\\"ai-tool-parameter__enum-values\\\"]],null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[8,[30,20,[\\\"Field\\\"]],null,[[\\\"@title\\\",\\\"@validation\\\"],[[28,[32,1],[\\\"discourse_ai.tools.enum_value\\\"],null],\\\"required\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      \\\"],[8,[30,22,[\\\"Input\\\"]],null,null,null],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[32,2],[[28,[32,3],[[30,9,[\\\"enum\\\",\\\"length\\\"]],1],null],[28,[32,3],[[30,21],0],null]],null],[[[1,\\\"                        \\\"],[8,[30,1,[\\\"Button\\\"]],[[24,0,\\\"btn-danger\\\"]],[[\\\"@icon\\\",\\\"@action\\\"],[\\\"trash-can\\\",[28,[32,4],[[30,20,[\\\"remove\\\"]],[30,21]],null]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                    \\\"]],[22]]]]],[1,\\\"\\\\n                  \\\"]],[]]]]],[1,\\\"\\\\n                \\\"]],[20,21]]]]],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\\n              \\\"],[8,[30,17,[\\\"Col\\\"]],null,[[\\\"@size\\\"],[8]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[30,1,[\\\"Button\\\"]],null,[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\"],[\\\"plus\\\",\\\"discourse_ai.tools.add_enum_value\\\",[28,[32,4],[[30,1,[\\\"addItemToCollection\\\"]],[28,[32,5],[\\\"parameters.\\\",[30,8],\\\".enum\\\"],null],\\\"\\\"],null]]],null],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"]],[17]]]]],[1,\\\"\\\\n          \\\"],[8,[30,1,[\\\"Row\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,23,[\\\"Col\\\"]],[[24,0,\\\"ai-tool-parameter-actions\\\"]],null,[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,1,[\\\"Button\\\"]],[[24,0,\\\"btn-danger\\\"]],[[\\\"@label\\\",\\\"@icon\\\",\\\"@action\\\"],[\\\"discourse_ai.tools.remove_parameter\\\",\\\"trash-can\\\",[28,[32,4],[[30,7,[\\\"remove\\\"]],[30,8]],null]]],null],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[23]]]]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[7,8,9]]]]],[1,\\\"\\\\n\\\\n      \\\"],[8,[30,1,[\\\"Button\\\"]],null,[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\"],[\\\"plus\\\",\\\"discourse_ai.tools.add_parameter\\\",[28,[32,4],[[30,1,[\\\"addItemToCollection\\\"]],\\\"parameters\\\",[28,[32,6],null,[[\\\"name\\\",\\\"type\\\",\\\"description\\\",\\\"required\\\",\\\"isEnum\\\"],[\\\"\\\",\\\"string\\\",\\\"\\\",false,false]]]],null]]],null],[1,\\\"\\\\n\\\\n\\\"],[1,\\\"      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@format\\\"],[\\\"script\\\",[28,[32,1],[\\\"discourse_ai.tools.script\\\"],null],\\\"required|length:1,100000\\\",\\\"full\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,24,[\\\"Code\\\"]],null,[[\\\"@lang\\\",\\\"@height\\\"],[\\\"javascript\\\",600]],null],[1,\\\"\\\\n      \\\"]],[24]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"siteSettings\\\",\\\"ai_embeddings_enabled\\\"]],[[[1,\\\"        \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"rag_uploads\\\",[28,[32,1],[\\\"discourse_ai.rag.uploads.title\\\"],null],[30,0,[\\\"ragUploadsDescription\\\"]],\\\"full\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,25,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[32,7],null,[[\\\"@target\\\",\\\"@updateUploads\\\",\\\"@onRemove\\\",\\\"@allowImages\\\"],[[30,26],[28,[32,4],[[30,0,[\\\"updateUploads\\\"]],[30,1,[\\\"addItemToCollection\\\"]]],null],[28,[32,4],[[30,0,[\\\"removeUpload\\\"]],[30,1]],null],[30,27,[\\\"rag_images_enabled\\\"]]]],null],[1,\\\"\\\\n            \\\"],[8,[32,8],null,[[\\\"@form\\\",\\\"@data\\\",\\\"@llms\\\",\\\"@allowImages\\\"],[[30,1],[30,2],[30,28],[30,27,[\\\"rag_images_enabled\\\"]]]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[25]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n      \\\"],[8,[30,1,[\\\"Actions\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[51,[30,29]],[[[1,\\\"          \\\"],[8,[30,1,[\\\"Button\\\"]],[[24,0,\\\"ai-tool-editor__test-button\\\"]],[[\\\"@label\\\",\\\"@action\\\"],[\\\"discourse_ai.tools.test\\\",[30,0,[\\\"openTestModal\\\"]]]],null],[1,\\\"\\\\n          \\\"],[8,[30,1,[\\\"Button\\\"]],[[24,0,\\\"ai-tool-editor__export\\\"]],[[\\\"@label\\\",\\\"@action\\\"],[\\\"discourse_ai.tools.export\\\",[30,0,[\\\"exportTool\\\"]]]],null],[1,\\\"\\\\n          \\\"],[8,[30,1,[\\\"Button\\\"]],[[24,0,\\\"btn-danger ai-tool-editor__delete\\\"]],[[\\\"@label\\\",\\\"@icon\\\",\\\"@action\\\"],[\\\"discourse_ai.tools.delete\\\",\\\"trash-can\\\",[30,0,[\\\"delete\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n        \\\"],[8,[30,1,[\\\"Submit\\\"]],[[24,0,\\\"ai-tool-editor__save\\\"]],[[\\\"@label\\\"],[\\\"discourse_ai.tools.save\\\"]],null],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n    \\\"]],[1,2]]]]],[1,\\\"\\\\n  \\\"]],[\\\"form\\\",\\\"data\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\",\\\"collection\\\",\\\"index\\\",\\\"collectionData\\\",\\\"row\\\",\\\"field\\\",\\\"field\\\",\\\"select\\\",\\\"type\\\",\\\"row\\\",\\\"field\\\",\\\"row\\\",\\\"field\\\",\\\"field\\\",\\\"child\\\",\\\"childIndex\\\",\\\"field\\\",\\\"row\\\",\\\"field\\\",\\\"field\\\",\\\"@editingModel\\\",\\\"@settings\\\",\\\"@llms\\\",\\\"@isNew\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\",\\\"unless\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-tool-editor-form.js\",\n      \"scope\": () => [_form.default, _discourseI18n.i18n, _truthHelpers.and, _truthHelpers.gt, _helper.fn, _helper.concat, _helper.hash, _ragUploader.default, _ragOptionsFk.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiToolEditorForm;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-tool-editor\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"discourse/components/back-button\", \"discourse/plugins/discourse-ai/discourse/components/ai-tool-editor-form\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _backButton, _aiToolEditorForm, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiToolEditor extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"store\", [_service.service]))();\n    #store = (() => (dt7948.i(this, \"store\"), void 0))();\n    get selectedPreset() {\n      if (!this.args.selectedPreset) {\n        return this.args.presets.findBy(\"preset_id\", \"empty_tool\");\n      }\n      return this.args.presets.findBy(\"preset_id\", this.args.selectedPreset);\n    }\n    get editingModel() {\n      if (this.args.model.isNew) {\n        return this.store.createRecord(\"ai-tool\", this.selectedPreset);\n      } else {\n        return this.args.model;\n      }\n    }\n    static #_2 = (() => (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        <AiToolEditorForm\n          @model={{@model}}\n          @tools={{@tools}}\n          @editingModel={{this.editingModel}}\n          @isNew={{@model.isNew}}\n          @selectedPreset={{this.selectedPreset}}\n        />\n      \n    */\n    {\n      \"id\": \"+YeIg+yc\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@route\\\",\\\"@label\\\"],[\\\"adminPlugins.show.discourse-ai-tools\\\",\\\"discourse_ai.tools.back\\\"]],null],[1,\\\"\\\\n\\\\n    \\\"],[8,[32,1],null,[[\\\"@model\\\",\\\"@tools\\\",\\\"@editingModel\\\",\\\"@isNew\\\",\\\"@selectedPreset\\\"],[[30,1],[30,2],[30,0,[\\\"editingModel\\\"]],[30,1,[\\\"isNew\\\"]],[30,0,[\\\"selectedPreset\\\"]]]],null],[1,\\\"\\\\n  \\\"]],[\\\"@model\\\",\\\"@tools\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-tool-editor.js\",\n      \"scope\": () => [_backButton.default, _aiToolEditorForm.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/helper\", \"@ember/object\", \"@ember/routing\", \"@ember/service\", \"truth-helpers\", \"discourse/components/d-breadcrumbs-item\", \"discourse/components/d-button\", \"discourse/components/d-page-subheader\", \"discourse/components/dropdown-menu\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse-i18n\", \"admin/components/admin-config-area-empty-list\", \"float-kit/components/d-menu\", \"discourse/plugins/discourse-ai/discourse/admin/models/ai-tool\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _object, _routing, _service, _truthHelpers, _dBreadcrumbsItem, _dButton, _dPageSubheader, _dropdownMenu, _ajax, _ajaxError, _discourseI18n, _adminConfigAreaEmptyList, _dMenu, _aiTool, _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 = (() => 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    get lastIndexOfPresets() {\n      return this.args.tools.resultSetMeta.presets.length - 1;\n    }\n    routeToNewTool(preset) {\n      return this.router.transitionTo(\"adminPlugins.show.discourse-ai-tools.new\", {\n        queryParams: {\n          presetId: preset.preset_id\n        }\n      });\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"routeToNewTool\", [_object.action]))();\n    importTool() {\n      // Create a hidden file input and click it\n      const fileInput = document.createElement(\"input\");\n      fileInput.type = \"file\";\n      fileInput.accept = \".json\";\n      fileInput.style.display = \"none\";\n      fileInput.onchange = event => this.handleFileSelect(event);\n      document.body.appendChild(fileInput);\n      fileInput.click();\n      document.body.removeChild(fileInput);\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"importTool\", [_object.action]))();\n    handleFileSelect(event) {\n      const file = event.target.files[0];\n      if (!file) {\n        return;\n      }\n      const reader = new FileReader();\n      reader.onload = e => {\n        try {\n          const json = JSON.parse(e.target.result);\n          this.uploadTool(json.ai_tool);\n        } catch {\n          this.dialog.alert((0, _discourseI18n.i18n)(\"discourse_ai.tools.import_error_not_json\"));\n        }\n      };\n      reader.readAsText(file);\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"handleFileSelect\", [_object.action]))();\n    uploadTool(toolData) {\n      let force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      let url = `/admin/plugins/discourse-ai/ai-tools/import.json`;\n      const payload = {\n        ai_tool: toolData\n      };\n      if (force) {\n        payload.force = true;\n      }\n      return (0, _ajax.ajax)(url, {\n        type: \"POST\",\n        data: JSON.stringify(payload),\n        contentType: \"application/json\"\n      }).then(result => {\n        let tool = _aiTool.default.create(result.ai_tool);\n        let existingTool = this.args.tools.findBy(\"id\", tool.id);\n        if (existingTool) {\n          this.args.tools.removeObject(existingTool);\n        }\n        this.args.tools.insertAt(0, tool);\n      }).catch(error => {\n        if (error.jqXHR?.status === 409) {\n          this.dialog.confirm({\n            message: (0, _discourseI18n.i18n)(\"discourse_ai.tools.import_error_conflict\", {\n              name: toolData.tool_name\n            }),\n            confirmButtonLabel: \"discourse_ai.tools.overwrite\",\n            didConfirm: () => this.uploadTool(toolData, true)\n          });\n        } else {\n          (0, _ajaxError.popupAjaxError)(error);\n        }\n      });\n    }\n    static #_7 = (() => (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>\n              <DButton\n                @translatedLabel={{i18n \"discourse_ai.tools.import\"}}\n                @icon=\"upload\"\n                class=\"btn btn-small ai-tool-list-editor__import-button\"\n                @action={{this.importTool}}\n              />\n              <DMenu\n                @triggerClass=\"btn-primary btn-small ai-tool-list-editor__new-button\"\n                @label={{i18n \"discourse_ai.tools.new\"}}\n                @icon=\"plus\"\n                @placement=\"bottom-end\"\n              >\n                <:content>\n                  <DropdownMenu as |dropdown|>\n                    {{#each @tools.resultSetMeta.presets as |preset index|}}\n                      {{#if (eq index this.lastIndexOfPresets)}}\n                        <dropdown.divider />\n                      {{/if}}\n    \n                      <dropdown.item>\n                        <DButton\n                          @translatedLabel={{preset.preset_name}}\n                          @action={{fn this.routeToNewTool preset}}\n                          class=\"btn-transparent\"\n                          data-option={{preset.preset_id}}\n                        />\n                      </dropdown.item>\n                    {{/each}}\n                  </DropdownMenu>\n    \n                </:content>\n              </DMenu>\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\": \"JdJLSec5\",\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,[32,3],[[24,0,\\\"btn btn-small ai-tool-list-editor__import-button\\\"]],[[\\\"@translatedLabel\\\",\\\"@icon\\\",\\\"@action\\\"],[[28,[32,1],[\\\"discourse_ai.tools.import\\\"],null],\\\"upload\\\",[30,0,[\\\"importTool\\\"]]]],null],[1,\\\"\\\\n          \\\"],[8,[32,4],null,[[\\\"@triggerClass\\\",\\\"@label\\\",\\\"@icon\\\",\\\"@placement\\\"],[\\\"btn-primary btn-small ai-tool-list-editor__new-button\\\",[28,[32,1],[\\\"discourse_ai.tools.new\\\"],null],\\\"plus\\\",\\\"bottom-end\\\"]],[[\\\"content\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[32,5],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,2,[\\\"resultSetMeta\\\",\\\"presets\\\"]]],null]],null],null,[[[41,[28,[32,6],[[30,4],[30,0,[\\\"lastIndexOfPresets\\\"]]],null],[[[1,\\\"                    \\\"],[8,[30,1,[\\\"divider\\\"]],null,null,null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n                  \\\"],[8,[30,1,[\\\"item\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[8,[32,3],[[24,0,\\\"btn-transparent\\\"],[16,\\\"data-option\\\",[30,3,[\\\"preset_id\\\"]]]],[[\\\"@translatedLabel\\\",\\\"@action\\\"],[[30,3,[\\\"preset_name\\\"]],[28,[32,7],[[30,0,[\\\"routeToNewTool\\\"]],[30,3]],null]]],null],[1,\\\"\\\\n                  \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[3,4]],null],[1,\\\"              \\\"]],[1]]]]],[1,\\\"\\\\n\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[]]]]],[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,1],[[28,[31,1],[[30,2]],null]],null],null,[[[1,\\\"              \\\"],[10,\\\"tr\\\"],[15,\\\"data-tool-id\\\",[30,5,[\\\"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,5,[\\\"name\\\"]]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"ai-tool-list__description\\\"],[12],[1,\\\"\\\\n                      \\\"],[1,[30,5,[\\\"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,8],[[24,0,\\\"btn btn-text btn-small\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"adminPlugins.show.discourse-ai-tools.edit\\\",[30,5]]],[[\\\"default\\\"],[[[[1,[28,[32,1],[\\\"discourse_ai.tools.edit\\\"],null]]],[]]]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[5]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[32,9],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  \\\"]],[\\\"dropdown\\\",\\\"@tools\\\",\\\"preset\\\",\\\"index\\\",\\\"tool\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\"]]\",\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, _dButton.default, _dMenu.default, _dropdownMenu.default, _truthHelpers.eq, _helper.fn, _routing.LinkTo, _adminConfigAreaEmptyList.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiToolListEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-tool-selector\", [\"exports\", \"@ember/helper\", \"select-kit/components/multi-select\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _helper, _multiSelect, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const AiToolSelector = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n    <MultiSelect\n      @value={{@value}}\n      @onChange={{@onChange}}\n      @content={{@content}}\n      @options={{hash filterable=true allowAny=false disabled=@disabled}}\n    />\n  \n  */\n  {\n    \"id\": \"gsEPc7NG\",\n    \"block\": \"[[[1,\\\"\\\\n  \\\"],[8,[32,0],null,[[\\\"@value\\\",\\\"@onChange\\\",\\\"@content\\\",\\\"@options\\\"],[[30,1],[30,2],[30,3],[28,[32,1],null,[[\\\"filterable\\\",\\\"allowAny\\\",\\\"disabled\\\"],[true,false,[30,4]]]]]],null],[1,\\\"\\\\n\\\"]],[\\\"@value\\\",\\\"@onChange\\\",\\\"@content\\\",\\\"@disabled\\\"],false,[]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-tool-selector.js\",\n    \"scope\": () => [_multiSelect.default, _helper.hash],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"ai-tool-selector:AiToolSelector\"));\n  var _default = _exports.default = AiToolSelector;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-topic-gist\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"@ember/template\", \"discourse/plugins/discourse-ai/discourse/services/gists\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _template, _gists3, _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.currentPreference === _gists3.TABLE_AI_LAYOUT && this.gists.showToggle;\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            <a href={{@topic.lastUnreadUrl}} class=\"excerpt\">\n              <div class=\"excerpt__contents\">{{this.gist}}</div>\n            </a>\n          {{else}}\n            {{#if this.escapedExcerpt}}\n              <a href={{@topic.lastUnreadUrl}} class=\"excerpt\">\n                <div class=\"excerpt__contents\">\n                  {{htmlSafe this.escapedExcerpt}}\n                </div>\n              </a>\n            {{/if}}\n          {{/if}}\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"Jq5DO/FZ\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"shouldShow\\\"]],[[[41,[30,0,[\\\"hasGist\\\"]],[[[1,\\\"        \\\"],[10,3],[15,6,[30,1,[\\\"lastUnreadUrl\\\"]]],[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,3],[15,6,[30,1,[\\\"lastUnreadUrl\\\"]]],[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,\\\"  \\\"]],[\\\"@topic\\\"],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/render-modifiers/modifiers/did-insert\", \"@ember/render-modifiers/modifiers/did-update\", \"@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/decorators\", \"discourse/lib/formatter\", \"discourse-i18n\", \"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, _didInsert, _didUpdate, _routing, _service, _truthHelpers, _conditionalLoadingSpinner, _dButton, _dPageSubheader, _dStatTiles, _dateTimeInputRange, _avatar, _concatClass, _ajax, _decorators, _formatter, _discourseI18n, _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, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), 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          timezone: this.currentUser?.user_option?.timezone || moment.tz.guess(),\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    addCurrencyChar(element) {\n      element.querySelectorAll(\".d-stat-tile__label\").forEach(label => {\n        if (label.innerText.trim() === (0, _discourseI18n.i18n)(\"discourse_ai.usage.total_spending\")) {\n          const valueElement = label.closest(\".d-stat-tile\")?.querySelector(\".d-stat-tile__value\");\n          if (valueElement) {\n            valueElement.innerText = `$${valueElement.innerText}`;\n          }\n        }\n      });\n    }\n    static #_14 = (() => dt7948.n(this.prototype, \"addCurrencyChar\", [_object.action]))();\n    takeUsers(start, end) {\n      return this.data.users.slice(start, end);\n    }\n    static #_15 = (() => 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, _discourseI18n.i18n)(\"discourse_ai.usage.total_requests\"),\n        value: this.data.summary.total_requests,\n        tooltip: (0, _discourseI18n.i18n)(\"discourse_ai.usage.stat_tooltips.total_requests\")\n      }, {\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.usage.total_tokens\"),\n        value: this.data.summary.total_tokens,\n        tooltip: (0, _discourseI18n.i18n)(\"discourse_ai.usage.stat_tooltips.total_tokens\")\n      }, {\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.usage.request_tokens\"),\n        value: this.data.summary.total_request_tokens,\n        tooltip: (0, _discourseI18n.i18n)(\"discourse_ai.usage.stat_tooltips.request_tokens\")\n      }, {\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.usage.response_tokens\"),\n        value: this.data.summary.total_response_tokens,\n        tooltip: (0, _discourseI18n.i18n)(\"discourse_ai.usage.stat_tooltips.response_tokens\")\n      }, {\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.usage.cached_tokens\"),\n        value: this.data.summary.total_cached_tokens,\n        tooltip: (0, _discourseI18n.i18n)(\"discourse_ai.usage.stat_tooltips.cached_tokens\")\n      }, {\n        label: (0, _discourseI18n.i18n)(\"discourse_ai.usage.total_spending\"),\n        value: this.data.summary.total_spending,\n        tooltip: (0, _discourseI18n.i18n)(\"discourse_ai.usage.stat_tooltips.total_spending\")\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, _discourseI18n.i18n)(\"discourse_ai.usage.response_tokens\"),\n            data: normalizedData.map(row => row.total_response_tokens),\n            backgroundColor: colors.response\n          }, {\n            label: (0, _discourseI18n.i18n)(\"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, _discourseI18n.i18n)(\"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, _discourseI18n.i18n)(\"discourse_ai.usage.periods.last_day\")\n      }, {\n        id: \"week\",\n        name: (0, _discourseI18n.i18n)(\"discourse_ai.usage.periods.last_week\")\n      }, {\n        id: \"month\",\n        name: (0, _discourseI18n.i18n)(\"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 #_16 = (() => 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 #_17 = (() => 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 #_18 = (() => dt7948.n(this.prototype, \"onCustomDateClick\", [_object.action]))();\n    onDateChange() {\n      this.isCustomDateActive = true;\n      this.selectedPeriod = null;\n      this.fetchData();\n    }\n    static #_19 = (() => 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 #_20 = (() => 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 #_21 = (() => dt7948.n(this.prototype, \"onRefreshDateRange\", [_object.action]))();\n    totalSpending(inputSpending, cachedSpending, outputSpending) {\n      const total = inputSpending + cachedSpending + outputSpending;\n      return `$${total.toFixed(2)}`;\n    }\n    static #_22 = (() => (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\n                    {{didInsert this.addCurrencyChar this.metrics}}\n                    {{didUpdate this.addCurrencyChar this.metrics}}\n                    as |tiles|\n                  >\n    \n                    {{#each this.metrics as |metric|}}\n                      <tiles.Tile\n                        class=\"bar\"\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                            <th>{{i18n \"discourse_ai.usage.total_spending\"}}</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                              <td>\n                                {{this.totalSpending\n                                  feature.input_spending\n                                  feature.cached_input_spending\n                                  feature.output_spending\n                                }}\n                              </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                            <th>{{i18n \"discourse_ai.usage.total_spending\"}}</th>\n    \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                              <td>\n                                {{this.totalSpending\n                                  model.input_spending\n                                  model.cached_input_spending\n                                  model.output_spending\n                                }}\n                              </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                            <th>{{i18n \"discourse_ai.usage.total_spending\"}}</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                              <td>\n                                {{this.totalSpending\n                                  user.input_spending\n                                  user.cached_input_spending\n                                  user.output_spending\n                                }}\n                              </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\": \"hX10WeQL\",\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],[[4,[32,11],[[30,0,[\\\"addCurrencyChar\\\"]],[30,0,[\\\"metrics\\\"]]],null],[4,[32,12],[[30,0,[\\\"addCurrencyChar\\\"]],[30,0,[\\\"metrics\\\"]]],null]],null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"metrics\\\"]]],null]],null],null,[[[1,\\\"                  \\\"],[8,[30,2,[\\\"Tile\\\"]],[[24,0,\\\"bar\\\"]],[[\\\"@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,13],[[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,14],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                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.total_spending\\\"],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,15],[[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,15],[[30,4,[\\\"total_tokens\\\"]]],null]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n                            \\\"],[1,[28,[30,0,[\\\"totalSpending\\\"]],[[30,4,[\\\"input_spending\\\"]],[30,4,[\\\"cached_input_spending\\\"]],[30,4,[\\\"output_spending\\\"]]],null]],[1,\\\"\\\\n                          \\\"],[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,14],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                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.total_spending\\\"],null]],[13],[1,\\\"\\\\n\\\\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,15],[[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,15],[[30,5,[\\\"total_tokens\\\"]]],null]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n                            \\\"],[1,[28,[30,0,[\\\"totalSpending\\\"]],[[30,5,[\\\"input_spending\\\"]],[30,5,[\\\"cached_input_spending\\\"]],[30,5,[\\\"output_spending\\\"]]],null]],[1,\\\"\\\\n                          \\\"],[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,14],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,16],[\\\"ai-usage__users-table\\\",[52,[28,[32,17],[[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                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.total_spending\\\"],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,18],[[24,0,\\\"username\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"user\\\",[30,6,[\\\"username\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                                \\\"],[1,[28,[32,19],[[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,15],[[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,15],[[30,6,[\\\"total_tokens\\\"]]],null]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n                            \\\"],[1,[28,[30,0,[\\\"totalSpending\\\"]],[[30,6,[\\\"input_spending\\\"]],[30,6,[\\\"cached_input_spending\\\"]],[30,6,[\\\"output_spending\\\"]]],null]],[1,\\\"\\\\n                          \\\"],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n\\\"]],[6]],null],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[32,20],[[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,18],[[24,0,\\\"username\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"user\\\",[30,7,[\\\"username\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                                  \\\"],[1,[28,[32,19],[[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,15],[[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,15],[[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, _discourseI18n.i18n, _dButton.default, _truthHelpers.eq, _helper.fn, _dateTimeInputRange.default, _comboBox.default, _helper.hash, _conditionalLoadingSpinner.default, _adminConfigAreaCard.default, _dStatTiles.default, _didInsert.default, _didUpdate.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/doughnut-chart\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"admin/components/chart\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _chart, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class DoughnutChart extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"canvasSize\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #canvasSize = (() => (dt7948.i(this, \"canvasSize\"), void 0))();\n    get config() {\n      const totalScore = this.args.totalScore || \"\";\n      return {\n        type: \"doughnut\",\n        data: {\n          labels: this.args.labels,\n          datasets: [{\n            data: this.args.data,\n            backgroundColor: this.args.colors,\n            cutout: \"50%\",\n            radius: 100\n          }]\n        },\n        options: {\n          responsive: true,\n          maintainAspectRatio: false,\n          plugins: {\n            legend: {\n              display: this.args.displayLegend || false,\n              position: \"bottom\"\n            }\n          }\n        },\n        plugins: [{\n          id: \"centerText\",\n          afterDraw: function (chart) {\n            const cssVarColor = getComputedStyle(document.documentElement).getPropertyValue(\"--primary-high\") || \"#000\";\n            const cssFontSize = getComputedStyle(document.documentElement).getPropertyValue(\"--font-up-4\") || \"1.3em\";\n            const cssFontFamily = getComputedStyle(document.documentElement).getPropertyValue(\"--font-family\") || \"sans-serif\";\n            const {\n              ctx,\n              chartArea\n            } = chart;\n            const centerX = (chartArea.left + chartArea.right) / 2;\n            const centerY = (chartArea.top + chartArea.bottom) / 2;\n            ctx.restore();\n            ctx.textAlign = \"center\";\n            ctx.textBaseline = \"middle\";\n            ctx.fillStyle = cssVarColor.trim();\n            ctx.font = `bold ${cssFontSize.trim()} ${cssFontFamily.trim()}`;\n            ctx.fillText(totalScore, centerX, centerY);\n            ctx.save();\n          }\n        }, {\n          // Custom plugin to draw labels inside the doughnut chart\n          id: \"doughnutLabels\",\n          afterDraw(chart) {\n            const ctx = chart.ctx;\n            const dataset = chart.data.datasets[0];\n            const meta = chart.getDatasetMeta(0);\n            const cssFontSize = getComputedStyle(document.documentElement).getPropertyValue(\"--font-down-2\") || \"1.3em\";\n            const cssFontFamily = getComputedStyle(document.documentElement).getPropertyValue(\"--font-family\") || \"sans-serif\";\n            ctx.font = `${cssFontSize.trim()} ${cssFontFamily.trim()}`;\n            ctx.fillStyle = \"#fafafa\";\n            ctx.textAlign = \"center\";\n            ctx.textBaseline = \"middle\";\n            meta.data.forEach((element, index) => {\n              const {\n                x,\n                y\n              } = element.tooltipPosition();\n              const value = dataset.data[index];\n              const nonZeroCount = dataset.data.filter(v => v > 0).length;\n              if (value === 0 || nonZeroCount === 1) {\n                return;\n              }\n              ctx.fillText(value, x, y);\n            });\n          }\n        }]\n      };\n    }\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.config}}\n          <h3 class=\"doughnut-chart-title\">{{@doughnutTitle}}</h3>\n          <Chart @chartConfig={{this.config}} class=\"admin-report-doughnut\" />\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"HiYQwgXb\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"config\\\"]],[[[1,\\\"      \\\"],[10,\\\"h3\\\"],[14,0,\\\"doughnut-chart-title\\\"],[12],[1,[30,1]],[13],[1,\\\"\\\\n      \\\"],[8,[32,0],[[24,0,\\\"admin-report-doughnut\\\"]],[[\\\"@chartConfig\\\"],[[30,0,[\\\"config\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@doughnutTitle\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/doughnut-chart.js\",\n      \"scope\": () => [_chart.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = DoughnutChart;\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-persona-response-format-editor\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"truth-helpers\", \"discourse/components/modal/json-schema-editor\", \"discourse/lib/formatter\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _truthHelpers, _jsonSchemaEditor, _formatter, _discourseI18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiPersonaResponseFormatEditor extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"showJsonEditorModal\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showJsonEditorModal = (() => (dt7948.i(this, \"showJsonEditorModal\"), void 0))();\n    jsonSchema = (() => ({\n      type: \"array\",\n      uniqueItems: true,\n      title: (0, _discourseI18n.i18n)(\"discourse_ai.ai_persona.response_format.modal.root_title\"),\n      items: {\n        type: \"object\",\n        title: (0, _discourseI18n.i18n)(\"discourse_ai.ai_persona.response_format.modal.key_title\"),\n        properties: {\n          key: {\n            type: \"string\"\n          },\n          type: {\n            type: \"string\",\n            enum: [\"string\", \"integer\", \"boolean\", \"array\"]\n          },\n          array_type: {\n            type: \"string\",\n            enum: [\"string\", \"integer\", \"boolean\"],\n            options: {\n              dependencies: {\n                type: \"array\"\n              }\n            }\n          }\n        },\n        required: [\"key\", \"type\"]\n      }\n    }))();\n    get editorTitle() {\n      return (0, _discourseI18n.i18n)(\"discourse_ai.ai_persona.response_format.title\");\n    }\n    get responseFormatAsJSON() {\n      return JSON.stringify(this.args.data.response_format);\n    }\n    get displayJSON() {\n      const toDisplay = {};\n      this.args.data.response_format.forEach(keyDesc => {\n        if (keyDesc.type === \"array\") {\n          toDisplay[keyDesc.key] = `[${keyDesc.array_type}]`;\n        } else {\n          toDisplay[keyDesc.key] = keyDesc.type;\n        }\n      });\n      return (0, _formatter.prettyJSON)(toDisplay);\n    }\n    openModal() {\n      this.showJsonEditorModal = true;\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"openModal\", [_object.action]))();\n    closeModal() {\n      this.showJsonEditorModal = false;\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"closeModal\", [_object.action]))();\n    updateResponseFormat(form, value) {\n      form.set(\"response_format\", JSON.parse(value));\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"updateResponseFormat\", [_object.action]))();\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <@form.Container @title={{this.editorTitle}} @format=\"large\">\n          <div class=\"ai-persona-editor__response-format\">\n            {{#if (gt @data.response_format.length 0)}}\n              <pre class=\"ai-persona-editor__response-format-pre\">\n                <code\n                >{{this.displayJSON}}</code>\n              </pre>\n            {{else}}\n              <div class=\"ai-persona-editor__response-format-none\">\n                {{i18n \"discourse_ai.ai_persona.response_format.no_format\"}}\n              </div>\n            {{/if}}\n    \n            <@form.Button\n              @action={{this.openModal}}\n              @label=\"discourse_ai.ai_persona.response_format.open_modal\"\n              @disabled={{@data.system}}\n            />\n          </div>\n        </@form.Container>\n    \n        {{#if this.showJsonEditorModal}}\n          <ModalJsonSchemaEditor\n            @model={{hash\n              value=this.responseFormatAsJSON\n              updateValue=(fn this.updateResponseFormat @form)\n              settingName=this.editorTitle\n              jsonSchema=this.jsonSchema\n            }}\n            @closeModal={{this.closeModal}}\n          />\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"TiBnMIeT\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[30,1,[\\\"Container\\\"]],null,[[\\\"@title\\\",\\\"@format\\\"],[[30,0,[\\\"editorTitle\\\"]],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"ai-persona-editor__response-format\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[32,0],[[30,2,[\\\"response_format\\\",\\\"length\\\"]],0],null],[[[1,\\\"          \\\"],[10,\\\"pre\\\"],[14,0,\\\"ai-persona-editor__response-format-pre\\\"],[12],[1,\\\"            \\\"],[10,\\\"code\\\"],[12],[1,[30,0,[\\\"displayJSON\\\"]]],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"ai-persona-editor__response-format-none\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,1],[\\\"discourse_ai.ai_persona.response_format.no_format\\\"],null]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n        \\\"],[8,[30,1,[\\\"Button\\\"]],null,[[\\\"@action\\\",\\\"@label\\\",\\\"@disabled\\\"],[[30,0,[\\\"openModal\\\"]],\\\"discourse_ai.ai_persona.response_format.open_modal\\\",[30,2,[\\\"system\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showJsonEditorModal\\\"]],[[[1,\\\"      \\\"],[8,[32,2],null,[[\\\"@model\\\",\\\"@closeModal\\\"],[[28,[32,3],null,[[\\\"value\\\",\\\"updateValue\\\",\\\"settingName\\\",\\\"jsonSchema\\\"],[[30,0,[\\\"responseFormatAsJSON\\\"]],[28,[32,4],[[30,0,[\\\"updateResponseFormat\\\"]],[30,1]],null],[30,0,[\\\"editorTitle\\\"]],[30,0,[\\\"jsonSchema\\\"]]]]],[30,0,[\\\"closeModal\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@form\\\",\\\"@data\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/ai-persona-response-format-editor.js\",\n      \"scope\": () => [_truthHelpers.gt, _discourseI18n.i18n, _jsonSchemaEditor.default, _helper.hash, _helper.fn],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiPersonaResponseFormatEditor;\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/service\", \"truth-helpers\", \"discourse/components/cook-text\", \"discourse/components/d-button\", \"discourse/components/d-modal\", \"discourse/helpers/concat-class\", \"discourse/helpers/d-icon\", \"discourse/helpers/html-class\", \"discourse/lib/ajax\", \"discourse/lib/decorators\", \"discourse/lib/formatter\", \"discourse-i18n\", \"float-kit/components/d-tooltip\", \"discourse/plugins/discourse-ai/discourse/components/ai-summary-skeleton\", \"discourse/plugins/discourse-ai/discourse/lib/smooth-streamer\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _object, _didInsert, _didUpdate, _willDestroy, _service, _truthHelpers, _cookText, _dButton, _dModal, _concatClass, _dIcon, _htmlClass, _ajax, _decorators, _formatter, _discourseI18n, _dTooltip, _aiSummarySkeleton, _smoothStreamer3, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiSummaryModal 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, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), 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, \"text\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #text = (() => (dt7948.i(this, \"text\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"summarizedOn\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #summarizedOn = (() => (dt7948.i(this, \"summarizedOn\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"summarizedBy\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #summarizedBy = (() => (dt7948.i(this, \"summarizedBy\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"newPostsSinceSummary\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #newPostsSinceSummary = (() => (dt7948.i(this, \"newPostsSinceSummary\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"outdated\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #outdated = (() => (dt7948.i(this, \"outdated\"), void 0))();\n    static #_9 = (() => dt7948.g(this.prototype, \"canRegenerate\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #canRegenerate = (() => (dt7948.i(this, \"canRegenerate\"), void 0))();\n    static #_10 = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_11 = (() => dt7948.g(this.prototype, \"currentIndex\", [_tracking.tracked], function () {\n      return 0;\n    }))();\n    #currentIndex = (() => (dt7948.i(this, \"currentIndex\"), void 0))();\n    static #_12 = (() => dt7948.g(this.prototype, \"smoothStreamer\", [_tracking.tracked], function () {\n      return new _smoothStreamer3.default(() => this.text, newValue => this.text = newValue);\n    }))();\n    #smoothStreamer = (() => (dt7948.i(this, \"smoothStreamer\"), void 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.smoothStreamer.resetStreaming();\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 #_13 = (() => 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 #_14 = (() => 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 #_15 = (() => 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 #_16 = (() => 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 #_17 = (() => dt7948.n(this.prototype, \"_requestSummary\", [_object.action]))();\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      this.loading = false;\n      this.smoothStreamer.updateResult(topicSummary, \"raw\");\n      if (update.done) {\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      }\n    }\n    static #_18 = (() => dt7948.n(this.prototype, \"_updateSummary\", [_decorators.bind]))();\n    onRegisterApi(api) {\n      this.dMenu = api;\n    }\n    static #_19 = (() => 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 #_20 = (() => dt7948.n(this.prototype, \"handleClose\", [_object.action]))();\n    static #_21 = (() => (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.smoothStreamer.isStreaming \"streaming\")\n                }}\n              >\n                {{#if this.loading}}\n                  <AiSummarySkeleton />\n                {{else}}\n                  <div class=\"generated-summary cooked\">\n                    <CookText @rawText={{this.smoothStreamer.renderedText}} />\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                  {{icon \"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\": \"hwMiUKLt\",\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,[\\\"smoothStreamer\\\",\\\"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,[\\\"smoothStreamer\\\",\\\"renderedText\\\"]]]],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\", \"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, _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, \"sinceHours\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #sinceHours = (() => (dt7948.i(this, \"sinceHours\"), 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, \"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 #_4 = (() => dt7948.n(this.prototype, \"summarize\", [_object.action]))();\n    static #_5 = (() => (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/later\", \"discourse/lib/utilities\", \"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, _later, _utilities, _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 class=\"ai-debug-modal__tokens__count\">\n                {{i18n \"discourse_ai.ai_bot.debug_ai_modal.request_tokens\"}}\n                {{this.info.request_tokens}}\n              </span>\n              <span class=\"ai-debug-modal__tokens__count\">\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\": \"/0GMjCML\",\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],[14,0,\\\"ai-debug-modal__tokens__count\\\"],[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],[14,0,\\\"ai-debug-modal__tokens__count\\\"],[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/render-modifiers/modifiers/will-destroy\", \"@ember/service\", \"@ember/template\", \"truth-helpers\", \"discourse/components/cook-text\", \"discourse/components/d-button\", \"discourse/components/d-modal\", \"discourse/helpers/concat-class\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/decorators\", \"discourse/lib/utilities\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/lib/diff-streamer\", \"discourse/plugins/discourse-ai/discourse/lib/smooth-streamer\", \"discourse/plugins/discourse-ai/discourse/components/ai-indicator-wave\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _willDestroy, _service, _template, _truthHelpers, _cookText, _dButton, _dModal, _concatClass, _ajax, _ajaxError, _decorators, _utilities, _discourseI18n, _diffStreamer3, _smoothStreamer3, _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, \"messageBus\", [_service.service]))();\n    #messageBus = (() => (dt7948.i(this, \"messageBus\"), 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, \"finalResult\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #finalResult = (() => (dt7948.i(this, \"finalResult\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"escapedSelectedText\", [_tracking.tracked], function () {\n      return (0, _utilities.escapeExpression)(this.args.model.selectedText);\n    }))();\n    #escapedSelectedText = (() => (dt7948.i(this, \"escapedSelectedText\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"diffStreamer\", [_tracking.tracked], function () {\n      return new _diffStreamer3.default(this.args.model.selectedText);\n    }))();\n    #diffStreamer = (() => (dt7948.i(this, \"diffStreamer\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"suggestion\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #suggestion = (() => (dt7948.i(this, \"suggestion\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"smoothStreamer\", [_tracking.tracked], function () {\n      return new _smoothStreamer3.default(() => this.suggestion, newValue => this.suggestion = newValue);\n    }))();\n    #smoothStreamer = (() => (dt7948.i(this, \"smoothStreamer\"), void 0))();\n    constructor() {\n      super(...arguments);\n      this.suggestChanges();\n    }\n    get diffResult() {\n      if (this.loading) {\n        return this.escapedSelectedText;\n      }\n      if (this.diffStreamer.diff?.length > 0) {\n        return this.diffStreamer.diff;\n      }\n      // Prevents flash by showing the\n      // original text when the diff is empty\n      return this.escapedSelectedText;\n    }\n    get smoothStreamerResult() {\n      if (this.loading) {\n        return this.escapedSelectedText;\n      }\n      return this.smoothStreamer.renderedText;\n    }\n    get isStreaming() {\n      // diffStreamer stops Streaming when it is finished with a chunk, looking at isDone is safe\n      // it starts off not done\n      if (this.args.model.showResultAsDiff) {\n        return !this.diffStreamer.isDone;\n      }\n      return this.smoothStreamer.isStreaming;\n    }\n    get primaryBtnLabel() {\n      return this.loading ? (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.context_menu.loading\") : (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.context_menu.confirm\");\n    }\n    get primaryBtnDisabled() {\n      return this.loading || this.isStreaming;\n    }\n    set progressChannel(value) {\n      if (this._progressChannel) {\n        this.messageBus.unsubscribe(this._progressChannel, this.updateResult);\n      }\n      this._progressChannel = value;\n      this.subscribe();\n    }\n    subscribe() {\n      // we have 1 channel per operation so we can safely subscribe at head\n      this.messageBus.subscribe(this._progressChannel, this.updateResult, 0);\n    }\n    cleanup() {\n      // stop all callbacks so it does not end up streaming pointlessly\n      this.#resetState();\n      if (this._progressChannel) {\n        this.messageBus.unsubscribe(this._progressChannel, this.updateResult);\n      }\n    }\n    static #_8 = (() => dt7948.n(this.prototype, \"cleanup\", [_decorators.bind]))();\n    updateResult(result) {\n      this.loading = false;\n      if (result.done) {\n        this.finalResult = result.result;\n        this.loading = false;\n      }\n      if (this.args.model.showResultAsDiff) {\n        this.diffStreamer.updateResult(result, \"result\");\n      } else {\n        this.smoothStreamer.updateResult(result, \"result\");\n      }\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"updateResult\", [_object.action]))();\n    async suggestChanges() {\n      this.#resetState();\n      try {\n        this.loading = true;\n        const result = await (0, _ajax.ajax)(\"/discourse-ai/ai-helper/stream_suggestion\", {\n          method: \"POST\",\n          data: {\n            location: \"composer\",\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            client_id: this.messageBus.clientId\n          }\n        });\n        this.progressChannel = result.progress_channel;\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      }\n    }\n    static #_10 = (() => 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      const finalResult = this.finalResult?.length > 0 ? this.finalResult : this.diffStreamer.suggestion;\n      if (this.args.model.showResultAsDiff && finalResult) {\n        this.args.model.toolbarEvent.replaceText(this.args.model.selectedText, finalResult);\n      }\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"triggerConfirmChanges\", [_object.action]))();\n    cleanupAndClose() {\n      this.#resetState();\n      this.loading = false;\n      this.args.closeModal();\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"cleanupAndClose\", [_object.action]))();\n    #resetState() {\n      this.suggestion = \"\";\n      this.finalResult = \"\";\n      this.smoothStreamer.resetStreaming();\n      this.diffStreamer.reset();\n    }\n    static #_13 = (() => (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={{this.cleanupAndClose}}\n        >\n          <:body>\n            <div {{willDestroy this.cleanup}} class=\"text-preview\">\n              <div\n                class={{concatClass\n                  \"composer-ai-helper-modal__suggestion\"\n                  \"streamable-content\"\n                  (if this.isStreaming \"streaming\")\n                  (if @model.showResultAsDiff \"inline-diff\")\n                  (if this.diffStreamer.isThinking \"thinking\")\n                  (if this.loading \"composer-ai-helper-modal__loading\")\n                }}\n              >\n                {{~#if @model.showResultAsDiff~}}\n                  <span class=\"diff-inner\">{{htmlSafe this.diffResult}}</span>\n                {{else}}\n                  {{#if (or this.loading this.smoothStreamer.isStreaming)}}\n                    <CookText\n                      @rawText={{this.smoothStreamerResult}}\n                      class=\"cooked\"\n                    />\n                  {{else}}\n                    <div class=\"composer-ai-helper-modal__old-value\">\n                      {{~this.escapedSelectedText~}}\n                    </div>\n                    <div class=\"composer-ai-helper-modal__new-value\">\n                      <CookText\n                        @rawText={{this.smoothStreamerResult}}\n                        class=\"cooked\"\n                      />\n                    </div>\n                  {{/if}}\n                {{/if}}\n              </div>\n            </div>\n          </:body>\n    \n          <:footer>\n            <DButton\n              class=\"btn-primary confirm\"\n              @disabled={{this.primaryBtnDisabled}}\n              @action={{this.triggerConfirmChanges}}\n              @translatedLabel={{this.primaryBtnLabel}}\n            >\n              {{#if this.loading}}\n                <AiIndicatorWave @loading={{this.loading}} />\n              {{/if}}\n            </DButton>\n            <DButton\n              class=\"btn-flat discard\"\n              @action={{this.cleanupAndClose}}\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          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"BZ80Ev5M\",\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,0,[\\\"cleanupAndClose\\\"]]]],[[\\\"body\\\",\\\"footer\\\"],[[[[1,\\\"\\\\n        \\\"],[11,0],[24,0,\\\"text-preview\\\"],[4,[32,2],[[30,0,[\\\"cleanup\\\"]]],null],[12],[1,\\\"\\\\n          \\\"],[10,0],[15,0,[28,[32,3],[\\\"composer-ai-helper-modal__suggestion\\\",\\\"streamable-content\\\",[52,[30,0,[\\\"isStreaming\\\"]],\\\"streaming\\\"],[52,[30,1,[\\\"showResultAsDiff\\\"]],\\\"inline-diff\\\"],[52,[30,0,[\\\"diffStreamer\\\",\\\"isThinking\\\"]],\\\"thinking\\\"],[52,[30,0,[\\\"loading\\\"]],\\\"composer-ai-helper-modal__loading\\\"]],null]],[12],[41,[30,1,[\\\"showResultAsDiff\\\"]],[[[10,1],[14,0,\\\"diff-inner\\\"],[12],[1,[28,[32,4],[[30,0,[\\\"diffResult\\\"]]],null]],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[32,5],[[30,0,[\\\"loading\\\"]],[30,0,[\\\"smoothStreamer\\\",\\\"isStreaming\\\"]]],null],[[[1,\\\"                \\\"],[8,[32,6],[[24,0,\\\"cooked\\\"]],[[\\\"@rawText\\\"],[[30,0,[\\\"smoothStreamerResult\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                \\\"],[10,0],[14,0,\\\"composer-ai-helper-modal__old-value\\\"],[12],[1,[30,0,[\\\"escapedSelectedText\\\"]]],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"composer-ai-helper-modal__new-value\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[32,6],[[24,0,\\\"cooked\\\"]],[[\\\"@rawText\\\"],[[30,0,[\\\"smoothStreamerResult\\\"]]]],null],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[8,[32,7],[[24,0,\\\"btn-primary confirm\\\"]],[[\\\"@disabled\\\",\\\"@action\\\",\\\"@translatedLabel\\\"],[[30,0,[\\\"primaryBtnDisabled\\\"]],[30,0,[\\\"triggerConfirmChanges\\\"]],[30,0,[\\\"primaryBtnLabel\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loading\\\"]],[[[1,\\\"            \\\"],[8,[32,8],null,[[\\\"@loading\\\"],[[30,0,[\\\"loading\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[8,[32,7],[[24,0,\\\"btn-flat discard\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"cleanupAndClose\\\"]],\\\"discourse_ai.ai_helper.context_menu.discard\\\"]],null],[1,\\\"\\\\n        \\\"],[8,[32,7],[[24,0,\\\"regenerate\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@label\\\"],[\\\"arrows-rotate\\\",[30,0,[\\\"suggestChanges\\\"]],\\\"discourse_ai.ai_helper.context_menu.regen\\\"]],null],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@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, _discourseI18n.i18n, _willDestroy.default, _concatClass.default, _template.htmlSafe, _truthHelpers.or, _cookText.default, _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/modifier\", \"@ember/object\", \"@ember/service\", \"@ember/template\", \"discourse/components/d-button\", \"discourse/components/d-modal\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/get-url\", \"discourse/lib/utilities\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _modifier, _object, _service, _template, _dButton, _dModal, _ajax, _ajaxError, _getUrl, _utilities, _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: \"short\",\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    async maybeCopyEmbed(event) {\n      if (!event.target.classList.contains(\"copy-embed\")) {\n        return true;\n      }\n      event.stopPropagation();\n      event.preventDefault();\n      let version = \"\";\n      if (event.target.dataset.artifactVersion) {\n        version = `data-ai-artifact-version=\"${event.target.dataset.artifactVersion}\"`;\n      }\n      const artifactEmbed = `<div class=\"ai-artifact\" ${version} data-ai-artifact-id=\"${event.target.dataset.artifactId}\"></div>`;\n      const promise = new Promise(resolve => {\n        resolve(artifactEmbed);\n      });\n      await (0, _utilities.clipboardCopyAsync)(() => promise);\n      this.toasts.success({\n        duration: \"short\",\n        data: {\n          message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.embed_copied\")\n        }\n      });\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"maybeCopyEmbed\", [_object.action]))();\n    static #_6 = (() => (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            {{! template-lint-disable no-invalid-interactive }}\n            <div\n              class=\"ai-share-full-topic-modal__body\"\n              {{on \"click\" this.maybeCopyEmbed}}\n            >\n              {{this.htmlContext}}\n            </div>\n            {{! template-lint-enable}}\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\": \"usffRdOP\",\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\\\"],[1,\\\"        \\\"],[11,0],[24,0,\\\"ai-share-full-topic-modal__body\\\"],[4,[32,2],[\\\"click\\\",[30,0,[\\\"maybeCopyEmbed\\\"]]],null],[12],[1,\\\"\\\\n          \\\"],[1,[30,0,[\\\"htmlContext\\\"]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"],[1,\\\"      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[8,[32,3],[[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,3],[[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, _modifier.on, _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/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, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"contextValue\", [_tracking.tracked], function () {\n      return 1;\n    }))();\n    #contextValue = (() => (dt7948.i(this, \"contextValue\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"htmlContext\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #htmlContext = (() => (dt7948.i(this, \"htmlContext\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"maxContext\", [_tracking.tracked], function () {\n      return 0;\n    }))();\n    #maxContext = (() => (dt7948.i(this, \"maxContext\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"allPosts\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #allPosts = (() => (dt7948.i(this, \"allPosts\"), void 0))();\n    static #_7 = (() => 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 #_8 = (() => 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 #_9 = (() => 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 #_10 = (() => dt7948.n(this.prototype, \"shareConversationModal\", [_object.action]))();\n    static #_11 = (() => (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-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, _discourseI18n, _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, _discourseI18n.i18n, _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\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _discourseI18n, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ModelAccuracies = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\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  {\n    \"id\": \"+cgPW/Ry\",\n    \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"    \\\"],[10,\\\"table\\\"],[14,0,\\\"reviewable-scores\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[30,1]],null],null,[[[1,\\\"          \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"td\\\"],[14,\\\"colspan\\\",\\\"4\\\"],[12],[1,[28,[32,0],[\\\"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,[32,0],[\\\"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\\\",\\\"each\\\",\\\"-each-in\\\"]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/model-accuracies.js\",\n    \"scope\": () => [_discourseI18n.i18n],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"model-accuracies:ModelAccuracies\"));\n  var _default = _exports.default = ModelAccuracies;\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    async cancelStreaming() {\n      const post = this.args.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    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    static #_ = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    debugAiResponse() {\n      this.modal.show(_debugAiModal.default, {\n        model: this.args.post\n      });\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    static #_ = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    async shareAiResponse() {\n      const post = this.args.post;\n      if (post.post_number <= AUTO_COPY_THRESHOLD) {\n        await (0, _copyConversation.default)(post.topic, 1, post.post_number);\n        this.args.showFeedback(\"discourse_ai.ai_bot.conversation_shared\");\n      } else {\n        this.modal.show(_shareModal.default, {\n          model: post\n        });\n      }\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/post/ai-persona-flair\", [\"exports\", \"@glimmer/component\", \"discourse/plugins/discourse-ai/discourse/lib/ai-bot-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _aiBotHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiPersonaFlair extends _component.default {\n    static shouldRender(args) {\n      return (0, _aiBotHelper.isGPTBot)(args.post.user);\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <span class=\"persona-flair\">\n          {{@outletArgs.post.topic.ai_persona_name}}\n        </span>\n      \n    */\n    {\n      \"id\": \"g/xynBPl\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,1],[14,0,\\\"persona-flair\\\"],[12],[1,\\\"\\\\n      \\\"],[1,[30,1,[\\\"post\\\",\\\"topic\\\",\\\"ai_persona_name\\\"]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@outletArgs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/post/ai-persona-flair.js\",\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiPersonaFlair;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/rag-options-fk\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/modifier\", \"@ember/object\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-llm-selector\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _modifier, _object, _discourseI18n, _aiLlmSelector, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class RagOptionsFk 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    get visionLlms() {\n      return this.args.llms.filter(llm => llm.vision_enabled);\n    }\n    static #_3 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if @data.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          <@form.Field\n            @name=\"rag_chunk_tokens\"\n            @title={{i18n \"discourse_ai.rag.options.rag_chunk_tokens\"}}\n            @tooltip={{i18n \"discourse_ai.rag.options.rag_chunk_tokens_help\"}}\n            @format=\"large\"\n            as |field|\n          >\n            <field.Input @type=\"number\" step=\"any\" lang=\"en\" />\n          </@form.Field>\n    \n          <@form.Field\n            @name=\"rag_chunk_overlap_tokens\"\n            @title={{i18n \"discourse_ai.rag.options.rag_chunk_tokens\"}}\n            @tooltip={{i18n\n              \"discourse_ai.rag.options.rag_chunk_overlap_tokens_help\"\n            }}\n            @format=\"large\"\n            as |field|\n          >\n            <field.Input @type=\"number\" step=\"any\" lang=\"en\" />\n          </@form.Field>\n    \n          {{#if @allowImages}}\n            <@form.Field\n              @name=\"rag_llm_model_id\"\n              @title={{i18n \"discourse_ai.rag.options.rag_llm_model\"}}\n              @tooltip={{i18n \"discourse_ai.rag.options.rag_llm_model_help\"}}\n              @format=\"large\"\n              as |field|\n            >\n              <field.Custom>\n                <AiLlmSelector\n                  @value={{field.value}}\n                  @llms={{this.visionLlms}}\n                  @onChange={{field.set}}\n                  @class=\"ai-persona-editor__llms\"\n                />\n              </field.Custom>\n            </@form.Field>\n          {{/if}}\n          {{yield}}\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"aJfOKu/I\",\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,\\\"      \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"rag_chunk_tokens\\\",[28,[32,1],[\\\"discourse_ai.rag.options.rag_chunk_tokens\\\"],null],[28,[32,1],[\\\"discourse_ai.rag.options.rag_chunk_tokens_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,3,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n      \\\"]],[3]]]]],[1,\\\"\\\\n\\\\n      \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"rag_chunk_overlap_tokens\\\",[28,[32,1],[\\\"discourse_ai.rag.options.rag_chunk_tokens\\\"],null],[28,[32,1],[\\\"discourse_ai.rag.options.rag_chunk_overlap_tokens_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,4,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n      \\\"]],[4]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,5],[[[1,\\\"        \\\"],[8,[30,2,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@tooltip\\\",\\\"@format\\\"],[\\\"rag_llm_model_id\\\",[28,[32,1],[\\\"discourse_ai.rag.options.rag_llm_model\\\"],null],[28,[32,1],[\\\"discourse_ai.rag.options.rag_llm_model_help\\\"],null],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,6,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[32,2],null,[[\\\"@value\\\",\\\"@llms\\\",\\\"@onChange\\\",\\\"@class\\\"],[[30,6,[\\\"value\\\"]],[30,0,[\\\"visionLlms\\\"]],[30,6,[\\\"set\\\"]],\\\"ai-persona-editor__llms\\\"]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"]],[6]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[18,7,null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@data\\\",\\\"@form\\\",\\\"field\\\",\\\"field\\\",\\\"@allowImages\\\",\\\"field\\\",\\\"&default\\\"],false,[\\\"if\\\",\\\"yield\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/rag-options-fk.js\",\n      \"scope\": () => [_modifier.on, _discourseI18n.i18n, _aiLlmSelector.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = RagOptionsFk;\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/helpers/d-icon\", \"discourse/lib/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/helpers/d-icon\", \"discourse/lib/ajax\", \"discourse/lib/debounce\", \"discourse/lib/uppy/uppy-upload\", \"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, _dIcon, _ajax, _debounce, _uppyUpload, _discourseI18n, _ragUploadProgress, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /* eslint-disable ember/no-classic-components */\n\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?.slice() || [];\n      this.filteredUploads = this.ragUploads;\n      const targetName = this.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    get acceptedFileTypes() {\n      if (this.args?.allowImages) {\n        return \".txt,.md,.png,.jpg,.jpeg\";\n      } else {\n        return \".txt,.md,.pdf\";\n      }\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          {{#if @allowImages}}\n            <p>{{i18n \"discourse_ai.rag.uploads.description_with_images\"}}</p>\n          {{else}}\n            <p>{{i18n \"discourse_ai.rag.uploads.description\"}}</p>\n          {{/if}}\n    \n          {{#if this.ragUploads}}\n            <div class=\"rag-uploader__search-input-container\">\n              <div class=\"rag-uploader__search-input\">\n                {{icon\n                  \"magnifying-glass\"\n                  class=\"rag-uploader__search-input__search-icon\"\n                }}\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={{this.acceptedFileTypes}}\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\": \"XwEOHoWK\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"rag-uploader\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"        \\\"],[10,2],[12],[1,[28,[32,0],[\\\"discourse_ai.rag.uploads.description_with_images\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,2],[12],[1,[28,[32,0],[\\\"discourse_ai.rag.uploads.description\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\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],[\\\"magnifying-glass\\\"],[[\\\"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,2,[\\\"original_filename\\\"]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[8,[32,4],null,[[\\\"@upload\\\",\\\"@ragIndexingStatuses\\\"],[[30,2],[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,2]],null]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[2]],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,3,[\\\"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,3,[\\\"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,3]],null]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[11,\\\"input\\\"],[24,0,\\\"hidden-upload-field\\\"],[16,\\\"disabled\\\",[30,0,[\\\"uploading\\\"]]],[24,\\\"multiple\\\",\\\"multiple\\\"],[16,\\\"accept\\\",[30,0,[\\\"acceptedFileTypes\\\"]]],[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  \\\"]],[\\\"@allowImages\\\",\\\"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\", \"@glimmer/component\", \"@ember/helper\", \"@ember/routing\", \"@ember/template\", \"truth-helpers\", \"discourse/components/reviewable-created-by\", \"discourse/components/reviewable-post-header\", \"discourse/plugins/chat/discourse/components/chat-channel-title\", \"discourse/plugins/chat/discourse/models/chat-channel\", \"discourse/plugins/discourse-ai/discourse/components/model-accuracies\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _routing, _template, _truthHelpers, _reviewableCreatedBy, _reviewablePostHeader, _chatChannelTitle, _chatChannel, _modelAccuracies, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class ReviewableAiChatMessage extends _component.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    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\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\n            @user={{@reviewable.target_created_by}}\n            @tagName=\"\"\n          />\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              {{htmlSafe\n                (or @reviewable.payload.message_cooked @reviewable.cooked)\n              }}\n            </div>\n    \n            {{yield}}\n    \n            <ModelAccuracies @accuracies={{@reviewable.payload.accuracies}} />\n          </div>\n        </div>\n      \n    */\n    {\n      \"id\": \"I2fblp9y\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"chatChannel\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"flagged-post-header\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[32,0],null,[[\\\"@route\\\",\\\"@models\\\"],[\\\"chat.channel.near-message\\\",[28,[32,1],[[30,0,[\\\"chatChannel\\\",\\\"slugifiedTitle\\\"]],[30,0,[\\\"chatChannel\\\",\\\"id\\\"]],[30,1,[\\\"target_id\\\"]]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[32,2],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,[32,3],null,[[\\\"@user\\\",\\\"@tagName\\\"],[[30,1,[\\\"target_created_by\\\"]],\\\"\\\"]],null],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"post-contents\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[32,4],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,[32,5],[[28,[32,6],[[30,1,[\\\"payload\\\",\\\"message_cooked\\\"]],[30,1,[\\\"cooked\\\"]]],null]],null]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[18,2,null],[1,\\\"\\\\n\\\\n        \\\"],[8,[32,7],null,[[\\\"@accuracies\\\"],[[30,1,[\\\"payload\\\",\\\"accuracies\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@reviewable\\\",\\\"&default\\\"],false,[\\\"if\\\",\\\"yield\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/reviewable-ai-chat-message.js\",\n      \"scope\": () => [_routing.LinkTo, _helper.array, _chatChannelTitle.default, _reviewableCreatedBy.default, _reviewablePostHeader.default, _template.htmlSafe, _truthHelpers.or, _modelAccuracies.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = ReviewableAiChatMessage;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/reviewable-ai-post\", [\"exports\", \"@ember/template\", \"discourse/components/reviewable-created-by\", \"discourse/components/reviewable-post-edits\", \"discourse/components/reviewable-post-header\", \"discourse/components/reviewable-topic-link\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/model-accuracies\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _template, _reviewableCreatedBy, _reviewablePostEdits, _reviewablePostHeader, _reviewableTopicLink, _discourseI18n, _modelAccuracies, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ReviewableAiPost = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\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            {{htmlSafe @reviewable.cooked}}\n          {{/if}}\n        </div>\n  \n        {{yield}}\n  \n        <ModelAccuracies @accuracies={{@reviewable.payload.accuracies}} />\n      </div>\n    </div>\n  \n  */\n  {\n    \"id\": \"o5RtJSg5\",\n    \"block\": \"[[[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"flagged-post-header\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@reviewable\\\",\\\"@tagName\\\"],[[30,1],\\\"\\\"]],null],[1,\\\"\\\\n    \\\"],[8,[32,1],null,[[\\\"@reviewable\\\",\\\"@tagName\\\"],[[30,1],\\\"\\\"]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"post-contents-wrapper\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[32,2],null,[[\\\"@user\\\",\\\"@tagName\\\"],[[30,1,[\\\"target_created_by\\\"]],\\\"\\\"]],null],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"post-contents\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,3],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,[32,4],[\\\"review.deleted_post\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[1,[28,[32,5],[[30,1,[\\\"cooked\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[18,2,null],[1,\\\"\\\\n\\\\n      \\\"],[8,[32,6],null,[[\\\"@accuracies\\\"],[[30,1,[\\\"payload\\\",\\\"accuracies\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@reviewable\\\",\\\"&default\\\"],false,[\\\"if\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/reviewable-ai-post.js\",\n    \"scope\": () => [_reviewableTopicLink.default, _reviewablePostEdits.default, _reviewableCreatedBy.default, _reviewablePostHeader.default, _discourseI18n.i18n, _template.htmlSafe, _modelAccuracies.default],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"reviewable-ai-post:ReviewableAiPost\"));\n  var _default = _exports.default = ReviewableAiPost;\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-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, _discourseI18n, _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    get showSuggestionButton() {\n      const composerFields = document.querySelector(\".composer-fields\");\n      this.content = this.args.composer?.reply;\n      const showTrigger = this.content?.length > _aiHelperSuggestions.MIN_CHARACTER_COUNT || this.args.topicState === \"edit\";\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      const data = {};\n      if (this.content) {\n        data.text = this.content;\n      } else {\n        data.topic_id = this.args.buffered.content.id;\n      }\n      try {\n        const {\n          assistant\n        } = await (0, _ajax.ajax)(\"/discourse-ai/ai-helper/suggest_category\", {\n          method: \"POST\",\n          data\n        });\n        this.suggestions = assistant;\n        if (this.suggestions?.length <= 0) {\n          (0, _aiHelperSuggestions.showSuggestionsError)(this, this.loadSuggestions.bind(this));\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 #_7 = (() => 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 #_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      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 #_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-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              {{#if this.showDropdown}}\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              {{/if}}\n            </:content>\n          </DMenu>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"MyQ0Js5H\",\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,[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,\\\"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\\\",\\\"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, _discourseI18n.i18n, _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-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, _discourseI18n, _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, \"composer\", [_service.service]))();\n    #composer = (() => (dt7948.i(this, \"composer\"), 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, \"suggestions\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #suggestions = (() => (dt7948.i(this, \"suggestions\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"untriggers\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #untriggers = (() => (dt7948.i(this, \"untriggers\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"triggerIcon\", [_tracking.tracked], function () {\n      return \"discourse-sparkles\";\n    }))();\n    #triggerIcon = (() => (dt7948.i(this, \"triggerIcon\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"content\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #content = (() => (dt7948.i(this, \"content\"), void 0))();\n    get showSuggestionButton() {\n      if (this.composer.disableTagsChooser) {\n        return false;\n      }\n      const composerFields = document.querySelector(\".composer-fields\");\n      this.content = this.args.composer?.reply;\n      const showTrigger = this.content?.length > _aiHelperSuggestions.MIN_CHARACTER_COUNT || this.args.topicState === \"edit\";\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      const data = {};\n      if (this.content) {\n        data.text = this.content;\n      } else {\n        data.topic_id = this.args.buffered.content.id;\n      }\n      try {\n        const {\n          assistant\n        } = await (0, _ajax.ajax)(\"/discourse-ai/ai-helper/suggest_tags\", {\n          method: \"POST\",\n          data\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          (0, _aiHelperSuggestions.showSuggestionsError)(this, this.loadSuggestions.bind(this));\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: \"short\",\n          data: {\n            message: (0, _discourseI18n.i18n)(\"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, _discourseI18n.i18n, _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-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, _discourseI18n, _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    get showSuggestionButton() {\n      const composerFields = document.querySelector(\".composer-fields\");\n      const editTopicTitleField = document.querySelector(\".edit-topic-title\");\n      this.content = this.args.composer?.reply;\n      const showTrigger = this.content?.length > _aiHelperSuggestions.MIN_CHARACTER_COUNT || this.args.topicState === \"edit\";\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    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      const data = {};\n      if (this.content) {\n        data.text = this.content;\n      } else {\n        data.topic_id = this.args.buffered.content.id;\n      }\n      try {\n        const {\n          suggestions\n        } = await (0, _ajax.ajax)(\"/discourse-ai/ai-helper/suggest_title\", {\n          method: \"POST\",\n          data\n        });\n        this.suggestions = suggestions;\n        if (this.suggestions?.length <= 0) {\n          (0, _aiHelperSuggestions.showSuggestionsError)(this, this.loadSuggestions.bind(this));\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 #_6 = (() => 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 #_7 = (() => dt7948.n(this.prototype, \"applySuggestion\", [_object.action]))();\n    onRegisterApi(api) {\n      this.dMenu = api;\n    }\n    static #_8 = (() => 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 #_9 = (() => dt7948.n(this.prototype, \"onClose\", [_object.action]))();\n    static #_10 = (() => (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              {{#if this.showDropdown}}\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              {{/if}}\n            </:content>\n          </DMenu>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"VM+2XnI7\",\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,[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],[[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\\\",\\\"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, _discourseI18n.i18n, _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 = \"circle-check\";\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-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _routing, _discourseI18n, _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(args, context) {\n      return context.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, _discourseI18n.i18n],\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\", \"@ember/service\", \"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, _service, _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(args, context) {\n      return (0, _showAiHelper.showComposerAiHelper)(args?.composer, context.siteSettings, context.currentUser, \"suggestions\");\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"composer\", [_service.service]))();\n    #composer = (() => (dt7948.i(this, \"composer\"), void 0))();\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#unless this.composer.disableCategoryChooser}}\n          <AiCategorySuggester\n            @composer={{@outletArgs.composer}}\n            @topicState=\"new\"\n          />\n        {{/unless}}\n      \n    */\n    {\n      \"id\": \"doeO/ThB\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"composer\\\",\\\"disableCategoryChooser\\\"]]],[[[1,\\\"      \\\"],[8,[32,0],null,[[\\\"@composer\\\",\\\"@topicState\\\"],[[30,1,[\\\"composer\\\"]],\\\"new\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@outletArgs\\\"],false,[\\\"unless\\\"]]\",\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(args, context) {\n      return (0, _showAiHelper.showComposerAiHelper)(args?.composer, context.siteSettings, context.currentUser, \"suggestions\");\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiTagSuggester @composer={{@outletArgs.composer}} @topicState=\"new\" />\n      \n    */\n    {\n      \"id\": \"u3rz9DLM\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@composer\\\",\\\"@topicState\\\"],[[30,1,[\\\"composer\\\"]],\\\"new\\\"]],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(args, context) {\n      return (0, _showAiHelper.showComposerAiHelper)(args?.composer, context.siteSettings, context.currentUser, \"suggestions\");\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#unless @outletArgs.composer.disableTitleInput}}\n          <AiTitleSuggester @composer={{@outletArgs.composer}} @topicState=\"new\" />\n        {{/unless}}\n      \n    */\n    {\n      \"id\": \"Ptl68I7m\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[51,[30,1,[\\\"composer\\\",\\\"disableTitleInput\\\"]]],[[[1,\\\"      \\\"],[8,[32,0],null,[[\\\"@composer\\\",\\\"@topicState\\\"],[[30,1,[\\\"composer\\\"]],\\\"new\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@outletArgs\\\"],false,[\\\"unless\\\"]]\",\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/helpers/body-class\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _bodyClass, _discourseI18n, _component2, _templateFactory) {\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    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.isAiBotChat}}\n          {{bodyClass 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    {\n      \"id\": \"er7lpl54\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isAiBotChat\\\"]],[[[1,\\\"      \\\"],[1,[28,[32,0],[[30,0,[\\\"aiBotClasses\\\"]]],null]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"renderChatWarning\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"ai-bot-chat-warning\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.ai_bot.pm_warning\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/after-d-editor/composer-open.js\",\n      \"scope\": () => [_bodyClass.default, _discourseI18n.i18n],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = _default;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/after-search-result-entry/search-result-decoration\", [\"exports\", \"discourse/helpers/d-icon\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _dIcon, _discourseI18n, _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\": () => [_discourseI18n.i18n, _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      <AiGistToggle />\n    */\n    {\n      \"id\": \"7j6Az6wp\",\n      \"block\": \"[[[8,[32,0],null,null,null]],[],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-fields/persona-llm-selector\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"discourse/plugins/discourse-ai/discourse/components/ai-persona-llm-selector\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _aiPersonaLlmSelector, _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, context) {\n      return context?.currentUser?.ai_enabled_personas && isBotMessage(args.model, context.currentUser);\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    setPersonaIdOnComposer(id) {\n      this.args.outletArgs.model.metaData = {\n        ai_persona_id: id\n      };\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"setPersonaIdOnComposer\", [_object.action]))();\n    setTargetRecipientsOnComposer(username) {\n      this.args.outletArgs.model.set(\"targetRecipients\", username);\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"setTargetRecipientsOnComposer\", [_object.action]))();\n    static #_4 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiPersonaLlmSelector\n          @setPersonaId={{this.setPersonaIdOnComposer}}\n          @setTargetRecipient={{this.setTargetRecipientsOnComposer}}\n        />\n      \n    */\n    {\n      \"id\": \"35crcj6G\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@setPersonaId\\\",\\\"@setTargetRecipient\\\"],[[30,0,[\\\"setPersonaIdOnComposer\\\"]],[30,0,[\\\"setTargetRecipientsOnComposer\\\"]]]],null],[1,\\\"\\\\n  \\\"]],[],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/composer-fields/persona-llm-selector.js\",\n      \"scope\": () => [_aiPersonaLlmSelector.default],\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(args, context) {\n      return (0, _showAiHelper.showComposerAiHelper)(args?.composer, context.siteSettings, context.currentUser, \"suggestions\");\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiCategorySuggester\n          @buffered={{@outletArgs.buffered}}\n          @topicState=\"edit\"\n        />\n      \n    */\n    {\n      \"id\": \"xD6ygZtG\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@buffered\\\",\\\"@topicState\\\"],[[30,1,[\\\"buffered\\\"]],\\\"edit\\\"]],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(args, context) {\n      return (0, _showAiHelper.showComposerAiHelper)(args?.composer, context.siteSettings, context.currentUser, \"suggestions\");\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiTagSuggester @buffered={{@outletArgs.buffered}} @topicState=\"edit\" />\n      \n    */\n    {\n      \"id\": \"3ec6gwOx\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@buffered\\\",\\\"@topicState\\\"],[[30,1,[\\\"buffered\\\"]],\\\"edit\\\"]],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(args, context) {\n      return (0, _showAiHelper.showComposerAiHelper)(args?.composer, context.siteSettings, context.currentUser, \"suggestions\");\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiTitleSuggester @buffered={{@outletArgs.buffered}} @topicState=\"edit\" />\n      \n    */\n    {\n      \"id\": \"QwHpqwnO\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@buffered\\\",\\\"@topicState\\\"],[[30,1,[\\\"buffered\\\"]],\\\"edit\\\"]],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/helpers/d-icon\", \"discourse/modifiers/auto-focus\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _modifier, _object, _didInsert, _didUpdate, _willDestroy, _service, _conditionalLoadingSpinner, _dButton, _dTextarea, _dIcon, _autoFocus, _discourseI18n, _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, _discourseI18n.i18n],\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(args, context) {\n      return (0, _showAiHelper.showPostAIHelper)(args, context);\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.name,\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-discobot-discoveries\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"discourse/helpers/body-class\", \"discourse/helpers/d-icon\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-search-discoveries\", \"discourse/plugins/discourse-ai/discourse/components/ai-search-discoveries-tooltip\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _bodyClass, _dIcon, _discourseI18n, _aiSearchDiscoveries, _aiSearchDiscoveriesTooltip, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiFullPageDiscobotDiscoveries extends _component.default {\n    static shouldRender(args, _ref) {\n      let {\n        siteSettings,\n        currentUser\n      } = _ref;\n      return siteSettings.ai_bot_discover_persona && currentUser?.can_use_ai_bot_discover_persona && currentUser?.user_option?.ai_search_discoveries;\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"capabilities\", [_service.service]))();\n    #capabilities = (() => (dt7948.i(this, \"capabilities\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"discobotDiscoveries\", [_service.service]))();\n    #discobotDiscoveries = (() => (dt7948.i(this, \"discobotDiscoveries\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"site\", [_service.service]))();\n    #site = (() => (dt7948.i(this, \"site\"), void 0))();\n    get previewLength() {\n      if (!this.capabilities.viewport.md) {\n        return 50;\n      } else {\n        return 10000;\n      }\n    }\n    static #_4 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{bodyClass \"has-discoveries\"}}\n        <div class=\"ai-search-discoveries__discoveries-wrapper\">\n          {{#if this.discobotDiscoveries.showDiscoveryTitle}}\n            <h3\n              class=\"ai-search-discoveries__discoveries-title full-page-discoveries\"\n            >\n              <span>\n                {{icon \"discobot\"}}\n                {{i18n \"discourse_ai.discobot_discoveries.main_title\"}}\n              </span>\n              <AiSearchDiscoveriesTooltip />\n            </h3>\n          {{/if}}\n    \n          <div class=\"full-page-discoveries\">\n            <AiSearchDiscoveries\n              @discoveryPreviewLength={{this.previewLength}}\n              @searchTerm={{@outletArgs.search}}\n            />\n          </div>\n        </div>\n      \n    */\n    {\n      \"id\": \"lInfOcXN\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[1,[28,[32,0],[\\\"has-discoveries\\\"],null]],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-search-discoveries__discoveries-wrapper\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"discobotDiscoveries\\\",\\\"showDiscoveryTitle\\\"]],[[[1,\\\"        \\\"],[10,\\\"h3\\\"],[14,0,\\\"ai-search-discoveries__discoveries-title full-page-discoveries\\\"],[12],[1,\\\"\\\\n          \\\"],[10,1],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,1],[\\\"discobot\\\"],null]],[1,\\\"\\\\n            \\\"],[1,[28,[32,2],[\\\"discourse_ai.discobot_discoveries.main_title\\\"],null]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[8,[32,3],null,null,null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"full-page-discoveries\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[32,4],null,[[\\\"@discoveryPreviewLength\\\",\\\"@searchTerm\\\"],[[30,0,[\\\"previewLength\\\"]],[30,1,[\\\"search\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@outletArgs\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/full-page-search-below-search-header/ai-full-page-discobot-discoveries.js\",\n      \"scope\": () => [_bodyClass.default, _dIcon.default, _discourseI18n.i18n, _aiSearchDiscoveriesTooltip.default, _aiSearchDiscoveries.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiFullPageDiscobotDiscoveries;\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/utilities\", \"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, _utilities, _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(args, context) {\n      return (0, _showAiHelper.showPostAIHelper)(args, context);\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"menu\", [_service.service]))();\n    #menu = (() => (dt7948.i(this, \"menu\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"postHighlighted\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #postHighlighted = (() => (dt7948.i(this, \"postHighlighted\"), void 0))();\n    static #_3 = (() => 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    // capture the state at the moment the toolbar is rendered\n    // so we ensure change of state (selection change for example)\n    // is not impacting the menu data\n    menuData = (() => ({\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      selectedRange: (0, _utilities.selectedRange)()\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      const range = this.menuData.selectedRange;\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      window.getSelection().removeAllRanges();\n      this.postHighlighted = true;\n    }\n    removeHighlightedText() {\n      if (!this.postHighlighted) {\n        return;\n      }\n      const highlightedSpans = document.querySelectorAll(\"span.ai-helper-highlighted-selection\");\n      highlightedSpans.forEach(span => {\n        const textNode = document.createTextNode(span.textContent);\n        span.parentNode.replaceChild(textNode, span);\n      });\n      this.postHighlighted = false;\n    }\n    async showAiPostHelperMenu() {\n      await this.currentMenu.close();\n      await this.menu.show(this.currentMenu.trigger, {\n        identifier: \"ai-post-helper-menu\",\n        component: _aiPostHelperMenu.default,\n        interactive: true,\n        trapTab: false,\n        closeOnScroll: false,\n        modalForMobile: true,\n        data: this.menuData,\n        placement: \"top-start\",\n        fallbackPlacements: [\"bottom-start\"],\n        updateOnScroll: false,\n        onClose: () => {\n          this.removeHighlightedText();\n        }\n      });\n      await this.currentMenu.destroy();\n      this.highlightSelectedText();\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"showAiPostHelperMenu\", [_object.action]))();\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{yield}}\n    \n        <div class=\"ai-post-helper\">\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        </div>\n      \n    */\n    {\n      \"id\": \"R72pW812\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[18,1,null],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[14,0,\\\"ai-post-helper\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,0],[[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    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"&default\\\"],false,[\\\"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\": () => [_dButton.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-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _assistantItem, _ajax, _ajaxError, _search3, _discourseI18n, _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, _discourseI18n.i18n],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiQuickSemanticSearch;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/search-menu-results-top/ai-discobot-discoveries\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"discourse/helpers/d-icon\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-search-discoveries\", \"discourse/plugins/discourse-ai/discourse/components/ai-search-discoveries-tooltip\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _dIcon, _discourseI18n, _aiSearchDiscoveries, _aiSearchDiscoveriesTooltip, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiDiscobotDiscoveries extends _component.default {\n    static shouldRender(args, _ref) {\n      let {\n        siteSettings,\n        currentUser\n      } = _ref;\n      return siteSettings.ai_bot_discover_persona && currentUser?.can_use_ai_bot_discover_persona && currentUser?.user_option?.ai_search_discoveries;\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"discobotDiscoveries\", [_service.service]))();\n    #discobotDiscoveries = (() => (dt7948.i(this, \"discobotDiscoveries\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"search\", [_service.service]))();\n    #search = (() => (dt7948.i(this, \"search\"), void 0))();\n    static #_3 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"ai-discobot-discoveries\">\n          {{#if this.discobotDiscoveries.showDiscoveryTitle}}\n            <h3 class=\"ai-search-discoveries__discoveries-title\">\n              <span>\n                {{icon \"discobot\"}}\n                {{i18n \"discourse_ai.discobot_discoveries.main_title\"}}\n              </span>\n    \n              <AiSearchDiscoveriesTooltip />\n            </h3>\n          {{/if}}\n    \n          <AiSearchDiscoveries\n            @searchTerm={{@outletArgs.searchTerm}}\n            @discoveryPreviewLength={{50}}\n            @closeSearchMenu={{@outletArgs.closeSearchMenu}}\n          />\n    \n          {{#if this.search.results.topics.length}}\n            <h3 class=\"ai-search-discoveries__regular-results-title\">\n              {{icon \"bars-staggered\"}}\n              {{i18n \"discourse_ai.discobot_discoveries.regular_results\"}}\n            </h3>\n          {{/if}}\n        </div>\n      \n    */\n    {\n      \"id\": \"kJMYLbPh\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-discobot-discoveries\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"discobotDiscoveries\\\",\\\"showDiscoveryTitle\\\"]],[[[1,\\\"        \\\"],[10,\\\"h3\\\"],[14,0,\\\"ai-search-discoveries__discoveries-title\\\"],[12],[1,\\\"\\\\n          \\\"],[10,1],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,0],[\\\"discobot\\\"],null]],[1,\\\"\\\\n            \\\"],[1,[28,[32,1],[\\\"discourse_ai.discobot_discoveries.main_title\\\"],null]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n          \\\"],[8,[32,2],null,null,null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n      \\\"],[8,[32,3],null,[[\\\"@searchTerm\\\",\\\"@discoveryPreviewLength\\\",\\\"@closeSearchMenu\\\"],[[30,1,[\\\"searchTerm\\\"]],50,[30,1,[\\\"closeSearchMenu\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"search\\\",\\\"results\\\",\\\"topics\\\",\\\"length\\\"]],[[[1,\\\"        \\\"],[10,\\\"h3\\\"],[14,0,\\\"ai-search-discoveries__regular-results-title\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[28,[32,0],[\\\"bars-staggered\\\"],null]],[1,\\\"\\\\n          \\\"],[1,[28,[32,1],[\\\"discourse_ai.discobot_discoveries.regular_results\\\"],null]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@outletArgs\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/search-menu-results-top/ai-discobot-discoveries.js\",\n      \"scope\": () => [_dIcon.default, _discourseI18n.i18n, _aiSearchDiscoveriesTooltip.default, _aiSearchDiscoveries.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiDiscobotDiscoveries;\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-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _search3, _discourseI18n, _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\": () => [_discourseI18n.i18n],\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(args, context) {\n      return (0, _showAiHelper.showPostAIHelper)(args, context);\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(args, context) {\n      return (0, _showAiHelper.showPostAIHelper)(args, context);\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(args, context) {\n      return (0, _showAiHelper.showPostAIHelper)(args, context);\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-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    get isAiConversation() {\n      return this.args.outletArgs.topic.is_bot_pm;\n    }\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        {{#unless this.isAiConversation}}\n          {{#if @outletArgs.topic.summarizable}}\n            <section class=\"topic-map__additional-contents toggle-summary\">\n              <DButton\n                @label=\"summary.buttons.generate\"\n                @icon=\"discourse-sparkles\"\n                @action={{this.openAiSummaryModal}}\n                class=\"btn-default ai-summarization-button\"\n              />\n            </section>\n          {{/if}}\n        {{/unless}}\n      \n    */\n    {\n      \"id\": \"zAyGCacI\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"isAiConversation\\\"]]],[[[41,[30,1,[\\\"topic\\\",\\\"summarizable\\\"]],[[[1,\\\"        \\\"],[10,\\\"section\\\"],[14,0,\\\"topic-map__additional-contents toggle-summary\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,0],[[24,0,\\\"btn-default ai-summarization-button\\\"]],[[\\\"@label\\\",\\\"@icon\\\",\\\"@action\\\"],[\\\"summary.buttons.generate\\\",\\\"discourse-sparkles\\\",[30,0,[\\\"openAiSummaryModal\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"  \\\"]],[\\\"@outletArgs\\\"],false,[\\\"unless\\\",\\\"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/topic-map-participants-after/ai-conversation-invite\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"truth-helpers\", \"discourse/components/d-button\", \"discourse/components/header/topic/participant\", \"discourse/components/modal/add-pm-participants\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _truthHelpers, _dButton, _participant, _addPmParticipants, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiConversationInvite extends _component.default {\n    static shouldRender(args) {\n      return args.topic.is_bot_pm;\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, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"header\", [_service.service]))();\n    #header = (() => (dt7948.i(this, \"header\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"sidebarState\", [_service.service]))();\n    #sidebarState = (() => (dt7948.i(this, \"sidebarState\"), void 0))();\n    get participants() {\n      const participants = [...(this.header.topicInfo.details?.allowed_users ?? []), ...(this.header.topicInfo.details?.allowed_groups ?? [])];\n      return participants;\n    }\n    showInvite() {\n      this.modal.show(_addPmParticipants.default, {\n        model: {\n          title: \"discourse_ai.ai_bot.invite_ai_conversation.title\",\n          inviteModel: this.args.outletArgs.topic\n        }\n      });\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"showInvite\", [_object.action]))();\n    static #_6 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"ai-conversation__participants\">\n          <DButton\n            @icon=\"user-plus\"\n            @label=\"discourse_ai.ai_bot.invite_ai_conversation.button\"\n            @action={{this.showInvite}}\n            class=\"btn-default ai-conversations__invite-button\"\n          />\n          {{#each this.participants as |participant|}}\n            <Participant\n              @user={{participant}}\n              @type={{if participant.username \"user\" \"group\"}}\n              @username={{or participant.username participant.name}}\n              @avatarSize=\"medium\"\n            />\n          {{/each}}\n        </div>\n      \n    */\n    {\n      \"id\": \"iRQqMyq7\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-conversation__participants\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,0],[[24,0,\\\"btn-default ai-conversations__invite-button\\\"]],[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\"],[\\\"user-plus\\\",\\\"discourse_ai.ai_bot.invite_ai_conversation.button\\\",[30,0,[\\\"showInvite\\\"]]]],null],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"participants\\\"]]],null]],null],null,[[[1,\\\"        \\\"],[8,[32,1],null,[[\\\"@user\\\",\\\"@type\\\",\\\"@username\\\",\\\"@avatarSize\\\"],[[30,1],[52,[30,1,[\\\"username\\\"]],\\\"user\\\",\\\"group\\\"],[28,[32,2],[[30,1,[\\\"username\\\"]],[30,1,[\\\"name\\\"]]],null],\\\"medium\\\"]],null],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"participant\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/topic-map-participants-after/ai-conversation-invite.js\",\n      \"scope\": () => [_dButton.default, _participant.default, _truthHelpers.or],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiConversationInvite;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/user-messages-controls-bottom/pm-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      <AiGistToggle />\n    */\n    {\n      \"id\": \"FFVUfQnW\",\n      \"block\": \"[[[8,[32,0],null,null,null]],[],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/user-messages-controls-bottom/pm-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/user-preferences-nav/ai-preferences\", [\"exports\", \"@glimmer/component\", \"@ember/routing\", \"discourse/helpers/d-icon\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _routing, _dIcon, _discourseI18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiPreferences extends _component.default {\n    static shouldRender(args, context) {\n      return context.siteSettings.discourse_ai_enabled;\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <li class=\"user-nav__preferences-ai\">\n          <LinkTo @route=\"preferences.ai\">\n            {{icon \"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, _discourseI18n.i18n],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiPreferences;\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/discourse-ai-bot-conversations\", [\"exports\", \"@glimmer/tracking\", \"@ember/controller\"], function (_exports, _tracking, _controller) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class DiscourseAiBotConversations extends _controller.default {\n    static #_ = (() => dt7948.g(this.prototype, \"llm\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #llm = (() => (dt7948.i(this, \"llm\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"persona\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #persona = (() => (dt7948.i(this, \"persona\"), void 0))();\n    queryParams = [\"llm\", \"persona\"];\n  }\n  _exports.default = DiscourseAiBotConversations;\n});","define(\"discourse/plugins/discourse-ai/discourse/controllers/preferences-ai\", [\"exports\", \"@glimmer/tracking\", \"@ember/controller\", \"@ember/object\", \"@ember/service\", \"discourse/lib/ajax-error\", \"discourse/lib/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  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 booleanSettings() {\n      return [{\n        key: \"ai_search_discoveries\",\n        label: \"discourse_ai.discobot_discoveries.user_setting\",\n        settingName: \"ai-search-discoveries\",\n        checked: this.model.user_option.ai_search_discoveries,\n        isIncluded: (() => {\n          return this.siteSettings.ai_bot_discover_persona && this.model?.can_use_ai_bot_discover_persona && this.siteSettings.ai_bot_enabled;\n        })()\n      }];\n    }\n    get userSettingAttributes() {\n      const attrs = [];\n      this.booleanSettings.forEach(setting => {\n        if (setting.isIncluded) {\n          attrs.push(setting.key);\n        }\n      });\n      return attrs;\n    }\n    save() {\n      this.saved = false;\n      return this.model.save(this.userSettingAttributes).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-bot-dashboard-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-bot-conversations\", {\n      path: \"/discourse-ai/ai-bot/conversations\"\n    });\n  }\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/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)(api => {\n        api.addAdminPluginConfigurationNav(\"discourse-ai\", [{\n          label: \"discourse_ai.features.short_title\",\n          route: \"adminPlugins.show.discourse-ai-features\",\n          description: \"discourse_ai.features.description\"\n        }, {\n          label: \"discourse_ai.usage.short_title\",\n          route: \"adminPlugins.show.discourse-ai-usage\",\n          description: \"discourse_ai.usage.subheader_description\"\n        }, {\n          label: \"discourse_ai.llms.short_title\",\n          route: \"adminPlugins.show.discourse-ai-llms\",\n          description: \"discourse_ai.llms.preconfigured.description\"\n        }, {\n          label: \"discourse_ai.ai_persona.short_title\",\n          route: \"adminPlugins.show.discourse-ai-personas\",\n          description: \"discourse_ai.ai_persona.persona_description\"\n        }, {\n          label: \"discourse_ai.embeddings.short_title\",\n          route: \"adminPlugins.show.discourse-ai-embeddings\",\n          description: \"discourse_ai.embeddings.description\"\n        }, {\n          label: \"discourse_ai.tools.short_title\",\n          route: \"adminPlugins.show.discourse-ai-tools\",\n          description: \"discourse_ai.tools.subheader_description\"\n        }, {\n          label: \"discourse_ai.spam.short_title\",\n          route: \"adminPlugins.show.discourse-ai-spam\",\n          description: \"discourse_ai.spam.spam_description\"\n        }]);\n      });\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/discourse/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\n      // We need to import dynamically with CommonJS require because\n      // using ESM import in an initializer would cause the component to be imported globally\n      // and cause errors for non-admin users since the component is only available to admins\n      const AdminReportSentimentAnalysis = require(\"discourse/plugins/discourse-ai/discourse/components/admin-report-sentiment-analysis\").default;\n      (0, _pluginApi.withPluginApi)(api => {\n        api.registerReportModeComponent(\"emotion\", _adminReportEmotion.default);\n        api.registerReportModeComponent(\"sentiment_analysis\", AdminReportSentimentAnalysis);\n        api.registerValueTransformer(\"admin-reports-show-query-params\", _ref => {\n          let {\n            value\n          } = _ref;\n          return [...value, \"selectedChart\"];\n        });\n      });\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/discourse/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        const artifactHeight = artifactElement.getAttribute(\"data-ai-artifact-height\");\n        const autorun = artifactElement.getAttribute(\"data-ai-artifact-autorun\") || artifactElement.hasAttribute(\"data-ai-artifact-autorun\");\n        const seamless = artifactElement.getAttribute(\"data-ai-artifact-seamless\") || artifactElement.hasAttribute(\"data-ai-artifact-seamless\");\n        const dataAttributes = {};\n        for (const attr of artifactElement.attributes) {\n          if (attr.name.startsWith(\"data-\") && attr.name !== \"data-ai-artifact-id\" && attr.name !== \"data-ai-artifact-version\" && attr.name !== \"data-ai-artifact-height\" && attr.name !== \"data-ai-artifact-autorun\" && attr.name !== \"data-ai-artifact-seamless\") {\n            dataAttributes[attr.name] = attr.value;\n          }\n        }\n        helper.renderGlimmer(artifactElement, (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n        /*\n          \n                      <AiArtifact\n                        @artifactId={{artifactId}}\n                        @artifactVersion={{artifactVersion}}\n                        @artifactHeight={{artifactHeight}}\n                        @autorun={{autorun}}\n                        @seamless={{seamless}}\n                        @dataAttributes={{dataAttributes}}\n                      />\n                    \n        */\n        {\n          \"id\": \"1GHagHFs\",\n          \"block\": \"[[[1,\\\"\\\\n              \\\"],[8,[32,0],null,[[\\\"@artifactId\\\",\\\"@artifactVersion\\\",\\\"@artifactHeight\\\",\\\"@autorun\\\",\\\"@seamless\\\",\\\"@dataAttributes\\\"],[[32,1],[32,2],[32,3],[32,4],[32,5],[32,6]]],null],[1,\\\"\\\\n            \\\"]],[],false,[]]\",\n          \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/initializers/ai-artifacts.js\",\n          \"scope\": () => [_aiArtifact.default, artifactId, artifactVersion, artifactHeight, autorun, seamless, dataAttributes],\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)(initializeAiArtifacts);\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/discourse/initializers/ai-bot-replies\", [\"exports\", \"discourse/lib/deprecated\", \"discourse/lib/plugin-api\", \"discourse/widgets/render-glimmer\", \"discourse/plugins/discourse-ai/discourse/components/ai-bot-header-icon\", \"discourse/plugins/discourse-ai/discourse/components/post/ai-persona-flair\", \"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, _deprecated, _pluginApi, _renderGlimmer, _aiBotHeaderIcon, _aiPersonaFlair, _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 allowDebug = false;\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(_aiBotHelper.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    api.renderAfterWrapperOutlet(\"post-meta-data-poster-name\", _aiPersonaFlair.default);\n    (0, _deprecated.withSilencedDeprecations)(\"discourse.post-stream-widget-overrides\", () => initializeWidgetPersonaDecorator(api));\n  }\n  function initializeWidgetPersonaDecorator(api) {\n    api.decorateWidget(`poster-name:after`, dec => {\n      const botType = (0, _aiBotHelper.getBotType)(dec.attrs.user);\n      // we have 2 ways of decorating\n      // 1. if a bot is a LLM we decorate with persona name\n      // 2. if bot is a persona we decorate with LLM name\n      if (botType === \"llm\") {\n        return dec.widget.attach(\"persona-flair\", {\n          personaName: dec.model?.topic?.ai_persona_name\n        });\n      } else if (botType === \"persona\") {\n        return dec.widget.attach(\"persona-flair\", {\n          personaName: dec.model?.llm_name\n        });\n      }\n    });\n    (0, _renderGlimmer.registerWidgetShim)(\"persona-flair\", \"span.persona-flair\", (0, _templateFactory.createTemplateFactory)(\n    /*\n      {{@data.personaName}}\n    */\n    {\n      \"id\": \"ImoUEZuD\",\n      \"block\": \"[[[1,[30,1,[\\\"personaName\\\"]]]],[\\\"@data\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/initializers/ai-bot-replies.js\",\n      \"isStrictMode\": false\n    }));\n  }\n  function initializePauseButton(api) {\n    api.registerValueTransformer(\"post-menu-buttons\", _ref2 => {\n      let {\n        value: dag,\n        context: {\n          post,\n          firstButtonKey\n        }\n      } = _ref2;\n      if ((0, _aiBotHelper.isGPTBot)(post.user)) {\n        dag.add(\"ai-cancel-gpt\", _aiCancelStreamingButton.default, {\n          before: firstButtonKey,\n          after: [\"ai-share\", \"ai-debug\"]\n        });\n      }\n    });\n  }\n  function initializeDebugButton(api) {\n    const currentUser = api.getCurrentUser();\n    if (!currentUser || !currentUser.ai_enabled_chat_bots || !allowDebug) {\n      return;\n    }\n    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  }\n  function initializeShareButton(api) {\n    const currentUser = api.getCurrentUser();\n    if (!currentUser || !currentUser.ai_enabled_chat_bots) {\n      return;\n    }\n    api.registerValueTransformer(\"post-menu-buttons\", _ref4 => {\n      let {\n        value: dag,\n        context: {\n          post,\n          firstButtonKey\n        }\n      } = _ref4;\n      if (post.topic?.archetype === \"private_message\") {\n        dag.add(\"ai-share\", _aiShareButton.default, {\n          before: firstButtonKey\n        });\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        allowDebug = user.can_debug_ai_bot_conversations;\n        (0, _pluginApi.withPluginApi)(api => {\n          attachHeaderIcon(api);\n          initializeAIBotReplies(api);\n          initializePersonaDecorator(api);\n          initializeDebugButton(api, container);\n          initializeShareButton(api, container);\n          initializeShareTopicButton(api, container);\n        });\n      }\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/discourse/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)(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/discourse/initializers/ai-conversations-sidebar\", [\"exports\", \"discourse/lib/plugin-api\", \"discourse/plugins/discourse-ai/discourse/components/ai-bot-sidebar-new-conversation\", \"discourse/plugins/discourse-ai/discourse/services/ai-conversations-sidebar-manager\"], function (_exports, _pluginApi, _aiBotSidebarNewConversation, _aiConversationsSidebarManager) {\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: \"ai-conversations-sidebar\",\n    initialize() {\n      (0, _pluginApi.withPluginApi)(api => {\n        const siteSettings = api.container.lookup(\"service:site-settings\");\n        if (!siteSettings.ai_bot_enable_dedicated_ux) {\n          return;\n        }\n        const currentUser = api.container.lookup(\"service:current-user\");\n        if (!currentUser) {\n          return;\n        }\n        const aiConversationsSidebarManager = api.container.lookup(\"service:ai-conversations-sidebar-manager\");\n        aiConversationsSidebarManager.api = api;\n        api.addSidebarPanel(BaseCustomSidebarPanel => class AiConversationsSidebarPanel extends BaseCustomSidebarPanel {\n          key = (() => _aiConversationsSidebarManager.AI_CONVERSATIONS_PANEL)();\n          hidden = true;\n          displayHeader = false; // this would add a misplaced back to forum button\n          expandActiveSection = true;\n        });\n        api.renderInOutlet(\"before-sidebar-sections\", _aiBotSidebarNewConversation.default);\n        const setSidebarPanel = transition => {\n          if (transition?.to?.name === \"discourse-ai-bot-conversations\") {\n            return aiConversationsSidebarManager.forceCustomSidebar();\n          }\n          const topic = api.container.lookup(\"controller:topic\").model;\n          // if the topic is not a private message, not created by the current user,\n          // or doesn't have a bot response, we don't need to override sidebar\n          if (topic?.archetype === \"private_message\" && topic.user_id === currentUser.id && topic.is_bot_pm) {\n            return aiConversationsSidebarManager.forceCustomSidebar();\n          }\n          aiConversationsSidebarManager.stopForcingCustomSidebar();\n        };\n        api.container.lookup(\"service:router\").on(\"routeDidChange\", setSidebarPanel);\n      });\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/discourse/initializers/ai-gist-connector\", [\"exports\", \"discourse/lib/api\", \"discourse/plugins/discourse-ai/discourse/components/ai-topic-gist\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _api, _aiTopicGist, _component, _templateFactory, _templateOnly) {\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)(api => {\n    const site = api.container.lookup(\"service:site\");\n    const settings = api.container.lookup(\"service:site-settings\");\n    if (settings.discourse_ai_enabled && settings.ai_summarization_enabled) {\n      const gistTemplate = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n      /*\n        \n            <AiTopicGist @topic={{@outletArgs.topic}} />\n          \n      */\n      {\n        \"id\": \"heZe2mQY\",\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/initializers/ai-gist-connector.js\",\n        \"scope\": () => [_aiTopicGist.default],\n        \"isStrictMode\": true\n      }), (0, _templateOnly.default)(undefined, \"ai-gist-connector:gistTemplate\"));\n      const outlet = site.mobileView ? \"topic-list-before-category\" : \"topic-list-topic-cell-link-bottom-line__before\";\n      api.renderInOutlet(outlet, gistTemplate);\n    }\n  });\n});","define(\"discourse/plugins/discourse-ai/discourse/initializers/ai-gist-topic-list-class\", [\"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)(api => {\n    const gistService = api.container.lookup(\"service:gists\");\n    api.registerValueTransformer(\"topic-list-item-class\", _ref => {\n      let {\n        value,\n        context\n      } = _ref;\n      const shouldShow = gistService.preference === \"table-ai\" && gistService.shouldShow;\n      if (context.topic.get(\"ai_topic_gist\") && shouldShow) {\n        value.push(\"excerpt-expanded\");\n      }\n      return value;\n    });\n  });\n});","define(\"discourse/plugins/discourse-ai/discourse/initializers/ai-helper\", [\"exports\", \"discourse/lib/plugin-api\", \"discourse-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, _discourseI18n, _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        hideShortcutInTitle: 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: \"short\",\n              data: {\n                message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.no_content_error\")\n              }\n            });\n          }\n          const mode = currentUser?.ai_helper_prompts.find(p => p.name === \"proofread\").name;\n          modal.show(_diffModal.default, {\n            model: {\n              mode,\n              selectedText: selectedText(toolbarEvent),\n              toolbarEvent,\n              showResultAsDiff: true\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)(api => {\n        initializeAiHelperTrigger(api);\n      });\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/discourse/initializers/ai-image-caption\", [\"exports\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/api\", \"discourse-i18n\"], function (_exports, _ajax, _ajaxError, _api, _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)(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.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});","define(\"discourse/plugins/discourse-ai/discourse/initializers/ai-search-discoveries\", [\"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)(api => {\n    const currentUser = api.getCurrentUser();\n    const settings = api.container.lookup(\"service:site-settings\");\n    if (!settings.ai_bot_enabled || !currentUser?.can_use_ai_bot_discover_persona) {\n      return;\n    }\n    api.addSaveableUserOptionField(\"ai_search_discoveries\");\n  });\n});","define(\"discourse/plugins/discourse-ai/discourse/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)(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/discourse/initializers/ai-sentiment-admin-nav\", [\"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)(api => {\n    const currentUser = api.getCurrentUser();\n    if (!currentUser || !currentUser.admin || !currentUser.can_see_sentiment_reports) {\n      return;\n    }\n    api.addAdminSidebarSectionLink(\"reports\", {\n      name: \"sentiment_overview\",\n      route: \"admin.dashboardSentiment\",\n      label: \"discourse_ai.sentiments.sidebar.overview\",\n      icon: \"chart-column\"\n    });\n    api.addAdminSidebarSectionLink(\"reports\", {\n      name: \"sentiment_analysis\",\n      route: \"adminReports.show\",\n      routeModels: [\"sentiment_analysis\"],\n      label: \"discourse_ai.sentiments.sidebar.analysis\",\n      icon: \"chart-pie\"\n    });\n  });\n});","define(\"discourse/plugins/discourse-ai/discourse/initializers/related-topics\", [\"exports\", \"@glimmer/tracking\", \"discourse/components/basic-topic-list\", \"discourse/helpers/d-icon\", \"discourse/lib/plugin-api\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _tracking, _basicTopicList, _dIcon, _pluginApi, _discourseI18n, _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\": \"BD0VyKCH\",\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/discourse/initializers/related-topics.js\",\n    \"scope\": () => [_dIcon.default, _discourseI18n.i18n, _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)(api => {\n        api.registerMoreTopicsTab({\n          id: \"related-topics\",\n          name: (0, _discourseI18n.i18n)(\"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/discourse/initializers/translation\", [\"exports\", \"discourse/lib/api\", \"discourse/lib/cookie\"], function (_exports, _api, _cookie) {\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)(api => {\n    const settings = api.container.lookup(\"service:site-settings\");\n    if (!settings.discourse_ai_enabled || !settings.ai_translation_enabled) {\n      return;\n    }\n    api.registerCustomPostMessageCallback(\"localized\", (topicController, data) => {\n      if (!(0, _cookie.default)(\"content-localization-show-original\")) {\n        const postStream = topicController.get(\"model.postStream\");\n        postStream.triggerChangedPost(data.id, data.updated_at).then(() => {\n          topicController.appEvents.trigger(\"post-stream:refresh\", {\n            id: data.id\n          });\n        });\n      }\n    });\n  });\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/ai-bot-helper\", [\"exports\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/get-owner\", \"discourse/models/composer\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/modal/share-full-topic-modal\"], function (_exports, _ajax, _ajaxError, _getOwner, _composer, _discourseI18n, _shareFullTopicModal) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.composeAiBotMessage = composeAiBotMessage;\n  _exports.getBotType = getBotType;\n  _exports.isGPTBot = isGPTBot;\n  _exports.isPostFromAiBot = isPostFromAiBot;\n  _exports.showShareConversationModal = showShareConversationModal;\n  const MAX_PERSONA_USER_ID = -1200;\n  let enabledChatBotMap = null;\n  function ensureBotMap() {\n    if (!enabledChatBotMap) {\n      const currentUser = (0, _getOwner.getOwnerWithFallback)(this).lookup(\"service:current-user\");\n      enabledChatBotMap = {};\n      currentUser.ai_enabled_chat_bots.forEach(bot => {\n        enabledChatBotMap[bot.id] = bot;\n      });\n    }\n  }\n  function isGPTBot(user) {\n    if (!user) {\n      return;\n    }\n    ensureBotMap();\n    return !!enabledChatBotMap[user.id];\n  }\n  function getBotType(user) {\n    if (!user) {\n      return;\n    }\n    ensureBotMap();\n    const bot = enabledChatBotMap[user.id];\n    if (!bot) {\n      return;\n    }\n    return bot.is_persona ? \"persona\" : \"llm\";\n  }\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  async function composeAiBotMessage(targetBot, composer) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n      skipFocus: false,\n      topicBody: \"\",\n      personaUsername: null\n    };\n    const currentUser = composer.currentUser;\n    const draftKey = \"new_private_message_ai_\" + new Date().getTime();\n    let botUsername;\n    if (targetBot) {\n      botUsername = currentUser.ai_enabled_chat_bots.find(bot => bot.model_name === targetBot)?.username;\n    } else if (options.personaUsername) {\n      botUsername = options.personaUsername;\n    } else {\n      botUsername = currentUser.ai_enabled_chat_bots[0].username;\n    }\n    const data = {\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,\n      hasGroups: false,\n      warningsDisabled: true\n    };\n    if (options.skipFocus) {\n      data.topicBody = options.topicBody;\n      await composer.open(data);\n    } else {\n      composer.focusComposer({\n        fallbackToNewTopic: true,\n        openOpts: data\n      });\n    }\n  }\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/ai-helper-suggestions\", [\"exports\", \"@ember/application\", \"@ember/runloop\", \"discourse-i18n\"], function (_exports, _application, _runloop, _discourseI18n) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.MIN_CHARACTER_COUNT = void 0;\n  _exports.showSuggestionsError = showSuggestionsError;\n  const MIN_CHARACTER_COUNT = _exports.MIN_CHARACTER_COUNT = 40;\n  function showSuggestionsError(context, reloadFn) {\n    const toasts = (0, _application.getOwner)(context).lookup(\"service:toasts\");\n    toasts.error({\n      class: \"ai-suggestion-error\",\n      duration: \"long\",\n      showProgressBar: true,\n      data: {\n        message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.suggest_errors.no_suggestions\"),\n        actions: [{\n          label: (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.context_menu.regen\"),\n          icon: \"rotate\",\n          class: \"btn btn-small\",\n          action: async toast => {\n            toast.close();\n            await reloadFn();\n            if (context.dMenu?.show && context.suggestions?.length > 0) {\n              (0, _runloop.later)(() => context.dMenu.show(), 50);\n            }\n          }\n        }]\n      }\n    });\n  }\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 = 600000; // 10 minutes which is our max thinking time for now\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, true);\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/plugin-api\", \"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, _pluginApi, _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      const topicId = postStream.topic.id;\n      if (this.post) {\n        this.postElement = document.querySelector(`.topic-area[data-topic-id=\"${topicId}\"] #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, done);\n    }\n    async setCooked(value, done) {\n      if (!this.postElement) {\n        return;\n      }\n      (0, _pluginApi.withPluginApi)(api => api.preventCloak(this.postId));\n      (await (0, _loadMorphlex.default)()).morphInner(this.postElement.querySelector(\".cooked\"), `<div>${value}</div>`, this.morphingOptions);\n      if (done) {\n        this.post.set(\"cooked\", value);\n        (0, _pluginApi.withPluginApi)(api => api.preventCloak(this.postId, false));\n      }\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/diff-streamer\", [\"exports\", \"@glimmer/tracking\", \"@ember/runloop\", \"discourse/lib/load-js-diff\", \"discourse/lib/utilities\"], function (_exports, _tracking, _runloop, _loadJsDiff, _utilities) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DEFAULT_CHAR_TYPING_DELAY = 10;\n  const STREAMING_DIFF_TRUNCATE_THRESHOLD = 0.1;\n  const STREAMING_DIFF_TRUNCATE_BUFFER = 10;\n  const RUSH_MAX_TICKS = 10; // ≤ 10 visual diff refreshes\n  const RUSH_TICK_INTERVAL = 100; // 100 ms between them → ≤ 1 s total\n  class DiffStreamer {\n    static #_ = (() => dt7948.g(this.prototype, \"isStreaming\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isStreaming = (() => (dt7948.i(this, \"isStreaming\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"words\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #words = (() => (dt7948.i(this, \"words\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"lastResultText\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #lastResultText = (() => (dt7948.i(this, \"lastResultText\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"diff\", [_tracking.tracked], function () {\n      return this.selectedText;\n    }))();\n    #diff = (() => (dt7948.i(this, \"diff\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"suggestion\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #suggestion = (() => (dt7948.i(this, \"suggestion\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"isDone\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isDone = (() => (dt7948.i(this, \"isDone\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"isThinking\", [_tracking.tracked], function () {\n      return true;\n    }))();\n    #isThinking = (() => (dt7948.i(this, \"isThinking\"), void 0))();\n    typingTimer = null;\n    currentWordIndex = 0;\n    currentCharIndex = 0;\n    jsDiff = null;\n    bufferedToken = null;\n    rushMode = false;\n    rushBatchSize = 1;\n    rushTicksLeft = 0;\n    receivedFinalUpdate = false;\n    /**\n    * Initializes the DiffStreamer with initial text and typing delay.\n    * @param {string} selectedText - The original text to diff against.\n    * @param {number} typingDelay - (Optional) character typing delay in ms.\n    */\n    constructor(selectedText, typingDelay) {\n      this.selectedText = selectedText;\n      this.typingDelay = typingDelay || DEFAULT_CHAR_TYPING_DELAY;\n      this.loadJSDiff();\n    }\n    /**\n    * Loads the jsDiff library asynchronously.\n    */\n    async loadJSDiff() {\n      this.jsDiff = await (0, _loadJsDiff.default)();\n    }\n    /**\n    * Main entry point for streaming updates from the backend.\n    * Handles both incremental and final updates.\n    * @param {object} result - The result object containing the new text and status\n    * @param {string} newTextKey - The key in result that holds the new text value (e.g. if the JSON is { text: \"Hello\", done: false }, newTextKey would be \"text\")\n    */\n    async updateResult(result, newTextKey) {\n      if (this.receivedFinalUpdate) {\n        return;\n      }\n      if (!this.jsDiff) {\n        await this.loadJSDiff();\n      }\n      this.isThinking = false;\n      const newText = result[newTextKey];\n      const gotDoneFlag = !!result?.done;\n      if (gotDoneFlag) {\n        this.receivedFinalUpdate = true;\n        if (this.typingTimer) {\n          (0, _runloop.cancel)(this.typingTimer);\n          this.typingTimer = null;\n        }\n        // flush buffered token so everything is renderable\n        if (this.bufferedToken) {\n          this.words.push(this.bufferedToken);\n          this.bufferedToken = null;\n        }\n        // tokenise whatever tail we haven’t processed yet\n        const tail = newText.slice(this.lastResultText.length);\n        if (tail.length) {\n          this.words.push(...this.#tokenize(tail));\n        }\n        const charsLeft = newText.length - this.suggestion.length;\n        if (charsLeft <= 0) {\n          this.suggestion = newText;\n          this.diff = this.#formatDiffWithTags(this.jsDiff.diffWordsWithSpace(this.selectedText, newText), false);\n          this.isStreaming = false;\n          this.isDone = true;\n          return;\n        }\n        this.rushBatchSize = Math.ceil(charsLeft / RUSH_MAX_TICKS);\n        this.rushTicksLeft = RUSH_MAX_TICKS;\n        this.rushMode = true;\n        this.isStreaming = true;\n        this.lastResultText = newText;\n        this.#streamNextChar();\n        return;\n      }\n      const delta = newText.slice(this.lastResultText.length);\n      if (!delta) {\n        this.lastResultText = newText;\n        return;\n      }\n      // combine any previous buffered token with new delta and retokenize\n      const combined = (this.bufferedToken || \"\") + delta;\n      const tokens = this.#tokenize(combined);\n      this.bufferedToken = tokens.pop() || null;\n      if (tokens.length) {\n        this.words.push(...tokens);\n      }\n      this.isStreaming = true;\n      if (!this.typingTimer) {\n        this.#streamNextChar();\n      }\n      this.lastResultText = newText;\n    }\n    /**\n    * Resets the streamer's internal state to allow reuse.\n    */\n    reset() {\n      this.diff = \"\";\n      this.suggestion = \"\";\n      this.lastResultText = \"\";\n      this.words = [];\n      this.currentWordIndex = 0;\n      this.currentCharIndex = 0;\n      this.bufferedToken = null;\n      this.isStreaming = false;\n      this.isDone = false;\n      this.receivedFinalUpdate = false;\n      this.isThinking = true;\n      this.rushMode = false;\n      this.rushBatchSize = 1;\n      this.rushTicksLeft = 0;\n      if (this.typingTimer) {\n        (0, _runloop.cancel)(this.typingTimer);\n        this.typingTimer = null;\n      }\n    }\n    /**\n    * Computes a truncated diff during streaming to avoid excessive churn.\n    * @param {string} original - The original text.\n    * @param {string} suggestion - The partially streamed suggestion.\n    * @returns {Array} Array of diff parts with `.added`, `.removed`, and `.value`.\n    */\n    streamingDiff(original, suggestion) {\n      const max = Math.floor(suggestion.length + suggestion.length * STREAMING_DIFF_TRUNCATE_THRESHOLD + STREAMING_DIFF_TRUNCATE_BUFFER);\n      const head = original.slice(0, max);\n      const tail = original.slice(max);\n      const output = this.jsDiff.diffWordsWithSpace(head, suggestion);\n      if (tail.length) {\n        let last = output.at(-1);\n        let secondLast = output.at(-2);\n        if (last.added && secondLast?.removed) {\n          output.splice(-2, 2, last, secondLast);\n          last = secondLast;\n        }\n        if (!last.removed) {\n          last = {\n            added: false,\n            removed: true,\n            value: \"\"\n          };\n          output.push(last);\n        }\n        last.value += tail;\n      }\n      return output;\n    }\n    /**\n    * Internal loop that emits the next character(s) to simulate typing.\n    * Works in both normal and rush mode.\n    */\n    #streamNextChar() {\n      if (!this.isStreaming) {\n        return;\n      }\n      const limit = this.rushMode ? this.rushBatchSize : 1;\n      let emitted = 0;\n      while (emitted < limit && this.currentWordIndex < this.words.length) {\n        const token = this.words[this.currentWordIndex];\n        this.suggestion += token.charAt(this.currentCharIndex);\n        this.currentCharIndex++;\n        emitted++;\n        if (this.currentCharIndex >= token.length) {\n          this.currentWordIndex++;\n          this.currentCharIndex = 0;\n        }\n      }\n      let refresh = false;\n      if (this.rushMode) {\n        if (this.rushTicksLeft > 0) {\n          this.rushTicksLeft--;\n          refresh = true;\n        }\n      } else {\n        refresh = this.currentCharIndex === 0;\n      }\n      if (refresh || this.currentWordIndex >= this.words.length) {\n        const useStreaming = this.currentWordIndex < this.words.length || this.rushMode;\n        this.diff = this.#formatDiffWithTags(useStreaming ? this.streamingDiff(this.selectedText, this.suggestion) : this.jsDiff.diffWordsWithSpace(this.selectedText, this.suggestion), !this.rushMode);\n      }\n      const doneStreaming = this.currentWordIndex >= this.words.length;\n      if (doneStreaming) {\n        this.isStreaming = false;\n        this.rushMode = false;\n        this.typingTimer = null;\n        if (this.receivedFinalUpdate) {\n          this.isDone = true;\n        }\n      } else {\n        const delay = this.rushMode ? RUSH_TICK_INTERVAL : this.typingDelay;\n        this.typingTimer = (0, _runloop.later)(this, this.#streamNextChar, delay);\n      }\n    }\n    /**\n    * Splits a string into tokens, preserving whitespace as separate entries.\n    * @param {string} text - The input string.\n    * @returns {Array} Array of tokens.\n    */\n    #tokenize(text) {\n      return text.split(/(?<=\\S)(?=\\s)/);\n    }\n    /**\n    * Wraps a chunk of text in appropriate HTML tags based on its diff type.\n    * @param {string} text - The text chunk.\n    * @param {string} type - The type: 'added', 'removed', or 'unchanged'.\n    * @returns {string} HTML string.\n    */\n    #wrapChunk(text, type) {\n      if (type === \"added\") {\n        return `<ins>${text}</ins>`;\n      }\n      if (type === \"removed\") {\n        return /^\\s+$/.test(text) ? \"\" : `<del>${text}</del>`;\n      }\n      return `<span>${text}</span>`;\n    }\n    /**\n    * Converts a diff array into a string of HTML with highlight markup.\n    * @param {Array} diffArray - The array from a diff function.\n    * @param {boolean} highlightLastWord - Whether to highlight the last non-removed word.\n    * @returns {string} HTML representation of the diff.\n    */\n    #formatDiffWithTags(diffArray) {\n      let highlightLastWord = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      const words = [];\n      diffArray.forEach(part => (part.value.match(/\\S+|\\s+/g) || []).forEach(tok => words.push({\n        text: tok,\n        type: part.added ? \"added\" : part.removed ? \"removed\" : \"unchanged\"\n      })));\n      let lastIndex = -1;\n      if (highlightLastWord) {\n        for (let i = words.length - 1; i >= 0; i--) {\n          if (words[i].type !== \"removed\" && /\\S/.test(words[i].text)) {\n            lastIndex = i;\n            break;\n          }\n        }\n      }\n      const output = [];\n      for (let i = 0; i <= lastIndex; i++) {\n        let {\n          text,\n          type\n        } = words[i];\n        text = (0, _utilities.escapeExpression)(text);\n        if (/^\\s+$/.test(text)) {\n          output.push(text);\n          continue;\n        }\n        let chunk = this.#wrapChunk(text, type);\n        if (highlightLastWord && i === lastIndex) {\n          chunk = `<mark class=\"highlight\">${chunk}</mark>`;\n        }\n        output.push(chunk);\n      }\n      for (let i = lastIndex + 1; i < words.length;) {\n        const type = words[i].type;\n        let buf = \"\";\n        while (i < words.length && words[i].type === type) {\n          buf += words[i++].text;\n        }\n        output.push(this.#wrapChunk((0, _utilities.escapeExpression)(buf), type));\n      }\n      return output.join(\"\");\n    }\n  }\n  _exports.default = DiffStreamer;\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, context) {\n    return _helperEnabled(context.siteSettings) && context.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/smooth-streamer\", [\"exports\", \"@glimmer/tracking\", \"@ember/runloop\"], function (_exports, _tracking, _runloop) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DEFAULT_TYPING_DELAY = 15;\n  /**\n   * SmoothStreamer provides a typing animation effect for streamed text updates.\n   */\n  class SmoothStreamer {\n    static #_ = (() => dt7948.g(this.prototype, \"isStreaming\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isStreaming = (() => (dt7948.i(this, \"isStreaming\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"streamedText\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #streamedText = (() => (dt7948.i(this, \"streamedText\"), void 0))();\n    typingTimer = null;\n    streamedTextLength = 0;\n    /**\n    * @param {() => string} getRealtimeText - Function to retrieve the latest realtime text\n    * @param {(value: string) => void} setRealtimeText - Function to update the realtime text\n    * @param {number} [typingDelay] - Delay (in ms) between each character reveal\n    */\n    constructor(getRealtimeText, setRealtimeText, typingDelay) {\n      this.getRealtimeText = getRealtimeText;\n      this.setRealtimeText = setRealtimeText;\n      this.typingDelay = typingDelay || DEFAULT_TYPING_DELAY;\n    }\n    /**\n    * Retrieves the appropriate text: either the animated stream or the full realtime text.\n    * @returns {string}\n    */\n    get renderedText() {\n      return this.isStreaming ? this.streamedText : this.realtimeText;\n    }\n    /**\n    * Retrieves the current realtime text.\n    * @returns {string}\n    */\n    get realtimeText() {\n      return this.getRealtimeText();\n    }\n    /**\n    * Updates the realtime text.\n    * @param {string} value - The new text value\n    */\n    set realtimeText(value) {\n      this.setRealtimeText(value);\n    }\n    /**\n    * Resets the streaming state, clearing all animation progress.\n    */\n    resetStreaming() {\n      this.#cancelTypingTimer();\n      this.isStreaming = false;\n      this.streamedText = \"\";\n      this.streamedTextLength = 0;\n    }\n    /**\n    * Processes an update result (typically from MessageBus)\n    * either completing the stream or continuing animation.\n    * @param {object} result - The result object containing the new text and status\n    * @param {string} newTextKey - The key in result that holds the new text value (e.g. if the JSON is { text: \"Hello\", done: false }, newTextKey would be \"text\")\n    */\n    async updateResult(result, newTextKey) {\n      const newText = result[newTextKey];\n      if (result?.done) {\n        this.streamedText = newText;\n        this.realtimeText = newText;\n        this.isStreaming = false;\n        // Clear pending animations\n        this.#cancelTypingTimer();\n      } else if (newText.length > this.realtimeText.length) {\n        this.realtimeText = newText;\n        this.isStreaming = true;\n        await this.#onTextUpdate();\n      }\n    }\n    /**\n    * Types out the next character in the streaming text.\n    * Private method.\n    */\n    #typeCharacter() {\n      if (this.streamedTextLength < this.realtimeText.length) {\n        this.streamedText += this.realtimeText.charAt(this.streamedTextLength);\n        this.streamedTextLength++;\n        this.typingTimer = (0, _runloop.later)(this, this.#typeCharacter, this.typingDelay);\n      } else {\n        this.typingTimer = null;\n      }\n    }\n    /**\n    * Handles text updates and restarts the typing animation.\n    * Private method.\n    */\n    #onTextUpdate() {\n      this.#cancelTypingTimer();\n      this.#typeCharacter();\n    }\n    /**\n    * Cancels any pending typing animation.\n    * Private method.\n    */\n    #cancelTypingTimer() {\n      if (this.typingTimer) {\n        (0, _runloop.cancel)(this.typingTimer);\n      }\n    }\n  }\n  _exports.default = SmoothStreamer;\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/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/ai-bot-conversations-hidden-submit\", [\"exports\", \"@ember/object\", \"@ember/runloop\", \"@ember/service\", \"@ember-compat/tracked-built-ins\", \"discourse/lib/ajax\", \"discourse/lib/uploads\", \"discourse-i18n\"], function (_exports, _object, _runloop, _service, _trackedBuiltIns, _ajax, _uploads, _discourseI18n) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiBotConversationsHiddenSubmit extends _service.default {\n    static #_ = (() => dt7948.g(this.prototype, \"aiConversationsSidebarManager\", [_service.service]))();\n    #aiConversationsSidebarManager = (() => (dt7948.i(this, \"aiConversationsSidebarManager\"), 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, \"composer\", [_service.service]))();\n    #composer = (() => (dt7948.i(this, \"composer\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"dialog\", [_service.service]))();\n    #dialog = (() => (dt7948.i(this, \"dialog\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), 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, \"loading\", [_trackedBuiltIns.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    personaId;\n    targetUsername;\n    inputValue = \"\";\n    focusInput() {\n      this.composer.destroyDraft();\n      this.composer.close();\n      (0, _runloop.next)(() => {\n        document.getElementById(\"ai-bot-conversations-input\").focus();\n      });\n    }\n    static #_8 = (() => dt7948.n(this.prototype, \"focusInput\", [_object.action]))();\n    async submitToBot(uploadData) {\n      if (this.inputValue.length < this.siteSettings.min_personal_message_post_length) {\n        return this.dialog.alert({\n          message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.conversations.min_input_length_message\", {\n            count: this.siteSettings.min_personal_message_post_length\n          }),\n          didConfirm: () => this.focusInput(),\n          didCancel: () => this.focusInput()\n        });\n      }\n\n      // Don't submit if there are still uploads in progress\n      if (uploadData.inProgressUploadsCount > 0) {\n        return this.dialog.alert({\n          message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.conversations.uploads_in_progress\")\n        });\n      }\n      this.loading = true;\n      const title = (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.default_pm_prefix\");\n\n      // Prepare the raw content with any uploads appended\n      let rawContent = this.inputValue;\n\n      // Append upload markdown if we have uploads\n      if (uploadData.uploads && uploadData.uploads.length > 0) {\n        rawContent += \"\\n\\n\";\n        uploadData.uploads.forEach(upload => {\n          const uploadMarkdown = (0, _uploads.getUploadMarkdown)(upload);\n          rawContent += uploadMarkdown + \"\\n\";\n        });\n      }\n      try {\n        const response = await (0, _ajax.ajax)(\"/posts.json\", {\n          method: \"POST\",\n          data: {\n            raw: rawContent,\n            title,\n            archetype: \"private_message\",\n            target_recipients: this.targetUsername,\n            meta_data: {\n              ai_persona_id: this.personaId\n            }\n          }\n        });\n\n        // Reset uploads after successful submission\n        this.inputValue = \"\";\n        this.appEvents.trigger(\"discourse-ai:bot-pm-created\", {\n          id: response.topic_id,\n          slug: response.topic_slug,\n          title\n        });\n        this.router.transitionTo(response.post_url);\n      } finally {\n        this.loading = false;\n      }\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"submitToBot\", [_object.action]))();\n  }\n  _exports.default = AiBotConversationsHiddenSubmit;\n});","define(\"discourse/plugins/discourse-ai/discourse/services/ai-conversations-sidebar-manager\", [\"exports\", \"@glimmer/tracking\", \"@ember/runloop\", \"@ember/service\", \"@ember/template\", \"@ember-compat/tracked-built-ins\", \"discourse/lib/ajax\", \"discourse/lib/debounce\", \"discourse/lib/formatter\", \"discourse/lib/sidebar/panels\", \"discourse/lib/utilities\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-bot-sidebar-empty-state\"], function (_exports, _tracking, _runloop, _service, _template, _trackedBuiltIns, _ajax, _debounce, _formatter, _panels, _utilities, _discourseI18n, _aiBotSidebarEmptyState) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.AI_CONVERSATIONS_PANEL = void 0;\n  const AI_CONVERSATIONS_PANEL = _exports.AI_CONVERSATIONS_PANEL = \"ai-conversations\";\n  const SCROLL_BUFFER = 100;\n  const DEBOUNCE = 100;\n  class AiConversationsSidebarManager extends _service.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, \"sidebarState\", [_service.service]))();\n    #sidebarState = (() => (dt7948.i(this, \"sidebarState\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"messageBus\", [_service.service]))();\n    #messageBus = (() => (dt7948.i(this, \"messageBus\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"routeHistory\", [_service.service]))();\n    #routeHistory = (() => (dt7948.i(this, \"routeHistory\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"topics\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #topics = (() => (dt7948.i(this, \"topics\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"sections\", [_tracking.tracked], function () {\n      return new _trackedBuiltIns.TrackedArray();\n    }))();\n    #sections = (() => (dt7948.i(this, \"sections\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"isLoading\", [_tracking.tracked], function () {\n      return true;\n    }))();\n    #isLoading = (() => (dt7948.i(this, \"isLoading\"), void 0))();\n    api = null;\n    isFetching = false;\n    page = 0;\n    hasMore = true;\n    _registered = (() => new Set())();\n    _hasScrollListener = false;\n    _scrollElement = null;\n    _didInit = false;\n    _debouncedScrollHandler = () => {\n      (0, _debounce.default)(this, () => {\n        const element = this._scrollElement;\n        if (!element) {\n          return;\n        }\n        const {\n          scrollTop,\n          scrollHeight,\n          clientHeight\n        } = element;\n        if (scrollHeight - scrollTop - clientHeight - SCROLL_BUFFER < 100 && !this.isFetching && this.hasMore) {\n          this.fetchMessages();\n        }\n      }, DEBOUNCE);\n    };\n    constructor() {\n      super(...arguments);\n      this.appEvents.on(\"discourse-ai:bot-pm-created\", this, this._handleNewBotPM);\n      this.appEvents.on(\"discourse-ai:conversations-sidebar-updated\", this, this._attachScrollListener);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      this.appEvents.off(\"discourse-ai:bot-pm-created\", this, this._handleNewBotPM);\n      this.appEvents.off(\"discourse-ai:conversations-sidebar-updated\", this, this._attachScrollListener);\n    }\n    addEmptyStateClass() {\n      document.body.classList.toggle(\"has-empty-ai-conversations-sidebar\", !this.topics.length);\n    }\n    forceCustomSidebar() {\n      document.body.classList.add(\"has-ai-conversations-sidebar\");\n      if (!this.sidebarState.isForcingSidebar) {\n        this.appEvents.trigger(\"discourse-ai:force-conversations-sidebar\");\n      }\n      this.sidebarState.isForcingSidebar = true;\n\n      // calling this before fetching data\n      // helps avoid flash of main sidebar mode\n      this.sidebarState.setPanel(AI_CONVERSATIONS_PANEL);\n      this.sidebarState.setSeparatedMode();\n      this.sidebarState.hideSwitchPanelButtons();\n\n      // don't render sidebar multiple times\n      if (this._didInit) {\n        this.addEmptyStateClass();\n        return true;\n      }\n      this._didInit = true;\n      this.fetchMessages().then(() => {\n        this.sidebarState.setPanel(AI_CONVERSATIONS_PANEL);\n        this.addEmptyStateClass();\n      });\n      return true;\n    }\n    _attachScrollListener() {\n      const sections = document.querySelector(\".sidebar-sections.ai-conversations-panel\");\n      this._scrollElement = sections;\n      if (this._hasScrollListener || !this._scrollElement) {\n        return;\n      }\n      sections.addEventListener(\"scroll\", this._debouncedScrollHandler);\n      this._hasScrollListener = true;\n    }\n    _removeScrollListener() {\n      if (this._hasScrollListener) {\n        this._scrollElement.removeEventListener(\"scroll\", this._debouncedScrollHandler);\n        this._hasScrollListener = false;\n        this._scrollElement = null;\n      }\n    }\n    stopForcingCustomSidebar() {\n      document.body.classList.remove(\"has-ai-conversations-sidebar\");\n      document.body.classList.remove(\"has-empty-ai-conversations-sidebar\");\n      const isAdmin = this.sidebarState.currentPanel?.key === _panels.ADMIN_PANEL;\n      if (this.sidebarState.isForcingSidebar && !isAdmin) {\n        this.sidebarState.setPanel(_panels.MAIN_PANEL);\n        this.sidebarState.isForcingSidebar = false;\n        this.appEvents.trigger(\"discourse-ai:stop-forcing-conversations-sidebar\");\n      }\n      this._removeScrollListener();\n    }\n    get lastKnownAppURL() {\n      const lastForumUrl = this.routeHistory.history.find(url => {\n        return !url.startsWith(\"/discourse-ai\");\n      });\n      return lastForumUrl || this.router.urlFor(`discovery.${(0, _utilities.defaultHomepage)()}`);\n    }\n    async fetchMessages() {\n      if (this.isFetching || !this.hasMore) {\n        return;\n      }\n      const isFirstPage = this.page === 0;\n      this.isFetching = true;\n      try {\n        let {\n          conversations,\n          meta\n        } = await (0, _ajax.ajax)(\"/discourse-ai/ai-bot/conversations.json\", {\n          data: {\n            page: this.page,\n            per_page: 40\n          }\n        });\n        if (isFirstPage) {\n          this.topics = conversations;\n        } else {\n          this.topics = [...this.topics, ...conversations];\n          // force rerender when fetching more messages\n          this.sidebarState.setPanel(AI_CONVERSATIONS_PANEL);\n        }\n        this.page += 1;\n        this.hasMore = meta.has_more;\n        this._rebuildSections();\n      } finally {\n        this.isFetching = false;\n        this.isLoading = false;\n      }\n    }\n    _handleNewBotPM(topic) {\n      this.topics = [topic, ...this.topics];\n      this._rebuildSections();\n      this._watchForTitleUpdate(topic.id);\n    }\n    _watchForTitleUpdate(topicId) {\n      if (this._subscribedTopicIds?.has(topicId)) {\n        return;\n      }\n      this._subscribedTopicIds = this._subscribedTopicIds || new Set();\n      this._subscribedTopicIds.add(topicId);\n      const channel = `/discourse-ai/ai-bot/topic/${topicId}`;\n      this.messageBus.subscribe(channel, payload => {\n        this._applyTitleUpdate(topicId, payload.title);\n        this.messageBus.unsubscribe(channel);\n      });\n    }\n    _applyTitleUpdate(topicId, newTitle) {\n      this.topics = this.topics.map(t => t.id === topicId ? {\n        ...t,\n        title: newTitle\n      } : t);\n      this._rebuildSections();\n    }\n\n    // organize by date and create a section for each date group\n    _rebuildSections() {\n      const now = Date.now();\n      const fresh = [];\n      const todaySection = {\n        name: \"today\",\n        title: (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.conversations.today\"),\n        links: new _trackedBuiltIns.TrackedArray()\n      };\n      fresh.push(todaySection);\n      this.topics.forEach(t => {\n        const postedAtMs = new Date(t.last_posted_at || now).valueOf();\n        const diffDays = Math.floor((now - postedAtMs) / 86400000);\n        let dateGroup;\n        if (diffDays <= 1) {\n          dateGroup = \"today\";\n        } else if (diffDays <= 7) {\n          dateGroup = \"last-7-days\";\n        } else if (diffDays <= 30) {\n          dateGroup = \"last-30-days\";\n        } else {\n          const d = new Date(postedAtMs);\n          const key = `${d.getFullYear()}-${d.getMonth()}`;\n          dateGroup = key;\n        }\n        let sec;\n        if (dateGroup === \"today\") {\n          sec = todaySection;\n        } else {\n          sec = fresh.find(s => s.name === dateGroup);\n        }\n        if (!sec) {\n          let title;\n          switch (dateGroup) {\n            case \"last-7-days\":\n              title = (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.conversations.last_7_days\");\n              break;\n            case \"last-30-days\":\n              title = (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.conversations.last_30_days\");\n              break;\n            default:\n              title = (0, _formatter.autoUpdatingRelativeAge)(new Date(t.last_posted_at));\n          }\n          sec = {\n            name: dateGroup,\n            title,\n            links: new _trackedBuiltIns.TrackedArray()\n          };\n          fresh.push(sec);\n        }\n        sec.links.push({\n          key: t.id,\n          route: \"topic.fromParamsNear\",\n          models: [t.slug, t.id, t.last_read_post_number || 0],\n          title: t.title,\n          text: t.title,\n          classNames: `ai-conversation-${t.id}`\n        });\n      });\n      this.sections = new _trackedBuiltIns.TrackedArray(fresh);\n\n      // register each new section once\n      for (let sec of fresh) {\n        if (this._registered.has(sec.name)) {\n          continue;\n        }\n        this._registered.add(sec.name);\n        this.api.addSidebarSection(BaseCustomSidebarSection => {\n          return class extends BaseCustomSidebarSection {\n            static #_ = (() => dt7948.g(this.prototype, \"manager\", [(0, _service.service)(\"ai-conversations-sidebar-manager\")]))();\n            #manager = (() => (dt7948.i(this, \"manager\"), void 0))();\n            static #_2 = (() => dt7948.g(this.prototype, \"events\", [(0, _service.service)(\"appEvents\")]))();\n            #events = (() => (dt7948.i(this, \"events\"), void 0))();\n            constructor() {\n              super(...arguments);\n              (0, _runloop.scheduleOnce)(\"afterRender\", this, this.triggerEvent);\n            }\n            triggerEvent() {\n              this.events.trigger(\"discourse-ai:conversations-sidebar-updated\");\n            }\n            get name() {\n              return sec.name;\n            }\n            get title() {\n              return sec.title;\n            }\n            get text() {\n              return (0, _template.htmlSafe)(sec.title);\n            }\n            get links() {\n              return this.manager.sections.find(s => s.name === sec.name)?.links || [];\n            }\n            get emptyStateComponent() {\n              if (!this.manager.isLoading && this.links.length === 0) {\n                return _aiBotSidebarEmptyState.default;\n              }\n            }\n          };\n        }, AI_CONVERSATIONS_PANEL);\n      }\n    }\n  }\n  _exports.default = AiConversationsSidebarManager;\n});","define(\"discourse/plugins/discourse-ai/discourse/services/discobot-discoveries\", [\"exports\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\"], function (_exports, _tracking, _object, _service) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class DiscobotDiscoveries extends _service.default {\n    static #_ = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))(); // We use this to retain state after search menu gets closed.\n    // Similar to discourse/discourse#25504\n    static #_2 = (() => dt7948.g(this.prototype, \"discovery\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #discovery = (() => (dt7948.i(this, \"discovery\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"lastQuery\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #lastQuery = (() => (dt7948.i(this, \"lastQuery\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"discoveryTimedOut\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #discoveryTimedOut = (() => (dt7948.i(this, \"discoveryTimedOut\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"modelUsed\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #modelUsed = (() => (dt7948.i(this, \"modelUsed\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"loadingDiscoveries\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loadingDiscoveries = (() => (dt7948.i(this, \"loadingDiscoveries\"), void 0))();\n    resetDiscovery() {\n      this.loadingDiscoveries = false;\n      this.discovery = \"\";\n      this.discoveryTimedOut = false;\n      this.modelUsed = \"\";\n    }\n    get showDiscoveryTitle() {\n      return this.discovery.length > 0 || this.loadingDiscoveries || this.discoveryTimedOut;\n    }\n    async disableDiscoveries() {\n      this.currentUser.user_option.ai_search_discoveries = false;\n      await this.currentUser.save([\"ai_search_discoveries\"]);\n      location.reload();\n    }\n    static #_7 = (() => dt7948.n(this.prototype, \"disableDiscoveries\", [_object.action]))();\n  }\n  _exports.default = DiscobotDiscoveries;\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 = _exports.TABLE_LAYOUT = _exports.TABLE_AI_LAYOUT = void 0;\n  const TOPIC_LIST_LAYOUT_KEY = \"topicListLayout\";\n  const PM_TOPIC_LIST_LAYOUT_KEY = \"pmTopicListLayout\";\n  const TABLE_LAYOUT = _exports.TABLE_LAYOUT = \"table\";\n  const TABLE_AI_LAYOUT = _exports.TABLE_AI_LAYOUT = \"table-ai\";\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(TOPIC_LIST_LAYOUT_KEY);\n    }))();\n    #preference = (() => (dt7948.i(this, \"preference\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"pmPreference\", [_tracking.tracked], function () {\n      return localStorage.getItem(PM_TOPIC_LIST_LAYOUT_KEY);\n    }))();\n    #pmPreference = (() => (dt7948.i(this, \"pmPreference\"), void 0))();\n    get routerAttributes() {\n      return this.router.currentRoute.attributes;\n    }\n    get publicTopics() {\n      return this.routerAttributes?.list?.topics;\n    }\n    get pmTopics() {\n      return this.routerAttributes?.topics;\n    }\n    get isPm() {\n      return !this.publicTopics && this.pmTopics;\n    }\n    get showToggle() {\n      const topicList = this.publicTopics ?? this.pmTopics;\n      return topicList?.some(topic => topic.ai_topic_gist);\n    }\n    get currentPreference() {\n      return this.isPm ? this.pmPreference : this.preference;\n    }\n    setPreference(value) {\n      let isPm = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      if (isPm) {\n        this.pmPreference = value;\n        localStorage.setItem(PM_TOPIC_LIST_LAYOUT_KEY, value);\n      } else {\n        this.preference = value;\n        localStorage.setItem(TOPIC_LIST_LAYOUT_KEY, value);\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, \"_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/routing\", \"ember-route-template\", \"discourse/helpers/d-icon\", \"discourse-i18n\", \"admin/components/admin-report\", \"admin/components/dashboard-period-selector\", \"float-kit/components/d-tooltip\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _routing, _emberRouteTemplate, _dIcon, _discourseI18n, _adminReport, _dashboardPeriodSelector, _dTooltip, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _emberRouteTemplate.default)((0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n      <div class=\"sentiment section\">\n        <div class=\"period-section\">\n          <div class=\"section-title\">\n            <h2 id=\"sentiment-heading\">\n              {{i18n \"discourse_ai.sentiments.dashboard.title\"}}\n            </h2>\n  \n            <DashboardPeriodSelector\n              @period={{@controller.period}}\n              @setPeriod={{@controller.setPeriod}}\n              @startDate={{@controller.startDate}}\n              @endDate={{@controller.endDate}}\n              @setCustomDateRange={{@controller.setCustomDateRange}}\n            />\n          </div>\n        </div>\n  \n        <div class=\"section-body\">\n          <div class=\"charts\">\n            <AdminReport\n              @dataSourceName=\"overall_sentiment\"\n              @filters={{@controller.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                        {{icon \"circle-question\"}}\n                      </:trigger>\n                      <:content>\n                        <span>{{i18n\n                            \"admin.dashboard.emotion.description\"\n                          }}</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 @controller.emotions as |metric|}}\n                    <AdminReport\n                      @showHeader={{false}}\n                      @filters={{@controller.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  {\n    \"id\": \"20JiKdh5\",\n    \"block\": \"[[[1,\\\"\\\\n    \\\"],[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\\\"],[14,1,\\\"sentiment-heading\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,0],[\\\"discourse_ai.sentiments.dashboard.title\\\"],null]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n          \\\"],[8,[32,1],null,[[\\\"@period\\\",\\\"@setPeriod\\\",\\\"@startDate\\\",\\\"@endDate\\\",\\\"@setCustomDateRange\\\"],[[30,1,[\\\"period\\\"]],[30,1,[\\\"setPeriod\\\"]],[30,1,[\\\"startDate\\\"]],[30,1,[\\\"endDate\\\"]],[30,1,[\\\"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,[32,2],null,[[\\\"@dataSourceName\\\",\\\"@filters\\\",\\\"@showHeader\\\"],[\\\"overall_sentiment\\\",[30,1,[\\\"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,[32,3],[[24,0,\\\"report-url\\\"]],[[\\\"@route\\\"],[\\\"adminReports\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[1,[28,[32,0],[\\\"admin.dashboard.emotion.title\\\"],null]],[1,\\\"\\\\n                  \\\"]],[]]]]],[1,\\\"\\\\n                  \\\"],[8,[32,4],null,[[\\\"@interactive\\\"],[\\\"true\\\"]],[[\\\"trigger\\\",\\\"content\\\"],[[[[1,\\\"\\\\n                      \\\"],[1,[28,[32,5],[\\\"circle-question\\\"],null]],[1,\\\"\\\\n                    \\\"]],[]],[[[1,\\\"\\\\n                      \\\"],[10,1],[12],[1,[28,[32,0],[\\\"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,[32,0],[\\\"admin.dashboard.reports.today\\\"],null]],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"counters-cell\\\"],[12],[1,[28,[32,0],[\\\"admin.dashboard.reports.yesterday\\\"],null]],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"counters-cell\\\"],[12],[1,[28,[32,0],[\\\"admin.dashboard.reports.last_7_days\\\"],null]],[13],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"counters-cell\\\"],[12],[1,[28,[32,0],[\\\"admin.dashboard.reports.last_30_days\\\"],null]],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,1,[\\\"emotions\\\"]]],null]],null],null,[[[1,\\\"                  \\\"],[8,[32,2],null,[[\\\"@showHeader\\\",\\\"@filters\\\",\\\"@forcedModes\\\",\\\"@dataSourceName\\\"],[false,[30,1,[\\\"emotionFilters\\\"]],\\\"emotion\\\",[29,[\\\"emotion_\\\",[30,2]]]]],null],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@controller\\\",\\\"metric\\\"],false,[\\\"each\\\",\\\"-track-array\\\"]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/templates/admin-dashboard-sentiment.js\",\n    \"scope\": () => [_discourseI18n.i18n, _dashboardPeriodSelector.default, _adminReport.default, _routing.LinkTo, _dTooltip.default, _dIcon.default],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, undefined)));\n});","define(\"discourse/plugins/discourse-ai/discourse/templates/discourse-ai-bot-conversations\", [\"exports\", \"ember-route-template\", \"discourse/plugins/discourse-ai/discourse/components/ai-bot-conversations\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _emberRouteTemplate, _aiBotConversations, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _emberRouteTemplate.default)((0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    <AiBotConversations @controller={{@controller}} />\n  */\n  {\n    \"id\": \"a8WVTD3/\",\n    \"block\": \"[[[8,[32,0],null,[[\\\"@controller\\\"],[[30,1]]],null]],[\\\"@controller\\\"],false,[]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/templates/discourse-ai-bot-conversations.js\",\n    \"scope\": () => [_aiBotConversations.default],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, undefined)));\n});","define(\"discourse/plugins/discourse-ai/discourse/templates/preferences/ai\", [\"exports\", \"@ember/helper\", \"ember-route-template\", \"truth-helpers\", \"discourse/components/preference-checkbox\", \"discourse/components/save-controls\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _helper, _emberRouteTemplate, _truthHelpers, _preferenceCheckbox, _saveControls, _discourseI18n, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _emberRouteTemplate.default)((0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n      <div class=\"ai-user-preferences\">\n        <legend class=\"control-label\">{{i18n \"discourse_ai.title\"}}</legend>\n  \n        {{#each @controller.booleanSettings as |setting|}}\n          {{#if setting.isIncluded}}\n            <div class=\"control-group ai-setting\">\n              <PreferenceCheckbox\n                @labelKey={{setting.label}}\n                @checked={{get @controller.model.user_option setting.key}}\n                data-setting-name={{setting.settingName}}\n                class=\"pref-{{setting.settingName}}\"\n              />\n            </div>\n          {{/if}}\n        {{/each}}\n  \n        {{#if (eq @controller.userSettingAttributes.length 0)}}\n          {{i18n \"discourse_ai.user_preferences.empty\"}}\n        {{/if}}\n  \n        {{#unless (eq @controller.userSettingAttributes.length 0)}}\n          <SaveControls\n            @id=\"user_ai_preference_save\"\n            @model={{@controller.model}}\n            @action={{@controller.save}}\n            @saved={{@controller.saved}}\n          />\n        {{/unless}}\n      </div>\n    \n  */\n  {\n    \"id\": \"wxtqQ3zy\",\n    \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-user-preferences\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"legend\\\"],[14,0,\\\"control-label\\\"],[12],[1,[28,[32,0],[\\\"discourse_ai.title\\\"],null]],[13],[1,\\\"\\\\n\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,1,[\\\"booleanSettings\\\"]]],null]],null],null,[[[41,[30,2,[\\\"isIncluded\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"control-group ai-setting\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[32,1],[[16,\\\"data-setting-name\\\",[30,2,[\\\"settingName\\\"]]],[16,0,[29,[\\\"pref-\\\",[30,2,[\\\"settingName\\\"]]]]]],[[\\\"@labelKey\\\",\\\"@checked\\\"],[[30,2,[\\\"label\\\"]],[28,[32,2],[[30,1,[\\\"model\\\",\\\"user_option\\\"]],[30,2,[\\\"key\\\"]]],null]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[2]],null],[1,\\\"\\\\n\\\"],[41,[28,[32,3],[[30,1,[\\\"userSettingAttributes\\\",\\\"length\\\"]],0],null],[[[1,\\\"        \\\"],[1,[28,[32,0],[\\\"discourse_ai.user_preferences.empty\\\"],null]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[51,[28,[32,3],[[30,1,[\\\"userSettingAttributes\\\",\\\"length\\\"]],0],null]],[[[1,\\\"        \\\"],[8,[32,4],null,[[\\\"@id\\\",\\\"@model\\\",\\\"@action\\\",\\\"@saved\\\"],[\\\"user_ai_preference_save\\\",[30,1,[\\\"model\\\"]],[30,1,[\\\"save\\\"]],[30,1,[\\\"saved\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@controller\\\",\\\"setting\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\",\\\"unless\\\"]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/templates/preferences/ai.js\",\n    \"scope\": () => [_discourseI18n.i18n, _preferenceCheckbox.default, _helper.get, _truthHelpers.eq, _saveControls.default],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, undefined)));\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]\", \"div[data-ai-artifact-autorun]\", \"div[data-ai-artifact-height]\", \"div[data-ai-artifact-width]\"]);\n  }\n});"],"mappings":"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","ignoreList":[]}