{"version":3,"file":"discourse-ai.js","names":["define","_exports","Object","defineProperty","value","default","resource","path","map","this","route","resetNamespace","_rest","Adapter","jsonMode","basePath","pathFor","store","type","findArgs","pluralize","apiNameFor","appendQueryParams","AiToolAdapter","_ajax","AiEmbedding","createProperties","getProperties","updateProperties","attrs","id","testConfig","ajax","data","ai_embedding","workingCopy","createRecord","AiLlm","llm_quotas","llmConfig","ai_llm","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","_trackedBuiltIns","AiTool","trackParameters","parameters","TrackedArray","p","parameter","TrackedObject","enum","_component","_component2","_getUrl","_templateFactory","__COLOCATED_TEMPLATE__","createTemplateFactory","block","moduleName","isStrictMode","AdminReportEmotion","dt7948","c","todayLink","date","moment","format","_filterURL","yesterdayLink","subtract","lastSevenDaysLink","lastThirtyDaysLink","_baseFilter","_model","model","attributeBindings","classNames","setComponentTemplate","_tracking","_helper","_modifier","_object","_didInsert","_service","_emberModifier","_truthHelpers","_dButton","_horizontalOverflowNav","_postList","_bodyClass","_categoryBadge","_dIcon","_replaceEmoji","_ajaxError","_later","_utilities","_category","_post","_discourseI18n","_dTooltip","_doughnutChart","_aiSentimentHorizontalBar","AdminReportSentimentAnalysis","static","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","scope","on","fn","and","_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","artifactUrl","artifactVersion","showArtifact","toggleView","pushState","location","href","wrapperClasses","_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","_aiBotHelper","AiBotHeaderIcon","currentUser","composer","bots","availableBots","ai_enabled_chat_bots","bot","is_persosna","Boolean","model_name","showHeaderButton","ai_bot_add_to_header","compose","composeAiBotMessage","_owner","_dToast","_dToastInstance","_aiHelperOptionsList","_diffModal","_thumbnailSuggestions","AiComposerHelperMenu","modal","site","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","forEach","reduce","memo","prompt_type","toast","owner","getOwner","close","duration","theme","message","suggestChanges","option","mode","selectedText","thumbnails","thumbnailSuggestions","revert","undoAiAction","closeMenu","_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","error","displayTestResult","seeded","configurePreset","findBy","setProvider","_ref","set","params","initialParams","providerParams","entries","acc","_ref2","field","values","v","normalizeParam","resetForm","save","dataToSave","newModel","addObject","savedProvider","success","later","test","testModel","configTestResult","confirm","didConfirm","destroyRecord","then","removeObject","catch","providerKeys","concat","not","get","eq","_dBreadcrumbsItem","_dPageSubheader","_adminConfigAreaEmptyList","_aiEmbeddingEditor","AiEmbeddingsListEditor","adminPluginNavManager","hasEmbeddingElements","_dToggleSwitch","_fullPageSearch","_search","_aiIndicatorWave","AiFullPageSearch","appEvents","searchPreferencesManager","searching","AiResults","showingAiResults","sortOrder","initialSearchTerm","searchTerm","onSearch","off","searchEnabled","resetAiResults","performHyDESearch","disableToggleSwitch","validSearchOrder","searchStateText","count","settled","noResults","searchType","SEARCH_TYPE_DEFAULT","isValidSearchTerm","searchClass","tooltipText","toggleAiResults","trigger","enabled","addSearchResults","q","async","translateResults","results","generatedByAi","finally","sortChanged","_dropdownMenu","_dMenu","_eq","AiGistToggle","gists","buttons","label","description","selectedOptionId","currentButton","onRegisterApi","api","dMenu","onSelect","setPreference","_withEventValue","_not","AiHelperCustomPrompt","sendInput","submit","promptArgs","_templateOnly","AiHelperLoading","_keyboardShortcuts","_aiHelperCustomPrompt","AiHelperOptionsList","showShortcut","desktopView","shortcutVisible","shortcut","translateModKey","PLATFORM_KEY_MODIFIER","indicatorDots","AiIndicatorWave","_routing","_boundAvatarTemplate","_adminUser","_aiQuotaDurationSelector","_aiLlmQuotaModal","AiLlmEditorForm","llmTemplate","modelName","split","info","llms","modelInfo","models","max_prompt_tokens","tokens","tokenizer","endpoint","computeProviderParams","api_key","enabled_chat_bot","vision_enabled","sort","a","b","localeCompare","tokenizers","adminUser","modulesUsingModel","usedBy","used_by","m","join","inUseWarning","settings","showAddQuotaButton","currentParams","fromEntries","k","canEditURL","openAddQuotaModal","addItemToCollection","llm","_ref3","providerParamsKeys","LinkTo","gt","_aiLlmEditorForm","AiLlmEditor","_comboBox","AiLlmSelector","hash","_aiLlmEditor","isPreseeded","AiLlmsListEditor","modelDescription","replace","lookup","ignoreMissing","preseededDescription","sanitizedTranslationKey","hasLlmElements","preconfiguredTitle","preConfiguredLlms","llmsContent","content","some","transitionToLlmEditor","localizeUsage","usage","_group","_groupChooser","_aiLlmSelector","_aiPersonaToolOptions","_aiToolSelector","_ragOptionsFk","_ragUploader","PersonaEditor","allGroups","dirtyFormData","mapToolOptions","chatPluginEnabled","chat_enabled","allTools","personas","maxPixelValues","forcedToolStrategies","updateAllGroups","findAll","personaToSave","assign","sortPersonas","rag_uploads","userClone","toggleEnabled","dirtyData","persistField","togglePriority","form","updateUploads","newUploads","removeUpload","currentUploads","upload","updatedUploads","file","updateToolNames","currentData","updatedTools","removedTools","ct","updatedOptions","setProperties","updatedForcedTools","fct","availableForcedTools","currentOptions","toolNames","newValue","updatedDirtyData","update","sorted","toArray","priority","clear","setObjects","or","_aiPersonaEditor","AiPersonaListEditor","oldValue","err","AiPersonaToolOptions","showToolOptions","any","toolsMetadata","metatada","formObjectKeys","_cookText","_fastEdit","_fastEdit2","_decorators","_pluginApi","_text","_aiHelperLoading","_smoothStreamer3","AiPostHelperMenu","messageBus","menu","tooltip","MENU_STATES","menuState","loading","suggestion","copyButtonIcon","copyButtonLabel","showFastEdit","showAiButtons","streaming","lastSelectedOption","isSavingFootnote","supportsFastEdit","supportsAddFootnote","smoothStreamer","showFootnoteTooltip","instance","register","identifier","placement","triggers","destroy","_activeAiRequest","withPluginApi","registerValueTransformer","footnoteDisabled","item","_showUserCustomPrompts","canEditPost","highlightedTextToggleIcon","showHighlightedText","allowInsertFootnote","enable_markdown_footnotes","display_footnotes_inline","_sanitizeForFootnote","trim","sanitize","subscribe","channel","quoteState","postId","_updateResult","unsubscribe","done","updateResult","toggleHighlightedTextPreview","performAiSuggestion","_handleStreamedResult","method","buffer","custom_prompt","suggestions","_handleProofreadOption","getByIdentifier","post_id","initialValue","closeFastEdit","cancelAiAction","abort","copySuggestion","setTimeout","mobileView","hideToolbar","insertFootnote","sanitizedSuggestion","credits","withFootnote","newRaw","raw","DURATION_PRESETS","seconds","nameKey","DurationSelector","selectedPresetId","customHours","Math","round","presetOptions","isCustom","currentDurationSeconds","parseInt","onPresetChange","updateValue","onCustomHoursChange","target","onChange","AiSearchDiscoveriesTooltip","discobotDiscoveries","_url","_topic","_aiBlinkingAnimation","AiSearchDiscoveries","search","loadingConversationTopic","hideDiscoveries","fullDiscoveryToggled","discoveryPreviewLength","discovery","discoveryTimeout","triggerDiscovery","detectSearch","query","resetDiscovery","resetStreaming","addSearchMenuOnKeyDownCallback","searchMenu","loadingDiscoveries","lastQuery","_updateDiscovery","modelUsed","model_used","activeGlobalSearchTerm","toggleLabel","toggleIcon","canShowExpandtoggle","renderedText","renderPreviewOnly","canContinueConversation","ai_enabled_personas","discoverPersona","ai_bot_discover_persona","discoverPersonaHasBot","username","isStreaming","continueConvoBtnLabel","timeoutDiscovery","toggleDiscovery","continueConversation","context","continueRequest","topicJSON","topic_id","topic","routeTo","afterRouteComplete","closeSearchMenu","focusComposer","discoveryTimedOut","_template","AiSentimentHorizontalBar","htmlSafe","_dStatTiles","_adminConfigAreaCard","_spamTestModal","AiSpam","scanned_count","spam_detected","false_positives","false_negatives","daily_data","stats","isEnabled","selectedLLM","customInstructions","errors","initializeFromModel","spam_scanning_user","admin","fixScanUserNotAdmin","spamScanningUser","reload","is_enabled","llm_id","availableLLMs","autoSelectedLLM","custom_instructions","available_llms","llm_model_id","llmId","toString","updateLLM","showTestModal","metrics","detected","falsePositives","falseNegatives","flagging_username","spam_score_type","AiSplitTopicSuggester","SUGGESTION_TYPES","tag","input","selectedPosts","cooked","disabled","loadSuggestions","assistant","s","suggestedCategories","categories","toLowerCase","applySuggestion","updateAction","currentValue","isArray","updatedTags","Set","AiSummarySkeleton","_aceEditor","_aiToolParameterEditor","_aiToolTestModal","_ragOptions","AiToolEditor","editingModel","showDelete","preset_name","updateModel","presetId","uploads","pushObject","openTestModal","AiToolListEditor","PARAMETER_TYPES","AiToolParameterEditor","addParameter","required","removeParameter","index","toggleRequired","checked","toggleEnum","addEnumValue","removeEnumValue","updateEnumValue","_multiSelect","AiToolSelector","AiTopicGist","shouldShow","preference","hasGist","gist","escapedExcerpt","_dateTimeInputRange","_avatar","_formatter","_chart","AiUsage","toDate","startDate","Date","endDate","selectedFeature","selectedModel","selectedPeriod","isCustomDateActive","loadingData","fetchData","feature","_cachedFeatures","_cachedModels","onFilterChange","onFeatureChanged","onModelChanged","takeUsers","start","end","users","slice","normalizeTimeSeriesData","normalized","interval","period","dataMap","Map","d","currentMoment","isSameOrBefore","dateKey","existingData","total_tokens","total_cached_tokens","total_request_tokens","total_response_tokens","summary","total_requests","chartConfig","normalizedData","chartEl","document","computedStyle","getComputedStyle","getPropertyValue","request","labels","row","datasets","backgroundColor","responsive","scales","x","stacked","y","beginAtZero","availableFeatures","features","f","feature_name","availableModels","periodOptions","setPeriodDates","now","clone","onPeriodSelect","onCustomDateClick","onDateChange","onChangeDateRange","to","_startDate","_endDate","onRefreshDateRange","number","lt","DoughnutChart","canvasSize","config","totalScore","cutout","radius","maintainAspectRatio","plugins","legend","display","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","groups","group_id","closeModal","onSave","availableGroups","existingQuotaGroupIds","group","max_tokens","max_usages","duration_seconds","asSeconds","setGroupId","validateForm","addError","removeError","_aiSummarySkeleton","AiSummaryModal","summarizedOn","summarizedBy","newPostsSinceSummary","outdated","canRegenerate","currentIndex","outdatedSummaryWarningText","outdatedText","topRepliesSummaryEnabled","resetSummary","_channel","postStream","topicId","baseSummarizationURL","_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","ai_tool","contentType","jsonToHtml","output","_conditionalLoadingSection","_dModalCancel","ChatModalChannelSummary","chatApi","sinceHours","availableSummaries","sinceOptions","hours","channelId","summarize","since","_utilities2","DebugAiModal","justCopiedText","activeTab","next","loadApiRequestInfo","htmlContext","parsed","formattedResponse","raw_response_payload","raw_request_payload","safe","line","escapeExpression","copyRequest","copy","copyResponse","loadLog","logId","prevLog","prev_log_id","nextLog","next_log_id","requestActive","responseActive","requestClicked","preventDefault","responseClicked","ModalDiffModal","force_default_locale","triggerConfirmChanges","replaceText","ShareModal","shareKey","share_key","generateShareURL","Blob","primaryLabel","deleteLink","share","clipboardCopyAsync","_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","width","height","short_url","removeSelection","thumbnail","appendSelectedImages","imageMarkdown","dEditorInput","setSelectionRange","focus","execCommand","AiCancelStreamingButton","cancelStreaming","_debugAiModal","AiDebugButton","shouldRender","isPostFromAiBot","debugAiResponse","_shareModal","shareAiResponse","showFeedback","RagOptionsFk","showIndexingOptions","toggleIndexingOptions","stopPropagation","indexingOptionsText","visionLlms","RagOptions","visionLlmId","rag_llm_model_id","RagUploadProgress","updatedProgress","trackProgress","onIndexingUpdate","total","indexed","calculateProgress","progress","ceil","fullyIndexed","ragIndexingStatuses","_debounce","_uppyUpload","_ragUploadProgress","RagUploader","term","filteredUploads","ragUploads","uppyUpload","maxFiles","uploadUrl","preventDirectS3Uploads","uploadDone","uploadedFile","newUpload","status","statusText","debouncedSearch","didReceiveAttrs","inProgressUploads","cancelAllUploads","targetName","statuses","_updateTargetWithUploads","acceptedFileTypes","allowImages","submitFiles","openPicker","cancelUploading","cancelSingleUpload","fileId","u","toUpperCase","onRemove","_chatChannel","ReviewableAiChatMessage","chatChannel","reviewable","chat_channel","_aiHelperSuggestions","AiCategorySuggester","untriggers","triggerIcon","showSuggestionButton","composerFields","reply","showTrigger","MIN_CHARACTER_COUNT","topicState","ai_embeddings_enabled","buffered","onClose","_discourseTag","AiTagSuggester","showDropdown","tagSelectorHasValues","class","removedAppliedTag","maxTags","max_tags_per_topic","tags","AiTitleSuggester","editTopicTitleField","ThumbnailSuggestionItem","selected","selectIcon","selectLabel","toggleSelection","AISentimentDashboard","_outletArgs","helper","ai_sentiment_enabled","_aiCategorySuggester","_showAiHelper","AiCategorySuggestion","outletArgs","showComposerAiHelper","_aiTagSuggester","AiTagSuggestion","_aiTitleSuggester","AiTitleSuggestion","_default","composerModel","renderChatWarning","ai_bot_enable_chat_warning","aiBotClasses","computed","isAiBotChat","targetRecipients","recipients","SearchResultDecoration","_aiGistToggle","topicThumbnails","enabledForRoute","_loadingSpinner","AiImageCaptionLoader","imageCaptionPopup","_keyValueStore","_dropdownSelectBox","BotSelector","container","reciepients","isBotMessage","allowLLMSelector","STORE_NAMESPACE","LLM_STORE_NAMESPACE","preferredPersonaStore","preferredLlmStore","botOptions","personaId","getObject","_value","metaData","ai_persona_id","setAllowLLMSelector","hasLlmSelector","llmOption","llmOptions","innerLlmOption","currentLlm","resetTargetRecipients","is_persona","enabledPersonas","filterable","setObject","innerPersona","force_default_llm","botUsername","_dTextarea","_autoFocus","AiImageCaptionContainer","updateCaption","newCaption","saveCaption","hidePopup","resizeTextarea","style","borderTopWidth","borderBottomWidth","scrollTop","scrollHeight","showPopup","_request","toggleLoadingState","AiEditSuggestionButton","showPostAIHelper","_activeAIRequest","prompt","suggest","_aiSearchDiscoveries","_aiSearchDiscoveriesTooltip","AiFullPageDiscobotDiscoveries","_args","can_use_ai_bot_discover_persona","user_option","ai_search_discoveries","_aiFullPageSearch","AiFullPageSearchConnector","ai_embeddings_semantic_search_enabled","_virtualElementFromTextRange","_aiPostHelperMenu","AiPostHelperTrigger","showMainButtons","originalPostHTML","postHighlighted","currentMenu","removeHighlightedText","highlightSelectedText","postElement","innerHTML","getSelection","rangeCount","range","getRangeAt","startContainer","nodeType","Node","TEXT_NODE","startOffset","newStartNode","splitText","setStart","endContainer","endOffset","walker","createTreeWalker","commonAncestorContainer","NodeFilter","SHOW_TEXT","acceptNode","node","intersectsNode","FILTER_ACCEPT","FILTER_REJECT","textNodes","currentNode","nextNode","textNode","highlight","createElement","cloneNode","appendChild","parentNode","replaceChild","removeAllRanges","showAiPostHelperMenu","component","inline","interactive","shouldRenderUnder","fallbackPlacements","trapTab","closeOnScroll","modalForMobile","menuData","opts","AiQuickSearchLoader","quickSearch","_assistantItem","_search3","AiQuickSemanticSearch","ai_embeddings_semantic_quick_search_enabled","searchTermChanged","invalidTerm","performSearch","searchResults","resultTypes","AiDiscobotDiscoveries","AiQuickSearchInfo","termTooShort","_aiSplitTopicSuggester","_aiTopicGist","AiTopicGistPlacement","discourse_ai_enabled","ai_summarization_enabled","_aiSummaryModal","AiSummaryTrigger","openAiSummaryModal","AutoImageCaptionSetting","aiHelperEnabledFeatures","ai_helper_enabled_features","user_allowed_ai_auto_image_captions","ai_helper_enabled","showAiPreferences","_adminDashboardTab","AdminDashboardSentiment","emotionFilters","emotions","_controller","_environment","PreferencesAiController","saved","booleanSettings","settingName","auto_image_caption","isIncluded","ai_bot_enabled","userSettingAttributes","setting","isTesting","_composer","_shareFullTopicModal","targetBot","draftKey","getTime","fallbackToNewTopic","openOpts","PRIVATE_MESSAGE","topicTitle","archetypeId","hasGroups","warningsDisabled","MAX_PERSONA_USER_ID","payload","_postUpdater","MIN_LETTERS_PER_INTERVAL","addProgressDot","lastBlock","lastChild","lastNonEmptyChild","ELEMENT_NODE","dotElement","applyProgress","updaterClass","updaterInstance","progressTimer","PROGRESS_INTERVAL","streamPostText","noop","aiStreamingStatus","ensureProgress","GIVE_UP_INTERVAL","MAX_FLUSH_TIME","textContent","previousSibling","updater","startTime","oldRaw","letters","floor","substring","setRaw","setCooked","keepPolling","promises","postStatus","postUpdater","Promise","all","handleProgress","_loadMorphlex","_progressHandlers","_streamUpdater","PostUpdater","morphingOptions","beforeAttributeUpdated","attributeName","tagName","cook","offsetWidth","cookedElement","morphInner","_text3","AiTopicSummary","regenerated","showSummaryBox","canCollapseSummary","loadingSummary","processUpdate","summarized_on","collapse","fromPostNumber","toPostNumber","stream","postIds","post_ids","include_raw","post_stream","generateClipboard","_helperEnabled","featureType","enableHelper","enableAssistant","can_use_assistant","canShowInPM","ai_helper_allowed_in_pm","enableFeature","privateMessage","can_use_assistant_in_post","SmoothStreamer","streamedText","typingTimer","streamedTextLength","getRealtimeText","setRealtimeText","typingDelay","realtimeText","cancelTypingTimer","newTextKey","newText","onTextUpdate","typeCharacter","charAt","json","html","caretCoords","VirtualElementFromCaretCoords","updateRect","xOffset","yOffset","rect","toJSON","getBoundingClientRect","getClientRects","clientWidth","clientHeight","_discourse","DiscourseAiSharedConversationShowRoute","beforeModel","transition","external_links_in_new_tab","open","intent","redirect","_restrictedUser","PreferencesAiRoute","setupController","controller","defaultHomepage","DiscobotDiscoveries","showDiscoveryTitle","disableDiscoveries","Gists","localStorage","getItem","attributes","list","topics","ai_topic_gist","setItem","_uploads","ImageCaptionPopup","imageIndex","imageSrc","popupTrigger","showAutoCaptionLoader","matchingPlaceholder","match","IMAGE_MARKDOWN_REGEX","replacement","QuickSearch","initialize","addAdminPluginConfigurationNav","_adminReportEmotion","require","registerReportModeComponent","_aiArtifact","initializeAiArtifacts","decorateCookedElement","renderGlimmer","artifactElement","getAttribute","onlyStream","_renderGlimmer","_aiBotHeaderIcon","_aiCancelStreamingButton","_aiDebugButton","_aiShareButton","enabledChatBotIds","allowDebug","isGPTBot","attachHeaderIcon","headerIcons","initializeAIBotReplies","dag","firstButtonKey","before","after","initializePauseButton","modifyClass","pluginId","onAIBotStreamedReply","_super","isPrivateMessage","details","allowed_users","initializePersonaDecorator","topicController","decorateWidget","dec","widget","attach","registerWidgetShim","can_debug_ai_bot_conversations","getCurrentUser","archetype","initializeDebugButton","_ref4","initializeShareButton","registerTopicFooterButton","dependentKeys","displayed","can_share_ai_bot_conversations","ai_persona_name","initializeShareTopicButton","_api","_chatModalChannelSummary","apiInitializer","chatService","canSummarize","can_summarize","userCanChat","registerChatComposerButton","translatedLabel","activeChannel","_aiComposerHelperMenu","onToolbarCreate","toolbar","composerContent","addButton","preventFocus","shortcutAction","condition","sendAction","initializeAiHelperTrigger","buttonAttrs","needsImprovedCaption","caption","fetchImageCaption","imageUrl","urlType","image_url","image_url_type","extractError","addSaveableUserOptionField","addComposerImageWrapperButton","contains","buttonWrapper","closest","autoCaptionAllowedGroups","ai_auto_image_caption_allowed_groups","groupId","addComposerUploadMarkdownResolver","isImage","getUploadMarkdown","thumbnail_width","thumbnail_height","composerBeforeSave","resolve","reject","autoCaptionEnabled","imageUploads","imagesToCaption","image","needsBetterCaptions","keyValueStore","autoCaptionPromptKey","seenAutoCaptionPrompt","confirmButtonLabel","cancelButtonLabel","markdown","getUploadUrlFromMarkdown","regex","RegExp","newReply","didCancel","classNameBindings","can_see_sentiment_reports","addAdminSidebarSectionLink","routeModels","_basicTopicList","RelatedTopics","ai_embeddings_semantic_related_topics_enabled","registerMoreTopicsTab","relatedTopics","Superclass","related_topics","relatedTopicsCache","_setSuggestedTopics","setup","allowList"],"sources":["discourse/plugins/discourse-ai/discourse/admin-discourse-ai-plugin-route-map.js","discourse/plugins/discourse-ai/discourse/admin-discourse-ai-route-map.js","discourse/plugins/discourse-ai/discourse/admin/adapters/ai-embedding.js","discourse/plugins/discourse-ai/discourse/admin/adapters/ai-llm.js","discourse/plugins/discourse-ai/discourse/admin/adapters/ai-persona.js","discourse/plugins/discourse-ai/discourse/admin/adapters/ai-tool.js","discourse/plugins/discourse-ai/discourse/admin/models/ai-embedding.js","discourse/plugins/discourse-ai/discourse/admin/models/ai-llm.js","discourse/plugins/discourse-ai/discourse/admin/models/ai-persona.js","discourse/plugins/discourse-ai/discourse/admin/models/ai-tool.js","discourse/plugins/discourse-ai/discourse/components/admin-report-emotion.js","discourse/plugins/discourse-ai/discourse/components/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-header-icon.js","discourse/plugins/discourse-ai/discourse/components/ai-composer-helper-menu.js","discourse/plugins/discourse-ai/discourse/components/ai-embedding-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-embeddings-list-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-full-page-search.js","discourse/plugins/discourse-ai/discourse/components/ai-gist-toggle.js","discourse/plugins/discourse-ai/discourse/components/ai-helper-custom-prompt.js","discourse/plugins/discourse-ai/discourse/components/ai-helper-loading.js","discourse/plugins/discourse-ai/discourse/components/ai-helper-options-list.js","discourse/plugins/discourse-ai/discourse/components/ai-indicator-wave.js","discourse/plugins/discourse-ai/discourse/components/ai-llm-editor-form.js","discourse/plugins/discourse-ai/discourse/components/ai-llm-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-llm-selector.js","discourse/plugins/discourse-ai/discourse/components/ai-llms-list-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-persona-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-persona-list-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-persona-tool-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.js","discourse/plugins/discourse-ai/discourse/components/ai-tool-list-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-tool-parameter-editor.js","discourse/plugins/discourse-ai/discourse/components/ai-tool-selector.js","discourse/plugins/discourse-ai/discourse/components/ai-topic-gist.js","discourse/plugins/discourse-ai/discourse/components/ai-usage.js","discourse/plugins/discourse-ai/discourse/components/doughnut-chart.js","discourse/plugins/discourse-ai/discourse/components/modal/ai-llm-quota-modal.js","discourse/plugins/discourse-ai/discourse/components/modal/ai-summary-modal.js","discourse/plugins/discourse-ai/discourse/components/modal/ai-tool-test-modal.js","discourse/plugins/discourse-ai/discourse/components/modal/chat-modal-channel-summary.js","discourse/plugins/discourse-ai/discourse/components/modal/debug-ai-modal.js","discourse/plugins/discourse-ai/discourse/components/modal/diff-modal.js","discourse/plugins/discourse-ai/discourse/components/modal/share-full-topic-modal.js","discourse/plugins/discourse-ai/discourse/components/modal/share-modal.js","discourse/plugins/discourse-ai/discourse/components/modal/spam-test-modal.js","discourse/plugins/discourse-ai/discourse/components/modal/thumbnail-suggestions.js","discourse/plugins/discourse-ai/discourse/components/model-accuracies.js","discourse/plugins/discourse-ai/discourse/components/post-menu/ai-cancel-streaming-button.js","discourse/plugins/discourse-ai/discourse/components/post-menu/ai-debug-button.js","discourse/plugins/discourse-ai/discourse/components/post-menu/ai-share-button.js","discourse/plugins/discourse-ai/discourse/components/rag-options-fk.js","discourse/plugins/discourse-ai/discourse/components/rag-options.js","discourse/plugins/discourse-ai/discourse/components/rag-upload-progress.js","discourse/plugins/discourse-ai/discourse/components/rag-uploader.js","discourse/plugins/discourse-ai/discourse/components/reviewable-ai-chat-message.js","discourse/plugins/discourse-ai/discourse/components/reviewable-ai-post.js","discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-category-suggester.js","discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-tag-suggester.js","discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-title-suggester.js","discourse/plugins/discourse-ai/discourse/components/thumbnail-suggestion-item.js","discourse/plugins/discourse-ai/discourse/connectors/admin-dashboard-tabs-after/admin-sentiment-dashbboard.js","discourse/plugins/discourse-ai/discourse/connectors/after-composer-category-input/ai-category-suggestion.js","discourse/plugins/discourse-ai/discourse/connectors/after-composer-tag-input/ai-tag-suggestion.js","discourse/plugins/discourse-ai/discourse/connectors/after-composer-title-input/ai-title-suggestion.js","discourse/plugins/discourse-ai/discourse/connectors/after-d-editor/composer-open.js","discourse/plugins/discourse-ai/discourse/connectors/after-search-result-entry/search-result-decoration.js","discourse/plugins/discourse-ai/discourse/connectors/before-create-topic-button/topic-list-gist-toggle.js","discourse/plugins/discourse-ai/discourse/connectors/composer-after-save-or-cancel/ai-image-caption-loader.js","discourse/plugins/discourse-ai/discourse/connectors/composer-fields/persona-llm-selector.js","discourse/plugins/discourse-ai/discourse/connectors/edit-topic-category__after/ai-category-suggestion.js","discourse/plugins/discourse-ai/discourse/connectors/edit-topic-tags__after/ai-tag-suggestion.js","discourse/plugins/discourse-ai/discourse/connectors/edit-topic-title__after/ai-title-suggestion.js","discourse/plugins/discourse-ai/discourse/connectors/editor-preview/ai-image-caption-container.js","discourse/plugins/discourse-ai/discourse/connectors/fast-edit-footer-after/ai-edit-suggestion-button.js","discourse/plugins/discourse-ai/discourse/connectors/full-page-search-below-search-header/ai-full-page-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-list-before-category/ai-topic-gist-placement.js","discourse/plugins/discourse-ai/discourse/connectors/topic-map-expanded-after/ai-summary-trigger.js","discourse/plugins/discourse-ai/discourse/connectors/user-preferences-nav/ai-preferences.js","discourse/plugins/discourse-ai/discourse/controllers/admin-dashboard-sentiment.js","discourse/plugins/discourse-ai/discourse/controllers/preferences-ai.js","discourse/plugins/discourse-ai/discourse/discourse-ai-shared-conversation-show-route-map.js","discourse/plugins/discourse-ai/discourse/lib/ai-bot-helper.js","discourse/plugins/discourse-ai/discourse/lib/ai-helper-suggestions.js","discourse/plugins/discourse-ai/discourse/lib/ai-streamer/progress-handlers.js","discourse/plugins/discourse-ai/discourse/lib/ai-streamer/updaters/post-updater.js","discourse/plugins/discourse-ai/discourse/lib/ai-streamer/updaters/stream-updater.js","discourse/plugins/discourse-ai/discourse/lib/ai-topic-summary.js","discourse/plugins/discourse-ai/discourse/lib/copy-conversation.js","discourse/plugins/discourse-ai/discourse/lib/show-ai-helper.js","discourse/plugins/discourse-ai/discourse/lib/smooth-streamer.js","discourse/plugins/discourse-ai/discourse/lib/utilities.js","discourse/plugins/discourse-ai/discourse/lib/virtual-element-from-caret-coords.js","discourse/plugins/discourse-ai/discourse/preferences-ai-route-map.js","discourse/plugins/discourse-ai/discourse/routes/discourse-ai-shared-conversation-show.js","discourse/plugins/discourse-ai/discourse/routes/preferences-ai.js","discourse/plugins/discourse-ai/discourse/services/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/connectors/after-d-editor/composer-open.js","discourse/plugins/discourse-ai/discourse/templates/preferences/ai.js","discourse/plugins/discourse-ai/initializers/admin-plugin-configuration-nav.js","discourse/plugins/discourse-ai/initializers/admin-reports.js","discourse/plugins/discourse-ai/initializers/ai-artifacts.js","discourse/plugins/discourse-ai/initializers/ai-bot-replies.js","discourse/plugins/discourse-ai/initializers/ai-chat-summarization.js","discourse/plugins/discourse-ai/initializers/ai-helper.js","discourse/plugins/discourse-ai/initializers/ai-image-caption.js","discourse/plugins/discourse-ai/initializers/ai-search-discoveries.js","discourse/plugins/discourse-ai/initializers/ai-semantic-search.js","discourse/plugins/discourse-ai/initializers/ai-sentiment-admin-nav.js","discourse/plugins/discourse-ai/initializers/related-topics.js","discourse/plugins/discourse-ai/lib/discourse-markdown/ai-tags.js"],"sourcesContent":["define(\"discourse/plugins/discourse-ai/discourse/admin-discourse-ai-plugin-route-map\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = {\n    resource: \"admin.adminPlugins.show\",\n    path: \"/plugins\",\n    map() {\n      this.route(\"discourse-ai-personas\", {\n        path: \"ai-personas\"\n      }, function () {\n        this.route(\"new\");\n        this.route(\"edit\", {\n          path: \"/:id/edit\"\n        });\n      });\n      this.route(\"discourse-ai-llms\", {\n        path: \"ai-llms\"\n      }, function () {\n        this.route(\"new\");\n        this.route(\"edit\", {\n          path: \"/:id/edit\"\n        });\n      });\n      this.route(\"discourse-ai-tools\", {\n        path: \"ai-tools\"\n      }, function () {\n        this.route(\"new\");\n        this.route(\"edit\", {\n          path: \"/:id/edit\"\n        });\n      });\n      this.route(\"discourse-ai-spam\", {\n        path: \"ai-spam\"\n      });\n      this.route(\"discourse-ai-usage\", {\n        path: \"ai-usage\"\n      });\n      this.route(\"discourse-ai-embeddings\", {\n        path: \"ai-embeddings\"\n      }, function () {\n        this.route(\"new\");\n        this.route(\"edit\", {\n          path: \"/:id/edit\"\n        });\n      });\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/discourse/admin-discourse-ai-route-map\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = {\n    resource: \"admin.dashboard\",\n    path: \"/dashboard\",\n    map() {\n      this.route(\"admin.dashboardSentiment\", {\n        path: \"/dashboard/sentiment\",\n        resetNamespace: true\n      });\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/discourse/admin/adapters/ai-embedding\", [\"exports\", \"discourse/adapters/rest\"], function (_exports, _rest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class Adapter extends _rest.default {\n    jsonMode = true;\n    basePath() {\n      return \"/admin/plugins/discourse-ai/\";\n    }\n    pathFor(store, type, findArgs) {\n      // removes underscores which are implemented in base\n      let path = this.basePath(store, type, findArgs) + store.pluralize(this.apiNameFor(type));\n      return this.appendQueryParams(path, findArgs);\n    }\n    apiNameFor() {\n      return \"ai-embedding\";\n    }\n  }\n  _exports.default = Adapter;\n});","define(\"discourse/plugins/discourse-ai/discourse/admin/adapters/ai-llm\", [\"exports\", \"discourse/adapters/rest\"], function (_exports, _rest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class Adapter extends _rest.default {\n    jsonMode = true;\n    basePath() {\n      return \"/admin/plugins/discourse-ai/\";\n    }\n    pathFor(store, type, findArgs) {\n      // removes underscores which are implemented in base\n      let path = this.basePath(store, type, findArgs) + store.pluralize(this.apiNameFor(type));\n      return this.appendQueryParams(path, findArgs);\n    }\n    apiNameFor() {\n      return \"ai-llm\";\n    }\n  }\n  _exports.default = Adapter;\n});","define(\"discourse/plugins/discourse-ai/discourse/admin/adapters/ai-persona\", [\"exports\", \"discourse/adapters/rest\"], function (_exports, _rest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class Adapter extends _rest.default {\n    jsonMode = true;\n    basePath() {\n      return \"/admin/plugins/discourse-ai/\";\n    }\n    pathFor(store, type, findArgs) {\n      // removes underscores which are implemented in base\n      let path = this.basePath(store, type, findArgs) + store.pluralize(this.apiNameFor(type));\n      return this.appendQueryParams(path, findArgs);\n    }\n    apiNameFor() {\n      return \"ai-persona\";\n    }\n  }\n  _exports.default = Adapter;\n});","define(\"discourse/plugins/discourse-ai/discourse/admin/adapters/ai-tool\", [\"exports\", \"discourse/adapters/rest\"], function (_exports, _rest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiToolAdapter extends _rest.default {\n    jsonMode = true;\n    basePath() {\n      return \"/admin/plugins/discourse-ai/\";\n    }\n    pathFor(store, type, findArgs) {\n      // removes underscores which are implemented in base\n      let path = this.basePath(store, type, findArgs) + store.pluralize(this.apiNameFor(type));\n      return this.appendQueryParams(path, findArgs);\n    }\n    apiNameFor() {\n      return \"ai-tool\";\n    }\n  }\n  _exports.default = AiToolAdapter;\n});","define(\"discourse/plugins/discourse-ai/discourse/admin/models/ai-embedding\", [\"exports\", \"discourse/lib/ajax\", \"discourse/models/rest\"], function (_exports, _ajax, _rest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiEmbedding extends _rest.default {\n    createProperties() {\n      return this.getProperties(\"id\", \"display_name\", \"dimensions\", \"provider\", \"tokenizer_class\", \"dimensions\", \"url\", \"api_key\", \"max_sequence_length\", \"provider_params\", \"pg_function\", \"embed_prompt\", \"search_prompt\", \"matryoshka_dimensions\");\n    }\n    updateProperties() {\n      const attrs = this.createProperties();\n      attrs.id = this.id;\n      return attrs;\n    }\n    async testConfig() {\n      return await (0, _ajax.ajax)(`/admin/plugins/discourse-ai/ai-embeddings/test.json`, {\n        data: {\n          ai_embedding: this.createProperties()\n        }\n      });\n    }\n    workingCopy() {\n      const attrs = this.createProperties();\n      return this.store.createRecord(\"ai-embedding\", attrs);\n    }\n  }\n  _exports.default = AiEmbedding;\n});","define(\"discourse/plugins/discourse-ai/discourse/admin/models/ai-llm\", [\"exports\", \"discourse/lib/ajax\", \"discourse/models/rest\"], function (_exports, _ajax, _rest) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiLlm extends _rest.default {\n    createProperties() {\n      return this.getProperties(\"id\", \"display_name\", \"name\", \"provider\", \"tokenizer\", \"max_prompt_tokens\", \"url\", \"api_key\", \"enabled_chat_bot\", \"provider_params\", \"vision_enabled\");\n    }\n    updateProperties() {\n      const attrs = this.createProperties();\n      attrs.id = this.id;\n      attrs.llm_quotas = this.llm_quotas;\n      return attrs;\n    }\n    async testConfig(llmConfig) {\n      return await (0, _ajax.ajax)(\"/admin/plugins/discourse-ai/ai-llms/test.json\", {\n        data: {\n          ai_llm: llmConfig ?? this.createProperties()\n        }\n      });\n    }\n  }\n  _exports.default = AiLlm;\n});","define(\"discourse/plugins/discourse-ai/discourse/admin/models/ai-persona\", [\"exports\", \"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\"];\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      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/lib/get-url\", \"@ember/template-factory\"], function (_exports, _component, _component2, _getUrl, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"cell title\">\n    {{#if this.model.icon}}\n      {{d-icon this.model.icon}}\n    {{/if}}\n    {{this.model.title}}\n  </div>\n  \n  <div class=\"cell value today-count\">\n    <a href={{this.todayLink}}>\n      {{number this.model.todayCount}}\n    </a>\n  </div>\n  \n  <div\n    class=\"cell value yesterday-count {{this.model.yesterdayTrend}}\"\n    title={{this.model.yesterdayCountTitle}}\n  >\n    <a href={{this.yesterdayLink}}>\n      {{number this.model.yesterdayCount}}\n    </a>\n    {{d-icon this.model.yesterdayTrendIcon}}\n  </div>\n  \n  <div\n    class=\"cell value sevendays-count {{this.model.sevenDaysTrend}}\"\n    title={{this.model.sevenDaysCountTitle}}\n  >\n    <a href={{this.lastSevenDaysLink}}>\n      {{number this.model.lastSevenDaysCount}}\n    </a>\n    {{d-icon this.model.sevenDaysTrendIcon}}\n  </div>\n  \n  <div\n    class=\"cell value thirty-days-count {{this.model.thirtyDaysTrend}}\"\n    title={{this.model.thirtyDaysCountTitle}}\n  >\n  \n    <a href={{this.lastThirtyDaysLink}}>\n      {{number this.model.lastThirtyDaysCount}}\n    </a>\n    {{#if this.model.canDisplayTrendIcon}}\n      {{d-icon this.model.thirtyDaysTrendIcon}}\n    {{/if}}\n  </div>\n  */\n  {\n    \"id\": \"6OhgoeVo\",\n    \"block\": \"[[[10,0],[14,0,\\\"cell title\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"model\\\",\\\"icon\\\"]],[[[1,\\\"    \\\"],[1,[28,[35,2],[[30,0,[\\\"model\\\",\\\"icon\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"],[1,[30,0,[\\\"model\\\",\\\"title\\\"]]],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[10,0],[14,0,\\\"cell value today-count\\\"],[12],[1,\\\"\\\\n  \\\"],[10,3],[15,6,[30,0,[\\\"todayLink\\\"]]],[12],[1,\\\"\\\\n    \\\"],[1,[28,[35,4],[[30,0,[\\\"model\\\",\\\"todayCount\\\"]]],null]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[10,0],[15,0,[29,[\\\"cell value yesterday-count \\\",[30,0,[\\\"model\\\",\\\"yesterdayTrend\\\"]]]]],[15,\\\"title\\\",[30,0,[\\\"model\\\",\\\"yesterdayCountTitle\\\"]]],[12],[1,\\\"\\\\n  \\\"],[10,3],[15,6,[30,0,[\\\"yesterdayLink\\\"]]],[12],[1,\\\"\\\\n    \\\"],[1,[28,[35,4],[[30,0,[\\\"model\\\",\\\"yesterdayCount\\\"]]],null]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[1,[28,[35,2],[[30,0,[\\\"model\\\",\\\"yesterdayTrendIcon\\\"]]],null]],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[10,0],[15,0,[29,[\\\"cell value sevendays-count \\\",[30,0,[\\\"model\\\",\\\"sevenDaysTrend\\\"]]]]],[15,\\\"title\\\",[30,0,[\\\"model\\\",\\\"sevenDaysCountTitle\\\"]]],[12],[1,\\\"\\\\n  \\\"],[10,3],[15,6,[30,0,[\\\"lastSevenDaysLink\\\"]]],[12],[1,\\\"\\\\n    \\\"],[1,[28,[35,4],[[30,0,[\\\"model\\\",\\\"lastSevenDaysCount\\\"]]],null]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[1,[28,[35,2],[[30,0,[\\\"model\\\",\\\"sevenDaysTrendIcon\\\"]]],null]],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[10,0],[15,0,[29,[\\\"cell value thirty-days-count \\\",[30,0,[\\\"model\\\",\\\"thirtyDaysTrend\\\"]]]]],[15,\\\"title\\\",[30,0,[\\\"model\\\",\\\"thirtyDaysCountTitle\\\"]]],[12],[1,\\\"\\\\n\\\\n  \\\"],[10,3],[15,6,[30,0,[\\\"lastThirtyDaysLink\\\"]]],[12],[1,\\\"\\\\n    \\\"],[1,[28,[35,4],[[30,0,[\\\"model\\\",\\\"lastThirtyDaysCount\\\"]]],null]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"model\\\",\\\"canDisplayTrendIcon\\\"]],[[[1,\\\"    \\\"],[1,[28,[35,2],[[30,0,[\\\"model\\\",\\\"thirtyDaysTrendIcon\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]],null],[13]],[],false,[\\\"div\\\",\\\"if\\\",\\\"d-icon\\\",\\\"a\\\",\\\"number\\\"]]\",\n    \"moduleName\": \"discourse/plugins/discourse-ai/discourse/components/admin-report-emotion.hbs\",\n    \"isStrictMode\": false\n  });\n  const AdminReportEmotion = dt7948.c(class AdminReportEmotion extends _component.default {\n    get todayLink() {\n      let date = moment().format(\"YYYY-MM-DD\");\n      return this._filterURL(date);\n    }\n    get yesterdayLink() {\n      let date = moment().subtract(1, \"day\").format(\"YYYY-MM-DD\");\n      return this._filterURL(date);\n    }\n    get lastSevenDaysLink() {\n      let date = moment().subtract(1, \"week\").format(\"YYYY-MM-DD\");\n      return this._filterURL(date);\n    }\n    get lastThirtyDaysLink() {\n      let date = moment().subtract(1, \"month\").format(\"YYYY-MM-DD\");\n      return this._filterURL(date);\n    }\n    _baseFilter() {\n      return \"/filter?q=activity-after%3A\";\n    }\n    _model() {\n      return \"%20order%3A\" + this.model.type;\n    }\n    _filterURL(date) {\n      return (0, _getUrl.default)(`${this._baseFilter()}${date}${this._model()}`);\n    }\n  }, [(0, _component2.attributeBindings)(\"model.description:title\"), (0, _component2.classNames)(\"admin-report-counters\")]);\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AdminReportEmotion);\n});","define(\"discourse/plugins/discourse-ai/discourse/components/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                    {{dIcon 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/service\", \"discourse/components/d-button\", \"discourse/helpers/html-class\", \"discourse/lib/get-url\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _service, _dButton, _htmlClass, _getUrl, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // note the panel for artifact full screen can not be at position 0,0\n  // otherwise this hack will not activate.\n  // https://github.com/discourse/discourse/blob/b8325f2190a8c0a9022405c219faeac6f0f98ca5/app/assets/javascripts/discourse/app/components/scrolling-post-stream.js#L77-L77\n  // this will cause post stream to navigate to a different post\n  class AiArtifactComponent extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"expanded\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #expanded = (() => (dt7948.i(this, \"expanded\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"showingArtifact\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showingArtifact = (() => (dt7948.i(this, \"showingArtifact\"), void 0))();\n    constructor() {\n      super(...arguments);\n      this.keydownHandler = this.handleKeydown.bind(this);\n      this.popStateHandler = this.handlePopState.bind(this);\n      window.addEventListener(\"popstate\", this.popStateHandler);\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      window.removeEventListener(\"keydown\", this.keydownHandler);\n      window.removeEventListener(\"popstate\", this.popStateHandler);\n    }\n    handleKeydown(event) {\n      if (event.key === \"Escape\" || event.key === \"Esc\") {\n        history.back();\n      }\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"handleKeydown\", [_object.action]))();\n    handlePopState(event) {\n      const state = event.state;\n      this.expanded = state?.artifactId === this.args.artifactId;\n      if (!this.expanded) {\n        window.removeEventListener(\"keydown\", this.keydownHandler);\n      }\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"handlePopState\", [_object.action]))();\n    get requireClickToRun() {\n      if (this.showingArtifact) {\n        return false;\n      }\n      return this.siteSettings.ai_artifact_security === \"strict\";\n    }\n    get artifactUrl() {\n      let url = (0, _getUrl.default)(`/discourse-ai/ai-bot/artifacts/${this.args.artifactId}`);\n      if (this.args.artifactVersion) {\n        url = `${url}/${this.args.artifactVersion}`;\n      }\n      return url;\n    }\n    showArtifact() {\n      this.showingArtifact = true;\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"showArtifact\", [_object.action]))();\n    toggleView() {\n      if (!this.expanded) {\n        window.history.pushState({\n          artifactId: this.args.artifactId\n        }, \"\", window.location.href + \"#artifact-fullscreen\");\n        window.addEventListener(\"keydown\", this.keydownHandler);\n      } else {\n        history.back();\n      }\n      this.expanded = !this.expanded;\n    }\n    static #_7 = (() => dt7948.n(this.prototype, \"toggleView\", [_object.action]))();\n    get wrapperClasses() {\n      return `ai-artifact__wrapper ${this.expanded ? \"ai-artifact__expanded\" : \"\"}`;\n    }\n    static #_8 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.expanded}}\n          {{htmlClass \"ai-artifact-expanded\"}}\n        {{/if}}\n        <div class={{this.wrapperClasses}}>\n          <div class=\"ai-artifact__panel--wrapper\">\n            <div class=\"ai-artifact__panel\">\n              <DButton\n                class=\"btn-flat btn-icon-text\"\n                @icon=\"discourse-compress\"\n                @label=\"discourse_ai.ai_artifact.collapse_view_label\"\n                @action={{this.toggleView}}\n              />\n            </div>\n          </div>\n          {{#if this.requireClickToRun}}\n            <div class=\"ai-artifact__click-to-run\">\n              <DButton\n                class=\"btn btn-primary\"\n                @icon=\"play\"\n                @label=\"discourse_ai.ai_artifact.click_to_run_label\"\n                @action={{this.showArtifact}}\n              />\n            </div>\n          {{else}}\n            <iframe\n              title=\"AI Artifact\"\n              src={{this.artifactUrl}}\n              width=\"100%\"\n              frameborder=\"0\"\n            ></iframe>\n          {{/if}}\n          {{#unless this.requireClickToRun}}\n            <div class=\"ai-artifact__footer\">\n              <DButton\n                class=\"btn-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          {{/unless}}\n        </div>\n      \n    */\n    {\n      \"id\": \"jVTRZgSc\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"expanded\\\"]],[[[1,\\\"      \\\"],[1,[28,[32,0],[\\\"ai-artifact-expanded\\\"],null]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[10,0],[15,0,[30,0,[\\\"wrapperClasses\\\"]]],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"ai-artifact__panel--wrapper\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-artifact__panel\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,1],[[24,0,\\\"btn-flat btn-icon-text\\\"]],[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\"],[\\\"discourse-compress\\\",\\\"discourse_ai.ai_artifact.collapse_view_label\\\",[30,0,[\\\"toggleView\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"requireClickToRun\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"ai-artifact__click-to-run\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,1],[[24,0,\\\"btn btn-primary\\\"]],[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\"],[\\\"play\\\",\\\"discourse_ai.ai_artifact.click_to_run_label\\\",[30,0,[\\\"showArtifact\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,\\\"iframe\\\"],[14,\\\"title\\\",\\\"AI Artifact\\\"],[15,\\\"src\\\",[30,0,[\\\"artifactUrl\\\"]]],[14,\\\"width\\\",\\\"100%\\\"],[14,\\\"frameborder\\\",\\\"0\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]]],[41,[51,[30,0,[\\\"requireClickToRun\\\"]]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"ai-artifact__footer\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,1],[[24,0,\\\"btn-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\\\",\\\"unless\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-artifact.js\",\n      \"scope\": () => [_htmlClass.default, _dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiArtifactComponent;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-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-header-icon\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/lib/ai-bot-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _dButton, _discourseI18n, _aiBotHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiBotHeaderIcon extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"composer\", [_service.service]))();\n    #composer = (() => (dt7948.i(this, \"composer\"), void 0))();\n    get bots() {\n      const availableBots = this.currentUser.ai_enabled_chat_bots.filter(bot => !bot.is_persosna).filter(Boolean);\n      return availableBots ? availableBots.map(bot => bot.model_name) : [];\n    }\n    get showHeaderButton() {\n      return this.bots.length > 0 && this.siteSettings.ai_bot_add_to_header;\n    }\n    compose() {\n      (0, _aiBotHelper.composeAiBotMessage)(this.bots[0], this.composer);\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"compose\", [_object.action]))();\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.showHeaderButton}}\n          <li>\n            <DButton\n              @action={{this.compose}}\n              @icon=\"robot\"\n              title={{i18n \"discourse_ai.ai_bot.shortcut_title\"}}\n              class=\"ai-bot-button icon btn-flat\"\n            />\n          </li>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"NL7Zjh9n\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showHeaderButton\\\"]],[[[1,\\\"      \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[32,0],[[16,\\\"title\\\",[28,[32,1],[\\\"discourse_ai.ai_bot.shortcut_title\\\"],null]],[24,0,\\\"ai-bot-button icon btn-flat\\\"]],[[\\\"@action\\\",\\\"@icon\\\"],[[30,0,[\\\"compose\\\"]],\\\"robot\\\"]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-bot-header-icon.js\",\n      \"scope\": () => [_dButton.default, _discourseI18n.i18n],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiBotHeaderIcon;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-composer-helper-menu\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/owner\", \"@ember/service\", \"discourse-i18n\", \"float-kit/components/d-toast\", \"float-kit/lib/d-toast-instance\", \"discourse/plugins/discourse-ai/discourse/components/ai-helper-options-list\", \"discourse/plugins/discourse-ai/discourse/components/modal/diff-modal\", \"discourse/plugins/discourse-ai/discourse/components/modal/thumbnail-suggestions\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _owner, _service, _discourseI18n, _dToast, _dToastInstance, _aiHelperOptionsList, _diffModal, _thumbnailSuggestions, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiComposerHelperMenu extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"site\", [_service.service]))();\n    #site = (() => (dt7948.i(this, \"site\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"newSelectedText\", [_tracking.tracked]))();\n    #newSelectedText = (() => (dt7948.i(this, \"newSelectedText\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"diff\", [_tracking.tracked]))();\n    #diff = (() => (dt7948.i(this, \"diff\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"customPromptValue\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #customPromptValue = (() => (dt7948.i(this, \"customPromptValue\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"noContentError\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #noContentError = (() => (dt7948.i(this, \"noContentError\"), void 0))();\n    prompts = [];\n    promptTypes = {};\n    constructor() {\n      super(...arguments);\n      if (this.args.data.toolbarEvent.getText().length === 0) {\n        this.noContentError = true;\n      }\n    }\n    get helperOptions() {\n      let prompts = this.currentUser?.ai_helper_prompts;\n      prompts = prompts.filter(p => p.location.includes(\"composer\")).filter(p => p.name !== \"generate_titles\").map(p => {\n        // AI helper by default returns interface locale on translations\n        // Since we want site default translations (and we are using: force_default_locale)\n        // we need to replace the translated_name with the site default locale name\n        const siteLocale = this.siteSettings.default_locale;\n        const availableLocales = JSON.parse(this.siteSettings.available_locales);\n        const locale = availableLocales.find(l => l.value === siteLocale);\n        const translatedName = (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.context_menu.translate_prompt\", {\n          language: locale.name\n        });\n        if (p.name === \"translate\") {\n          return {\n            ...p,\n            translated_name: translatedName\n          };\n        }\n        return p;\n      });\n      // Find the custom_prompt object and move it to the beginning of the array\n      const customPromptIndex = prompts.findIndex(p => p.name === \"custom_prompt\");\n      if (customPromptIndex !== -1) {\n        const customPrompt = prompts.splice(customPromptIndex, 1)[0];\n        prompts.unshift(customPrompt);\n      }\n      if (!this.currentUser?.can_use_custom_prompts) {\n        prompts = prompts.filter(p => p.name !== \"custom_prompt\");\n      }\n      prompts.forEach(p => {\n        this.prompts[p.id] = p;\n      });\n      this.promptTypes = prompts.reduce((memo, p) => {\n        memo[p.name] = p.prompt_type;\n        return memo;\n      }, {});\n      return prompts;\n    }\n    get toast() {\n      const owner = (0, _owner.getOwner)(this);\n      const options = {\n        close: () => this.args.close(),\n        duration: 3000,\n        data: {\n          theme: \"error\",\n          icon: \"triangle-exclamation\",\n          message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.no_content_error\")\n        }\n      };\n      const custom = class CustomToastInstance extends _dToastInstance.default {\n        constructor() {\n          super(owner, options);\n        }\n        close() {\n          this.options.close();\n        }\n        static #_ = (() => dt7948.n(this.prototype, \"close\", [_object.action]))();\n      };\n      return new custom(owner, options);\n    }\n    async suggestChanges(option) {\n      await this.args.close();\n      if (option.name === \"illustrate_post\") {\n        return this.modal.show(_thumbnailSuggestions.default, {\n          model: {\n            mode: option.id,\n            selectedText: this.args.data.selectedText,\n            thumbnails: this.thumbnailSuggestions\n          }\n        });\n      }\n      return this.modal.show(_diffModal.default, {\n        model: {\n          mode: option.id,\n          selectedText: this.args.data.selectedText,\n          revert: this.undoAiAction,\n          toolbarEvent: this.args.data.toolbarEvent,\n          customPromptValue: this.customPromptValue\n        }\n      });\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"suggestChanges\", [_object.action]))();\n    closeMenu() {\n      this.customPromptValue = \"\";\n      this.args.close();\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"closeMenu\", [_object.action]))();\n    static #_11 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.noContentError}}\n          <DToast @toast={{this.toast}} />\n        {{else}}\n          <div class=\"ai-composer-helper-menu\">\n            {{#if this.site.mobileView}}\n              <div class=\"ai-composer-helper-menu__selected-text\">\n                {{@data.selectedText}}\n              </div>\n            {{/if}}\n    \n            <AiHelperOptionsList\n              @options={{this.helperOptions}}\n              @customPromptValue={{this.customPromptValue}}\n              @performAction={{this.suggestChanges}}\n              @shortcutVisible={{true}}\n            />\n          </div>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"2ahoy4kS\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"noContentError\\\"]],[[[1,\\\"      \\\"],[8,[32,0],null,[[\\\"@toast\\\"],[[30,0,[\\\"toast\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"ai-composer-helper-menu\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"site\\\",\\\"mobileView\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"ai-composer-helper-menu__selected-text\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[30,1,[\\\"selectedText\\\"]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n        \\\"],[8,[32,1],null,[[\\\"@options\\\",\\\"@customPromptValue\\\",\\\"@performAction\\\",\\\"@shortcutVisible\\\"],[[30,0,[\\\"helperOptions\\\"]],[30,0,[\\\"customPromptValue\\\"]],[30,0,[\\\"suggestChanges\\\"]],true]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"  \\\"]],[\\\"@data\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-composer-helper-menu.js\",\n      \"scope\": () => [_dToast.default, _aiHelperOptionsList.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiComposerHelperMenu;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-embedding-editor\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/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: 2000\n          });\n        }\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      } finally {\n        (0, _runloop.later)(() => {\n          this.isSaving = false;\n        }, 1000);\n      }\n    }\n    static #_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-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/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, _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, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"searchPreferencesManager\", [_service.service]))();\n    #searchPreferencesManager = (() => (dt7948.i(this, \"searchPreferencesManager\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"searching\", [_tracking.tracked]))();\n    #searching = (() => (dt7948.i(this, \"searching\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"AiResults\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #AiResults = (() => (dt7948.i(this, \"AiResults\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"showingAiResults\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showingAiResults = (() => (dt7948.i(this, \"showingAiResults\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"sortOrder\", [_tracking.tracked], function () {\n      return this.args.sortOrder;\n    }))();\n    #sortOrder = (() => (dt7948.i(this, \"sortOrder\"), void 0))();\n    initialSearchTerm = this.args.searchTerm;\n    constructor() {\n      super(...arguments);\n      this.appEvents.on(\"full-page-search:trigger-search\", this, this.onSearch);\n      this.onSearch();\n    }\n    willDestroy() {\n      super.willDestroy(...arguments);\n      this.appEvents.off(\"full-page-search:trigger-search\", this, this.onSearch);\n    }\n    onSearch() {\n      if (!this.searchEnabled) {\n        return;\n      }\n      this.initialSearchTerm = this.args.searchTerm;\n      this.searching = true;\n      this.resetAiResults();\n      return this.performHyDESearch();\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"onSearch\", [_object.action]))();\n    get disableToggleSwitch() {\n      if (this.searching || this.AiResults.length === 0 || !this.validSearchOrder) {\n        return true;\n      }\n    }\n    get validSearchOrder() {\n      return this.sortOrder === 0;\n    }\n    get searchStateText() {\n      if (!this.validSearchOrder) {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.embeddings.semantic_search_results.unavailable\");\n      }\n      // Search loading:\n      if (this.searching) {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.embeddings.semantic_search_loading\");\n      }\n      // We have results and we are showing them\n      if (this.AiResults.length && this.showingAiResults) {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.embeddings.semantic_search_results.toggle\", {\n          count: this.AiResults.length\n        });\n      }\n      // We have results but are hiding them\n      if (this.AiResults.length && !this.showingAiResults) {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.embeddings.semantic_search_results.toggle_hidden\", {\n          count: this.AiResults.length\n        });\n      }\n      // Typing to search:\n      if (this.AiResults.length === 0 && this.searchTerm !== this.initialSearchTerm) {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.embeddings.semantic_search_results.new\");\n      }\n      // No results:\n      if (this.AiResults.length === 0) {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.embeddings.semantic_search_results.none\");\n      }\n    }\n    get settled() {\n      return this.validSearchOrder && !this.searching && this.searchTerm === this.initialSearchTerm;\n    }\n    get noResults() {\n      return this.settled && this.AiResults.length === 0;\n    }\n    get searchTerm() {\n      if (this.initialSearchTerm !== this.args.searchTerm) {\n        this.initialSearchTerm = undefined;\n      }\n      return this.args.searchTerm;\n    }\n    get searchEnabled() {\n      return this.args.searchType === _fullPageSearch.SEARCH_TYPE_DEFAULT && (0, _search.isValidSearchTerm)(this.searchTerm, this.siteSettings) && this.validSearchOrder;\n    }\n    get searchClass() {\n      if (!this.validSearchOrder) {\n        return \"unavailable\";\n      } else if (this.searching) {\n        return \"in-progress\";\n      } else if (this.noResults) {\n        return \"no-results\";\n      }\n    }\n    get tooltipText() {\n      return (0, _discourseI18n.i18n)(`discourse_ai.embeddings.semantic_search_tooltips.${this.validSearchOrder ? \"results_explanation\" : \"invalid_sort\"}`);\n    }\n    toggleAiResults() {\n      this.appEvents.trigger(AI_RESULTS_TOGGLED, {\n        enabled: !this.showingAiResults\n      });\n      if (this.showingAiResults) {\n        this.args.addSearchResults([], \"topic_id\");\n      } else {\n        this.args.addSearchResults(this.AiResults, \"topic_id\");\n      }\n      this.showingAiResults = !this.showingAiResults;\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"toggleAiResults\", [_object.action]))();\n    resetAiResults() {\n      this.AiResults = [];\n      this.showingAiResults = false;\n      this.args.addSearchResults([], \"topic_id\");\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"resetAiResults\", [_object.action]))();\n    performHyDESearch() {\n      this.resetAiResults();\n      (0, _ajax.ajax)(\"/discourse-ai/embeddings/semantic-search\", {\n        data: {\n          q: this.searchTerm\n        }\n      }).then(async results => {\n        const model = (await (0, _search.translateResults)(results)) || {};\n        if (model.posts?.length === 0) {\n          return;\n        }\n        model.posts.forEach(post => {\n          post.generatedByAi = true;\n        });\n        this.AiResults = model.posts;\n      }).finally(() => {\n        this.searching = false;\n      });\n    }\n    sortChanged() {\n      if (this.sortOrder !== this.args.sortOrder) {\n        this.sortOrder = this.args.sortOrder;\n        if (this.validSearchOrder) {\n          this.onSearch();\n        } else {\n          this.showingAiResults = false;\n          this.resetAiResults();\n        }\n      }\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"sortChanged\", [_object.action]))();\n    static #_13 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <span {{didUpdate this.sortChanged @sortOrder}}></span>\n        <div class=\"semantic-search__container search-results\" role=\"region\">\n          <div class=\"semantic-search__results\">\n            <div\n              class={{concatClass \"semantic-search__searching\" this.searchClass}}\n            >\n              <DToggleSwitch\n                disabled={{this.disableToggleSwitch}}\n                @state={{this.showingAiResults}}\n                class=\"semantic-search__results-toggle\"\n                {{on \"click\" this.toggleAiResults}}\n              />\n    \n              <div class=\"semantic-search__searching-text\">\n                {{icon \"discourse-sparkles\"}}\n                {{this.searchStateText}}\n              </div>\n    \n              {{#if this.validSearchOrder}}\n                <AiIndicatorWave @loading={{this.searching}} />\n              {{/if}}\n    \n              <DTooltip\n                @identifier=\"semantic-search-tooltip\"\n                class=\"semantic-search__tooltip\"\n              >\n                <:trigger>\n                  {{icon \"far-circle-question\"}}\n                </:trigger>\n                <:content>\n                  {{this.tooltipText}}\n                </:content>\n              </DTooltip>\n            </div>\n          </div>\n        </div>\n      \n    */\n    {\n      \"id\": \"X++0eTUN\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[11,1],[4,[32,0],[[30,0,[\\\"sortChanged\\\"]],[30,1]],null],[12],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"semantic-search__container search-results\\\"],[14,\\\"role\\\",\\\"region\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"semantic-search__results\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[15,0,[28,[32,1],[\\\"semantic-search__searching\\\",[30,0,[\\\"searchClass\\\"]]],null]],[12],[1,\\\"\\\\n          \\\"],[8,[32,2],[[16,\\\"disabled\\\",[30,0,[\\\"disableToggleSwitch\\\"]]],[24,0,\\\"semantic-search__results-toggle\\\"],[4,[32,3],[\\\"click\\\",[30,0,[\\\"toggleAiResults\\\"]]],null]],[[\\\"@state\\\"],[[30,0,[\\\"showingAiResults\\\"]]]],null],[1,\\\"\\\\n\\\\n          \\\"],[10,0],[14,0,\\\"semantic-search__searching-text\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,4],[\\\"discourse-sparkles\\\"],null]],[1,\\\"\\\\n            \\\"],[1,[30,0,[\\\"searchStateText\\\"]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"validSearchOrder\\\"]],[[[1,\\\"            \\\"],[8,[32,5],null,[[\\\"@loading\\\"],[[30,0,[\\\"searching\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n          \\\"],[8,[32,6],[[24,0,\\\"semantic-search__tooltip\\\"]],[[\\\"@identifier\\\"],[\\\"semantic-search-tooltip\\\"]],[[\\\"trigger\\\",\\\"content\\\"],[[[[1,\\\"\\\\n              \\\"],[1,[28,[32,4],[\\\"far-circle-question\\\"],null]],[1,\\\"\\\\n            \\\"]],[]],[[[1,\\\"\\\\n              \\\"],[1,[30,0,[\\\"tooltipText\\\"]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@sortOrder\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-full-page-search.js\",\n      \"scope\": () => [_didUpdate.default, _concatClass.default, _dToggleSwitch.default, _modifier.on, _dIcon.default, _aiIndicatorWave.default, _dTooltip.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiFullPageSearch;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-gist-toggle\", [\"exports\", \"@glimmer/component\", \"@ember/helper\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/components/dropdown-menu\", \"discourse/helpers/body-class\", \"discourse/helpers/d-icon\", \"discourse-i18n\", \"float-kit/components/d-menu\", \"truth-helpers/helpers/eq\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _object, _service, _dButton, _dropdownMenu, _bodyClass, _dIcon, _discourseI18n, _dMenu, _eq, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiGistToggle extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"gists\", [_service.service]))();\n    #gists = (() => (dt7948.i(this, \"gists\"), void 0))();\n    get buttons() {\n      return [{\n        id: \"table\",\n        label: \"discourse_ai.summarization.topic_list_layout.button.compact\",\n        icon: \"discourse-table\"\n      }, {\n        id: \"table-ai\",\n        label: \"discourse_ai.summarization.topic_list_layout.button.expanded\",\n        icon: \"discourse-table-sparkles\",\n        description: \"discourse_ai.summarization.topic_list_layout.button.expanded_description\"\n      }];\n    }\n    get selectedOptionId() {\n      return this.gists.get(\"preference\");\n    }\n    get currentButton() {\n      const buttonPreference = this.buttons.find(button => button.id === this.selectedOptionId);\n      return buttonPreference || this.buttons[0];\n    }\n    onRegisterApi(api) {\n      this.dMenu = api;\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"onRegisterApi\", [_object.action]))();\n    onSelect(optionId) {\n      this.gists.setPreference(optionId);\n      this.dMenu.close();\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"onSelect\", [_object.action]))();\n    static #_4 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.gists.shouldShow}}\n          {{bodyClass (concat \"topic-list-layout-\" this.gists.preference)}}\n          <DMenu\n            @modalForMobile={{true}}\n            @autofocus={{true}}\n            @identifier=\"topic-list-layout\"\n            @onRegisterApi={{this.onRegisterApi}}\n            @triggerClass=\"btn-default btn-icon\"\n          >\n            <:trigger>\n              {{icon this.currentButton.icon}}\n            </:trigger>\n            <:content>\n              <DropdownMenu as |dropdown|>\n                {{#each this.buttons as |button|}}\n                  <dropdown.item>\n                    <DButton\n                      @label={{button.label}}\n                      @icon={{button.icon}}\n                      class=\"btn-transparent\n                        {{if button.description '--with-description'}}\n                        {{if (eq this.currentButton.id button.id) '--active'}}\"\n                      @action={{fn this.onSelect button.id}}\n                    >\n                      {{#if button.description}}\n                        <div class=\"btn__description\">\n                          {{i18n button.description}}\n                        </div>\n                      {{/if}}\n                    </DButton>\n                  </dropdown.item>\n                {{/each}}\n              </DropdownMenu>\n            </:content>\n          </DMenu>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"WNCmZBDe\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"gists\\\",\\\"shouldShow\\\"]],[[[1,\\\"      \\\"],[1,[28,[32,0],[[28,[32,1],[\\\"topic-list-layout-\\\",[30,0,[\\\"gists\\\",\\\"preference\\\"]]],null]],null]],[1,\\\"\\\\n      \\\"],[8,[32,2],null,[[\\\"@modalForMobile\\\",\\\"@autofocus\\\",\\\"@identifier\\\",\\\"@onRegisterApi\\\",\\\"@triggerClass\\\"],[true,true,\\\"topic-list-layout\\\",[30,0,[\\\"onRegisterApi\\\"]],\\\"btn-default btn-icon\\\"]],[[\\\"trigger\\\",\\\"content\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[32,3],[[30,0,[\\\"currentButton\\\",\\\"icon\\\"]]],null]],[1,\\\"\\\\n        \\\"]],[]],[[[1,\\\"\\\\n          \\\"],[8,[32,4],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"buttons\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[30,1,[\\\"item\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[32,5],[[16,0,[29,[\\\"btn-transparent\\\\n                    \\\",[52,[30,2,[\\\"description\\\"]],\\\"--with-description\\\"],\\\"\\\\n                    \\\",[52,[28,[32,6],[[30,0,[\\\"currentButton\\\",\\\"id\\\"]],[30,2,[\\\"id\\\"]]],null],\\\"--active\\\"]]]]],[[\\\"@label\\\",\\\"@icon\\\",\\\"@action\\\"],[[30,2,[\\\"label\\\"]],[30,2,[\\\"icon\\\"]],[28,[32,7],[[30,0,[\\\"onSelect\\\"]],[30,2,[\\\"id\\\"]]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,2,[\\\"description\\\"]],[[[1,\\\"                    \\\"],[10,0],[14,0,\\\"btn__description\\\"],[12],[1,\\\"\\\\n                      \\\"],[1,[28,[32,8],[[30,2,[\\\"description\\\"]]],null]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                \\\"]],[]]]]],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"          \\\"]],[1]]]]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"dropdown\\\",\\\"button\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-gist-toggle.js\",\n      \"scope\": () => [_bodyClass.default, _helper.concat, _dMenu.default, _dIcon.default, _dropdownMenu.default, _dButton.default, _eq.default, _helper.fn, _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\", \"discourse/components/d-button\", \"discourse/helpers/with-event-value\", \"discourse-i18n\", \"truth-helpers/helpers/not\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _modifier, _object, _dButton, _withEventValue, _discourseI18n, _not, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiHelperCustomPrompt extends _component.default {\n    sendInput(event) {\n      if (event.key !== \"Enter\") {\n        return;\n      }\n      return this.args.submit(this.args.promptArgs);\n    }\n    static #_ = (() => dt7948.n(this.prototype, \"sendInput\", [_object.action]))();\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"ai-custom-prompt\">\n    \n          <input\n            {{on \"input\" (withEventValue (fn (mut @value)))}}\n            {{on \"keydown\" this.sendInput}}\n            value={{@value}}\n            placeholder={{i18n\n              \"discourse_ai.ai_helper.context_menu.custom_prompt.placeholder\"\n            }}\n            class=\"ai-custom-prompt__input\"\n            type=\"text\"\n            autofocus=\"autofocus\"\n          />\n    \n          <DButton\n            @icon=\"discourse-sparkles\"\n            @action={{fn @submit @promptArgs}}\n            @disabled={{not @value.length}}\n            class=\"ai-custom-prompt__submit btn-primary\"\n          />\n        </div>\n      \n    */\n    {\n      \"id\": \"P6muo3ex\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-custom-prompt\\\"],[12],[1,\\\"\\\\n\\\\n      \\\"],[11,\\\"input\\\"],[16,2,[30,1]],[16,\\\"placeholder\\\",[28,[32,0],[\\\"discourse_ai.ai_helper.context_menu.custom_prompt.placeholder\\\"],null]],[24,0,\\\"ai-custom-prompt__input\\\"],[24,\\\"autofocus\\\",\\\"autofocus\\\"],[24,4,\\\"text\\\"],[4,[32,1],[\\\"input\\\",[28,[32,2],[[28,[32,3],[[28,[31,0],[[30,1]],null]],null]],null]],null],[4,[32,1],[\\\"keydown\\\",[30,0,[\\\"sendInput\\\"]]],null],[12],[13],[1,\\\"\\\\n\\\\n      \\\"],[8,[32,4],[[24,0,\\\"ai-custom-prompt__submit btn-primary\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@disabled\\\"],[\\\"discourse-sparkles\\\",[28,[32,3],[[30,2],[30,3]],null],[28,[32,5],[[30,1,[\\\"length\\\"]]],null]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@value\\\",\\\"@submit\\\",\\\"@promptArgs\\\"],false,[\\\"mut\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-helper-custom-prompt.js\",\n      \"scope\": () => [_discourseI18n.i18n, _modifier.on, _withEventValue.default, _helper.fn, _dButton.default, _not.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiHelperCustomPrompt;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-helper-loading\", [\"exports\", \"discourse/components/d-button\", \"discourse-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\", \"truth-helpers/helpers/eq\", \"discourse/plugins/discourse-ai/discourse/components/ai-helper-custom-prompt\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _service, _truthHelpers, _dButton, _keyboardShortcuts, _utilities, _eq, _aiHelperCustomPrompt, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiHelperOptionsList extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"site\", [_service.service]))();\n    #site = (() => (dt7948.i(this, \"site\"), void 0))();\n    get showShortcut() {\n      return this.site.desktopView && this.args.shortcutVisible;\n    }\n    get shortcut() {\n      return (0, _utilities.translateModKey)(`${_keyboardShortcuts.PLATFORM_KEY_MODIFIER}+alt+p`);\n    }\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <ul class=\"ai-helper-options\">\n          {{#each @options as |option|}}\n            {{#if (eq option.name \"custom_prompt\")}}\n              <AiHelperCustomPrompt\n                @value={{@customPromptValue}}\n                @promptArgs={{option}}\n                @submit={{@performAction}}\n              />\n            {{else}}\n              <li data-name={{option.translated_name}} data-value={{option.id}}>\n                <DButton\n                  @icon={{option.icon}}\n                  @translatedLabel={{option.translated_name}}\n                  @action={{fn @performAction option}}\n                  data-name={{option.name}}\n                  data-value={{option.id}}\n                  class=\"ai-helper-options__button\"\n                >\n                  {{#if (and (eq option.name \"proofread\") this.showShortcut)}}\n                    <kbd class=\"shortcut\">{{this.shortcut}}</kbd>\n                  {{/if}}\n                </DButton>\n              </li>\n            {{/if}}\n          {{/each}}\n        </ul>\n      \n    */\n    {\n      \"id\": \"6HgxS5V6\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,\\\"ul\\\"],[14,0,\\\"ai-helper-options\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,1]],null]],null],null,[[[41,[28,[32,0],[[30,2,[\\\"name\\\"]],\\\"custom_prompt\\\"],null],[[[1,\\\"          \\\"],[8,[32,1],null,[[\\\"@value\\\",\\\"@promptArgs\\\",\\\"@submit\\\"],[[30,3],[30,2],[30,4]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[10,\\\"li\\\"],[15,\\\"data-name\\\",[30,2,[\\\"translated_name\\\"]]],[15,\\\"data-value\\\",[30,2,[\\\"id\\\"]]],[12],[1,\\\"\\\\n            \\\"],[8,[32,2],[[16,\\\"data-name\\\",[30,2,[\\\"name\\\"]]],[16,\\\"data-value\\\",[30,2,[\\\"id\\\"]]],[24,0,\\\"ai-helper-options__button\\\"]],[[\\\"@icon\\\",\\\"@translatedLabel\\\",\\\"@action\\\"],[[30,2,[\\\"icon\\\"]],[30,2,[\\\"translated_name\\\"]],[28,[32,3],[[30,4],[30,2]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[28,[32,4],[[28,[32,0],[[30,2,[\\\"name\\\"]],\\\"proofread\\\"],null],[30,0,[\\\"showShortcut\\\"]]],null],[[[1,\\\"                \\\"],[10,\\\"kbd\\\"],[14,0,\\\"shortcut\\\"],[12],[1,[30,0,[\\\"shortcut\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"            \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[2]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@options\\\",\\\"option\\\",\\\"@customPromptValue\\\",\\\"@performAction\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-helper-options-list.js\",\n      \"scope\": () => [_eq.default, _aiHelperCustomPrompt.default, _dButton.default, _helper.fn, _truthHelpers.and],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiHelperOptionsList;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-indicator-wave\", [\"exports\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const indicatorDots = [\".\", \".\", \".\"];\n  const AiIndicatorWave = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n    {{#if @loading}}\n      <span class=\"ai-indicator-wave\">\n        {{#each indicatorDots as |dot|}}\n          <span class=\"ai-indicator-wave__dot\">{{dot}}</span>\n        {{/each}}\n      </span>\n    {{/if}}\n  \n  */\n  {\n    \"id\": \"2VboNjAG\",\n    \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"    \\\"],[10,1],[14,0,\\\"ai-indicator-wave\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[32,0]],null]],null],null,[[[1,\\\"        \\\"],[10,1],[14,0,\\\"ai-indicator-wave__dot\\\"],[12],[1,[30,2]],[13],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@loading\\\",\\\"dot\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-indicator-wave.js\",\n    \"scope\": () => [indicatorDots],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"ai-indicator-wave:AiIndicatorWave\"));\n  var _default = _exports.default = AiIndicatorWave;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-llm-editor-form\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"@ember/routing\", \"@ember/runloop\", \"@ember/service\", \"truth-helpers\", \"discourse/components/conditional-loading-spinner\", \"discourse/components/form\", \"discourse/helpers/bound-avatar-template\", \"discourse/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          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        };\n      }\n      const {\n        model\n      } = this.args;\n      return {\n        max_prompt_tokens: model.max_prompt_tokens,\n        api_key: model.api_key,\n        tokenizer: model.tokenizer,\n        url: model.url,\n        display_name: model.display_name,\n        name: model.name,\n        provider: model.provider,\n        enabled_chat_bot: model.enabled_chat_bot,\n        vision_enabled: model.vision_enabled,\n        provider_params: 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 seeded() {\n      return this.args.model.id < 0;\n    }\n    get inUseWarning() {\n      return (0, _discourseI18n.i18n)(\"discourse_ai.llms.in_use_warning\", {\n        settings: this.modulesUsingModel,\n        count: this.args.model.used_by.length\n      });\n    }\n    get showAddQuotaButton() {\n      return !this.args.model.isNew;\n    }\n    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      try {\n        await this.args.model.save(data);\n        if (isNew) {\n          this.args.llms.addObject(this.args.model);\n          this.router.transitionTo(\"adminPlugins.show.discourse-ai-llms.index\");\n        } else {\n          this.toasts.success({\n            data: {\n              message: (0, _discourseI18n.i18n)(\"discourse_ai.llms.saved\")\n            },\n            duration: 2000\n          });\n        }\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      } finally {\n        (0, _runloop.later)(() => {\n          this.isSaving = false;\n        }, 1000);\n      }\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"save\", [_object.action]))();\n    async test(data) {\n      this.testRunning = true;\n      try {\n        const configTestResult = await this.args.model.testConfig(data);\n        this.testResult = configTestResult.success;\n        if (this.testResult) {\n          this.testError = null;\n        } else {\n          this.testError = configTestResult.error;\n        }\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      } finally {\n        (0, _runloop.later)(() => {\n          this.testRunning = false;\n        }, 1000);\n      }\n    }\n    static #_14 = (() => dt7948.n(this.prototype, \"test\", [_object.action]))();\n    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 {{if this.seeded 'seeded'}}\"\n          as |form data|\n        >\n          {{#if this.seeded}}\n            <form.Alert @icon=\"circle-info\">\n              {{i18n \"discourse_ai.llms.seeded_warning\"}}\n            </form.Alert>\n          {{/if}}\n    \n          {{#if this.modulesUsingModel}}\n            <form.Alert @icon=\"circle-info\">\n              {{this.inUseWarning}}\n            </form.Alert>\n          {{/if}}\n    \n          <form.Field\n            @name=\"display_name\"\n            @title={{i18n \"discourse_ai.llms.display_name\"}}\n            @validation=\"required|length:1,100\"\n            @disabled={{this.seeded}}\n            @format=\"large\"\n            @tooltip={{i18n \"discourse_ai.llms.hints.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            @disabled={{this.seeded}}\n            @format=\"large\"\n            as |field|\n          >\n            <field.Input />\n          </form.Field>\n    \n          <form.Field\n            @name=\"provider\"\n            @title={{i18n \"discourse_ai.llms.provider\"}}\n            @disabled={{this.seeded}}\n            @format=\"large\"\n            @validation=\"required\"\n            @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          {{#unless this.seeded}}\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 />\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\n                      (concat \"discourse_ai.llms.provider_fields.\" name)\n                    }}\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              @disabled={{this.seeded}}\n              @format=\"large\"\n              @validation=\"required\"\n              as |field|\n            >\n              <field.Select as |select|>\n                {{#each this.tokenizers as |tokenizer|}}\n                  <select.Option\n                    @value={{tokenizer.id}}\n                  >{{tokenizer.name}}</select.Option>\n                {{/each}}\n              </field.Select>\n            </form.Field>\n    \n            <form.Field\n              @name=\"max_prompt_tokens\"\n              @title={{i18n \"discourse_ai.llms.max_prompt_tokens\"}}\n              @tooltip={{i18n \"discourse_ai.llms.hints.max_prompt_tokens\"}}\n              @validation=\"required\"\n              @format=\"large\"\n              as |field|\n            >\n              <field.Input @type=\"number\" step=\"any\" min=\"0\" lang=\"en\" />\n            </form.Field>\n    \n            <form.Field\n              @name=\"vision_enabled\"\n              @title={{i18n \"discourse_ai.llms.vision_enabled\"}}\n              @tooltip={{i18n \"discourse_ai.llms.hints.vision_enabled\"}}\n              @format=\"large\"\n              as |field|\n            >\n              <field.Checkbox />\n            </form.Field>\n    \n            <form.Field\n              @name=\"enabled_chat_bot\"\n              @title={{i18n \"discourse_ai.llms.enabled_chat_bot\"}}\n              @tooltip={{i18n \"discourse_ai.llms.hints.enabled_chat_bot\"}}\n              @format=\"large\"\n              as |field|\n            >\n              <field.Checkbox />\n            </form.Field>\n    \n            {{#if @model.user}}\n              <form.Container @title={{i18n \"discourse_ai.llms.ai_bot_user\"}}>\n                <a\n                  class=\"avatar\"\n                  href={{@model.user.path}}\n                  data-user-card={{@model.user.username}}\n                >\n                  {{Avatar @model.user.avatar_template \"small\"}}\n                </a>\n                <LinkTo @route=\"adminUser\" @model={{this.adminUser}}>\n                  {{@model.user.username}}\n                </LinkTo>\n              </form.Container>\n            {{/if}}\n    \n            {{#if (gt data.llm_quotas.length 0)}}\n              <form.Container @title={{i18n \"discourse_ai.llms.quotas.title\"}}>\n                <table class=\"ai-llm-quotas__table\">\n                  <thead class=\"ai-llm-quotas__table-head\">\n                    <tr class=\"ai-llm-quotas__header-row\">\n                      <th class=\"ai-llm-quotas__header\">{{i18n\n                          \"discourse_ai.llms.quotas.group\"\n                        }}</th>\n                      <th class=\"ai-llm-quotas__header\">{{i18n\n                          \"discourse_ai.llms.quotas.max_tokens\"\n                        }}</th>\n                      <th class=\"ai-llm-quotas__header\">{{i18n\n                          \"discourse_ai.llms.quotas.max_usages\"\n                        }}</th>\n                      <th class=\"ai-llm-quotas__header\">{{i18n\n                          \"discourse_ai.llms.quotas.duration\"\n                        }}</th>\n                      <th\n                        class=\"ai-llm-quotas__header ai-llm-quotas__header--actions\"\n                      ></th>\n                      <th></th>\n                    </tr>\n                  </thead>\n                  <tbody class=\"ai-llm-quotas__table-body\">\n                    <form.Collection\n                      @name=\"llm_quotas\"\n                      @tagName=\"tr\"\n                      class=\"ai-llm-quotas__row\"\n                      as |collection index collectionData|\n                    >\n                      <td\n                        class=\"ai-llm-quotas__cell\"\n                      >{{collectionData.group_name}}</td>\n                      <td class=\"ai-llm-quotas__cell\">\n                        <collection.Field\n                          @name=\"max_tokens\"\n                          @title=\"max_tokens\"\n                          @showTitle={{false}}\n                          as |field|\n                        >\n                          <field.Input\n                            @type=\"number\"\n                            class=\"ai-llm-quotas__input\"\n                            min=\"1\"\n                          />\n                        </collection.Field>\n                      </td>\n                      <td class=\"ai-llm-quotas__cell\">\n                        <collection.Field\n                          @name=\"max_usages\"\n                          @title=\"max_usages\"\n                          @showTitle={{false}}\n                          as |field|\n                        >\n                          <field.Input\n                            @type=\"number\"\n                            class=\"ai-llm-quotas__input\"\n                            min=\"1\"\n                          />\n                        </collection.Field>\n                      </td>\n                      <td class=\"ai-llm-quotas__cell\">\n                        <collection.Field\n                          @name=\"duration_seconds\"\n                          @title=\"duration_seconds\"\n                          @showTitle={{false}}\n                          as |field|\n                        >\n                          <field.Custom>\n                            <DurationSelector\n                              @value={{collectionData.duration_seconds}}\n                              @onChange={{field.set}}\n                            />\n                          </field.Custom>\n                        </collection.Field>\n                      </td>\n                      <td>\n                        <form.Button\n                          @icon=\"trash-can\"\n                          @action={{fn collection.remove index}}\n                          class=\"btn-danger ai-llm-quotas__delete-btn\"\n                        />\n                      </td>\n                    </form.Collection>\n                  </tbody>\n                </table>\n              </form.Container>\n    \n              <form.Button\n                @action={{fn\n                  this.openAddQuotaModal\n                  (fn form.addItemToCollection \"llm_quotas\")\n                }}\n                @icon=\"plus\"\n                @label=\"discourse_ai.llms.quotas.add\"\n                class=\"ai-llm-editor__add-quota-btn\"\n              />\n            {{/if}}\n    \n            <form.Actions>\n              <form.Button\n                @action={{fn this.test data}}\n                @disabled={{this.testRunning}}\n                @label=\"discourse_ai.llms.tests.title\"\n              />\n    \n              <form.Submit />\n    \n              {{#if (eq data.llm_quotas.length 0)}}\n                <form.Button\n                  @action={{fn\n                    this.openAddQuotaModal\n                    (fn form.addItemToCollection \"llm_quotas\")\n                  }}\n                  @label=\"discourse_ai.llms.quotas.add\"\n                  class=\"ai-llm-editor__add-quota-btn\"\n                />\n              {{/if}}\n    \n              {{#unless @model.isNew}}\n                <form.Button\n                  @action={{this.delete}}\n                  @label=\"discourse_ai.llms.delete\"\n                  class=\"btn-danger\"\n                />\n              {{/unless}}\n            </form.Actions>\n          {{/unless}}\n    \n          {{#if this.displayTestResult}}\n            <form.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\": \"1DCyEfhQ\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[16,0,[29,[\\\"ai-llm-editor \\\",[52,[30,0,[\\\"seeded\\\"]],\\\"seeded\\\"]]]]],[[\\\"@onSubmit\\\",\\\"@data\\\"],[[30,0,[\\\"save\\\"]],[30,0,[\\\"formData\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"seeded\\\"]],[[[1,\\\"        \\\"],[8,[30,1,[\\\"Alert\\\"]],null,[[\\\"@icon\\\"],[\\\"circle-info\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[28,[32,1],[\\\"discourse_ai.llms.seeded_warning\\\"],null]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"modulesUsingModel\\\"]],[[[1,\\\"        \\\"],[8,[30,1,[\\\"Alert\\\"]],null,[[\\\"@icon\\\"],[\\\"circle-info\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[1,[30,0,[\\\"inUseWarning\\\"]]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@validation\\\",\\\"@disabled\\\",\\\"@format\\\",\\\"@tooltip\\\"],[\\\"display_name\\\",[28,[32,1],[\\\"discourse_ai.llms.display_name\\\"],null],\\\"required|length:1,100\\\",[30,0,[\\\"seeded\\\"]],\\\"large\\\",[28,[32,1],[\\\"discourse_ai.llms.hints.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\\\",\\\"@disabled\\\",\\\"@format\\\"],[\\\"name\\\",[28,[32,1],[\\\"discourse_ai.llms.name\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.hints.name\\\"],null],\\\"required\\\",[30,0,[\\\"seeded\\\"]],\\\"large\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[8,[30,4,[\\\"Input\\\"]],null,null,null],[1,\\\"\\\\n      \\\"]],[4]]]]],[1,\\\"\\\\n\\\\n      \\\"],[8,[30,1,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@disabled\\\",\\\"@format\\\",\\\"@validation\\\",\\\"@onSet\\\"],[\\\"provider\\\",[28,[32,1],[\\\"discourse_ai.llms.provider\\\"],null],[30,0,[\\\"seeded\\\"]],\\\"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,[51,[30,0,[\\\"seeded\\\"]]],[[[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\\\"]],null,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\\\",\\\"@disabled\\\",\\\"@format\\\",\\\"@validation\\\"],[\\\"tokenizer\\\",[28,[32,1],[\\\"discourse_ai.llms.tokenizer\\\"],null],[30,0,[\\\"seeded\\\"]],\\\"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,[\\\"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,21,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[21]]]]],[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,22,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n        \\\"]],[22]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,23,[\\\"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,23,[\\\"user\\\",\\\"path\\\"]]],[15,\\\"data-user-card\\\",[30,23,[\\\"user\\\",\\\"username\\\"]]],[12],[1,\\\"\\\\n              \\\"],[1,[28,[32,5],[[30,23,[\\\"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,23,[\\\"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,26,[\\\"group_name\\\"]]],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-llm-quotas__cell\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[30,24,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@showTitle\\\"],[\\\"max_tokens\\\",\\\"max_tokens\\\",false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      \\\"],[8,[30,27,[\\\"Input\\\"]],[[24,0,\\\"ai-llm-quotas__input\\\"],[24,\\\"min\\\",\\\"1\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n                    \\\"]],[27]]]]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-llm-quotas__cell\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[30,24,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@showTitle\\\"],[\\\"max_usages\\\",\\\"max_usages\\\",false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      \\\"],[8,[30,28,[\\\"Input\\\"]],[[24,0,\\\"ai-llm-quotas__input\\\"],[24,\\\"min\\\",\\\"1\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n                    \\\"]],[28]]]]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-llm-quotas__cell\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[30,24,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@showTitle\\\"],[\\\"duration_seconds\\\",\\\"duration_seconds\\\",false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                      \\\"],[8,[30,29,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                        \\\"],[8,[32,8],null,[[\\\"@value\\\",\\\"@onChange\\\"],[[30,26,[\\\"duration_seconds\\\"]],[30,29,[\\\"set\\\"]]]],null],[1,\\\"\\\\n                      \\\"]],[]]]]],[1,\\\"\\\\n                    \\\"]],[29]]]]],[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,24,[\\\"remove\\\"]],[30,25]],null]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"]],[24,25,26]]]]],[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,23,[\\\"isNew\\\"]]],[[[1,\\\"            \\\"],[8,[30,1,[\\\"Button\\\"]],[[24,0,\\\"btn-danger\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"delete\\\"]],\\\"discourse_ai.llms.delete\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"displayTestResult\\\"]],[[[1,\\\"        \\\"],[8,[30,1,[\\\"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\\\",\\\"field\\\",\\\"field\\\",\\\"@model\\\",\\\"collection\\\",\\\"index\\\",\\\"collectionData\\\",\\\"field\\\",\\\"field\\\",\\\"field\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\",\\\"unless\\\",\\\"let\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-llm-editor-form.js\",\n      \"scope\": () => [_form.default, _discourseI18n.i18n, _helper.get, _helper.concat, _truthHelpers.eq, _boundAvatarTemplate.default, _routing.LinkTo, _truthHelpers.gt, _aiQuotaDurationSelector.default, _helper.fn, _conditionalLoadingSpinner.default, _dIcon.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiLlmEditorForm;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-llm-editor\", [\"exports\", \"discourse/components/back-button\", \"discourse/plugins/discourse-ai/discourse/components/ai-llm-editor-form\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _backButton, _aiLlmEditorForm, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const AiLlmEditor = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    \n    <BackButton\n      @route=\"adminPlugins.show.discourse-ai-llms\"\n      @label=\"discourse_ai.llms.back\"\n    />\n    <AiLlmEditorForm\n      @model={{@model}}\n      @llmTemplate={{@llmTemplate}}\n      @llms={{@llms}}\n    />\n  \n  */\n  {\n    \"id\": \"Tv683ucY\",\n    \"block\": \"[[[1,\\\"\\\\n  \\\"],[8,[32,0],null,[[\\\"@route\\\",\\\"@label\\\"],[\\\"adminPlugins.show.discourse-ai-llms\\\",\\\"discourse_ai.llms.back\\\"]],null],[1,\\\"\\\\n  \\\"],[8,[32,1],null,[[\\\"@model\\\",\\\"@llmTemplate\\\",\\\"@llms\\\"],[[30,1],[30,2],[30,3]]],null],[1,\\\"\\\\n\\\"]],[\\\"@model\\\",\\\"@llmTemplate\\\",\\\"@llms\\\"],false,[]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-llm-editor.js\",\n    \"scope\": () => [_backButton.default, _aiLlmEditorForm.default],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"ai-llm-editor:AiLlmEditor\"));\n  var _default = _exports.default = AiLlmEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-llm-selector\", [\"exports\", \"@ember/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-llm-editor\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _object, _service, _dBreadcrumbsItem, _dButton, _dPageSubheader, _discourseI18n, _adminSectionLandingItem, _adminSectionLandingWrapper, _dTooltip, _aiLlmEditor, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  function isPreseeded(llm) {\n    if (llm.id < 0) {\n      return true;\n    }\n  }\n  class AiLlmsListEditor extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"adminPluginNavManager\", [_service.service]))();\n    #adminPluginNavManager = (() => (dt7948.i(this, \"adminPluginNavManager\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    modelDescription(llm) {\n      // this is a bit of an odd object, it can be an llm model or a preset model\n      // handle both flavors\n      // in the case of model\n      let key = \"\";\n      if (typeof llm.id === \"number\") {\n        key = `${llm.provider}-${llm.name}`;\n      } else {\n        // case of preset\n        key = llm.id.replace(/\\./g, \"-\");\n      }\n      key = `discourse_ai.llms.model_description.${key}`;\n      if (_discourseI18n.default.lookup(key, {\n        ignoreMissing: true\n      })) {\n        return (0, _discourseI18n.i18n)(key);\n      }\n      return \"\";\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"modelDescription\", [_object.action]))();\n    preseededDescription(llm) {\n      if (isPreseeded(llm)) {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.llms.preseeded_model_description\", {\n          model: llm.name\n        });\n      }\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"preseededDescription\", [_object.action]))();\n    sanitizedTranslationKey(id) {\n      return id.replace(/\\./g, \"-\");\n    }\n    get hasLlmElements() {\n      return this.args.llms.length !== 0;\n    }\n    get preconfiguredTitle() {\n      if (this.hasLlmElements) {\n        return \"discourse_ai.llms.preconfigured.title\";\n      } else {\n        return \"discourse_ai.llms.preconfigured.title_no_llms\";\n      }\n    }\n    get preConfiguredLlms() {\n      const options = [{\n        id: \"none\",\n        name: (0, _discourseI18n.i18n)(\"discourse_ai.llms.preconfigured.fake\"),\n        provider: \"fake\"\n      }];\n      const llmsContent = this.args.llms.content.map(llm => ({\n        provider: llm.provider,\n        name: llm.name\n      }));\n      this.args.llms.resultSetMeta.presets.forEach(llm => {\n        if (llm.models) {\n          llm.models.forEach(model => {\n            const id = `${llm.id}-${model.name}`;\n            const isConfigured = llmsContent.some(content => content.provider === llm.provider && content.name === model.name);\n            if (!isConfigured) {\n              options.push({\n                id,\n                name: model.display_name,\n                provider: llm.provider\n              });\n            }\n          });\n        }\n      });\n      return options;\n    }\n    transitionToLlmEditor(llmTemplate) {\n      this.router.transitionTo(\"adminPlugins.show.discourse-ai-llms.new\", {\n        queryParams: {\n          llmTemplate\n        }\n      });\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"transitionToLlmEditor\", [_object.action]))();\n    localizeUsage(usage) {\n      if (usage.type === \"ai_persona\") {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.llms.usage.ai_persona\", {\n          persona: usage.name\n        });\n      } else {\n        return (0, _discourseI18n.i18n)(\"discourse_ai.llms.usage.\" + usage.type);\n      }\n    }\n    static #_6 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DBreadcrumbsItem\n          @path=\"/admin/plugins/{{this.adminPluginNavManager.currentPlugin.name}}/ai-llms\"\n          @label={{i18n \"discourse_ai.llms.short_title\"}}\n        />\n        <section class=\"ai-llm-list-editor admin-detail\">\n          {{#if @currentLlm}}\n            <AiLlmEditor\n              @model={{@currentLlm}}\n              @llms={{@llms}}\n              @llmTemplate={{@llmTemplate}}\n            />\n          {{else}}\n            <DPageSubheader\n              @titleLabel={{i18n \"discourse_ai.llms.short_title\"}}\n              @descriptionLabel={{i18n\n                \"discourse_ai.llms.preconfigured.description\"\n              }}\n              @learnMoreUrl=\"https://meta.discourse.org/t/discourse-ai-large-language-model-llm-settings-page/319903\"\n            />\n            {{#if this.hasLlmElements}}\n              <section class=\"ai-llms-list-editor__configured\">\n                <DPageSubheader\n                  @titleLabel={{i18n \"discourse_ai.llms.configured.title\"}}\n                />\n                <table class=\"d-admin-table\">\n                  <thead>\n                    <tr>\n                      <th>{{i18n \"discourse_ai.llms.display_name\"}}</th>\n                      <th>{{i18n \"discourse_ai.llms.provider\"}}</th>\n                      <th></th>\n                    </tr>\n                  </thead>\n                  <tbody>\n                    {{#each @llms as |llm|}}\n                      <tr\n                        data-llm-id={{llm.name}}\n                        class=\"ai-llm-list__row d-admin-row__content\"\n                      >\n                        <td class=\"d-admin-row__overview\">\n    \n                          <div class=\"ai-llm-list__name\">\n                            <strong>\n                              {{llm.display_name}}\n                            </strong>\n                          </div>\n                          <div class=\"ai-llm-list__description\">\n                            {{this.modelDescription llm}}\n                            {{this.preseededDescription llm}}\n                          </div>\n                          {{#if llm.used_by}}\n                            <ul class=\"ai-llm-list-editor__usages\">\n                              {{#each llm.used_by as |usage|}}\n                                <li>{{this.localizeUsage usage}}</li>\n                              {{/each}}\n                            </ul>\n                          {{/if}}\n                        </td>\n                        <td class=\"d-admin-row__detail\">\n                          <div class=\"d-admin-row__mobile-label\">\n                            {{i18n \"discourse_ai.llms.provider\"}}\n                          </div>\n                          {{i18n\n                            (concat \"discourse_ai.llms.providers.\" llm.provider)\n                          }}\n                        </td>\n                        <td class=\"d-admin-row__controls\">\n                          {{#if (isPreseeded llm)}}\n                            <DTooltip class=\"ai-llm-list__edit-disabled-tooltip\">\n                              <:trigger>\n                                <DButton\n                                  class=\"btn btn-default btn-small disabled\"\n                                  @label=\"discourse_ai.llms.edit\"\n                                />\n                              </:trigger>\n                              <:content>\n                                {{i18n \"discourse_ai.llms.seeded_warning\"}}\n                              </:content>\n                            </DTooltip>\n                          {{else}}\n                            <DButton\n                              class=\"btn btn-default btn-small ai-llm-list__delete-button\"\n                              @label=\"discourse_ai.llms.edit\"\n                              @route=\"adminPlugins.show.discourse-ai-llms.edit\"\n                              @routeModels={{llm.id}}\n                            />\n                          {{/if}}\n                        </td>\n                      </tr>\n                    {{/each}}\n                  </tbody>\n                </table>\n              </section>\n            {{/if}}\n            <section class=\"ai-llms-list-editor__templates\">\n              <DPageSubheader @titleLabel={{i18n this.preconfiguredTitle}} />\n              <AdminSectionLandingWrapper\n                class=\"ai-llms-list-editor__templates-list\"\n              >\n                {{#each this.preConfiguredLlms as |llm|}}\n                  <AdminSectionLandingItem\n                    @titleLabelTranslated={{llm.name}}\n                    @descriptionLabelTranslated={{this.modelDescription llm}}\n                    @taglineLabel={{concat\n                      \"discourse_ai.llms.providers.\"\n                      llm.provider\n                    }}\n                    data-llm-id={{llm.id}}\n                    class=\"ai-llms-list-editor__templates-list-item\"\n                  >\n                    <:buttons as |buttons|>\n                      <buttons.Default\n                        @action={{fn this.transitionToLlmEditor llm.id}}\n                        @icon=\"gear\"\n                        @label=\"discourse_ai.llms.preconfigured.button\"\n                      />\n                    </:buttons>\n                  </AdminSectionLandingItem>\n                {{/each}}\n              </AdminSectionLandingWrapper>\n            </section>\n          {{/if}}\n        </section>\n      \n    */\n    {\n      \"id\": \"W9+HDws7\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@path\\\",\\\"@label\\\"],[[29,[\\\"/admin/plugins/\\\",[30,0,[\\\"adminPluginNavManager\\\",\\\"currentPlugin\\\",\\\"name\\\"]],\\\"/ai-llms\\\"]],[28,[32,1],[\\\"discourse_ai.llms.short_title\\\"],null]]],null],[1,\\\"\\\\n    \\\"],[10,\\\"section\\\"],[14,0,\\\"ai-llm-list-editor admin-detail\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"        \\\"],[8,[32,2],null,[[\\\"@model\\\",\\\"@llms\\\",\\\"@llmTemplate\\\"],[[30,1],[30,2],[30,3]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[32,3],null,[[\\\"@titleLabel\\\",\\\"@descriptionLabel\\\",\\\"@learnMoreUrl\\\"],[[28,[32,1],[\\\"discourse_ai.llms.short_title\\\"],null],[28,[32,1],[\\\"discourse_ai.llms.preconfigured.description\\\"],null],\\\"https://meta.discourse.org/t/discourse-ai-large-language-model-llm-settings-page/319903\\\"]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasLlmElements\\\"]],[[[1,\\\"          \\\"],[10,\\\"section\\\"],[14,0,\\\"ai-llms-list-editor__configured\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[32,3],null,[[\\\"@titleLabel\\\"],[[28,[32,1],[\\\"discourse_ai.llms.configured.title\\\"],null]]],null],[1,\\\"\\\\n            \\\"],[10,\\\"table\\\"],[14,0,\\\"d-admin-table\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.llms.display_name\\\"],null]],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.llms.provider\\\"],null]],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"th\\\"],[12],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n              \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,2]],null]],null],null,[[[1,\\\"                  \\\"],[10,\\\"tr\\\"],[15,\\\"data-llm-id\\\",[30,4,[\\\"name\\\"]]],[14,0,\\\"ai-llm-list__row d-admin-row__content\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__overview\\\"],[12],[1,\\\"\\\\n\\\\n                      \\\"],[10,0],[14,0,\\\"ai-llm-list__name\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n                          \\\"],[1,[30,4,[\\\"display_name\\\"]]],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"ai-llm-list__description\\\"],[12],[1,\\\"\\\\n                        \\\"],[1,[28,[30,0,[\\\"modelDescription\\\"]],[[30,4]],null]],[1,\\\"\\\\n                        \\\"],[1,[28,[30,0,[\\\"preseededDescription\\\"]],[[30,4]],null]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,4,[\\\"used_by\\\"]],[[[1,\\\"                        \\\"],[10,\\\"ul\\\"],[14,0,\\\"ai-llm-list-editor__usages\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,4,[\\\"used_by\\\"]]],null]],null],null,[[[1,\\\"                            \\\"],[10,\\\"li\\\"],[12],[1,[28,[30,0,[\\\"localizeUsage\\\"]],[[30,5]],null]],[13],[1,\\\"\\\\n\\\"]],[5]],null],[1,\\\"                        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__detail\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"d-admin-row__mobile-label\\\"],[12],[1,\\\"\\\\n                        \\\"],[1,[28,[32,1],[\\\"discourse_ai.llms.provider\\\"],null]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[1,[28,[32,1],[[28,[32,4],[\\\"discourse_ai.llms.providers.\\\",[30,4,[\\\"provider\\\"]]],null]],null]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__controls\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[32,5],[[30,4]],null],[[[1,\\\"                        \\\"],[8,[32,6],[[24,0,\\\"ai-llm-list__edit-disabled-tooltip\\\"]],null,[[\\\"trigger\\\",\\\"content\\\"],[[[[1,\\\"\\\\n                            \\\"],[8,[32,7],[[24,0,\\\"btn btn-default btn-small disabled\\\"]],[[\\\"@label\\\"],[\\\"discourse_ai.llms.edit\\\"]],null],[1,\\\"\\\\n                          \\\"]],[]],[[[1,\\\"\\\\n                            \\\"],[1,[28,[32,1],[\\\"discourse_ai.llms.seeded_warning\\\"],null]],[1,\\\"\\\\n                          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                        \\\"],[8,[32,7],[[24,0,\\\"btn btn-default btn-small ai-llm-list__delete-button\\\"]],[[\\\"@label\\\",\\\"@route\\\",\\\"@routeModels\\\"],[\\\"discourse_ai.llms.edit\\\",\\\"adminPlugins.show.discourse-ai-llms.edit\\\",[30,4,[\\\"id\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[10,\\\"section\\\"],[14,0,\\\"ai-llms-list-editor__templates\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,3],null,[[\\\"@titleLabel\\\"],[[28,[32,1],[[30,0,[\\\"preconfiguredTitle\\\"]]],null]]],null],[1,\\\"\\\\n          \\\"],[8,[32,8],[[24,0,\\\"ai-llms-list-editor__templates-list\\\"]],null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"preConfiguredLlms\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[32,9],[[16,\\\"data-llm-id\\\",[30,6,[\\\"id\\\"]]],[24,0,\\\"ai-llms-list-editor__templates-list-item\\\"]],[[\\\"@titleLabelTranslated\\\",\\\"@descriptionLabelTranslated\\\",\\\"@taglineLabel\\\"],[[30,6,[\\\"name\\\"]],[28,[30,0,[\\\"modelDescription\\\"]],[[30,6]],null],[28,[32,4],[\\\"discourse_ai.llms.providers.\\\",[30,6,[\\\"provider\\\"]]],null]]],[[\\\"buttons\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[30,7,[\\\"Default\\\"]],null,[[\\\"@action\\\",\\\"@icon\\\",\\\"@label\\\"],[[28,[32,10],[[30,0,[\\\"transitionToLlmEditor\\\"]],[30,6,[\\\"id\\\"]]],null],\\\"gear\\\",\\\"discourse_ai.llms.preconfigured.button\\\"]],null],[1,\\\"\\\\n                \\\"]],[7]]]]],[1,\\\"\\\\n\\\"]],[6]],null],[1,\\\"          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@currentLlm\\\",\\\"@llms\\\",\\\"@llmTemplate\\\",\\\"llm\\\",\\\"usage\\\",\\\"llm\\\",\\\"buttons\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-llms-list-editor.js\",\n      \"scope\": () => [_dBreadcrumbsItem.default, _discourseI18n.i18n, _aiLlmEditor.default, _dPageSubheader.default, _helper.concat, isPreseeded, _dTooltip.default, _dButton.default, _adminSectionLandingWrapper.default, _adminSectionLandingItem.default, _helper.fn],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiLlmsListEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-persona-editor\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/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/models/group\", \"discourse-i18n\", \"admin/models/admin-user\", \"select-kit/components/group-chooser\", \"discourse/plugins/discourse-ai/discourse/components/ai-llm-selector\", \"discourse/plugins/discourse-ai/discourse/components/ai-persona-tool-options\", \"discourse/plugins/discourse-ai/discourse/components/ai-tool-selector\", \"discourse/plugins/discourse-ai/discourse/components/rag-options-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, _group, _discourseI18n, _adminUser, _groupChooser, _aiLlmSelector, _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, \"store\", [_service.service]))();\n    #store = (() => (dt7948.i(this, \"store\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"dialog\", [_service.service]))();\n    #dialog = (() => (dt7948.i(this, \"dialog\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"toasts\", [_service.service]))();\n    #toasts = (() => (dt7948.i(this, \"toasts\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"allGroups\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #allGroups = (() => (dt7948.i(this, \"allGroups\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"isSaving\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isSaving = (() => (dt7948.i(this, \"isSaving\"), void 0))();\n    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 #_8 = (() => 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      this.allGroups = await _group.default.findAll();\n    }\n    static #_9 = (() => 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          this.router.transitionTo(\"adminPlugins.show.discourse-ai-personas.edit\", personaToSave);\n        } else {\n          this.toasts.success({\n            data: {\n              message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_persona.saved\")\n            },\n            duration: 2000\n          });\n        }\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      } finally {\n        (0, _runloop.later)(() => {\n          this.isSaving = false;\n        }, 1000);\n      }\n    }\n    static #_10 = (() => 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 #_11 = (() => 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 #_12 = (() => 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 #_13 = (() => 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 #_14 = (() => dt7948.n(this.prototype, \"createUser\", [_object.action]))();\n    updateUploads(form, newUploads) {\n      form.set(\"rag_uploads\", newUploads);\n    }\n    static #_15 = (() => 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 #_16 = (() => 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 #_17 = (() => dt7948.n(this.prototype, \"updateToolNames\", [_object.action]))();\n    availableForcedTools(tools) {\n      return this.allTools.filter(tool => tools.includes(tool.id));\n    }\n    static #_18 = (() => dt7948.n(this.prototype, \"availableForcedTools\", [_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    static #_19 = (() => (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            <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 @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                  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                  @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\": \"4F7Je9x/\",\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,[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,4],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,5],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\\\"],[[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,17,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[32,6],null,[[\\\"@value\\\",\\\"@disabled\\\",\\\"@onChange\\\",\\\"@content\\\"],[[30,17,[\\\"value\\\"]],[30,3,[\\\"system\\\"]],[28,[32,7],[[30,0,[\\\"updateToolNames\\\"]],[30,2],[30,3]],null],[30,8,[\\\"resultSetMeta\\\",\\\"tools\\\"]]]],null],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n          \\\"]],[17]]]]],[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,18,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[32,6],null,[[\\\"@value\\\",\\\"@disabled\\\",\\\"@onChange\\\",\\\"@content\\\"],[[30,18,[\\\"value\\\"]],[30,3,[\\\"system\\\"]],[30,18,[\\\"set\\\"]],[28,[30,0,[\\\"availableForcedTools\\\"]],[[30,3,[\\\"tools\\\"]]],null]]],null],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n            \\\"]],[18]]]]],[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,19,[\\\"Select\\\"]],null,[[\\\"@includeNone\\\"],[false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"forcedToolStrategies\\\"]]],null]],null],null,[[[1,\\\"                  \\\"],[8,[30,20,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,21,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,21,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[21]],null],[1,\\\"              \\\"]],[20]]]]],[1,\\\"\\\\n            \\\"]],[19]]]]],[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,22,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n            \\\"]],[22]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[32,9],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\\\"],[\\\"rag_uploads\\\",[28,[32,3],[\\\"discourse_ai.rag.uploads.title\\\"],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[30,23,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[8,[32,10],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,23,[\\\"value\\\"]]],null],[30,8,[\\\"resultSetMeta\\\",\\\"settings\\\",\\\"rag_images_enabled\\\"]]]],null],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n            \\\"]],[23]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[32,11],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,24,[\\\"Input\\\"]],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"lang\\\",\\\"en\\\"]],[[\\\"@type\\\"],[\\\"number\\\"]],null],[1,\\\"\\\\n              \\\"]],[24]]]]],[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,25,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[32,4],null,[[\\\"@value\\\",\\\"@llms\\\",\\\"@onChange\\\",\\\"@class\\\"],[[30,25,[\\\"value\\\"]],[30,8,[\\\"resultSetMeta\\\",\\\"llms\\\"]],[30,25,[\\\"set\\\"]],\\\"ai-persona-editor__llms\\\"]],null],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n              \\\"]],[25]]]]],[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,26,[\\\"Toggle\\\"]],null,null,null],[1,\\\"\\\\n          \\\"]],[26]]]]],[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,27,[\\\"Toggle\\\"]],null,null,null],[1,\\\"\\\\n          \\\"]],[27]]]]],[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,28,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n              \\\"]],[28]]]]],[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,12],[[30,3,[\\\"user\\\",\\\"avatar_template\\\"]],\\\"small\\\"],null]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[8,[32,13],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,29,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n              \\\"]],[29]]]]],[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,30,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n              \\\"]],[30]]]]],[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,31,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n                \\\"]],[31]]]]],[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,32,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n                \\\"]],[32]]]]],[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,14],[[30,1,[\\\"isNew\\\"]],[30,1,[\\\"system\\\"]]],null]],[[[1,\\\"            \\\"],[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\\\",\\\"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, _aiLlmSelector.default, _groupChooser.default, _aiToolSelector.default, _helper.fn, _truthHelpers.gt, _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-list-editor\", [\"exports\", \"@glimmer/component\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"@ember/routing\", \"@ember/service\", \"discourse/components/d-breadcrumbs-item\", \"discourse/components/d-page-subheader\", \"discourse/components/d-toggle-switch\", \"discourse/helpers/concat-class\", \"discourse/lib/ajax-error\", \"discourse-i18n\", \"admin/components/admin-config-area-empty-list\", \"discourse/plugins/discourse-ai/discourse/components/ai-persona-editor\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _modifier, _object, _routing, _service, _dBreadcrumbsItem, _dPageSubheader, _dToggleSwitch, _concatClass, _ajaxError, _discourseI18n, _adminConfigAreaEmptyList, _aiPersonaEditor, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiPersonaListEditor extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"adminPluginNavManager\", [_service.service]))();\n    #adminPluginNavManager = (() => (dt7948.i(this, \"adminPluginNavManager\"), void 0))();\n    async toggleEnabled(persona) {\n      const oldValue = persona.enabled;\n      const newValue = !oldValue;\n      try {\n        persona.set(\"enabled\", newValue);\n        await persona.save();\n      } catch (err) {\n        persona.set(\"enabled\", oldValue);\n        (0, _ajaxError.popupAjaxError)(err);\n      }\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"toggleEnabled\", [_object.action]))();\n    static #_3 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DBreadcrumbsItem\n          @path=\"/admin/plugins/{{this.adminPluginNavManager.currentPlugin.name}}/ai-personas\"\n          @label={{i18n \"discourse_ai.ai_persona.short_title\"}}\n        />\n        <section class=\"ai-persona-list-editor__current admin-detail pull-left\">\n          {{#if @currentPersona}}\n            <AiPersonaEditor @model={{@currentPersona}} @personas={{@personas}} />\n          {{else}}\n            <DPageSubheader\n              @titleLabel={{i18n \"discourse_ai.ai_persona.short_title\"}}\n              @descriptionLabel={{i18n\n                \"discourse_ai.ai_persona.persona_description\"\n              }}\n              @learnMoreUrl=\"https://meta.discourse.org/t/ai-bot-personas/306099\"\n            >\n              <:actions as |actions|>\n                <actions.Primary\n                  @label=\"discourse_ai.ai_persona.new\"\n                  @route=\"adminPlugins.show.discourse-ai-personas.new\"\n                  @icon=\"plus\"\n                  class=\"ai-persona-list-editor__new-button\"\n                />\n              </:actions>\n            </DPageSubheader>\n    \n            {{#if @personas}}\n              <table class=\"content-list ai-persona-list-editor d-admin-table\">\n                <thead>\n                  <tr>\n                    <th>{{i18n \"discourse_ai.ai_persona.name\"}}</th>\n                    <th>{{i18n \"discourse_ai.ai_persona.list.enabled\"}}</th>\n                    <th></th>\n                  </tr>\n                </thead>\n                <tbody>\n                  {{#each @personas as |persona|}}\n                    <tr\n                      data-persona-id={{persona.id}}\n                      class={{concatClass\n                        \"ai-persona-list__row d-admin-row__content\"\n                        (if persona.priority \"priority\")\n                      }}\n                    >\n                      <td class=\"d-admin-row__overview\">\n                        <div class=\"ai-persona-list__name-with-description\">\n                          <div class=\"ai-persona-list__name\">\n                            <strong>\n                              {{persona.name}}\n                            </strong>\n                          </div>\n                          <div class=\"ai-persona-list__description\">\n                            {{persona.description}}\n                          </div>\n                        </div>\n                      </td>\n                      <td class=\"d-admin-row__detail\">\n                        <DToggleSwitch\n                          @state={{persona.enabled}}\n                          {{on \"click\" (fn this.toggleEnabled persona)}}\n                        />\n                      </td>\n                      <td class=\"d-admin-row__controls\">\n                        <LinkTo\n                          @route=\"adminPlugins.show.discourse-ai-personas.edit\"\n                          @model={{persona}}\n                          class=\"btn btn-text btn-small\"\n                        >{{i18n \"discourse_ai.ai_persona.edit\"}} </LinkTo>\n                      </td>\n                    </tr>\n                  {{/each}}\n                </tbody>\n              </table>\n            {{else}}\n              <AdminConfigAreaEmptyList\n                @ctaLabel=\"discourse_ai.ai_persona.new\"\n                @ctaRoute=\"adminPlugins.show.discourse-ai-personas.new\"\n                @ctaClass=\"ai-persona-list-editor__empty-new-button\"\n                @emptyLabel=\"discourse_ai.ai_persona.no_personas\"\n              />\n            {{/if}}\n          {{/if}}\n        </section>\n      \n    */\n    {\n      \"id\": \"70As7cgM\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@path\\\",\\\"@label\\\"],[[29,[\\\"/admin/plugins/\\\",[30,0,[\\\"adminPluginNavManager\\\",\\\"currentPlugin\\\",\\\"name\\\"]],\\\"/ai-personas\\\"]],[28,[32,1],[\\\"discourse_ai.ai_persona.short_title\\\"],null]]],null],[1,\\\"\\\\n    \\\"],[10,\\\"section\\\"],[14,0,\\\"ai-persona-list-editor__current admin-detail pull-left\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"        \\\"],[8,[32,2],null,[[\\\"@model\\\",\\\"@personas\\\"],[[30,1],[30,2]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[32,3],null,[[\\\"@titleLabel\\\",\\\"@descriptionLabel\\\",\\\"@learnMoreUrl\\\"],[[28,[32,1],[\\\"discourse_ai.ai_persona.short_title\\\"],null],[28,[32,1],[\\\"discourse_ai.ai_persona.persona_description\\\"],null],\\\"https://meta.discourse.org/t/ai-bot-personas/306099\\\"]],[[\\\"actions\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[30,3,[\\\"Primary\\\"]],[[24,0,\\\"ai-persona-list-editor__new-button\\\"]],[[\\\"@label\\\",\\\"@route\\\",\\\"@icon\\\"],[\\\"discourse_ai.ai_persona.new\\\",\\\"adminPlugins.show.discourse-ai-personas.new\\\",\\\"plus\\\"]],null],[1,\\\"\\\\n          \\\"]],[3]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,2],[[[1,\\\"          \\\"],[10,\\\"table\\\"],[14,0,\\\"content-list ai-persona-list-editor d-admin-table\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.ai_persona.name\\\"],null]],[13],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.ai_persona.list.enabled\\\"],null]],[13],[1,\\\"\\\\n                \\\"],[10,\\\"th\\\"],[12],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n            \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,2]],null]],null],null,[[[1,\\\"                \\\"],[10,\\\"tr\\\"],[15,\\\"data-persona-id\\\",[30,4,[\\\"id\\\"]]],[15,0,[28,[32,4],[\\\"ai-persona-list__row d-admin-row__content\\\",[52,[30,4,[\\\"priority\\\"]],\\\"priority\\\"]],null]],[12],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__overview\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"ai-persona-list__name-with-description\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"ai-persona-list__name\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n                          \\\"],[1,[30,4,[\\\"name\\\"]]],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[10,0],[14,0,\\\"ai-persona-list__description\\\"],[12],[1,\\\"\\\\n                        \\\"],[1,[30,4,[\\\"description\\\"]]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__detail\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[32,5],[[4,[32,6],[\\\"click\\\",[28,[32,7],[[30,0,[\\\"toggleEnabled\\\"]],[30,4]],null]],null]],[[\\\"@state\\\"],[[30,4,[\\\"enabled\\\"]]]],null],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                  \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__controls\\\"],[12],[1,\\\"\\\\n                    \\\"],[8,[32,8],[[24,0,\\\"btn btn-text btn-small\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"adminPlugins.show.discourse-ai-personas.edit\\\",[30,4]]],[[\\\"default\\\"],[[[[1,[28,[32,1],[\\\"discourse_ai.ai_persona.edit\\\"],null]],[1,\\\" \\\"]],[]]]]],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[8,[32,9],null,[[\\\"@ctaLabel\\\",\\\"@ctaRoute\\\",\\\"@ctaClass\\\",\\\"@emptyLabel\\\"],[\\\"discourse_ai.ai_persona.new\\\",\\\"adminPlugins.show.discourse-ai-personas.new\\\",\\\"ai-persona-list-editor__empty-new-button\\\",\\\"discourse_ai.ai_persona.no_personas\\\"]],null],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@currentPersona\\\",\\\"@personas\\\",\\\"actions\\\",\\\"persona\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-persona-list-editor.js\",\n      \"scope\": () => [_dBreadcrumbsItem.default, _discourseI18n.i18n, _aiPersonaEditor.default, _dPageSubheader.default, _concatClass.default, _dToggleSwitch.default, _modifier.on, _helper.fn, _routing.LinkTo, _adminConfigAreaEmptyList.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiPersonaListEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-persona-tool-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 metatada = {};\n      this.args.allTools.map(t => {\n        metatada[t.id] = {\n          name: t.name,\n          ...t?.options\n        };\n      });\n      return metatada;\n    }\n    formObjectKeys(toolOptions) {\n      return toolOptions ? Object.keys(toolOptions) : [];\n    }\n    static #_ = (() => dt7948.n(this.prototype, \"formObjectKeys\", [_object.action]))();\n    static #_2 = (() => (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 optionData|>\n                      {{#each (this.formObjectKeys optionData) 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 optionsObj.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\": \"IC0rEpxO\",\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,[\\\"formObjectKeys\\\"]],[[30,7]],null]],null]],null],null,[[[44,[[28,[32,1],[[30,5],[30,8]],null]],[[[1,\\\"                      \\\"],[8,[30,6,[\\\"Field\\\"]],null,[[\\\"@name\\\",\\\"@title\\\",\\\"@helpText\\\",\\\"@format\\\"],[[30,8],[30,9,[\\\"name\\\"]],[30,9,[\\\"description\\\"]],\\\"full\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[28,[32,2],[[30,9,[\\\"type\\\"]],\\\"enum\\\"],null],[[[1,\\\"                          \\\"],[8,[30,10,[\\\"Select\\\"]],null,[[\\\"@includeNone\\\"],[false]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,6,[\\\"values\\\"]]],null]],null],null,[[[1,\\\"                              \\\"],[8,[30,11,[\\\"Option\\\"]],null,[[\\\"@value\\\"],[[30,12]]],[[\\\"default\\\"],[[[[1,[30,12]]],[]]]]],[1,\\\"\\\\n\\\"]],[12]],null],[1,\\\"                          \\\"]],[11]]]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[32,2],[[30,9,[\\\"type\\\"]],\\\"llm\\\"],null],[[[1,\\\"                          \\\"],[8,[30,10,[\\\"Custom\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                            \\\"],[8,[32,3],null,[[\\\"@value\\\",\\\"@llms\\\",\\\"@onChange\\\",\\\"@class\\\"],[[30,10,[\\\"value\\\"]],[30,13],[30,10,[\\\"set\\\"]],\\\"ai-persona-tool-option-editor__llms\\\"]],null],[1,\\\"\\\\n                          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[32,2],[[30,9,[\\\"type\\\"]],\\\"boolean\\\"],null],[[[1,\\\"                          \\\"],[8,[30,10,[\\\"Checkbox\\\"]],null,null,null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"                          \\\"],[8,[30,10,[\\\"Input\\\"]],null,null,null],[1,\\\"\\\\n                        \\\"]],[]]]],[]]]],[]]],[1,\\\"                      \\\"]],[10]]]]],[1,\\\"\\\\n\\\"]],[9]]]],[8]],null],[1,\\\"                \\\"]],[6,7]]]]],[1,\\\"\\\\n\\\"]],[5]]],[1,\\\"            \\\"],[13],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"        \\\"]],[2,3]]]]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@form\\\",\\\"toolObj\\\",\\\"optsPerTool\\\",\\\"toolId\\\",\\\"toolMeta\\\",\\\"optionsObj\\\",\\\"optionData\\\",\\\"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/did-insert\", \"@ember/render-modifiers/modifiers/will-destroy\", \"@ember/service\", \"ember-modifier\", \"truth-helpers\", \"discourse/components/cook-text\", \"discourse/components/d-button\", \"discourse/components/fast-edit\", \"discourse/components/modal/fast-edit\", \"discourse/helpers/concat-class\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/decorators\", \"discourse/lib/plugin-api\", \"discourse/lib/text\", \"discourse/lib/utilities\", \"discourse-i18n\", \"truth-helpers/helpers/eq\", \"discourse/plugins/discourse-ai/discourse/components/ai-helper-loading\", \"discourse/plugins/discourse-ai/discourse/components/ai-helper-options-list\", \"discourse/plugins/discourse-ai/discourse/lib/smooth-streamer\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _didInsert, _willDestroy, _service, _emberModifier, _truthHelpers, _cookText, _dButton, _fastEdit, _fastEdit2, _concatClass, _ajax, _ajaxError, _decorators, _pluginApi, _text, _utilities, _discourseI18n, _eq, _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    constructor() {\n      super(...arguments);\n      (0, _pluginApi.withPluginApi)(api => {\n        api.registerValueTransformer(\"post-text-selection-prevent-close\", _ref => {\n          let {\n            value\n          } = _ref;\n          if (this.menuState === this.MENU_STATES.result) {\n            return true;\n          }\n          return value;\n        });\n      });\n    }\n    get footnoteDisabled() {\n      return this.streaming || !this.supportsAddFootnote;\n    }\n    get helperOptions() {\n      let prompts = this.currentUser?.ai_helper_prompts;\n      prompts = prompts.filter(item => item.location.includes(\"post\"));\n      // Find the custom_prompt object and move it to the beginning of the array\n      const customPromptIndex = prompts.findIndex(p => p.name === \"custom_prompt\");\n      if (customPromptIndex !== -1) {\n        const customPrompt = prompts.splice(customPromptIndex, 1)[0];\n        prompts.unshift(customPrompt);\n      }\n      if (!this._showUserCustomPrompts()) {\n        prompts = prompts.filter(p => p.name !== \"custom_prompt\");\n      }\n      if (!this.args.data.canEditPost) {\n        prompts = prompts.filter(p => p.name !== \"proofread\");\n      }\n      return prompts;\n    }\n    get highlightedTextToggleIcon() {\n      if (this.showHighlightedText) {\n        return \"angle-double-left\";\n      } else {\n        return \"angle-double-right\";\n      }\n    }\n    get allowInsertFootnote() {\n      const siteSettings = this.siteSettings;\n      const canEditPost = this.args.data.canEditPost;\n      if (!siteSettings?.enable_markdown_footnotes || !siteSettings?.display_footnotes_inline || !canEditPost) {\n        return false;\n      }\n      return this.lastSelectedOption?.name === \"explain\";\n    }\n    _showUserCustomPrompts() {\n      return this.currentUser?.can_use_custom_prompts;\n    }\n    _sanitizeForFootnote(text) {\n      // Remove line breaks (line-breaks breaks the inline footnote display)\n      text = text.replace(/[\\r\\n]+/g, \" \");\n      // Remove headings (headings don't work in inline footnotes)\n      text = text.replace(/^(#+)\\s+/gm, \"\");\n      // Trim excess space\n      text = text.trim();\n      return (0, _text.sanitize)(text);\n    }\n    subscribe() {\n      const channel = `/discourse-ai/ai-helper/stream_suggestion/${this.args.data.quoteState.postId}`;\n      this.messageBus.subscribe(channel, this._updateResult);\n    }\n    static #_22 = (() => dt7948.n(this.prototype, \"subscribe\", [_decorators.bind]))();\n    unsubscribe() {\n      this.messageBus.unsubscribe(\"/discourse-ai/ai-helper/stream_suggestion/*\", this._updateResult);\n    }\n    static #_23 = (() => 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 #_24 = (() => dt7948.n(this.prototype, \"_updateResult\", [_decorators.bind]))();\n    toggleHighlightedTextPreview() {\n      this.showHighlightedText = !this.showHighlightedText;\n    }\n    static #_25 = (() => dt7948.n(this.prototype, \"toggleHighlightedTextPreview\", [_object.action]))();\n    async performAiSuggestion(option) {\n      this.menuState = this.MENU_STATES.loading;\n      this.lastSelectedOption = option;\n      const streamableOptions = [\"explain\", \"translate\", \"custom_prompt\"];\n      if (streamableOptions.includes(option.name)) {\n        return this._handleStreamedResult(option);\n      } else {\n        this._activeAiRequest = (0, _ajax.ajax)(\"/discourse-ai/ai-helper/suggest\", {\n          method: \"POST\",\n          data: {\n            mode: option.id,\n            text: this.args.data.quoteState.buffer,\n            custom_prompt: this.customPromptValue\n          }\n        });\n      }\n      this._activeAiRequest.then(_ref2 => {\n        let {\n          suggestions\n        } = _ref2;\n        this.suggestion = suggestions[0].trim();\n        if (option.name === \"proofread\") {\n          return this._handleProofreadOption();\n        }\n      }).catch(_ajaxError.popupAjaxError).finally(() => {\n        this.loading = false;\n        this.menuState = this.MENU_STATES.result;\n      });\n      return this._activeAiRequest;\n    }\n    static #_26 = (() => dt7948.n(this.prototype, \"performAiSuggestion\", [_object.action]))();\n    _handleStreamedResult(option) {\n      this.menuState = this.MENU_STATES.result;\n      const menu = this.menu.getByIdentifier(\"post-text-selection-toolbar\");\n      if (menu) {\n        menu.options.placement = \"bottom\";\n      }\n      const fetchUrl = `/discourse-ai/ai-helper/stream_suggestion`;\n      this._activeAiRequest = (0, _ajax.ajax)(fetchUrl, {\n        method: \"POST\",\n        data: {\n          mode: option.id,\n          text: this.args.data.selectedText,\n          post_id: this.args.data.quoteState.postId,\n          custom_prompt: this.customPromptValue\n        }\n      });\n      return this._activeAiRequest;\n    }\n    _handleProofreadOption() {\n      this.showAiButtons = false;\n      if (this.site.desktopView) {\n        this.showFastEdit = true;\n        return;\n      } else {\n        return this.modal.show(_fastEdit2.default, {\n          model: {\n            initialValue: this.args.data.quoteState.buffer,\n            newValue: this.suggestion,\n            post: this.args.data.post,\n            close: this.closeFastEdit\n          }\n        });\n      }\n    }\n    cancelAiAction() {\n      if (this._activeAiRequest) {\n        this._activeAiRequest.abort();\n        this._activeAiRequest = null;\n        this.loading = false;\n        this.menuState = this.MENU_STATES.options;\n      }\n    }\n    static #_27 = (() => 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 #_28 = (() => dt7948.n(this.prototype, \"copySuggestion\", [_object.action]))();\n    closeMenu() {\n      if (this.site.mobileView) {\n        return this.args.close();\n      }\n      const menu = this.menu.getByIdentifier(\"post-text-selection-toolbar\");\n      return menu?.close();\n    }\n    static #_29 = (() => dt7948.n(this.prototype, \"closeMenu\", [_object.action]))();\n    async closeFastEdit() {\n      this.showFastEdit = false;\n      await this.args.data.hideToolbar();\n    }\n    static #_30 = (() => dt7948.n(this.prototype, \"closeFastEdit\", [_object.action]))();\n    async insertFootnote() {\n      this.isSavingFootnote = true;\n      if (this.allowInsertFootnote) {\n        try {\n          const result = await (0, _ajax.ajax)(`/posts/${this.args.data.post.id}`);\n          const sanitizedSuggestion = this._sanitizeForFootnote(this.suggestion);\n          const credits = (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.post_options_menu.footnote_credits\");\n          const withFootnote = `${this.args.data.selectedText} ^[${sanitizedSuggestion} (${credits})]`;\n          const newRaw = result.raw.replace(this.args.data.selectedText, withFootnote);\n          await this.args.data.post.save({\n            raw: newRaw\n          });\n        } catch (error) {\n          (0, _ajaxError.popupAjaxError)(error);\n        } finally {\n          this.isSavingFootnote = false;\n          await this.closeMenu();\n        }\n      }\n    }\n    static #_31 = (() => dt7948.n(this.prototype, \"insertFootnote\", [_object.action]))();\n    static #_32 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if\n          (and this.site.mobileView (eq this.menuState this.MENU_STATES.options))\n        }}\n          <div class=\"ai-post-helper-menu__selected-text\">\n            {{@data.selectedText}}\n          </div>\n        {{/if}}\n    \n        {{#if this.showAiButtons}}\n          <div class=\"ai-post-helper\">\n            {{#if (eq this.menuState this.MENU_STATES.options)}}\n              <AiHelperOptionsList\n                @options={{this.helperOptions}}\n                @customPromptValue={{this.customPromptValue}}\n                @performAction={{this.performAiSuggestion}}\n                @shortcutVisible={{false}}\n              />\n            {{else if (eq this.menuState this.MENU_STATES.loading)}}\n              <AiHelperLoading @cancel={{this.cancelAiAction}} />\n            {{else if (eq this.menuState this.MENU_STATES.result)}}\n              <div\n                class=\"ai-post-helper__suggestion\"\n                {{didInsert this.subscribe}}\n                {{willDestroy this.unsubscribe}}\n              >\n                {{#if this.suggestion}}\n                  <div\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\": \"QYEKx1TA\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[28,[32,0],[[30,0,[\\\"site\\\",\\\"mobileView\\\"]],[28,[32,1],[[30,0,[\\\"menuState\\\"]],[30,0,[\\\"MENU_STATES\\\",\\\"options\\\"]]],null]],null],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"ai-post-helper-menu__selected-text\\\"],[12],[1,\\\"\\\\n        \\\"],[1,[30,1,[\\\"selectedText\\\"]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showAiButtons\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"ai-post-helper\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[32,1],[[30,0,[\\\"menuState\\\"]],[30,0,[\\\"MENU_STATES\\\",\\\"options\\\"]]],null],[[[1,\\\"          \\\"],[8,[32,2],null,[[\\\"@options\\\",\\\"@customPromptValue\\\",\\\"@performAction\\\",\\\"@shortcutVisible\\\"],[[30,0,[\\\"helperOptions\\\"]],[30,0,[\\\"customPromptValue\\\"]],[30,0,[\\\"performAiSuggestion\\\"]],false]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[32,1],[[30,0,[\\\"menuState\\\"]],[30,0,[\\\"MENU_STATES\\\",\\\"loading\\\"]]],null],[[[1,\\\"          \\\"],[8,[32,3],null,[[\\\"@cancel\\\"],[[30,0,[\\\"cancelAiAction\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[32,1],[[30,0,[\\\"menuState\\\"]],[30,0,[\\\"MENU_STATES\\\",\\\"result\\\"]]],null],[[[1,\\\"          \\\"],[11,0],[24,0,\\\"ai-post-helper__suggestion\\\"],[4,[32,4],[[30,0,[\\\"subscribe\\\"]]],null],[4,[32,5],[[30,0,[\\\"unsubscribe\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"suggestion\\\"]],[[[1,\\\"              \\\"],[10,0],[15,0,[28,[32,6],[[52,[30,0,[\\\"smoothStreamer\\\",\\\"isStreaming\\\"]],\\\"streaming\\\"],\\\"streamable-content\\\",\\\"ai-post-helper__suggestion__text\\\"],null]],[14,\\\"dir\\\",\\\"auto\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[32,7],[[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,8],[[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,8],[[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,8],[[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,9],null,[[\\\"@initialValue\\\",\\\"@newValue\\\",\\\"@post\\\",\\\"@close\\\"],[[30,1,[\\\"quoteState\\\",\\\"buffer\\\"]],[30,0,[\\\"suggestion\\\"]],[30,1,[\\\"post\\\"]],[30,0,[\\\"closeFastEdit\\\"]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@data\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-post-helper-menu.js\",\n      \"scope\": () => [_truthHelpers.and, _eq.default, _aiHelperOptionsList.default, _aiHelperLoading.default, _didInsert.default, _willDestroy.default, _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 || this.discobotDiscoveries.loadingDiscoveries) {\n            return;\n          }\n          if (this.discobotDiscoveries.lastQuery === this.query) {\n            return false;\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      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.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      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, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"toasts\", [_service.service]))();\n    #toasts = (() => (dt7948.i(this, \"toasts\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"stats\", [_tracking.tracked], function () {\n      return {\n        scanned_count: 0,\n        spam_detected: 0,\n        false_positives: 0,\n        false_negatives: 0,\n        daily_data: []\n      };\n    }))();\n    #stats = (() => (dt7948.i(this, \"stats\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"isEnabled\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isEnabled = (() => (dt7948.i(this, \"isEnabled\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"selectedLLM\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #selectedLLM = (() => (dt7948.i(this, \"selectedLLM\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"customInstructions\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #customInstructions = (() => (dt7948.i(this, \"customInstructions\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"errors\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #errors = (() => (dt7948.i(this, \"errors\"), void 0))();\n    constructor() {\n      super(...arguments);\n      this.initializeFromModel();\n      if (this.args.model?.spam_scanning_user?.admin === false) {\n        this.errors.push({\n          message: (0, _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: 2000\n          });\n        }\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      } finally {\n        window.location.reload();\n      }\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"fixScanUserNotAdmin\", [_object.action]))();\n    initializeFromModel() {\n      const model = this.args.model;\n      this.isEnabled = model.is_enabled;\n      if (model.llm_id) {\n        this.selectedLLM = \"custom:\" + model.llm_id;\n      } else {\n        if (this.availableLLMs.length) {\n          this.selectedLLM = this.availableLLMs[0].id;\n          this.autoSelectedLLM = true;\n        }\n      }\n      this.customInstructions = model.custom_instructions;\n      this.stats = model.stats;\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"initializeFromModel\", [_object.action]))();\n    get availableLLMs() {\n      return this.args.model?.available_llms || [];\n    }\n    async toggleEnabled() {\n      this.isEnabled = !this.isEnabled;\n      const data = {\n        is_enabled: this.isEnabled\n      };\n      if (this.autoSelectedLLM) {\n        data.llm_model_id = this.llmId;\n      }\n      try {\n        const response = await (0, _ajax.ajax)(\"/admin/plugins/discourse-ai/ai-spam.json\", {\n          type: \"PUT\",\n          data\n        });\n        this.autoSelectedLLM = false;\n        this.isEnabled = response.is_enabled;\n      } catch (error) {\n        this.isEnabled = !this.isEnabled;\n        (0, _ajaxError.popupAjaxError)(error);\n      }\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"toggleEnabled\", [_object.action]))();\n    get llmId() {\n      return this.selectedLLM.toString().split(\":\")[1];\n    }\n    async updateLLM(value) {\n      this.selectedLLM = value;\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"updateLLM\", [_object.action]))();\n    async save() {\n      try {\n        await (0, _ajax.ajax)(\"/admin/plugins/discourse-ai/ai-spam.json\", {\n          type: \"PUT\",\n          data: {\n            llm_model_id: this.llmId,\n            custom_instructions: this.customInstructions\n          }\n        });\n        this.toasts.success({\n          data: {\n            message: (0, _discourseI18n.i18n)(\"discourse_ai.spam.settings_saved\")\n          },\n          duration: 2000\n        });\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      }\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"save\", [_object.action]))();\n    showTestModal() {\n      this.modal.show(_spamTestModal.default, {\n        model: {\n          customInstructions: this.customInstructions,\n          llmId: this.llmId\n        }\n      });\n    }\n    static #_14 = (() => dt7948.n(this.prototype, \"showTestModal\", [_object.action]))();\n    get metrics() {\n      const detected = {\n        label: (0, _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 #_15 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"ai-spam\">\n          <section class=\"ai-spam__settings\">\n            <div class=\"ai-spam__errors\">\n              {{#each this.errors as |e|}}\n                <div class=\"alert alert-error\">\n                  {{dIcon \"triangle-exclamation\"}}\n                  <p>{{e.message}}</p>\n                  <DButton\n                    @action={{e.button.action}}\n                    @translatedLabel={{e.button.label}}\n                  />\n                </div>\n              {{/each}}\n            </div>\n            <DPageSubheader\n              @titleLabel={{i18n \"discourse_ai.spam.title\"}}\n              @descriptionLabel={{i18n \"discourse_ai.spam.spam_description\"}}\n            />\n            <div class=\"control-group ai-spam__enabled\">\n              <DToggleSwitch\n                class=\"ai-spam__toggle\"\n                @state={{this.isEnabled}}\n                @label=\"discourse_ai.spam.enable\"\n                {{on \"click\" this.toggleEnabled}}\n              />\n              <DTooltip\n                @icon=\"circle-question\"\n                @content={{i18n \"discourse_ai.spam.spam_tip\"}}\n              />\n            </div>\n    \n            <div class=\"ai-spam__llm\">\n              <label class=\"ai-spam__llm-label\">{{i18n\n                  \"discourse_ai.spam.select_llm\"\n                }}</label>\n              {{#if this.availableLLMs.length}}\n                <ComboBox\n                  @value={{this.selectedLLM}}\n                  @content={{this.availableLLMs}}\n                  @onChange={{this.updateLLM}}\n                  class=\"ai-spam__llm-selector\"\n                />\n              {{else}}\n                <span class=\"ai-spam__llm-placeholder\">\n                  <LinkTo @route=\"adminPlugins.show.discourse-ai-llms.index\">\n                    {{i18n \"discourse_ai.spam.no_llms\"}}\n                  </LinkTo>\n                </span>\n              {{/if}}\n            </div>\n    \n            <div class=\"ai-spam__instructions\">\n              <label class=\"ai-spam__instructions-label\">\n                {{i18n \"discourse_ai.spam.custom_instructions\"}}\n                <DTooltip\n                  @icon=\"circle-question\"\n                  @content={{i18n \"discourse_ai.spam.custom_instructions_help\"}}\n                />\n              </label>\n              <textarea\n                class=\"ai-spam__instructions-input\"\n                placeholder={{i18n\n                  \"discourse_ai.spam.custom_instructions_placeholder\"\n                }}\n                {{on \"input\" (withEventValue (fn (mut this.customInstructions)))}}\n              >{{this.customInstructions}}</textarea>\n              <DButton\n                @action={{this.save}}\n                @label=\"discourse_ai.spam.save_button\"\n                class=\"ai-spam__instructions-save btn-primary\"\n              />\n              <DButton\n                @action={{this.showTestModal}}\n                @label=\"discourse_ai.spam.test_button\"\n                class=\"btn-default\"\n              />\n            </div>\n          </section>\n    \n          <AdminConfigAreaCard\n            @heading=\"discourse_ai.spam.last_seven_days\"\n            class=\"ai-spam__stats\"\n          >\n            <:content>\n              <DStatTiles as |tiles|>\n                {{#each this.metrics as |metric|}}\n                  <tiles.Tile\n                    @label={{metric.label}}\n                    @url={{metric.href}}\n                    @value={{metric.value}}\n                    @tooltip={{metric.tooltip}}\n                  />\n                {{/each}}\n              </DStatTiles>\n            </:content>\n          </AdminConfigAreaCard>\n        </div>\n      \n    */\n    {\n      \"id\": \"h6+24r0F\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-spam\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"section\\\"],[14,0,\\\"ai-spam__settings\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-spam__errors\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"errors\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[10,0],[14,0,\\\"alert alert-error\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[28,[32,0],[\\\"triangle-exclamation\\\"],null]],[1,\\\"\\\\n              \\\"],[10,2],[12],[1,[30,1,[\\\"message\\\"]]],[13],[1,\\\"\\\\n              \\\"],[8,[32,1],null,[[\\\"@action\\\",\\\"@translatedLabel\\\"],[[30,1,[\\\"button\\\",\\\"action\\\"]],[30,1,[\\\"button\\\",\\\"label\\\"]]]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n        \\\"],[8,[32,2],null,[[\\\"@titleLabel\\\",\\\"@descriptionLabel\\\"],[[28,[32,3],[\\\"discourse_ai.spam.title\\\"],null],[28,[32,3],[\\\"discourse_ai.spam.spam_description\\\"],null]]],null],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"control-group ai-spam__enabled\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,4],[[24,0,\\\"ai-spam__toggle\\\"],[4,[32,5],[\\\"click\\\",[30,0,[\\\"toggleEnabled\\\"]]],null]],[[\\\"@state\\\",\\\"@label\\\"],[[30,0,[\\\"isEnabled\\\"]],\\\"discourse_ai.spam.enable\\\"]],null],[1,\\\"\\\\n          \\\"],[8,[32,6],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,3],[\\\"discourse_ai.spam.spam_tip\\\"],null]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"ai-spam__llm\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[14,0,\\\"ai-spam__llm-label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.spam.select_llm\\\"],null]],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"availableLLMs\\\",\\\"length\\\"]],[[[1,\\\"            \\\"],[8,[32,7],[[24,0,\\\"ai-spam__llm-selector\\\"]],[[\\\"@value\\\",\\\"@content\\\",\\\"@onChange\\\"],[[30,0,[\\\"selectedLLM\\\"]],[30,0,[\\\"availableLLMs\\\"]],[30,0,[\\\"updateLLM\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[10,1],[14,0,\\\"ai-spam__llm-placeholder\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[32,8],null,[[\\\"@route\\\"],[\\\"adminPlugins.show.discourse-ai-llms.index\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[1,[28,[32,3],[\\\"discourse_ai.spam.no_llms\\\"],null]],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"ai-spam__instructions\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[14,0,\\\"ai-spam__instructions-label\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,3],[\\\"discourse_ai.spam.custom_instructions\\\"],null]],[1,\\\"\\\\n            \\\"],[8,[32,6],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,3],[\\\"discourse_ai.spam.custom_instructions_help\\\"],null]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[11,\\\"textarea\\\"],[24,0,\\\"ai-spam__instructions-input\\\"],[16,\\\"placeholder\\\",[28,[32,3],[\\\"discourse_ai.spam.custom_instructions_placeholder\\\"],null]],[4,[32,5],[\\\"input\\\",[28,[32,9],[[28,[32,10],[[28,[31,3],[[30,0,[\\\"customInstructions\\\"]]],null]],null]],null]],null],[12],[1,[30,0,[\\\"customInstructions\\\"]]],[13],[1,\\\"\\\\n          \\\"],[8,[32,1],[[24,0,\\\"ai-spam__instructions-save btn-primary\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"save\\\"]],\\\"discourse_ai.spam.save_button\\\"]],null],[1,\\\"\\\\n          \\\"],[8,[32,1],[[24,0,\\\"btn-default\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"showTestModal\\\"]],\\\"discourse_ai.spam.test_button\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[8,[32,11],[[24,0,\\\"ai-spam__stats\\\"]],[[\\\"@heading\\\"],[\\\"discourse_ai.spam.last_seven_days\\\"]],[[\\\"content\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[32,12],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"metrics\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[30,2,[\\\"Tile\\\"]],null,[[\\\"@label\\\",\\\"@url\\\",\\\"@value\\\",\\\"@tooltip\\\"],[[30,3,[\\\"label\\\"]],[30,3,[\\\"href\\\"]],[30,3,[\\\"value\\\"]],[30,3,[\\\"tooltip\\\"]]]],null],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"          \\\"]],[2]]]]],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"e\\\",\\\"tiles\\\",\\\"metric\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\",\\\"mut\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-spam.js\",\n      \"scope\": () => [_dIcon.default, _dButton.default, _dPageSubheader.default, _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\", \"discourse/components/d-button\", \"discourse/helpers/category-badge\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"float-kit/components/d-menu\", \"truth-helpers/helpers/eq\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _modifier, _object, _service, _dButton, _categoryBadge, _ajax, _ajaxError, _dMenu, _eq, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiSplitTopicSuggester extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"site\", [_service.service]))();\n    #site = (() => (dt7948.i(this, \"site\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"menu\", [_service.service]))();\n    #menu = (() => (dt7948.i(this, \"menu\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"suggestions\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #suggestions = (() => (dt7948.i(this, \"suggestions\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"icon\", [_tracking.tracked], function () {\n      return \"discourse-sparkles\";\n    }))();\n    #icon = (() => (dt7948.i(this, \"icon\"), void 0))();\n    SUGGESTION_TYPES = {\n      title: \"suggest_title\",\n      category: \"suggest_category\",\n      tag: \"suggest_tags\"\n    };\n    get input() {\n      return this.args.selectedPosts.map(item => item.cooked).join(\"\\n\");\n    }\n    get disabled() {\n      return this.loading || this.suggestions.length > 0;\n    }\n    loadSuggestions() {\n      if (this.loading || this.suggestions.length > 0) {\n        return;\n      }\n      this.loading = true;\n      (0, _ajax.ajax)(`/discourse-ai/ai-helper/${this.args.mode}`, {\n        method: \"POST\",\n        data: {\n          text: this.input\n        }\n      }).then(result => {\n        if (this.args.mode === this.SUGGESTION_TYPES.title) {\n          this.suggestions = result.suggestions;\n        } else if (this.args.mode === this.SUGGESTION_TYPES.category) {\n          const suggestions = result.assistant.map(s => s.name);\n          const suggestedCategories = this.site.categories.filter(item => suggestions.includes(item.name.toLowerCase()));\n          this.suggestions = suggestedCategories;\n        } else if (this.args.mode === this.SUGGESTION_TYPES.tag) {\n          this.suggestions = result.assistant.map(s => {\n            return {\n              name: s.name,\n              count: s.count\n            };\n          });\n        }\n      }).catch(_ajaxError.popupAjaxError).finally(() => {\n        this.loading = false;\n      });\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"loadSuggestions\", [_object.action]))();\n    applySuggestion(suggestion, menu) {\n      if (!this.args.mode) {\n        return;\n      }\n      if (this.args.mode === this.SUGGESTION_TYPES.title) {\n        this.args.updateAction(suggestion);\n        return menu.close();\n      }\n      if (this.args.mode === this.SUGGESTION_TYPES.category) {\n        this.args.updateAction(suggestion.id);\n        return menu.close();\n      }\n      if (this.args.mode === this.SUGGESTION_TYPES.tag) {\n        if (this.args.currentValue) {\n          if (Array.isArray(this.args.currentValue)) {\n            const updatedTags = [...this.args.currentValue, suggestion];\n            this.args.updateAction([...new Set(updatedTags)]);\n          } else {\n            const updatedTags = [this.args.currentValue, suggestion];\n            this.args.updateAction([...new Set(updatedTags)]);\n          }\n        } else {\n          this.args.updateAction(suggestion);\n        }\n        return menu.close();\n      }\n    }\n    static #_7 = (() => dt7948.n(this.prototype, \"applySuggestion\", [_object.action]))();\n    static #_8 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.loading}}\n          {{!\n            Dynamically changing @icon of DMenu\n            causes it to rerender after load and\n            close the menu once data is loaded.\n            This workaround mimics an icon change of\n            the button by adding an overlapping\n            disabled button while loading}}\n          <DButton\n            class=\"ai-split-topic-loading-placeholder\"\n            @disabled={{true}}\n            @icon=\"spinner\"\n          />\n        {{/if}}\n        <DMenu\n          @icon=\"discourse-sparkles\"\n          @interactive={{true}}\n          @identifier=\"ai-split-topic-suggestion-menu\"\n          class=\"ai-split-topic-suggestion-button\"\n          data-suggestion-mode={{@mode}}\n          {{on \"click\" this.loadSuggestions}}\n          as |menu|\n        >\n          <ul class=\"ai-split-topic-suggestion__results\">\n            {{#unless this.loading}}\n              {{#each this.suggestions as |suggestion index|}}\n                {{#if (eq @mode \"suggest_category\")}}\n                  <li\n                    data-name={{suggestion.name}}\n                    data-value={{suggestion.id}}\n                    class=\"ai-split-topic-suggestion__category-result\"\n                    role=\"button\"\n                    {{on \"click\" (fn this.applySuggestion suggestion menu)}}\n                  >\n                    {{categoryBadge suggestion}}\n                    <span class=\"topic-count\">x\n                      {{suggestion.totalTopicCount}}</span>\n                  </li>\n                {{else if (eq @mode \"suggest_tags\")}}\n                  <li data-name={{suggestion.name}} data-value={{index}}>\n                    <DButton\n                      @translatedLabel={{suggestion.name}}\n                      @action={{fn this.applySuggestion suggestion.name menu}}\n                    >\n                      <span class=\"topic-count\">x{{suggestion.count}}</span>\n                    </DButton>\n                  </li>\n                {{else}}\n                  <li data-name={{suggestion}} data-value={{index}}>\n                    <DButton\n                      @translatedLabel={{suggestion}}\n                      @action={{fn this.applySuggestion suggestion menu}}\n                    />\n                  </li>\n                {{/if}}\n              {{/each}}\n            {{/unless}}\n          </ul>\n        </DMenu>\n      \n    */\n    {\n      \"id\": \"4ZszHd3J\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loading\\\"]],[[[1,\\\"      \\\"],[8,[32,0],[[24,0,\\\"ai-split-topic-loading-placeholder\\\"]],[[\\\"@disabled\\\",\\\"@icon\\\"],[true,\\\"spinner\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[8,[32,1],[[24,0,\\\"ai-split-topic-suggestion-button\\\"],[16,\\\"data-suggestion-mode\\\",[30,1]],[4,[32,2],[\\\"click\\\",[30,0,[\\\"loadSuggestions\\\"]]],null]],[[\\\"@icon\\\",\\\"@interactive\\\",\\\"@identifier\\\"],[\\\"discourse-sparkles\\\",true,\\\"ai-split-topic-suggestion-menu\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[10,\\\"ul\\\"],[14,0,\\\"ai-split-topic-suggestion__results\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"loading\\\"]]],[[[42,[28,[31,3],[[28,[31,3],[[30,0,[\\\"suggestions\\\"]]],null]],null],null,[[[41,[28,[32,3],[[30,1],\\\"suggest_category\\\"],null],[[[1,\\\"              \\\"],[11,\\\"li\\\"],[16,\\\"data-name\\\",[30,3,[\\\"name\\\"]]],[16,\\\"data-value\\\",[30,3,[\\\"id\\\"]]],[24,0,\\\"ai-split-topic-suggestion__category-result\\\"],[24,\\\"role\\\",\\\"button\\\"],[4,[32,2],[\\\"click\\\",[28,[32,4],[[30,0,[\\\"applySuggestion\\\"]],[30,3],[30,2]],null]],null],[12],[1,\\\"\\\\n                \\\"],[1,[28,[32,5],[[30,3]],null]],[1,\\\"\\\\n                \\\"],[10,1],[14,0,\\\"topic-count\\\"],[12],[1,\\\"x\\\\n                  \\\"],[1,[30,3,[\\\"totalTopicCount\\\"]]],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[28,[32,3],[[30,1],\\\"suggest_tags\\\"],null],[[[1,\\\"              \\\"],[10,\\\"li\\\"],[15,\\\"data-name\\\",[30,3,[\\\"name\\\"]]],[15,\\\"data-value\\\",[30,4]],[12],[1,\\\"\\\\n                \\\"],[8,[32,0],null,[[\\\"@translatedLabel\\\",\\\"@action\\\"],[[30,3,[\\\"name\\\"]],[28,[32,4],[[30,0,[\\\"applySuggestion\\\"]],[30,3,[\\\"name\\\"]],[30,2]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[10,1],[14,0,\\\"topic-count\\\"],[12],[1,\\\"x\\\"],[1,[30,3,[\\\"count\\\"]]],[13],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"              \\\"],[10,\\\"li\\\"],[15,\\\"data-name\\\",[30,3]],[15,\\\"data-value\\\",[30,4]],[12],[1,\\\"\\\\n                \\\"],[8,[32,0],null,[[\\\"@translatedLabel\\\",\\\"@action\\\"],[[30,3],[28,[32,4],[[30,0,[\\\"applySuggestion\\\"]],[30,3],[30,2]],null]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"]],[]]]],[]]]],[3,4]],null]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n    \\\"]],[2]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@mode\\\",\\\"menu\\\",\\\"suggestion\\\",\\\"index\\\"],false,[\\\"if\\\",\\\"unless\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-split-topic-suggester.js\",\n      \"scope\": () => [_dButton.default, _dMenu.default, _modifier.on, _eq.default, _helper.fn, _categoryBadge.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiSplitTopicSuggester;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-summary-skeleton\", [\"exports\", \"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\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/render-modifiers/modifiers/did-update\", \"@ember/service\", \"discourse/components/ace-editor\", \"discourse/components/back-button\", \"discourse/components/d-button\", \"discourse/components/d-tooltip\", \"discourse/helpers/with-event-value\", \"discourse/lib/ajax-error\", \"discourse-i18n\", \"select-kit/components/combo-box\", \"discourse/plugins/discourse-ai/discourse/components/ai-tool-parameter-editor\", \"discourse/plugins/discourse-ai/discourse/components/modal/ai-tool-test-modal\", \"discourse/plugins/discourse-ai/discourse/components/rag-options\", \"discourse/plugins/discourse-ai/discourse/components/rag-uploader\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _modifier, _object, _didInsert, _didUpdate, _service, _aceEditor, _backButton, _dButton, _dTooltip, _withEventValue, _ajaxError, _discourseI18n, _comboBox, _aiToolParameterEditor, _aiToolTestModal, _ragOptions, _ragUploader, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ACE_EDITOR_MODE = \"javascript\";\n  const ACE_EDITOR_THEME = \"chrome\";\n  class AiToolEditor extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"dialog\", [_service.service]))();\n    #dialog = (() => (dt7948.i(this, \"dialog\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"toasts\", [_service.service]))();\n    #toasts = (() => (dt7948.i(this, \"toasts\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"store\", [_service.service]))();\n    #store = (() => (dt7948.i(this, \"store\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"isSaving\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isSaving = (() => (dt7948.i(this, \"isSaving\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"editingModel\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #editingModel = (() => (dt7948.i(this, \"editingModel\"), void 0))();\n    static #_9 = (() => dt7948.g(this.prototype, \"showDelete\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showDelete = (() => (dt7948.i(this, \"showDelete\"), void 0))();\n    static #_10 = (() => dt7948.g(this.prototype, \"selectedPreset\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #selectedPreset = (() => (dt7948.i(this, \"selectedPreset\"), void 0))();\n    get presets() {\n      return this.args.presets.map(preset => {\n        return {\n          name: preset.preset_name,\n          id: preset.preset_id\n        };\n      });\n    }\n    get showPresets() {\n      return !this.selectedPreset && this.args.model.isNew;\n    }\n    updateModel() {\n      this.editingModel = this.args.model.workingCopy();\n      this.showDelete = !this.args.model.isNew;\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"updateModel\", [_object.action]))();\n    configurePreset() {\n      this.selectedPreset = this.args.presets.findBy(\"preset_id\", this.presetId);\n      this.editingModel = this.store.createRecord(\"ai-tool\", this.selectedPreset).workingCopy();\n      this.showDelete = false;\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"configurePreset\", [_object.action]))();\n    updateUploads(uploads) {\n      this.editingModel.rag_uploads = uploads;\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"updateUploads\", [_object.action]))();\n    removeUpload(upload) {\n      this.editingModel.rag_uploads.removeObject(upload);\n      if (!this.args.model.isNew) {\n        this.save();\n      }\n    }\n    static #_14 = (() => dt7948.n(this.prototype, \"removeUpload\", [_object.action]))();\n    async save() {\n      this.isSaving = true;\n      try {\n        const data = this.editingModel.getProperties(\"name\", \"tool_name\", \"description\", \"parameters\", \"script\", \"summary\", \"rag_uploads\", \"rag_chunk_tokens\", \"rag_chunk_overlap_tokens\", \"rag_llm_model_id\");\n        await this.args.model.save(data);\n        this.toasts.success({\n          data: {\n            message: (0, _discourseI18n.i18n)(\"discourse_ai.tools.saved\")\n          },\n          duration: 2000\n        });\n        if (!this.args.tools.any(tool => tool.id === this.args.model.id)) {\n          this.args.tools.pushObject(this.args.model);\n        }\n        this.router.transitionTo(\"adminPlugins.show.discourse-ai-tools.edit\", this.args.model);\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      } finally {\n        this.isSaving = false;\n      }\n    }\n    static #_15 = (() => dt7948.n(this.prototype, \"save\", [_object.action]))();\n    delete() {\n      return this.dialog.confirm({\n        message: (0, _discourseI18n.i18n)(\"discourse_ai.tools.confirm_delete\"),\n        didConfirm: async () => {\n          await this.args.model.destroyRecord();\n          this.args.tools.removeObject(this.args.model);\n          this.router.transitionTo(\"adminPlugins.show.discourse-ai-tools.index\");\n        }\n      });\n    }\n    static #_16 = (() => dt7948.n(this.prototype, \"delete\", [_object.action]))();\n    openTestModal() {\n      this.modal.show(_aiToolTestModal.default, {\n        model: {\n          tool: this.editingModel\n        }\n      });\n    }\n    static #_17 = (() => dt7948.n(this.prototype, \"openTestModal\", [_object.action]))();\n    static #_18 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <BackButton\n          @route=\"adminPlugins.show.discourse-ai-tools\"\n          @label=\"discourse_ai.tools.back\"\n        />\n    \n        <form\n          {{didInsert this.updateModel @model.id}}\n          {{didUpdate this.updateModel @model.id}}\n          class=\"form-horizontal ai-tool-editor\"\n        >\n          {{#if this.showPresets}}\n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.tools.presets\"}}</label>\n              <ComboBox\n                @value={{this.presetId}}\n                @content={{this.presets}}\n                class=\"ai-tool-editor__presets\"\n              />\n            </div>\n    \n            <div class=\"control-group ai-llm-editor__action_panel\">\n              <DButton\n                @action={{this.configurePreset}}\n                @label=\"discourse_ai.tools.next.title\"\n                class=\"ai-tool-editor__next\"\n              />\n            </div>\n          {{else}}\n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.tools.name\"}}</label>\n              <input\n                {{on \"input\" (withEventValue (fn (mut this.editingModel.name)))}}\n                value={{this.editingModel.name}}\n                type=\"text\"\n                class=\"ai-tool-editor__name\"\n              />\n              <DTooltip\n                @icon=\"circle-question\"\n                @content={{i18n \"discourse_ai.tools.name_help\"}}\n              />\n            </div>\n    \n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.tools.tool_name\"}}</label>\n              <input\n                {{on\n                  \"input\"\n                  (withEventValue (fn (mut this.editingModel.tool_name)))\n                }}\n                value={{this.editingModel.tool_name}}\n                type=\"text\"\n                class=\"ai-tool-editor__tool_name\"\n              />\n              <DTooltip\n                @icon=\"circle-question\"\n                @content={{i18n \"discourse_ai.tools.tool_name_help\"}}\n              />\n            </div>\n    \n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.tools.description\"}}</label>\n              <textarea\n                {{on\n                  \"input\"\n                  (withEventValue (fn (mut this.editingModel.description)))\n                }}\n                placeholder={{i18n \"discourse_ai.tools.description_help\"}}\n                class=\"ai-tool-editor__description input-xxlarge\"\n              >{{this.editingModel.description}}</textarea>\n            </div>\n    \n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.tools.summary\"}}</label>\n              <input\n                {{on \"input\" (withEventValue (fn (mut this.editingModel.summary)))}}\n                value={{this.editingModel.summary}}\n                type=\"text\"\n                class=\"ai-tool-editor__summary input-xxlarge\"\n              />\n              <DTooltip\n                @icon=\"circle-question\"\n                @content={{i18n \"discourse_ai.tools.summary_help\"}}\n              />\n            </div>\n    \n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.tools.parameters\"}}</label>\n              <AiToolParameterEditor @parameters={{this.editingModel.parameters}} />\n            </div>\n    \n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.tools.script\"}}</label>\n              <AceEditor\n                @content={{this.editingModel.script}}\n                @onChange={{fn (mut this.editingModel.script)}}\n                @mode={{ACE_EDITOR_MODE}}\n                @theme={{ACE_EDITOR_THEME}}\n                @editorId=\"ai-tool-script-editor\"\n              />\n            </div>\n    \n            {{#if this.siteSettings.ai_embeddings_enabled}}\n              <div class=\"control-group\">\n                <RagUploader\n                  @target={{this.editingModel}}\n                  @updateUploads={{this.updateUploads}}\n                  @onRemove={{this.removeUpload}}\n                  @allowImages={{@settings.rag_images_enabled}}\n                />\n              </div>\n              <RagOptions\n                @model={{this.editingModel}}\n                @llms={{@llms}}\n                @allowImages={{@settings.rag_images_enabled}}\n              />\n            {{/if}}\n    \n            <div class=\"control-group ai-tool-editor__action_panel\">\n              {{#unless @model.isNew}}\n                <DButton\n                  @action={{this.openTestModal}}\n                  @label=\"discourse_ai.tools.test\"\n                  class=\"ai-tool-editor__test-button\"\n                />\n              {{/unless}}\n    \n              <DButton\n                @action={{this.save}}\n                @label=\"discourse_ai.tools.save\"\n                @disabled={{this.isSaving}}\n                class=\"btn-primary ai-tool-editor__save\"\n              />\n    \n              {{#if this.showDelete}}\n                <DButton\n                  @action={{this.delete}}\n                  @label=\"discourse_ai.tools.delete\"\n                  class=\"btn-danger ai-tool-editor__delete\"\n                />\n              {{/if}}\n            </div>\n          {{/if}}\n        </form>\n      \n    */\n    {\n      \"id\": \"n/T4IBDL\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@route\\\",\\\"@label\\\"],[\\\"adminPlugins.show.discourse-ai-tools\\\",\\\"discourse_ai.tools.back\\\"]],null],[1,\\\"\\\\n\\\\n    \\\"],[11,\\\"form\\\"],[24,0,\\\"form-horizontal ai-tool-editor\\\"],[4,[32,1],[[30,0,[\\\"updateModel\\\"]],[30,1,[\\\"id\\\"]]],null],[4,[32,2],[[30,0,[\\\"updateModel\\\"]],[30,1,[\\\"id\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showPresets\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.tools.presets\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,4],[[24,0,\\\"ai-tool-editor__presets\\\"]],[[\\\"@value\\\",\\\"@content\\\"],[[30,0,[\\\"presetId\\\"]],[30,0,[\\\"presets\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"control-group ai-llm-editor__action_panel\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,5],[[24,0,\\\"ai-tool-editor__next\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"configurePreset\\\"]],\\\"discourse_ai.tools.next.title\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.tools.name\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[11,\\\"input\\\"],[16,2,[30,0,[\\\"editingModel\\\",\\\"name\\\"]]],[24,0,\\\"ai-tool-editor__name\\\"],[24,4,\\\"text\\\"],[4,[32,6],[\\\"input\\\",[28,[32,7],[[28,[32,8],[[28,[31,1],[[30,0,[\\\"editingModel\\\",\\\"name\\\"]]],null]],null]],null]],null],[12],[13],[1,\\\"\\\\n          \\\"],[8,[32,9],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,3],[\\\"discourse_ai.tools.name_help\\\"],null]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.tools.tool_name\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[11,\\\"input\\\"],[16,2,[30,0,[\\\"editingModel\\\",\\\"tool_name\\\"]]],[24,0,\\\"ai-tool-editor__tool_name\\\"],[24,4,\\\"text\\\"],[4,[32,6],[\\\"input\\\",[28,[32,7],[[28,[32,8],[[28,[31,1],[[30,0,[\\\"editingModel\\\",\\\"tool_name\\\"]]],null]],null]],null]],null],[12],[13],[1,\\\"\\\\n          \\\"],[8,[32,9],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,3],[\\\"discourse_ai.tools.tool_name_help\\\"],null]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.tools.description\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[11,\\\"textarea\\\"],[16,\\\"placeholder\\\",[28,[32,3],[\\\"discourse_ai.tools.description_help\\\"],null]],[24,0,\\\"ai-tool-editor__description input-xxlarge\\\"],[4,[32,6],[\\\"input\\\",[28,[32,7],[[28,[32,8],[[28,[31,1],[[30,0,[\\\"editingModel\\\",\\\"description\\\"]]],null]],null]],null]],null],[12],[1,[30,0,[\\\"editingModel\\\",\\\"description\\\"]]],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.tools.summary\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[11,\\\"input\\\"],[16,2,[30,0,[\\\"editingModel\\\",\\\"summary\\\"]]],[24,0,\\\"ai-tool-editor__summary input-xxlarge\\\"],[24,4,\\\"text\\\"],[4,[32,6],[\\\"input\\\",[28,[32,7],[[28,[32,8],[[28,[31,1],[[30,0,[\\\"editingModel\\\",\\\"summary\\\"]]],null]],null]],null]],null],[12],[13],[1,\\\"\\\\n          \\\"],[8,[32,9],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,3],[\\\"discourse_ai.tools.summary_help\\\"],null]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.tools.parameters\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,10],null,[[\\\"@parameters\\\"],[[30,0,[\\\"editingModel\\\",\\\"parameters\\\"]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,3],[\\\"discourse_ai.tools.script\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,11],null,[[\\\"@content\\\",\\\"@onChange\\\",\\\"@mode\\\",\\\"@theme\\\",\\\"@editorId\\\"],[[30,0,[\\\"editingModel\\\",\\\"script\\\"]],[28,[32,8],[[28,[31,1],[[30,0,[\\\"editingModel\\\",\\\"script\\\"]]],null]],null],[32,12],[32,13],\\\"ai-tool-script-editor\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"siteSettings\\\",\\\"ai_embeddings_enabled\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[32,14],null,[[\\\"@target\\\",\\\"@updateUploads\\\",\\\"@onRemove\\\",\\\"@allowImages\\\"],[[30,0,[\\\"editingModel\\\"]],[30,0,[\\\"updateUploads\\\"]],[30,0,[\\\"removeUpload\\\"]],[30,2,[\\\"rag_images_enabled\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[8,[32,15],null,[[\\\"@model\\\",\\\"@llms\\\",\\\"@allowImages\\\"],[[30,0,[\\\"editingModel\\\"]],[30,3],[30,2,[\\\"rag_images_enabled\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"control-group ai-tool-editor__action_panel\\\"],[12],[1,\\\"\\\\n\\\"],[41,[51,[30,1,[\\\"isNew\\\"]]],[[[1,\\\"            \\\"],[8,[32,5],[[24,0,\\\"ai-tool-editor__test-button\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"openTestModal\\\"]],\\\"discourse_ai.tools.test\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n          \\\"],[8,[32,5],[[24,0,\\\"btn-primary ai-tool-editor__save\\\"]],[[\\\"@action\\\",\\\"@label\\\",\\\"@disabled\\\"],[[30,0,[\\\"save\\\"]],\\\"discourse_ai.tools.save\\\",[30,0,[\\\"isSaving\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showDelete\\\"]],[[[1,\\\"            \\\"],[8,[32,5],[[24,0,\\\"btn-danger ai-tool-editor__delete\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"delete\\\"]],\\\"discourse_ai.tools.delete\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@model\\\",\\\"@settings\\\",\\\"@llms\\\"],false,[\\\"if\\\",\\\"mut\\\",\\\"unless\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-tool-editor.js\",\n      \"scope\": () => [_backButton.default, _didInsert.default, _didUpdate.default, _discourseI18n.i18n, _comboBox.default, _dButton.default, _modifier.on, _withEventValue.default, _helper.fn, _dTooltip.default, _aiToolParameterEditor.default, _aceEditor.default, ACE_EDITOR_MODE, ACE_EDITOR_THEME, _ragUploader.default, _ragOptions.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiToolEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-tool-list-editor\", [\"exports\", \"@glimmer/component\", \"@ember/routing\", \"@ember/service\", \"discourse/components/d-breadcrumbs-item\", \"discourse/components/d-page-subheader\", \"discourse-i18n\", \"admin/components/admin-config-area-empty-list\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _routing, _service, _dBreadcrumbsItem, _dPageSubheader, _discourseI18n, _adminConfigAreaEmptyList, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiToolListEditor extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"adminPluginNavManager\", [_service.service]))();\n    #adminPluginNavManager = (() => (dt7948.i(this, \"adminPluginNavManager\"), void 0))();\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DBreadcrumbsItem\n          @path=\"/admin/plugins/{{this.adminPluginNavManager.currentPlugin.name}}/ai-tools\"\n          @label={{i18n \"discourse_ai.tools.short_title\"}}\n        />\n        <section class=\"ai-tool-list-editor__current admin-detail pull-left\">\n          <DPageSubheader\n            @titleLabel={{i18n \"discourse_ai.tools.short_title\"}}\n            @learnMoreUrl=\"https://meta.discourse.org/t/ai-bot-custom-tools/314103\"\n            @descriptionLabel={{i18n \"discourse_ai.tools.subheader_description\"}}\n          >\n            <:actions as |actions|>\n              <actions.Primary\n                @label=\"discourse_ai.tools.new\"\n                @route=\"adminPlugins.show.discourse-ai-tools.new\"\n                @icon=\"plus\"\n                class=\"ai-tool-list-editor__new-button\"\n              />\n            </:actions>\n          </DPageSubheader>\n    \n          {{#if @tools}}\n            <table class=\"d-admin-table ai-tool-list-editor\">\n              <thead>\n                <th>{{i18n \"discourse_ai.tools.name\"}}</th>\n                <th></th>\n              </thead>\n              <tbody>\n                {{#each @tools as |tool|}}\n                  <tr\n                    data-tool-id={{tool.id}}\n                    class=\"ai-tool-list__row d-admin-row__content\"\n                  >\n                    <td class=\"d-admin-row__overview\">\n                      <div class=\"ai-tool-list__name-with-description\">\n                        <div class=\"ai-tool-list__name\">\n                          <strong>\n                            {{tool.name}}\n                          </strong>\n                        </div>\n                        <div class=\"ai-tool-list__description\">\n                          {{tool.description}}\n                        </div>\n                      </div>\n                    </td>\n                    <td class=\"d-admin-row__controls\">\n                      <LinkTo\n                        @route=\"adminPlugins.show.discourse-ai-tools.edit\"\n                        @model={{tool}}\n                        class=\"btn btn-text btn-small\"\n                      >{{i18n \"discourse_ai.tools.edit\"}}</LinkTo>\n                    </td>\n                  </tr>\n                {{/each}}\n              </tbody>\n            </table>\n          {{else}}\n            <AdminConfigAreaEmptyList\n              @ctaLabel=\"discourse_ai.tools.new\"\n              @ctaRoute=\"adminPlugins.show.discourse-ai-tools.new\"\n              @ctaClass=\"ai-tool-list-editor__empty-new-button\"\n              @emptyLabel=\"discourse_ai.tools.no_tools\"\n            />\n          {{/if}}\n        </section>\n      \n    */\n    {\n      \"id\": \"D/wxIpfT\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@path\\\",\\\"@label\\\"],[[29,[\\\"/admin/plugins/\\\",[30,0,[\\\"adminPluginNavManager\\\",\\\"currentPlugin\\\",\\\"name\\\"]],\\\"/ai-tools\\\"]],[28,[32,1],[\\\"discourse_ai.tools.short_title\\\"],null]]],null],[1,\\\"\\\\n    \\\"],[10,\\\"section\\\"],[14,0,\\\"ai-tool-list-editor__current admin-detail pull-left\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,2],null,[[\\\"@titleLabel\\\",\\\"@learnMoreUrl\\\",\\\"@descriptionLabel\\\"],[[28,[32,1],[\\\"discourse_ai.tools.short_title\\\"],null],\\\"https://meta.discourse.org/t/ai-bot-custom-tools/314103\\\",[28,[32,1],[\\\"discourse_ai.tools.subheader_description\\\"],null]]],[[\\\"actions\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[30,1,[\\\"Primary\\\"]],[[24,0,\\\"ai-tool-list-editor__new-button\\\"]],[[\\\"@label\\\",\\\"@route\\\",\\\"@icon\\\"],[\\\"discourse_ai.tools.new\\\",\\\"adminPlugins.show.discourse-ai-tools.new\\\",\\\"plus\\\"]],null],[1,\\\"\\\\n        \\\"]],[1]]]]],[1,\\\"\\\\n\\\\n\\\"],[41,[30,2],[[[1,\\\"        \\\"],[10,\\\"table\\\"],[14,0,\\\"d-admin-table ai-tool-list-editor\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.tools.name\\\"],null]],[13],[1,\\\"\\\\n            \\\"],[10,\\\"th\\\"],[12],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,2]],null]],null],null,[[[1,\\\"              \\\"],[10,\\\"tr\\\"],[15,\\\"data-tool-id\\\",[30,3,[\\\"id\\\"]]],[14,0,\\\"ai-tool-list__row d-admin-row__content\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__overview\\\"],[12],[1,\\\"\\\\n                  \\\"],[10,0],[14,0,\\\"ai-tool-list__name-with-description\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"ai-tool-list__name\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\n                        \\\"],[1,[30,3,[\\\"name\\\"]]],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"ai-tool-list__description\\\"],[12],[1,\\\"\\\\n                      \\\"],[1,[30,3,[\\\"description\\\"]]],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n                \\\"],[10,\\\"td\\\"],[14,0,\\\"d-admin-row__controls\\\"],[12],[1,\\\"\\\\n                  \\\"],[8,[32,3],[[24,0,\\\"btn btn-text btn-small\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"adminPlugins.show.discourse-ai-tools.edit\\\",[30,3]]],[[\\\"default\\\"],[[[[1,[28,[32,1],[\\\"discourse_ai.tools.edit\\\"],null]]],[]]]]],[1,\\\"\\\\n                \\\"],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[8,[32,4],null,[[\\\"@ctaLabel\\\",\\\"@ctaRoute\\\",\\\"@ctaClass\\\",\\\"@emptyLabel\\\"],[\\\"discourse_ai.tools.new\\\",\\\"adminPlugins.show.discourse-ai-tools.new\\\",\\\"ai-tool-list-editor__empty-new-button\\\",\\\"discourse_ai.tools.no_tools\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"actions\\\",\\\"@tools\\\",\\\"tool\\\"],false,[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-tool-list-editor.js\",\n      \"scope\": () => [_dBreadcrumbsItem.default, _discourseI18n.i18n, _dPageSubheader.default, _routing.LinkTo, _adminConfigAreaEmptyList.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiToolListEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-tool-parameter-editor\", [\"exports\", \"@glimmer/component\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"@ember-compat/tracked-built-ins\", \"discourse/components/d-button\", \"discourse/helpers/with-event-value\", \"discourse-i18n\", \"select-kit/components/combo-box\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _modifier, _object, _trackedBuiltIns, _dButton, _withEventValue, _discourseI18n, _comboBox, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const PARAMETER_TYPES = [{\n    name: \"string\",\n    id: \"string\"\n  }, {\n    name: \"number\",\n    id: \"number\"\n  }, {\n    name: \"boolean\",\n    id: \"boolean\"\n  }, {\n    name: \"array\",\n    id: \"array\"\n  }];\n  class AiToolParameterEditor extends _component.default {\n    addParameter() {\n      this.args.parameters.push(new _trackedBuiltIns.TrackedObject({\n        name: \"\",\n        description: \"\",\n        type: \"string\",\n        required: false,\n        enum: null\n      }));\n    }\n    static #_ = (() => dt7948.n(this.prototype, \"addParameter\", [_object.action]))();\n    removeParameter(parameter) {\n      const index = this.args.parameters.indexOf(parameter);\n      this.args.parameters.splice(index, 1);\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"removeParameter\", [_object.action]))();\n    toggleRequired(parameter, event) {\n      parameter.required = event.target.checked;\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"toggleRequired\", [_object.action]))();\n    toggleEnum(parameter) {\n      if (parameter.enum) {\n        parameter.enum = null;\n      } else {\n        this.addEnumValue(parameter);\n      }\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"toggleEnum\", [_object.action]))();\n    addEnumValue(parameter) {\n      parameter.enum ||= new _trackedBuiltIns.TrackedArray();\n      parameter.enum.push(\"\");\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"addEnumValue\", [_object.action]))();\n    removeEnumValue(parameter, index) {\n      parameter.enum.splice(index, 1);\n      if (parameter.enum.length === 0) {\n        parameter.enum = null;\n      }\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"removeEnumValue\", [_object.action]))();\n    updateEnumValue(parameter, index, event) {\n      parameter.enum[index] = event.target.value;\n    }\n    static #_7 = (() => dt7948.n(this.prototype, \"updateEnumValue\", [_object.action]))();\n    static #_8 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#each @parameters as |parameter|}}\n          <div class=\"ai-tool-parameter\">\n            <div class=\"parameter-row\">\n              <input\n                {{on \"input\" (withEventValue (fn (mut parameter.name)))}}\n                value={{parameter.name}}\n                type=\"text\"\n                placeholder={{i18n \"discourse_ai.tools.parameter_name\"}}\n              />\n              <ComboBox @value={{parameter.type}} @content={{PARAMETER_TYPES}} />\n            </div>\n    \n            <div class=\"parameter-row\">\n              <input\n                {{on \"input\" (withEventValue (fn (mut parameter.description)))}}\n                value={{parameter.description}}\n                type=\"text\"\n                placeholder={{i18n \"discourse_ai.tools.parameter_description\"}}\n              />\n            </div>\n    \n            <div class=\"parameter-row\">\n              <label>\n                <input\n                  {{on \"input\" (fn this.toggleRequired parameter)}}\n                  checked={{parameter.required}}\n                  type=\"checkbox\"\n                  class=\"parameter-row__required-toggle\"\n                />\n                {{i18n \"discourse_ai.tools.parameter_required\"}}\n              </label>\n    \n              <label>\n                <input\n                  {{on \"input\" (fn this.toggleEnum parameter)}}\n                  checked={{parameter.enum}}\n                  type=\"checkbox\"\n                  class=\"parameter-row__enum-toggle\"\n                />\n                {{i18n \"discourse_ai.tools.parameter_enum\"}}\n              </label>\n    \n              <DButton\n                @action={{fn this.removeParameter parameter}}\n                @icon=\"trash-can\"\n                class=\"btn-danger\"\n              />\n            </div>\n    \n            {{#if parameter.enum}}\n              <div class=\"parameter-enum-values\">\n                {{#each parameter.enum as |enumValue enumIndex|}}\n                  <div class=\"enum-value-row\">\n                    <input\n                      {{on \"change\" (fn this.updateEnumValue parameter enumIndex)}}\n                      value={{enumValue}}\n                      type=\"text\"\n                      placeholder={{i18n \"discourse_ai.tools.enum_value\"}}\n                    />\n                    <DButton\n                      @action={{fn this.removeEnumValue parameter enumIndex}}\n                      @icon=\"trash-can\"\n                      class=\"btn-danger\"\n                    />\n                  </div>\n                {{/each}}\n    \n                <DButton\n                  @action={{fn this.addEnumValue parameter}}\n                  @label=\"discourse_ai.tools.add_enum_value\"\n                  @icon=\"plus\"\n                />\n              </div>\n            {{/if}}\n          </div>\n        {{/each}}\n    \n        <DButton\n          @action={{this.addParameter}}\n          @label=\"discourse_ai.tools.add_parameter\"\n          @icon=\"plus\"\n        />\n      \n    */\n    {\n      \"id\": \"YMABeavw\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,1]],null]],null],null,[[[1,\\\"      \\\"],[10,0],[14,0,\\\"ai-tool-parameter\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"parameter-row\\\"],[12],[1,\\\"\\\\n          \\\"],[11,\\\"input\\\"],[16,2,[30,2,[\\\"name\\\"]]],[16,\\\"placeholder\\\",[28,[32,0],[\\\"discourse_ai.tools.parameter_name\\\"],null]],[24,4,\\\"text\\\"],[4,[32,1],[\\\"input\\\",[28,[32,2],[[28,[32,3],[[28,[31,2],[[30,2,[\\\"name\\\"]]],null]],null]],null]],null],[12],[13],[1,\\\"\\\\n          \\\"],[8,[32,4],null,[[\\\"@value\\\",\\\"@content\\\"],[[30,2,[\\\"type\\\"]],[32,5]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"parameter-row\\\"],[12],[1,\\\"\\\\n          \\\"],[11,\\\"input\\\"],[16,2,[30,2,[\\\"description\\\"]]],[16,\\\"placeholder\\\",[28,[32,0],[\\\"discourse_ai.tools.parameter_description\\\"],null]],[24,4,\\\"text\\\"],[4,[32,1],[\\\"input\\\",[28,[32,2],[[28,[32,3],[[28,[31,2],[[30,2,[\\\"description\\\"]]],null]],null]],null]],null],[12],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"parameter-row\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n            \\\"],[11,\\\"input\\\"],[16,\\\"checked\\\",[30,2,[\\\"required\\\"]]],[24,0,\\\"parameter-row__required-toggle\\\"],[24,4,\\\"checkbox\\\"],[4,[32,1],[\\\"input\\\",[28,[32,3],[[30,0,[\\\"toggleRequired\\\"]],[30,2]],null]],null],[12],[13],[1,\\\"\\\\n            \\\"],[1,[28,[32,0],[\\\"discourse_ai.tools.parameter_required\\\"],null]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,\\\"\\\\n            \\\"],[11,\\\"input\\\"],[16,\\\"checked\\\",[30,2,[\\\"enum\\\"]]],[24,0,\\\"parameter-row__enum-toggle\\\"],[24,4,\\\"checkbox\\\"],[4,[32,1],[\\\"input\\\",[28,[32,3],[[30,0,[\\\"toggleEnum\\\"]],[30,2]],null]],null],[12],[13],[1,\\\"\\\\n            \\\"],[1,[28,[32,0],[\\\"discourse_ai.tools.parameter_enum\\\"],null]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n          \\\"],[8,[32,6],[[24,0,\\\"btn-danger\\\"]],[[\\\"@action\\\",\\\"@icon\\\"],[[28,[32,3],[[30,0,[\\\"removeParameter\\\"]],[30,2]],null],\\\"trash-can\\\"]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,2,[\\\"enum\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"parameter-enum-values\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,2,[\\\"enum\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[10,0],[14,0,\\\"enum-value-row\\\"],[12],[1,\\\"\\\\n                \\\"],[11,\\\"input\\\"],[16,2,[30,3]],[16,\\\"placeholder\\\",[28,[32,0],[\\\"discourse_ai.tools.enum_value\\\"],null]],[24,4,\\\"text\\\"],[4,[32,1],[\\\"change\\\",[28,[32,3],[[30,0,[\\\"updateEnumValue\\\"]],[30,2],[30,4]],null]],null],[12],[13],[1,\\\"\\\\n                \\\"],[8,[32,6],[[24,0,\\\"btn-danger\\\"]],[[\\\"@action\\\",\\\"@icon\\\"],[[28,[32,3],[[30,0,[\\\"removeEnumValue\\\"]],[30,2],[30,4]],null],\\\"trash-can\\\"]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[3,4]],null],[1,\\\"\\\\n            \\\"],[8,[32,6],null,[[\\\"@action\\\",\\\"@label\\\",\\\"@icon\\\"],[[28,[32,3],[[30,0,[\\\"addEnumValue\\\"]],[30,2]],null],\\\"discourse_ai.tools.add_enum_value\\\",\\\"plus\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"\\\\n    \\\"],[8,[32,6],null,[[\\\"@action\\\",\\\"@label\\\",\\\"@icon\\\"],[[30,0,[\\\"addParameter\\\"]],\\\"discourse_ai.tools.add_parameter\\\",\\\"plus\\\"]],null],[1,\\\"\\\\n  \\\"]],[\\\"@parameters\\\",\\\"parameter\\\",\\\"enumValue\\\",\\\"enumIndex\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"mut\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-tool-parameter-editor.js\",\n      \"scope\": () => [_discourseI18n.i18n, _modifier.on, _withEventValue.default, _helper.fn, _comboBox.default, PARAMETER_TYPES, _dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiToolParameterEditor;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-tool-selector\", [\"exports\", \"@ember/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\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _template, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTopicGist extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"gists\", [_service.service]))();\n    #gists = (() => (dt7948.i(this, \"gists\"), void 0))();\n    get shouldShow() {\n      return this.gists.preference === \"table-ai\" && this.gists.shouldShow;\n    }\n    get hasGist() {\n      return !!this.gist;\n    }\n    get gist() {\n      return this.args.topic.get(\"ai_topic_gist\");\n    }\n    get escapedExcerpt() {\n      return this.args.topic.get(\"escapedExcerpt\");\n    }\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.shouldShow}}\n          {{#if this.hasGist}}\n            <div class=\"excerpt\">\n              <div class=\"excerpt__contents\">{{this.gist}}</div>\n            </div>\n          {{else}}\n            {{#if this.escapedExcerpt}}\n              <div class=\"excerpt\">\n                <div class=\"excerpt__contents\">\n                  {{htmlSafe this.escapedExcerpt}}\n                </div>\n              </div>\n            {{/if}}\n          {{/if}}\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"DDbV96Wf\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"shouldShow\\\"]],[[[41,[30,0,[\\\"hasGist\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"excerpt\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"excerpt__contents\\\"],[12],[1,[30,0,[\\\"gist\\\"]]],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"escapedExcerpt\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"excerpt\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"excerpt__contents\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[28,[32,0],[[30,0,[\\\"escapedExcerpt\\\"]]],null]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]]]],[]],null],[1,\\\"  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-topic-gist.js\",\n      \"scope\": () => [_template.htmlSafe],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiTopicGist;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/ai-usage\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/object\", \"@ember/routing\", \"@ember/service\", \"truth-helpers\", \"discourse/components/conditional-loading-spinner\", \"discourse/components/d-button\", \"discourse/components/d-page-subheader\", \"discourse/components/d-stat-tiles\", \"discourse/components/date-time-input-range\", \"discourse/helpers/avatar\", \"discourse/helpers/concat-class\", \"discourse/lib/ajax\", \"discourse/lib/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, _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, \"store\", [_service.service]))();\n    #store = (() => (dt7948.i(this, \"store\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"startDate\", [_tracking.tracked], function () {\n      return moment().subtract(30, \"days\").toDate();\n    }))();\n    #startDate = (() => (dt7948.i(this, \"startDate\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"endDate\", [_tracking.tracked], function () {\n      return new Date();\n    }))();\n    #endDate = (() => (dt7948.i(this, \"endDate\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"data\", [_tracking.tracked], function () {\n      return this.args.model;\n    }))();\n    #data = (() => (dt7948.i(this, \"data\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"selectedFeature\", [_tracking.tracked]))();\n    #selectedFeature = (() => (dt7948.i(this, \"selectedFeature\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"selectedModel\", [_tracking.tracked]))();\n    #selectedModel = (() => (dt7948.i(this, \"selectedModel\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"selectedPeriod\", [_tracking.tracked], function () {\n      return \"month\";\n    }))();\n    #selectedPeriod = (() => (dt7948.i(this, \"selectedPeriod\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"isCustomDateActive\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isCustomDateActive = (() => (dt7948.i(this, \"isCustomDateActive\"), void 0))();\n    static #_9 = (() => dt7948.g(this.prototype, \"loadingData\", [_tracking.tracked], function () {\n      return true;\n    }))();\n    #loadingData = (() => (dt7948.i(this, \"loadingData\"), void 0))();\n    constructor() {\n      super(...arguments);\n      this.fetchData();\n    }\n    async fetchData() {\n      const response = await (0, _ajax.ajax)(\"/admin/plugins/discourse-ai/ai-usage-report.json\", {\n        data: {\n          start_date: moment(this.startDate).format(\"YYYY-MM-DD\"),\n          end_date: moment(this.endDate).format(\"YYYY-MM-DD\"),\n          feature: this.selectedFeature,\n          model: this.selectedModel\n        }\n      });\n      this.data = response;\n      this.loadingData = false;\n      this._cachedFeatures = null;\n      this._cachedModels = null;\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"fetchData\", [_object.action]))();\n    async onFilterChange() {\n      await this.fetchData();\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"onFilterChange\", [_object.action]))();\n    onFeatureChanged(value) {\n      this.selectedFeature = value;\n      this.onFilterChange();\n    }\n    static #_12 = (() => dt7948.n(this.prototype, \"onFeatureChanged\", [_object.action]))();\n    onModelChanged(value) {\n      this.selectedModel = value;\n      this.onFilterChange();\n    }\n    static #_13 = (() => dt7948.n(this.prototype, \"onModelChanged\", [_object.action]))();\n    takeUsers(start, end) {\n      return this.data.users.slice(start, end);\n    }\n    static #_14 = (() => dt7948.n(this.prototype, \"takeUsers\", [_decorators.bind]))();\n    normalizeTimeSeriesData(data) {\n      if (!data?.length) {\n        return [];\n      }\n      const startDate = moment(this.startDate);\n      const endDate = moment(this.endDate);\n      const normalized = [];\n      let interval;\n      let format;\n      if (this.data.period === \"hour\") {\n        interval = \"hour\";\n        format = \"YYYY-MM-DD HH:00:00\";\n      } else if (this.data.period === \"day\") {\n        interval = \"day\";\n        format = \"YYYY-MM-DD\";\n      } else {\n        interval = \"month\";\n        format = \"YYYY-MM\";\n      }\n      const dataMap = new Map(data.map(d => [moment(d.period).format(format), d]));\n      for (let currentMoment = moment(startDate); currentMoment.isSameOrBefore(endDate); currentMoment.add(1, interval)) {\n        const dateKey = currentMoment.format(format);\n        const existingData = dataMap.get(dateKey);\n        normalized.push(existingData || {\n          period: currentMoment.format(),\n          total_tokens: 0,\n          total_cached_tokens: 0,\n          total_request_tokens: 0,\n          total_response_tokens: 0\n        });\n      }\n      return normalized;\n    }\n    get metrics() {\n      return [{\n        label: (0, _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    }\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 #_15 = (() => dt7948.n(this.prototype, \"setPeriodDates\", [_object.action]))();\n    onPeriodSelect(period) {\n      this.selectedPeriod = period;\n      this.isCustomDateActive = false;\n      this.setPeriodDates(period);\n      this.fetchData();\n    }\n    static #_16 = (() => dt7948.n(this.prototype, \"onPeriodSelect\", [_object.action]))();\n    onCustomDateClick() {\n      this.isCustomDateActive = !this.isCustomDateActive;\n      if (this.isCustomDateActive) {\n        this.selectedPeriod = null;\n      }\n    }\n    static #_17 = (() => dt7948.n(this.prototype, \"onCustomDateClick\", [_object.action]))();\n    onDateChange() {\n      this.isCustomDateActive = true;\n      this.selectedPeriod = null;\n      this.fetchData();\n    }\n    static #_18 = (() => dt7948.n(this.prototype, \"onDateChange\", [_object.action]))();\n    onChangeDateRange(_ref) {\n      let {\n        from,\n        to\n      } = _ref;\n      this._startDate = from;\n      this._endDate = to;\n    }\n    static #_19 = (() => dt7948.n(this.prototype, \"onChangeDateRange\", [_object.action]))();\n    onRefreshDateRange() {\n      this.startDate = this._startDate;\n      this.endDate = this._endDate;\n      this.fetchData();\n    }\n    static #_20 = (() => dt7948.n(this.prototype, \"onRefreshDateRange\", [_object.action]))();\n    static #_21 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"ai-usage admin-detail\">\n          <DPageSubheader\n            @titleLabel={{i18n \"discourse_ai.usage.short_title\"}}\n            @learnMoreUrl=\"https://meta.discourse.org/t/-/348677\"\n            @descriptionLabel={{i18n \"discourse_ai.usage.subheader_description\"}}\n          />\n          <div class=\"ai-usage__filters\">\n            <div class=\"ai-usage__filters-dates\">\n              <div class=\"ai-usage__period-buttons\">\n                {{#each this.periodOptions as |option|}}\n                  <DButton\n                    class={{if\n                      (eq this.selectedPeriod option.id)\n                      \"btn-primary\"\n                      \"btn-default\"\n                    }}\n                    @action={{fn this.onPeriodSelect option.id}}\n                    @translatedLabel={{option.name}}\n                  />\n                {{/each}}\n                <DButton\n                  class={{if this.isCustomDateActive \"btn-primary\" \"btn-default\"}}\n                  @action={{this.onCustomDateClick}}\n                  @label=\"discourse_ai.usage.periods.custom\"\n                />\n              </div>\n    \n              {{#if this.isCustomDateActive}}\n                <div class=\"ai-usage__custom-date-pickers\">\n    \n                  <DateTimeInputRange\n                    @from={{this.startDate}}\n                    @to={{this.endDate}}\n                    @onChange={{this.onChangeDateRange}}\n                    @showFromTime={{false}}\n                    @showToTime={{false}}\n                  />\n    \n                  <DButton @action={{this.onRefreshDateRange}} @label=\"refresh\" />\n                </div>\n              {{/if}}\n            </div>\n    \n            <div class=\"ai-usage__filters-row\">\n              <ComboBox\n                @value={{this.selectedFeature}}\n                @content={{this.availableFeatures}}\n                @onChange={{this.onFeatureChanged}}\n                @options={{hash none=\"discourse_ai.usage.all_features\"}}\n                class=\"ai-usage__feature-selector\"\n              />\n    \n              <ComboBox\n                @value={{this.selectedModel}}\n                @content={{this.availableModels}}\n                @onChange={{this.onModelChanged}}\n                @options={{hash none=\"discourse_ai.usage.all_models\"}}\n                class=\"ai-usage__model-selector\"\n              />\n            </div>\n    \n            <ConditionalLoadingSpinner @condition={{this.loadingData}}>\n              <AdminConfigAreaCard\n                @heading=\"discourse_ai.usage.summary\"\n                class=\"ai-usage__summary\"\n              >\n                <:content>\n                  <DStatTiles as |tiles|>\n                    {{#each this.metrics as |metric|}}\n                      <tiles.Tile\n                        @label={{metric.label}}\n                        @href={{metric.href}}\n                        @value={{metric.value}}\n                        @tooltip={{metric.tooltip}}\n                      />\n                    {{/each}}\n                  </DStatTiles>\n                </:content>\n              </AdminConfigAreaCard>\n    \n              <AdminConfigAreaCard\n                class=\"ai-usage__charts\"\n                @heading=\"discourse_ai.usage.tokens_over_time\"\n              >\n                <:content>\n                  <div class=\"ai-usage__chart-container\">\n                    <Chart\n                      @chartConfig={{this.chartConfig}}\n                      class=\"ai-usage__chart\"\n                    />\n                  </div>\n                </:content>\n              </AdminConfigAreaCard>\n    \n              <div class=\"ai-usage__breakdowns\">\n                <AdminConfigAreaCard\n                  class=\"ai-usage__features\"\n                  @heading=\"discourse_ai.usage.features_breakdown\"\n                >\n                  <:content>\n                    {{#unless this.data.features.length}}\n                      <AdminConfigAreaEmptyList\n                        @emptyLabel=\"discourse_ai.usage.no_features\"\n                      />\n                    {{/unless}}\n    \n                    {{#if this.data.features.length}}\n                      <table class=\"ai-usage__features-table\">\n                        <thead>\n                          <tr>\n                            <th>{{i18n \"discourse_ai.usage.feature\"}}</th>\n                            <th>{{i18n \"discourse_ai.usage.usage_count\"}}</th>\n                            <th>{{i18n \"discourse_ai.usage.total_tokens\"}}</th>\n                          </tr>\n                        </thead>\n                        <tbody>\n                          {{#each this.data.features as |feature|}}\n                            <tr class=\"ai-usage__features-row\">\n                              <td\n                                class=\"ai-usage__features-cell\"\n                              >{{feature.feature_name}}</td>\n                              <td\n                                class=\"ai-usage__features-cell\"\n                                title={{feature.usage_count}}\n                              >{{number feature.usage_count}}</td>\n                              <td\n                                class=\"ai-usage__features-cell\"\n                                title={{feature.total_tokens}}\n                              >{{number feature.total_tokens}}</td>\n                            </tr>\n                          {{/each}}\n                        </tbody>\n                      </table>\n                    {{/if}}\n                  </:content>\n                </AdminConfigAreaCard>\n    \n                <AdminConfigAreaCard\n                  class=\"ai-usage__models\"\n                  @heading=\"discourse_ai.usage.models_breakdown\"\n                >\n                  <:content>\n                    {{#unless this.data.models.length}}\n                      <AdminConfigAreaEmptyList\n                        @emptyLabel=\"discourse_ai.usage.no_models\"\n                      />\n                    {{/unless}}\n    \n                    {{#if this.data.models.length}}\n                      <table class=\"ai-usage__models-table\">\n                        <thead>\n                          <tr>\n                            <th>{{i18n \"discourse_ai.usage.model\"}}</th>\n                            <th>{{i18n \"discourse_ai.usage.usage_count\"}}</th>\n                            <th>{{i18n \"discourse_ai.usage.total_tokens\"}}</th>\n                          </tr>\n                        </thead>\n                        <tbody>\n                          {{#each this.data.models as |model|}}\n                            <tr class=\"ai-usage__models-row\">\n                              <td class=\"ai-usage__models-cell\">{{model.llm}}</td>\n                              <td\n                                class=\"ai-usage__models-cell\"\n                                title={{model.usage_count}}\n                              >{{number model.usage_count}}</td>\n                              <td\n                                class=\"ai-usage__models-cell\"\n                                title={{model.total_tokens}}\n                              >{{number model.total_tokens}}</td>\n                            </tr>\n                          {{/each}}\n                        </tbody>\n                      </table>\n                    {{/if}}\n                  </:content>\n                </AdminConfigAreaCard>\n    \n                <AdminConfigAreaCard\n                  class=\"ai-usage__users\"\n                  @heading=\"discourse_ai.usage.users_breakdown\"\n                >\n                  <:content>\n                    {{#unless this.data.users.length}}\n                      <AdminConfigAreaEmptyList\n                        @emptyLabel=\"discourse_ai.usage.no_users\"\n                      />\n                    {{/unless}}\n    \n                    {{#if this.data.users.length}}\n                      <table\n                        class={{concatClass\n                          \"ai-usage__users-table\"\n                          (if (lt this.data.users.length 25) \"-double-width\")\n                        }}\n                      >\n                        <thead>\n                          <tr>\n                            <th class=\"ai-usage__users-username\">{{i18n\n                                \"discourse_ai.usage.username\"\n                              }}</th>\n                            <th>{{i18n \"discourse_ai.usage.usage_count\"}}</th>\n                            <th>{{i18n \"discourse_ai.usage.total_tokens\"}}</th>\n                          </tr>\n                        </thead>\n                        <tbody>\n                          {{#each (this.takeUsers 0 24) as |user|}}\n                            <tr class=\"ai-usage__users-row\">\n                              <td class=\"ai-usage__users-cell\">\n                                <div class=\"user-info\">\n                                  <LinkTo\n                                    @route=\"user\"\n                                    @model={{user.username}}\n                                    class=\"username\"\n                                  >\n                                    {{avatar user imageSize=\"tiny\"}}\n                                    {{user.username}}\n                                  </LinkTo>\n                                </div></td>\n                              <td\n                                class=\"ai-usage__users-cell\"\n                                title={{user.usage_count}}\n                              >{{number user.usage_count}}</td>\n                              <td\n                                class=\"ai-usage__users-cell\"\n                                title={{user.total_tokens}}\n                              >{{number user.total_tokens}}</td>\n                            </tr>\n                          {{/each}}\n                        </tbody>\n                      </table>\n    \n                      {{#if (gt this.data.users.length 25)}}\n                        <table class=\"ai-usage__users-table\">\n                          <thead>\n                            <tr>\n                              <th class=\"ai-usage__users-username\">{{i18n\n                                  \"discourse_ai.usage.username\"\n                                }}</th>\n                              <th>{{i18n \"discourse_ai.usage.usage_count\"}}</th>\n                              <th>{{i18n \"discourse_ai.usage.total_tokens\"}}</th>\n                            </tr>\n                          </thead>\n                          <tbody>\n                            {{#each (this.takeUsers 25 49) as |user|}}\n                              <tr class=\"ai-usage__users-row\">\n                                <td class=\"ai-usage__users-cell\">\n                                  <div class=\"user-info\">\n                                    <LinkTo\n                                      @route=\"user\"\n                                      @model={{user.username}}\n                                      class=\"username\"\n                                    >\n                                      {{avatar user imageSize=\"tiny\"}}\n                                      {{user.username}}\n                                    </LinkTo>\n                                  </div></td>\n                                <td\n                                  class=\"ai-usage__users-cell\"\n                                  title={{user.usage_count}}\n                                >{{number user.usage_count}}</td>\n                                <td\n                                  class=\"ai-usage__users-cell\"\n                                  title={{user.total_tokens}}\n                                >{{number user.total_tokens}}</td>\n                              </tr>\n                            {{/each}}\n                          </tbody>\n                        </table>\n                      {{/if}}\n                    {{/if}}\n                  </:content>\n                </AdminConfigAreaCard>\n              </div>\n            </ConditionalLoadingSpinner>\n          </div>\n        </div>\n      \n    */\n    {\n      \"id\": \"LcImkkGS\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-usage admin-detail\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,0],null,[[\\\"@titleLabel\\\",\\\"@learnMoreUrl\\\",\\\"@descriptionLabel\\\"],[[28,[32,1],[\\\"discourse_ai.usage.short_title\\\"],null],\\\"https://meta.discourse.org/t/-/348677\\\",[28,[32,1],[\\\"discourse_ai.usage.subheader_description\\\"],null]]],null],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"ai-usage__filters\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-usage__filters-dates\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"ai-usage__period-buttons\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"periodOptions\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[32,2],[[16,0,[52,[28,[32,3],[[30,0,[\\\"selectedPeriod\\\"]],[30,1,[\\\"id\\\"]]],null],\\\"btn-primary\\\",\\\"btn-default\\\"]]],[[\\\"@action\\\",\\\"@translatedLabel\\\"],[[28,[32,4],[[30,0,[\\\"onPeriodSelect\\\"]],[30,1,[\\\"id\\\"]]],null],[30,1,[\\\"name\\\"]]]],null],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"            \\\"],[8,[32,2],[[16,0,[52,[30,0,[\\\"isCustomDateActive\\\"]],\\\"btn-primary\\\",\\\"btn-default\\\"]]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"onCustomDateClick\\\"]],\\\"discourse_ai.usage.periods.custom\\\"]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"isCustomDateActive\\\"]],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"ai-usage__custom-date-pickers\\\"],[12],[1,\\\"\\\\n\\\\n              \\\"],[8,[32,5],null,[[\\\"@from\\\",\\\"@to\\\",\\\"@onChange\\\",\\\"@showFromTime\\\",\\\"@showToTime\\\"],[[30,0,[\\\"startDate\\\"]],[30,0,[\\\"endDate\\\"]],[30,0,[\\\"onChangeDateRange\\\"]],false,false]],null],[1,\\\"\\\\n\\\\n              \\\"],[8,[32,2],null,[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"onRefreshDateRange\\\"]],\\\"refresh\\\"]],null],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,0],[14,0,\\\"ai-usage__filters-row\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,6],[[24,0,\\\"ai-usage__feature-selector\\\"]],[[\\\"@value\\\",\\\"@content\\\",\\\"@onChange\\\",\\\"@options\\\"],[[30,0,[\\\"selectedFeature\\\"]],[30,0,[\\\"availableFeatures\\\"]],[30,0,[\\\"onFeatureChanged\\\"]],[28,[32,7],null,[[\\\"none\\\"],[\\\"discourse_ai.usage.all_features\\\"]]]]],null],[1,\\\"\\\\n\\\\n          \\\"],[8,[32,6],[[24,0,\\\"ai-usage__model-selector\\\"]],[[\\\"@value\\\",\\\"@content\\\",\\\"@onChange\\\",\\\"@options\\\"],[[30,0,[\\\"selectedModel\\\"]],[30,0,[\\\"availableModels\\\"]],[30,0,[\\\"onModelChanged\\\"]],[28,[32,7],null,[[\\\"none\\\"],[\\\"discourse_ai.usage.all_models\\\"]]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[8,[32,8],null,[[\\\"@condition\\\"],[[30,0,[\\\"loadingData\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[32,9],[[24,0,\\\"ai-usage__summary\\\"]],[[\\\"@heading\\\"],[\\\"discourse_ai.usage.summary\\\"]],[[\\\"content\\\"],[[[[1,\\\"\\\\n              \\\"],[8,[32,10],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"metrics\\\"]]],null]],null],null,[[[1,\\\"                  \\\"],[8,[30,2,[\\\"Tile\\\"]],null,[[\\\"@label\\\",\\\"@href\\\",\\\"@value\\\",\\\"@tooltip\\\"],[[30,3,[\\\"label\\\"]],[30,3,[\\\"href\\\"]],[30,3,[\\\"value\\\"]],[30,3,[\\\"tooltip\\\"]]]],null],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"              \\\"]],[2]]]]],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\\n          \\\"],[8,[32,9],[[24,0,\\\"ai-usage__charts\\\"]],[[\\\"@heading\\\"],[\\\"discourse_ai.usage.tokens_over_time\\\"]],[[\\\"content\\\"],[[[[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"ai-usage__chart-container\\\"],[12],[1,\\\"\\\\n                \\\"],[8,[32,11],[[24,0,\\\"ai-usage__chart\\\"]],[[\\\"@chartConfig\\\"],[[30,0,[\\\"chartConfig\\\"]]]],null],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n            \\\"]],[]]]]],[1,\\\"\\\\n\\\\n          \\\"],[10,0],[14,0,\\\"ai-usage__breakdowns\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[32,9],[[24,0,\\\"ai-usage__features\\\"]],[[\\\"@heading\\\"],[\\\"discourse_ai.usage.features_breakdown\\\"]],[[\\\"content\\\"],[[[[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"data\\\",\\\"features\\\",\\\"length\\\"]]],[[[1,\\\"                  \\\"],[8,[32,12],null,[[\\\"@emptyLabel\\\"],[\\\"discourse_ai.usage.no_features\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"data\\\",\\\"features\\\",\\\"length\\\"]],[[[1,\\\"                  \\\"],[10,\\\"table\\\"],[14,0,\\\"ai-usage__features-table\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.feature\\\"],null]],[13],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.usage_count\\\"],null]],[13],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.total_tokens\\\"],null]],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"data\\\",\\\"features\\\"]]],null]],null],null,[[[1,\\\"                        \\\"],[10,\\\"tr\\\"],[14,0,\\\"ai-usage__features-row\\\"],[12],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__features-cell\\\"],[12],[1,[30,4,[\\\"feature_name\\\"]]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__features-cell\\\"],[15,\\\"title\\\",[30,4,[\\\"usage_count\\\"]]],[12],[1,[28,[32,13],[[30,4,[\\\"usage_count\\\"]]],null]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__features-cell\\\"],[15,\\\"title\\\",[30,4,[\\\"total_tokens\\\"]]],[12],[1,[28,[32,13],[[30,4,[\\\"total_tokens\\\"]]],null]],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"]],[]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[32,9],[[24,0,\\\"ai-usage__models\\\"]],[[\\\"@heading\\\"],[\\\"discourse_ai.usage.models_breakdown\\\"]],[[\\\"content\\\"],[[[[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"data\\\",\\\"models\\\",\\\"length\\\"]]],[[[1,\\\"                  \\\"],[8,[32,12],null,[[\\\"@emptyLabel\\\"],[\\\"discourse_ai.usage.no_models\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"data\\\",\\\"models\\\",\\\"length\\\"]],[[[1,\\\"                  \\\"],[10,\\\"table\\\"],[14,0,\\\"ai-usage__models-table\\\"],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.model\\\"],null]],[13],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.usage_count\\\"],null]],[13],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.total_tokens\\\"],null]],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[30,0,[\\\"data\\\",\\\"models\\\"]]],null]],null],null,[[[1,\\\"                        \\\"],[10,\\\"tr\\\"],[14,0,\\\"ai-usage__models-row\\\"],[12],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__models-cell\\\"],[12],[1,[30,5,[\\\"llm\\\"]]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__models-cell\\\"],[15,\\\"title\\\",[30,5,[\\\"usage_count\\\"]]],[12],[1,[28,[32,13],[[30,5,[\\\"usage_count\\\"]]],null]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__models-cell\\\"],[15,\\\"title\\\",[30,5,[\\\"total_tokens\\\"]]],[12],[1,[28,[32,13],[[30,5,[\\\"total_tokens\\\"]]],null]],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n\\\"]],[5]],null],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"              \\\"]],[]]]]],[1,\\\"\\\\n\\\\n            \\\"],[8,[32,9],[[24,0,\\\"ai-usage__users\\\"]],[[\\\"@heading\\\"],[\\\"discourse_ai.usage.users_breakdown\\\"]],[[\\\"content\\\"],[[[[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"data\\\",\\\"users\\\",\\\"length\\\"]]],[[[1,\\\"                  \\\"],[8,[32,12],null,[[\\\"@emptyLabel\\\"],[\\\"discourse_ai.usage.no_users\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"data\\\",\\\"users\\\",\\\"length\\\"]],[[[1,\\\"                  \\\"],[10,\\\"table\\\"],[15,0,[28,[32,14],[\\\"ai-usage__users-table\\\",[52,[28,[32,15],[[30,0,[\\\"data\\\",\\\"users\\\",\\\"length\\\"]],25],null],\\\"-double-width\\\"]],null]],[12],[1,\\\"\\\\n                    \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[14,0,\\\"ai-usage__users-username\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.username\\\"],null]],[13],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.usage_count\\\"],null]],[13],[1,\\\"\\\\n                        \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.total_tokens\\\"],null]],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                    \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[28,[30,0,[\\\"takeUsers\\\"]],[0,24],null]],null]],null],null,[[[1,\\\"                        \\\"],[10,\\\"tr\\\"],[14,0,\\\"ai-usage__users-row\\\"],[12],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__users-cell\\\"],[12],[1,\\\"\\\\n                            \\\"],[10,0],[14,0,\\\"user-info\\\"],[12],[1,\\\"\\\\n                              \\\"],[8,[32,16],[[24,0,\\\"username\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"user\\\",[30,6,[\\\"username\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                                \\\"],[1,[28,[32,17],[[30,6]],[[\\\"imageSize\\\"],[\\\"tiny\\\"]]]],[1,\\\"\\\\n                                \\\"],[1,[30,6,[\\\"username\\\"]]],[1,\\\"\\\\n                              \\\"]],[]]]]],[1,\\\"\\\\n                            \\\"],[13],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__users-cell\\\"],[15,\\\"title\\\",[30,6,[\\\"usage_count\\\"]]],[12],[1,[28,[32,13],[[30,6,[\\\"usage_count\\\"]]],null]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__users-cell\\\"],[15,\\\"title\\\",[30,6,[\\\"total_tokens\\\"]]],[12],[1,[28,[32,13],[[30,6,[\\\"total_tokens\\\"]]],null]],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n\\\"]],[6]],null],[1,\\\"                    \\\"],[13],[1,\\\"\\\\n                  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[32,18],[[30,0,[\\\"data\\\",\\\"users\\\",\\\"length\\\"]],25],null],[[[1,\\\"                    \\\"],[10,\\\"table\\\"],[14,0,\\\"ai-usage__users-table\\\"],[12],[1,\\\"\\\\n                      \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n                        \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n                          \\\"],[10,\\\"th\\\"],[14,0,\\\"ai-usage__users-username\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.username\\\"],null]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.usage_count\\\"],null]],[13],[1,\\\"\\\\n                          \\\"],[10,\\\"th\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.usage.total_tokens\\\"],null]],[13],[1,\\\"\\\\n                        \\\"],[13],[1,\\\"\\\\n                      \\\"],[13],[1,\\\"\\\\n                      \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,1],[[28,[31,1],[[28,[30,0,[\\\"takeUsers\\\"]],[25,49],null]],null]],null],null,[[[1,\\\"                          \\\"],[10,\\\"tr\\\"],[14,0,\\\"ai-usage__users-row\\\"],[12],[1,\\\"\\\\n                            \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__users-cell\\\"],[12],[1,\\\"\\\\n                              \\\"],[10,0],[14,0,\\\"user-info\\\"],[12],[1,\\\"\\\\n                                \\\"],[8,[32,16],[[24,0,\\\"username\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"user\\\",[30,7,[\\\"username\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                                  \\\"],[1,[28,[32,17],[[30,7]],[[\\\"imageSize\\\"],[\\\"tiny\\\"]]]],[1,\\\"\\\\n                                  \\\"],[1,[30,7,[\\\"username\\\"]]],[1,\\\"\\\\n                                \\\"]],[]]]]],[1,\\\"\\\\n                              \\\"],[13],[13],[1,\\\"\\\\n                            \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__users-cell\\\"],[15,\\\"title\\\",[30,7,[\\\"usage_count\\\"]]],[12],[1,[28,[32,13],[[30,7,[\\\"usage_count\\\"]]],null]],[13],[1,\\\"\\\\n                            \\\"],[10,\\\"td\\\"],[14,0,\\\"ai-usage__users-cell\\\"],[15,\\\"title\\\",[30,7,[\\\"total_tokens\\\"]]],[12],[1,[28,[32,13],[[30,7,[\\\"total_tokens\\\"]]],null]],[13],[1,\\\"\\\\n                          \\\"],[13],[1,\\\"\\\\n\\\"]],[7]],null],[1,\\\"                      \\\"],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\"              \\\"]],[]]]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"option\\\",\\\"tiles\\\",\\\"metric\\\",\\\"feature\\\",\\\"model\\\",\\\"user\\\",\\\"user\\\"],false,[\\\"each\\\",\\\"-track-array\\\",\\\"if\\\",\\\"unless\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/ai-usage.js\",\n      \"scope\": () => [_dPageSubheader.default, _discourseI18n.i18n, _dButton.default, _truthHelpers.eq, _helper.fn, _dateTimeInputRange.default, _comboBox.default, _helper.hash, _conditionalLoadingSpinner.default, _adminConfigAreaCard.default, _dStatTiles.default, _chart.default, _adminConfigAreaEmptyList.default, _formatter.number, _concatClass.default, _truthHelpers.lt, _routing.LinkTo, _avatar.default, _truthHelpers.gt],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiUsage;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/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-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, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"messageBus\", [_service.service]))();\n    #messageBus = (() => (dt7948.i(this, \"messageBus\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"site\", [_service.service]))();\n    #site = (() => (dt7948.i(this, \"site\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"text\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #text = (() => (dt7948.i(this, \"text\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"summarizedOn\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #summarizedOn = (() => (dt7948.i(this, \"summarizedOn\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"summarizedBy\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #summarizedBy = (() => (dt7948.i(this, \"summarizedBy\"), void 0))();\n    static #_9 = (() => dt7948.g(this.prototype, \"newPostsSinceSummary\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #newPostsSinceSummary = (() => (dt7948.i(this, \"newPostsSinceSummary\"), void 0))();\n    static #_10 = (() => dt7948.g(this.prototype, \"outdated\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #outdated = (() => (dt7948.i(this, \"outdated\"), void 0))();\n    static #_11 = (() => dt7948.g(this.prototype, \"canRegenerate\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #canRegenerate = (() => (dt7948.i(this, \"canRegenerate\"), void 0))();\n    static #_12 = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_13 = (() => dt7948.g(this.prototype, \"currentIndex\", [_tracking.tracked], function () {\n      return 0;\n    }))();\n    #currentIndex = (() => (dt7948.i(this, \"currentIndex\"), void 0))();\n    static #_14 = (() => 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 #_15 = (() => 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 #_16 = (() => 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 #_17 = (() => 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 #_18 = (() => 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 #_19 = (() => 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 #_20 = (() => dt7948.n(this.prototype, \"_updateSummary\", [_decorators.bind]))();\n    onRegisterApi(api) {\n      this.dMenu = api;\n    }\n    static #_21 = (() => 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 #_22 = (() => dt7948.n(this.prototype, \"handleClose\", [_object.action]))();\n    static #_23 = (() => (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                  {{dIcon \"circle-info\"}}\n                </:trigger>\n                <:content>\n                  {{i18n \"summary.model_used\" model=this.summarizedBy}}\n                </:content>\n              </DTooltip>\n            </p>\n            {{#if this.outdated}}\n              <p class=\"summary-outdated\">{{this.outdatedSummaryWarningText}}</p>\n            {{/if}}\n            {{#if this.canRegenerate}}\n              <DButton\n                @label=\"summary.buttons.regenerate\"\n                @title=\"summary.buttons.regenerate\"\n                @action={{this.regenerateSummary}}\n                @icon=\"arrows-rotate\"\n              />\n            {{/if}}\n          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"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\", \"@ember/service\", \"discourse/components/conditional-loading-section\", \"discourse/components/d-modal\", \"discourse/components/d-modal-cancel\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse-i18n\", \"select-kit/components/combo-box\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _service, _conditionalLoadingSection, _dModal, _dModalCancel, _ajax, _ajaxError, _discourseI18n, _comboBox, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class ChatModalChannelSummary extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"chatApi\", [_service.service]))();\n    #chatApi = (() => (dt7948.i(this, \"chatApi\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"sinceHours\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #sinceHours = (() => (dt7948.i(this, \"sinceHours\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"summary\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #summary = (() => (dt7948.i(this, \"summary\"), void 0))();\n    availableSummaries = {};\n    sinceOptions = [1, 3, 6, 12, 24, 72, 168].map(hours => {\n      return {\n        name: (0, _discourseI18n.i18n)(\"discourse_ai.summarization.chat.since\", {\n          count: hours\n        }),\n        value: hours\n      };\n    });\n    get channelId() {\n      return this.args.model.channelId;\n    }\n    summarize(since) {\n      this.sinceHours = since;\n      this.loading = true;\n      if (this.availableSummaries[since]) {\n        this.summary = this.availableSummaries[since];\n        this.loading = false;\n        return;\n      }\n      return (0, _ajax.ajax)(`/discourse-ai/summarization/channels/${this.channelId}.json`, {\n        type: \"GET\",\n        data: {\n          since\n        }\n      }).then(data => {\n        this.availableSummaries[this.sinceHours] = data.summary;\n        this.summary = this.availableSummaries[this.sinceHours];\n      }).catch(_ajaxError.popupAjaxError).finally(() => this.loading = false);\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"summarize\", [_object.action]))();\n    static #_6 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DModal\n          @closeModal={{@closeModal}}\n          class=\"chat-modal-channel-summary\"\n          @title={{i18n \"discourse_ai.summarization.chat.title\"}}\n        >\n          <:body>\n            <span>{{i18n \"discourse_ai.summarization.chat.description\"}}</span>\n            <ComboBox\n              @value={{this.sinceHours}}\n              @content={{this.sinceOptions}}\n              @onChange={{this.summarize}}\n              @valueProperty=\"value\"\n              class=\"summarization-since\"\n            />\n            <ConditionalLoadingSection @isLoading={{this.loading}}>\n              <p class=\"summary-area\">{{this.summary}}</p>\n            </ConditionalLoadingSection>\n          </:body>\n          <:footer>\n            <DModalCancel @close={{@closeModal}} />\n          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"ye9ZWC9O\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"chat-modal-channel-summary\\\"]],[[\\\"@closeModal\\\",\\\"@title\\\"],[[30,1],[28,[32,1],[\\\"discourse_ai.summarization.chat.title\\\"],null]]],[[\\\"body\\\",\\\"footer\\\"],[[[[1,\\\"\\\\n        \\\"],[10,1],[12],[1,[28,[32,1],[\\\"discourse_ai.summarization.chat.description\\\"],null]],[13],[1,\\\"\\\\n        \\\"],[8,[32,2],[[24,0,\\\"summarization-since\\\"]],[[\\\"@value\\\",\\\"@content\\\",\\\"@onChange\\\",\\\"@valueProperty\\\"],[[30,0,[\\\"sinceHours\\\"]],[30,0,[\\\"sinceOptions\\\"]],[30,0,[\\\"summarize\\\"]],\\\"value\\\"]],null],[1,\\\"\\\\n        \\\"],[8,[32,3],null,[[\\\"@isLoading\\\"],[[30,0,[\\\"loading\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[10,2],[14,0,\\\"summary-area\\\"],[12],[1,[30,0,[\\\"summary\\\"]]],[13],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[8,[32,4],null,[[\\\"@close\\\"],[[30,1]]],null],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@closeModal\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/chat-modal-channel-summary.js\",\n      \"scope\": () => [_dModal.default, _discourseI18n.i18n, _comboBox.default, _conditionalLoadingSection.default, _dModalCancel.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = ChatModalChannelSummary;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/debug-ai-modal\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/modifier\", \"@ember/object\", \"@ember/runloop\", \"@ember/template\", \"discourse/components/d-button\", \"discourse/components/d-modal\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/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>\n                {{i18n \"discourse_ai.ai_bot.debug_ai_modal.request_tokens\"}}\n                {{this.info.request_tokens}}\n              </span>\n              <span>\n                {{i18n \"discourse_ai.ai_bot.debug_ai_modal.response_tokens\"}}\n                {{this.info.response_tokens}}\n              </span>\n            </div>\n            <div class=\"debug-ai-modal__preview\">\n              {{this.htmlContext}}\n            </div>\n          </:body>\n    \n          <:footer>\n            <DButton\n              class=\"btn confirm\"\n              @icon=\"copy\"\n              @action={{this.copyRequest}}\n              @label=\"discourse_ai.ai_bot.debug_ai_modal.copy_request\"\n            />\n            <DButton\n              class=\"btn confirm\"\n              @icon=\"copy\"\n              @action={{this.copyResponse}}\n              @label=\"discourse_ai.ai_bot.debug_ai_modal.copy_response\"\n            />\n            {{#if this.info.prev_log_id}}\n              <DButton\n                class=\"btn\"\n                @icon=\"angles-left\"\n                @action={{this.prevLog}}\n                @label=\"discourse_ai.ai_bot.debug_ai_modal.previous_log\"\n              />\n            {{/if}}\n            {{#if this.info.next_log_id}}\n              <DButton\n                class=\"btn\"\n                @icon=\"angles-right\"\n                @action={{this.nextLog}}\n                @label=\"discourse_ai.ai_bot.debug_ai_modal.next_log\"\n              />\n            {{/if}}\n            <span class=\"ai-debut-modal__just-copied\">{{this.justCopiedText}}</span>\n          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"xMX9mYY4\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"ai-debug-modal\\\"]],[[\\\"@title\\\",\\\"@closeModal\\\"],[[28,[32,1],[\\\"discourse_ai.ai_bot.debug_ai_modal.title\\\"],null],[30,1]]],[[\\\"body\\\",\\\"footer\\\"],[[[[1,\\\"\\\\n        \\\"],[10,\\\"ul\\\"],[14,0,\\\"nav nav-pills ai-debug-modal__nav\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[11,3],[24,6,\\\"\\\"],[16,0,[30,0,[\\\"requestActive\\\"]]],[4,[32,2],[\\\"click\\\",[30,0,[\\\"requestClicked\\\"]]],null],[12],[1,[28,[32,1],[\\\"discourse_ai.ai_bot.debug_ai_modal.request\\\"],null]],[13],[13],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[11,3],[24,6,\\\"\\\"],[16,0,[30,0,[\\\"responseActive\\\"]]],[4,[32,2],[\\\"click\\\",[30,0,[\\\"responseClicked\\\"]]],null],[12],[1,[28,[32,1],[\\\"discourse_ai.ai_bot.debug_ai_modal.response\\\"],null]],[13],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-debug-modal__tokens\\\"],[12],[1,\\\"\\\\n          \\\"],[10,1],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,1],[\\\"discourse_ai.ai_bot.debug_ai_modal.request_tokens\\\"],null]],[1,\\\"\\\\n            \\\"],[1,[30,0,[\\\"info\\\",\\\"request_tokens\\\"]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,1],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,1],[\\\"discourse_ai.ai_bot.debug_ai_modal.response_tokens\\\"],null]],[1,\\\"\\\\n            \\\"],[1,[30,0,[\\\"info\\\",\\\"response_tokens\\\"]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"debug-ai-modal__preview\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[30,0,[\\\"htmlContext\\\"]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[8,[32,3],[[24,0,\\\"btn confirm\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@label\\\"],[\\\"copy\\\",[30,0,[\\\"copyRequest\\\"]],\\\"discourse_ai.ai_bot.debug_ai_modal.copy_request\\\"]],null],[1,\\\"\\\\n        \\\"],[8,[32,3],[[24,0,\\\"btn confirm\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@label\\\"],[\\\"copy\\\",[30,0,[\\\"copyResponse\\\"]],\\\"discourse_ai.ai_bot.debug_ai_modal.copy_response\\\"]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"info\\\",\\\"prev_log_id\\\"]],[[[1,\\\"          \\\"],[8,[32,3],[[24,0,\\\"btn\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@label\\\"],[\\\"angles-left\\\",[30,0,[\\\"prevLog\\\"]],\\\"discourse_ai.ai_bot.debug_ai_modal.previous_log\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"info\\\",\\\"next_log_id\\\"]],[[[1,\\\"          \\\"],[8,[32,3],[[24,0,\\\"btn\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@label\\\"],[\\\"angles-right\\\",[30,0,[\\\"nextLog\\\"]],\\\"discourse_ai.ai_bot.debug_ai_modal.next_log\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[10,1],[14,0,\\\"ai-debut-modal__just-copied\\\"],[12],[1,[30,0,[\\\"justCopiedText\\\"]]],[13],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@closeModal\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/debug-ai-modal.js\",\n      \"scope\": () => [_dModal.default, _discourseI18n.i18n, _modifier.on, _dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = DebugAiModal;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/diff-modal\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@ember/template\", \"discourse/components/cook-text\", \"discourse/components/d-button\", \"discourse/components/d-modal\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-indicator-wave\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _service, _template, _cookText, _dButton, _dModal, _ajax, _ajaxError, _discourseI18n, _aiIndicatorWave, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class ModalDiffModal extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"diff\", [_tracking.tracked]))();\n    #diff = (() => (dt7948.i(this, \"diff\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"suggestion\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #suggestion = (() => (dt7948.i(this, \"suggestion\"), void 0))();\n    constructor() {\n      super(...arguments);\n      this.suggestChanges();\n    }\n    async suggestChanges() {\n      this.loading = true;\n      try {\n        const suggestion = await (0, _ajax.ajax)(\"/discourse-ai/ai-helper/suggest\", {\n          method: \"POST\",\n          data: {\n            mode: this.args.model.mode,\n            text: this.args.model.selectedText,\n            custom_prompt: this.args.model.customPromptValue,\n            force_default_locale: true\n          }\n        });\n        this.diff = suggestion.diff;\n        this.suggestion = suggestion.suggestions[0];\n      } catch (e) {\n        (0, _ajaxError.popupAjaxError)(e);\n      } finally {\n        this.loading = false;\n      }\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"suggestChanges\", [_object.action]))();\n    triggerConfirmChanges() {\n      this.args.closeModal();\n      if (this.suggestion) {\n        this.args.model.toolbarEvent.replaceText(this.args.model.selectedText, this.suggestion);\n      }\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"triggerConfirmChanges\", [_object.action]))();\n    static #_7 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DModal\n          class=\"composer-ai-helper-modal\"\n          @title={{i18n \"discourse_ai.ai_helper.context_menu.changes\"}}\n          @closeModal={{@closeModal}}\n        >\n          <:body>\n            {{#if this.loading}}\n              <div class=\"composer-ai-helper-modal__loading\">\n                <CookText @rawText={{@model.selectedText}} />\n              </div>\n            {{else}}\n              {{#if this.diff}}\n                {{htmlSafe this.diff}}\n              {{else}}\n                <div class=\"composer-ai-helper-modal__old-value\">\n                  {{@model.selectedText}}\n                </div>\n    \n                <div class=\"composer-ai-helper-modal__new-value\">\n                  {{this.suggestion}}\n                </div>\n              {{/if}}\n            {{/if}}\n    \n          </:body>\n    \n          <:footer>\n            {{#if this.loading}}\n              <DButton\n                class=\"btn-primary\"\n                @label=\"discourse_ai.ai_helper.context_menu.loading\"\n                @disabled={{true}}\n              >\n                <AiIndicatorWave @loading={{this.loading}} />\n              </DButton>\n            {{else}}\n              <DButton\n                class=\"btn-primary confirm\"\n                @action={{this.triggerConfirmChanges}}\n                @label=\"discourse_ai.ai_helper.context_menu.confirm\"\n              />\n              <DButton\n                class=\"btn-flat discard\"\n                @action={{@closeModal}}\n                @label=\"discourse_ai.ai_helper.context_menu.discard\"\n              />\n              <DButton\n                class=\"regenerate\"\n                @icon=\"arrows-rotate\"\n                @action={{this.suggestChanges}}\n                @label=\"discourse_ai.ai_helper.context_menu.regen\"\n              />\n            {{/if}}\n          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"1RHJPtPu\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"composer-ai-helper-modal\\\"]],[[\\\"@title\\\",\\\"@closeModal\\\"],[[28,[32,1],[\\\"discourse_ai.ai_helper.context_menu.changes\\\"],null],[30,1]]],[[\\\"body\\\",\\\"footer\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loading\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"composer-ai-helper-modal__loading\\\"],[12],[1,\\\"\\\\n            \\\"],[8,[32,2],null,[[\\\"@rawText\\\"],[[30,2,[\\\"selectedText\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"diff\\\"]],[[[1,\\\"            \\\"],[1,[28,[32,3],[[30,0,[\\\"diff\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"            \\\"],[10,0],[14,0,\\\"composer-ai-helper-modal__old-value\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[30,2,[\\\"selectedText\\\"]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[10,0],[14,0,\\\"composer-ai-helper-modal__new-value\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[30,0,[\\\"suggestion\\\"]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"loading\\\"]],[[[1,\\\"          \\\"],[8,[32,4],[[24,0,\\\"btn-primary\\\"]],[[\\\"@label\\\",\\\"@disabled\\\"],[\\\"discourse_ai.ai_helper.context_menu.loading\\\",true]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[8,[32,5],null,[[\\\"@loading\\\"],[[30,0,[\\\"loading\\\"]]]],null],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"          \\\"],[8,[32,4],[[24,0,\\\"btn-primary confirm\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,0,[\\\"triggerConfirmChanges\\\"]],\\\"discourse_ai.ai_helper.context_menu.confirm\\\"]],null],[1,\\\"\\\\n          \\\"],[8,[32,4],[[24,0,\\\"btn-flat discard\\\"]],[[\\\"@action\\\",\\\"@label\\\"],[[30,1],\\\"discourse_ai.ai_helper.context_menu.discard\\\"]],null],[1,\\\"\\\\n          \\\"],[8,[32,4],[[24,0,\\\"regenerate\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@label\\\"],[\\\"arrows-rotate\\\",[30,0,[\\\"suggestChanges\\\"]],\\\"discourse_ai.ai_helper.context_menu.regen\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@closeModal\\\",\\\"@model\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/diff-modal.js\",\n      \"scope\": () => [_dModal.default, _discourseI18n.i18n, _cookText.default, _template.htmlSafe, _dButton.default, _aiIndicatorWave.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = ModalDiffModal;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/share-full-topic-modal\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@ember/template\", \"discourse/components/d-button\", \"discourse/components/d-modal\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/get-url\", \"discourse/lib/utilities\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _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: 3000,\n        data: {\n          message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.conversation_shared\")\n        }\n      });\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"share\", [_object.action]))();\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DModal\n          class=\"ai-share-full-topic-modal\"\n          @title={{i18n \"discourse_ai.ai_bot.share_full_topic_modal.title\"}}\n          @closeModal={{@closeModal}}\n        >\n          <:body>\n            <div class=\"ai-share-full-topic-modal__body\">\n              {{this.htmlContext}}\n            </div>\n          </:body>\n    \n          <:footer>\n            <DButton\n              class=\"btn-primary confirm\"\n              @icon=\"copy\"\n              @action={{this.share}}\n              @label={{this.primaryLabel}}\n            />\n            {{#if this.shareKey}}\n              <DButton\n                class=\"btn-danger\"\n                @icon=\"far-trash-can\"\n                @action={{this.deleteLink}}\n                @label=\"discourse_ai.ai_bot.share_full_topic_modal.delete\"\n              />\n            {{/if}}\n          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"A5MyH/Ft\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"ai-share-full-topic-modal\\\"]],[[\\\"@title\\\",\\\"@closeModal\\\"],[[28,[32,1],[\\\"discourse_ai.ai_bot.share_full_topic_modal.title\\\"],null],[30,1]]],[[\\\"body\\\",\\\"footer\\\"],[[[[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-share-full-topic-modal__body\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[30,0,[\\\"htmlContext\\\"]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[8,[32,2],[[24,0,\\\"btn-primary confirm\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@label\\\"],[\\\"copy\\\",[30,0,[\\\"share\\\"]],[30,0,[\\\"primaryLabel\\\"]]]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"shareKey\\\"]],[[[1,\\\"          \\\"],[8,[32,2],[[24,0,\\\"btn-danger\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@label\\\"],[\\\"far-trash-can\\\",[30,0,[\\\"deleteLink\\\"]],\\\"discourse_ai.ai_bot.share_full_topic_modal.delete\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@closeModal\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/share-full-topic-modal.js\",\n      \"scope\": () => [_dModal.default, _discourseI18n.i18n, _dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = ShareModal;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/share-modal\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/component\", \"@ember/modifier\", \"@ember/object\", \"@ember/service\", \"@ember/template\", \"discourse/components/d-button\", \"discourse/components/d-modal\", \"discourse/lib/later\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/lib/ai-bot-helper\", \"discourse/plugins/discourse-ai/discourse/lib/copy-conversation\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _component2, _modifier, _object, _service, _template, _dButton, _dModal, _later, _discourseI18n, _aiBotHelper, _copyConversation, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class ShareModal extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"contextValue\", [_tracking.tracked], function () {\n      return 1;\n    }))();\n    #contextValue = (() => (dt7948.i(this, \"contextValue\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"htmlContext\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #htmlContext = (() => (dt7948.i(this, \"htmlContext\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"maxContext\", [_tracking.tracked], function () {\n      return 0;\n    }))();\n    #maxContext = (() => (dt7948.i(this, \"maxContext\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"allPosts\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #allPosts = (() => (dt7948.i(this, \"allPosts\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"justCopiedText\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #justCopiedText = (() => (dt7948.i(this, \"justCopiedText\"), void 0))();\n    constructor() {\n      super(...arguments);\n      const postStream = this.args.model.topic.get(\"postStream\");\n      let postNumbers = [];\n      // simpler to understand than Array.from\n      for (let i = 1; i <= this.args.model.post_number; i++) {\n        postNumbers.push(i);\n      }\n      this.allPosts = postNumbers.map(postNumber => {\n        let postId = postStream.findPostIdForPostNumber(postNumber);\n        if (postId) {\n          return postStream.findLoadedPost(postId);\n        }\n      }).filter(post => post);\n      this.maxContext = this.allPosts.length / 2;\n      this.contextValue = 1;\n      this.updateHtmlContext();\n    }\n    updateHtmlContext() {\n      let context = [];\n      const start = this.allPosts.length - this.contextValue * 2;\n      for (let i = start; i < this.allPosts.length; i++) {\n        const post = this.allPosts[i];\n        context.push(`<p><b>${post.username}:</b></p>`);\n        context.push(post.cooked);\n      }\n      this.htmlContext = (0, _template.htmlSafe)(context.join(\"\\n\"));\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"updateHtmlContext\", [_object.action]))();\n    async copyContext() {\n      const from = this.allPosts[this.allPosts.length - this.contextValue * 2].post_number;\n      const to = this.args.model.post_number;\n      await (0, _copyConversation.default)(this.args.model.topic, from, to);\n      this.justCopiedText = (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.conversation_shared\");\n      (0, _later.default)(() => {\n        this.justCopiedText = \"\";\n      }, 2000);\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"copyContext\", [_object.action]))();\n    shareConversationModal(event) {\n      event?.preventDefault();\n      this.args.closeModal();\n      (0, _aiBotHelper.showShareConversationModal)(this.modal, this.args.model.topic_id);\n      return false;\n    }\n    static #_11 = (() => dt7948.n(this.prototype, \"shareConversationModal\", [_object.action]))();\n    static #_12 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DModal\n          class=\"ai-share-modal\"\n          @title={{i18n \"discourse_ai.ai_bot.share_modal.title\"}}\n          @closeModal={{@closeModal}}\n        >\n          <:body>\n            <div class=\"ai-share-modal__preview\">\n              {{this.htmlContext}}\n            </div>\n          </:body>\n    \n          <:footer>\n            <div class=\"ai-share-modal__slider\">\n              <Input\n                @type=\"range\"\n                min=\"1\"\n                max={{this.maxContext}}\n                @value={{this.contextValue}}\n                {{on \"change\" this.updateHtmlContext}}\n              />\n              <div class=\"ai-share-modal__context\">\n                {{i18n \"discourse_ai.ai_bot.share_modal.context\"}}\n                {{this.contextValue}}\n              </div>\n            </div>\n            <DButton\n              class=\"btn-primary confirm\"\n              @icon=\"copy\"\n              @action={{this.copyContext}}\n              @label=\"discourse_ai.ai_bot.share_modal.copy\"\n            />\n            <span class=\"ai-share-modal__just-copied\">{{this.justCopiedText}}</span>\n            {{#if this.currentUser.can_share_ai_bot_conversations}}\n              <a href {{on \"click\" this.shareConversationModal}}>\n                <span class=\"ai-share-modal__share-tip\">\n                  {{i18n \"discourse_ai.ai_bot.share_modal.share_tip\"}}\n                </span>\n              </a>\n            {{/if}}\n          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"Ccsc9yzh\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"ai-share-modal\\\"]],[[\\\"@title\\\",\\\"@closeModal\\\"],[[28,[32,1],[\\\"discourse_ai.ai_bot.share_modal.title\\\"],null],[30,1]]],[[\\\"body\\\",\\\"footer\\\"],[[[[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-share-modal__preview\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[30,0,[\\\"htmlContext\\\"]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"ai-share-modal__slider\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,2],[[24,\\\"min\\\",\\\"1\\\"],[16,\\\"max\\\",[30,0,[\\\"maxContext\\\"]]],[4,[32,3],[\\\"change\\\",[30,0,[\\\"updateHtmlContext\\\"]]],null]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"range\\\",[30,0,[\\\"contextValue\\\"]]]],null],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"ai-share-modal__context\\\"],[12],[1,\\\"\\\\n            \\\"],[1,[28,[32,1],[\\\"discourse_ai.ai_bot.share_modal.context\\\"],null]],[1,\\\"\\\\n            \\\"],[1,[30,0,[\\\"contextValue\\\"]]],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[8,[32,4],[[24,0,\\\"btn-primary confirm\\\"]],[[\\\"@icon\\\",\\\"@action\\\",\\\"@label\\\"],[\\\"copy\\\",[30,0,[\\\"copyContext\\\"]],\\\"discourse_ai.ai_bot.share_modal.copy\\\"]],null],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"ai-share-modal__just-copied\\\"],[12],[1,[30,0,[\\\"justCopiedText\\\"]]],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"currentUser\\\",\\\"can_share_ai_bot_conversations\\\"]],[[[1,\\\"          \\\"],[11,3],[24,6,\\\"\\\"],[4,[32,3],[\\\"click\\\",[30,0,[\\\"shareConversationModal\\\"]]],null],[12],[1,\\\"\\\\n            \\\"],[10,1],[14,0,\\\"ai-share-modal__share-tip\\\"],[12],[1,\\\"\\\\n              \\\"],[1,[28,[32,1],[\\\"discourse_ai.ai_bot.share_modal.share_tip\\\"],null]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@closeModal\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/share-modal.js\",\n      \"scope\": () => [_dModal.default, _discourseI18n.i18n, _component2.Input, _modifier.on, _dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = ShareModal;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/spam-test-modal\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"discourse/components/d-button\", \"discourse/components/d-modal\", \"discourse/helpers/with-event-value\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-indicator-wave\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _modifier, _object, _dButton, _dModal, _withEventValue, _ajax, _ajaxError, _discourseI18n, _aiIndicatorWave, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class SpamTestModal extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"testResult\", [_tracking.tracked]))();\n    #testResult = (() => (dt7948.i(this, \"testResult\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"isLoading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #isLoading = (() => (dt7948.i(this, \"isLoading\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"postUrl\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #postUrl = (() => (dt7948.i(this, \"postUrl\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"scanLog\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #scanLog = (() => (dt7948.i(this, \"scanLog\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"isSpam\", [_tracking.tracked]))();\n    #isSpam = (() => (dt7948.i(this, \"isSpam\"), void 0))();\n    async runTest() {\n      this.isLoading = true;\n      try {\n        const response = await (0, _ajax.ajax)(`/admin/plugins/discourse-ai/ai-spam/test.json`, {\n          type: \"POST\",\n          data: {\n            post_url: this.postUrl,\n            custom_instructions: this.args.model.customInstructions,\n            llm_id: this.args.model.llmId\n          }\n        });\n        this.isSpam = response.is_spam;\n        this.testResult = response.is_spam ? (0, _discourseI18n.i18n)(\"discourse_ai.spam.test_modal.spam\") : (0, _discourseI18n.i18n)(\"discourse_ai.spam.test_modal.not_spam\");\n        this.scanLog = response.log;\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      } finally {\n        this.isLoading = false;\n      }\n    }\n    static #_6 = (() => dt7948.n(this.prototype, \"runTest\", [_object.action]))();\n    static #_7 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <DModal\n          @title={{i18n \"discourse_ai.spam.test_modal.title\"}}\n          @closeModal={{@closeModal}}\n          @bodyClass=\"spam-test-modal__body\"\n          class=\"spam-test-modal\"\n        >\n          <:body>\n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.spam.test_modal.post_url_label\"}}</label>\n              <input\n                {{on \"input\" (withEventValue (fn (mut this.postUrl)))}}\n                type=\"text\"\n                placeholder={{i18n\n                  \"discourse_ai.spam.test_modal.post_url_placeholder\"\n                }}\n              />\n            </div>\n    \n            {{#if this.testResult}}\n              <div class=\"spam-test-modal__test-result\">\n                <h3>{{i18n \"discourse_ai.spam.test_modal.result\"}}</h3>\n                <div\n                  class=\"spam-test-modal__verdict\n                    {{if this.isSpam 'is-spam' 'not-spam'}}\"\n                >\n                  {{this.testResult}}\n                </div>\n                {{#if this.scanLog}}\n                  <div class=\"spam-test-modal__log\">\n                    <h4>{{i18n \"discourse_ai.spam.test_modal.scan_log\"}}</h4>\n                    <pre>{{this.scanLog}}</pre>\n                  </div>\n                {{/if}}\n              </div>\n            {{/if}}\n          </:body>\n    \n          <:footer>\n            <DButton\n              @action={{this.runTest}}\n              @label=\"discourse_ai.spam.test_modal.run\"\n              @disabled={{this.isLoading}}\n              class=\"btn-primary spam-test-modal__run-button\"\n            >\n              <AiIndicatorWave @loading={{this.isLoading}} />\n            </DButton>\n          </:footer>\n        </DModal>\n      \n    */\n    {\n      \"id\": \"34+xPAxG\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],[[24,0,\\\"spam-test-modal\\\"]],[[\\\"@title\\\",\\\"@closeModal\\\",\\\"@bodyClass\\\"],[[28,[32,1],[\\\"discourse_ai.spam.test_modal.title\\\"],null],[30,1],\\\"spam-test-modal__body\\\"]],[[\\\"body\\\",\\\"footer\\\"],[[[[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.spam.test_modal.post_url_label\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[11,\\\"input\\\"],[16,\\\"placeholder\\\",[28,[32,1],[\\\"discourse_ai.spam.test_modal.post_url_placeholder\\\"],null]],[24,4,\\\"text\\\"],[4,[32,2],[\\\"input\\\",[28,[32,3],[[28,[32,4],[[28,[31,0],[[30,0,[\\\"postUrl\\\"]]],null]],null]],null]],null],[12],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"testResult\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"spam-test-modal__test-result\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"h3\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.spam.test_modal.result\\\"],null]],[13],[1,\\\"\\\\n            \\\"],[10,0],[15,0,[29,[\\\"spam-test-modal__verdict\\\\n                \\\",[52,[30,0,[\\\"isSpam\\\"]],\\\"is-spam\\\",\\\"not-spam\\\"]]]],[12],[1,\\\"\\\\n              \\\"],[1,[30,0,[\\\"testResult\\\"]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"scanLog\\\"]],[[[1,\\\"              \\\"],[10,0],[14,0,\\\"spam-test-modal__log\\\"],[12],[1,\\\"\\\\n                \\\"],[10,\\\"h4\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.spam.test_modal.scan_log\\\"],null]],[13],[1,\\\"\\\\n                \\\"],[10,\\\"pre\\\"],[12],[1,[30,0,[\\\"scanLog\\\"]]],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"]],[]],[[[1,\\\"\\\\n        \\\"],[8,[32,5],[[24,0,\\\"btn-primary spam-test-modal__run-button\\\"]],[[\\\"@action\\\",\\\"@label\\\",\\\"@disabled\\\"],[[30,0,[\\\"runTest\\\"]],\\\"discourse_ai.spam.test_modal.run\\\",[30,0,[\\\"isLoading\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[8,[32,6],null,[[\\\"@loading\\\"],[[30,0,[\\\"isLoading\\\"]]]],null],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n  \\\"]],[\\\"@closeModal\\\"],false,[\\\"mut\\\",\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/modal/spam-test-modal.js\",\n      \"scope\": () => [_dModal.default, _discourseI18n.i18n, _modifier.on, _withEventValue.default, _helper.fn, _dButton.default, _aiIndicatorWave.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = SpamTestModal;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/modal/thumbnail-suggestions\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"discourse/components/conditional-loading-spinner\", \"discourse/components/d-button\", \"discourse/components/d-modal\", \"discourse/components/d-modal-cancel\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse-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\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if @accuracies}}\n    <table class=\"reviewable-scores\">\n      <tbody>\n        {{#each-in @accuracies as |model acc|}}\n          <tr>\n            <td colspan=\"4\">{{i18n \"discourse_ai.reviewables.model_used\"}}</td>\n            <td colspan=\"3\">{{model}}</td>\n            <td colspan=\"4\">{{i18n \"discourse_ai.reviewables.accuracy\"}}</td>\n            <td colspan=\"3\">{{acc}}%</td>\n          </tr>\n        {{/each-in}}\n      </tbody>\n    </table>\n  {{/if}}\n  */\n  {\n    \"id\": \"ik7ZG6Vr\",\n    \"block\": \"[[[41,[30,1],[[[1,\\\"  \\\"],[10,\\\"table\\\"],[14,0,\\\"reviewable-scores\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,4],[[30,1]],null],null,[[[1,\\\"        \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[14,\\\"colspan\\\",\\\"4\\\"],[12],[1,[28,[35,7],[\\\"discourse_ai.reviewables.model_used\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[14,\\\"colspan\\\",\\\"3\\\"],[12],[1,[30,3]],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[14,\\\"colspan\\\",\\\"4\\\"],[12],[1,[28,[35,7],[\\\"discourse_ai.reviewables.accuracy\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[10,\\\"td\\\"],[14,\\\"colspan\\\",\\\"3\\\"],[12],[1,[30,2]],[1,\\\"%\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[2,3]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@accuracies\\\",\\\"acc\\\",\\\"model\\\"],false,[\\\"if\\\",\\\"table\\\",\\\"tbody\\\",\\\"each\\\",\\\"-each-in\\\",\\\"tr\\\",\\\"td\\\",\\\"i18n\\\"]]\",\n    \"moduleName\": \"discourse/plugins/discourse-ai/discourse/components/model-accuracies.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"model-accuracies\"));\n});","define(\"discourse/plugins/discourse-ai/discourse/components/post-menu/ai-cancel-streaming-button\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"discourse/components/d-button\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _dButton, _ajax, _ajaxError, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiCancelStreamingButton extends _component.default {\n    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/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-options\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/component\", \"@ember/modifier\", \"@ember/object\", \"discourse/components/d-tooltip\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/ai-llm-selector\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _component2, _modifier, _object, _dTooltip, _discourseI18n, _aiLlmSelector, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class RagOptions extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"showIndexingOptions\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showIndexingOptions = (() => (dt7948.i(this, \"showIndexingOptions\"), void 0))();\n    toggleIndexingOptions(event) {\n      this.showIndexingOptions = !this.showIndexingOptions;\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"toggleIndexingOptions\", [_object.action]))();\n    get indexingOptionsText() {\n      return this.showIndexingOptions ? (0, _discourseI18n.i18n)(\"discourse_ai.rag.options.hide_indexing_options\") : (0, _discourseI18n.i18n)(\"discourse_ai.rag.options.show_indexing_options\");\n    }\n    get visionLlms() {\n      return this.args.llms.filter(llm => llm.vision_enabled);\n    }\n    get visionLlmId() {\n      return this.args.model.rag_llm_model_id ?? \"blank\";\n    }\n    set visionLlmId(value) {\n      if (value === \"blank\") {\n        this.args.model.rag_llm_model_id = null;\n      } else {\n        this.args.model.rag_llm_model_id = value;\n      }\n    }\n    static #_3 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if @model.rag_uploads}}\n          <a\n            href=\"#\"\n            class=\"rag-options__indexing-options\"\n            {{on \"click\" this.toggleIndexingOptions}}\n          >{{this.indexingOptionsText}}</a>\n        {{/if}}\n    \n        {{#if this.showIndexingOptions}}\n          <div class=\"control-group\">\n            <label>{{i18n \"discourse_ai.rag.options.rag_chunk_tokens\"}}</label>\n            <Input\n              @type=\"number\"\n              step=\"any\"\n              lang=\"en\"\n              class=\"rag-options__rag_chunk_tokens\"\n              @value={{@model.rag_chunk_tokens}}\n            />\n            <DTooltip\n              @icon=\"circle-question\"\n              @content={{i18n \"discourse_ai.rag.options.rag_chunk_tokens_help\"}}\n            />\n          </div>\n          <div class=\"control-group\">\n            <label>{{i18n\n                \"discourse_ai.rag.options.rag_chunk_overlap_tokens\"\n              }}</label>\n            <Input\n              @type=\"number\"\n              step=\"any\"\n              lang=\"en\"\n              class=\"rag-options__rag_chunk_overlap_tokens\"\n              @value={{@model.rag_chunk_overlap_tokens}}\n            />\n            <DTooltip\n              @icon=\"circle-question\"\n              @content={{i18n\n                \"discourse_ai.rag.options.rag_chunk_overlap_tokens_help\"\n              }}\n            />\n          </div>\n          {{#if @allowImages}}\n            <div class=\"control-group\">\n              <label>{{i18n \"discourse_ai.rag.options.rag_llm_model\"}}</label>\n              <AiLlmSelector\n                class=\"ai-persona-editor__llms\"\n                @value={{this.visionLlmId}}\n                @llms={{this.visionLlms}}\n              />\n              <DTooltip\n                @icon=\"circle-question\"\n                @content={{i18n \"discourse_ai.rag.options.rag_llm_model_help\"}}\n              />\n            </div>\n          {{/if}}\n          {{yield}}\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"c7NPOKRc\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"rag_uploads\\\"]],[[[1,\\\"      \\\"],[11,3],[24,6,\\\"#\\\"],[24,0,\\\"rag-options__indexing-options\\\"],[4,[32,0],[\\\"click\\\",[30,0,[\\\"toggleIndexingOptions\\\"]]],null],[12],[1,[30,0,[\\\"indexingOptionsText\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showIndexingOptions\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.rag.options.rag_chunk_tokens\\\"],null]],[13],[1,\\\"\\\\n        \\\"],[8,[32,2],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"lang\\\",\\\"en\\\"],[24,0,\\\"rag-options__rag_chunk_tokens\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,1,[\\\"rag_chunk_tokens\\\"]]]],null],[1,\\\"\\\\n        \\\"],[8,[32,3],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,1],[\\\"discourse_ai.rag.options.rag_chunk_tokens_help\\\"],null]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.rag.options.rag_chunk_overlap_tokens\\\"],null]],[13],[1,\\\"\\\\n        \\\"],[8,[32,2],[[24,\\\"step\\\",\\\"any\\\"],[24,\\\"lang\\\",\\\"en\\\"],[24,0,\\\"rag-options__rag_chunk_overlap_tokens\\\"]],[[\\\"@type\\\",\\\"@value\\\"],[\\\"number\\\",[30,1,[\\\"rag_chunk_overlap_tokens\\\"]]]],null],[1,\\\"\\\\n        \\\"],[8,[32,3],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,1],[\\\"discourse_ai.rag.options.rag_chunk_overlap_tokens_help\\\"],null]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,2],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"control-group\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"label\\\"],[12],[1,[28,[32,1],[\\\"discourse_ai.rag.options.rag_llm_model\\\"],null]],[13],[1,\\\"\\\\n          \\\"],[8,[32,4],[[24,0,\\\"ai-persona-editor__llms\\\"]],[[\\\"@value\\\",\\\"@llms\\\"],[[30,0,[\\\"visionLlmId\\\"]],[30,0,[\\\"visionLlms\\\"]]]],null],[1,\\\"\\\\n          \\\"],[8,[32,3],null,[[\\\"@icon\\\",\\\"@content\\\"],[\\\"circle-question\\\",[28,[32,1],[\\\"discourse_ai.rag.options.rag_llm_model_help\\\"],null]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"      \\\"],[18,3,null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@model\\\",\\\"@allowImages\\\",\\\"&default\\\"],false,[\\\"if\\\",\\\"yield\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/rag-options.js\",\n      \"scope\": () => [_modifier.on, _discourseI18n.i18n, _component2.Input, _dTooltip.default, _aiLlmSelector.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = RagOptions;\n});","define(\"discourse/plugins/discourse-ai/discourse/components/rag-upload-progress\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/render-modifiers/modifiers/did-insert\", \"@ember/service\", \"discourse/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  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 \"search\" class=\"rag-uploader__search-input__search-icon\"}}\n                <Input\n                  class=\"rag-uploader__search-input__input\"\n                  placeholder={{i18n \"discourse_ai.rag.uploads.filter\"}}\n                  @value={{this.term}}\n                  {{on \"keyup\" this.debouncedSearch}}\n                />\n              </div>\n            </div>\n          {{/if}}\n    \n          <table class=\"rag-uploader__uploads-list\">\n            <tbody>\n              {{#each this.filteredUploads as |upload|}}\n                <tr>\n                  <td>\n                    <span class=\"rag-uploader__rag-file-icon\">{{icon \"file\"}}</span>\n                    {{upload.original_filename}}\n                  </td>\n                  <RagUploadProgress\n                    @upload={{upload}}\n                    @ragIndexingStatuses={{this.ragIndexingStatuses}}\n                  />\n                  <td class=\"rag-uploader__remove-file\">\n                    <DButton\n                      @icon=\"xmark\"\n                      @title=\"discourse_ai.rag.uploads.remove\"\n                      @action={{fn this.removeUpload upload}}\n                      class=\"btn-flat\"\n                    />\n                  </td>\n                </tr>\n              {{/each}}\n              {{#each this.uppyUpload.inProgressUploads as |upload|}}\n                <tr>\n                  <td><span class=\"rag-uploader__rag-file-icon\">{{icon\n                        \"file\"\n                      }}</span>\n                    {{upload.original_filename}}</td>\n                  <td class=\"rag-uploader__upload-status\">\n                    <div class=\"spinner small\"></div>\n                    <span>{{i18n \"discourse_ai.rag.uploads.uploading\"}}\n                      {{upload.uploadProgress}}%</span>\n                  </td>\n                  <td class=\"rag-uploader__remove-file\">\n                    <DButton\n                      @icon=\"xmark\"\n                      @title=\"discourse_ai.rag.uploads.remove\"\n                      @action={{fn this.cancelUploading upload}}\n                      class=\"btn-flat\"\n                    />\n                  </td>\n                </tr>\n              {{/each}}\n            </tbody>\n          </table>\n    \n          <input\n            {{didInsert this.uppyUpload.setup}}\n            class=\"hidden-upload-field\"\n            disabled={{this.uploading}}\n            type=\"file\"\n            multiple=\"multiple\"\n            accept={{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\": \"AbKyHZT6\",\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],[\\\"search\\\"],[[\\\"class\\\"],[\\\"rag-uploader__search-input__search-icon\\\"]]]],[1,\\\"\\\\n            \\\"],[8,[32,2],[[24,0,\\\"rag-uploader__search-input__input\\\"],[16,\\\"placeholder\\\",[28,[32,0],[\\\"discourse_ai.rag.uploads.filter\\\"],null]],[4,[32,3],[\\\"keyup\\\",[30,0,[\\\"debouncedSearch\\\"]]],null]],[[\\\"@value\\\"],[[30,0,[\\\"term\\\"]]]],null],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n      \\\"],[10,\\\"table\\\"],[14,0,\\\"rag-uploader__uploads-list\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"filteredUploads\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n              \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n                \\\"],[10,1],[14,0,\\\"rag-uploader__rag-file-icon\\\"],[12],[1,[28,[32,1],[\\\"file\\\"],null]],[13],[1,\\\"\\\\n                \\\"],[1,[30,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\", \"@ember/component\", \"@glimmer/component\", \"discourse/plugins/chat/discourse/models/chat-channel\", \"@ember/template-factory\"], function (_exports, _component, _component2, _chatChannel, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if this.chatChannel}}\n    <div class=\"flagged-post-header\">\n      <LinkTo\n        @route=\"chat.channel.near-message\"\n        @models={{array\n          this.chatChannel.slugifiedTitle\n          this.chatChannel.id\n          @reviewable.target_id\n        }}\n      >\n        <ChatChannelTitle @channel={{this.chatChannel}} />\n      </LinkTo>\n    </div>\n  {{/if}}\n  \n  <div class=\"post-contents-wrapper\">\n    <ReviewableCreatedBy @user={{@reviewable.target_created_by}} @tagName=\"\" />\n    <div class=\"post-contents\">\n      <ReviewablePostHeader\n        @reviewable={{@reviewable}}\n        @createdBy={{@reviewable.target_created_by}}\n        @tagName=\"\"\n      />\n  \n      <div class=\"post-body\">\n        {{html-safe (or @reviewable.payload.message_cooked @reviewable.cooked)}}\n      </div>\n  \n      {{yield}}\n  \n      <ModelAccuracies @accuracies={{@reviewable.payload.accuracies}} />\n    </div>\n  </div>\n  */\n  {\n    \"id\": \"JlFBNZVw\",\n    \"block\": \"[[[41,[30,0,[\\\"chatChannel\\\"]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"flagged-post-header\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[39,2],null,[[\\\"@route\\\",\\\"@models\\\"],[\\\"chat.channel.near-message\\\",[28,[37,3],[[30,0,[\\\"chatChannel\\\",\\\"slugifiedTitle\\\"]],[30,0,[\\\"chatChannel\\\",\\\"id\\\"]],[30,1,[\\\"target_id\\\"]]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n      \\\"],[8,[39,4],null,[[\\\"@channel\\\"],[[30,0,[\\\"chatChannel\\\"]]]],null],[1,\\\"\\\\n    \\\"]],[]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"post-contents-wrapper\\\"],[12],[1,\\\"\\\\n  \\\"],[8,[39,5],null,[[\\\"@user\\\",\\\"@tagName\\\"],[[30,1,[\\\"target_created_by\\\"]],\\\"\\\"]],null],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"post-contents\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[39,6],null,[[\\\"@reviewable\\\",\\\"@createdBy\\\",\\\"@tagName\\\"],[[30,1],[30,1,[\\\"target_created_by\\\"]],\\\"\\\"]],null],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[14,0,\\\"post-body\\\"],[12],[1,\\\"\\\\n      \\\"],[1,[28,[35,7],[[28,[37,8],[[30,1,[\\\"payload\\\",\\\"message_cooked\\\"]],[30,1,[\\\"cooked\\\"]]],null]],null]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[18,2,null],[1,\\\"\\\\n\\\\n    \\\"],[8,[39,10],null,[[\\\"@accuracies\\\"],[[30,1,[\\\"payload\\\",\\\"accuracies\\\"]]]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"@reviewable\\\",\\\"&default\\\"],false,[\\\"if\\\",\\\"div\\\",\\\"link-to\\\",\\\"array\\\",\\\"chat-channel-title\\\",\\\"reviewable-created-by\\\",\\\"reviewable-post-header\\\",\\\"html-safe\\\",\\\"or\\\",\\\"yield\\\",\\\"model-accuracies\\\"]]\",\n    \"moduleName\": \"discourse/plugins/discourse-ai/discourse/components/reviewable-ai-chat-message.hbs\",\n    \"isStrictMode\": false\n  });\n  class ReviewableAiChatMessage extends _component2.default {\n    get chatChannel() {\n      if (!this.args.reviewable.chat_channel) {\n        return;\n      }\n      return _chatChannel.default.create(this.args.reviewable.chat_channel);\n    }\n  }\n  _exports.default = ReviewableAiChatMessage;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ReviewableAiChatMessage);\n});","define(\"discourse/plugins/discourse-ai/discourse/components/reviewable-ai-post\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"flagged-post-header\">\n    <ReviewableTopicLink @reviewable={{@reviewable}} @tagName=\"\" />\n    <ReviewablePostEdits @reviewable={{@reviewable}} @tagName=\"\" />\n  </div>\n  \n  <div class=\"post-contents-wrapper\">\n    <ReviewableCreatedBy @user={{@reviewable.target_created_by}} @tagName=\"\" />\n    <div class=\"post-contents\">\n      <ReviewablePostHeader\n        @reviewable={{@reviewable}}\n        @createdBy={{@reviewable.target_created_by}}\n        @tagName=\"\"\n      />\n      <div class=\"post-body\">\n        {{#if @reviewable.blank_post}}\n          <p>{{i18n \"review.deleted_post\"}}</p>\n        {{else}}\n          {{html-safe @reviewable.cooked}}\n        {{/if}}\n      </div>\n  \n      {{yield}}\n  \n      <ModelAccuracies @accuracies={{@reviewable.payload.accuracies}} />\n    </div>\n  </div>\n  */\n  {\n    \"id\": \"Cs7KWxKV\",\n    \"block\": \"[[[10,0],[14,0,\\\"flagged-post-header\\\"],[12],[1,\\\"\\\\n  \\\"],[8,[39,1],null,[[\\\"@reviewable\\\",\\\"@tagName\\\"],[[30,1],\\\"\\\"]],null],[1,\\\"\\\\n  \\\"],[8,[39,2],null,[[\\\"@reviewable\\\",\\\"@tagName\\\"],[[30,1],\\\"\\\"]],null],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[10,0],[14,0,\\\"post-contents-wrapper\\\"],[12],[1,\\\"\\\\n  \\\"],[8,[39,3],null,[[\\\"@user\\\",\\\"@tagName\\\"],[[30,1,[\\\"target_created_by\\\"]],\\\"\\\"]],null],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"post-contents\\\"],[12],[1,\\\"\\\\n    \\\"],[8,[39,4],null,[[\\\"@reviewable\\\",\\\"@createdBy\\\",\\\"@tagName\\\"],[[30,1],[30,1,[\\\"target_created_by\\\"]],\\\"\\\"]],null],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"post-body\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"blank_post\\\"]],[[[1,\\\"        \\\"],[10,2],[12],[1,[28,[35,7],[\\\"review.deleted_post\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[1,[28,[35,8],[[30,1,[\\\"cooked\\\"]]],null]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[18,2,null],[1,\\\"\\\\n\\\\n    \\\"],[8,[39,10],null,[[\\\"@accuracies\\\"],[[30,1,[\\\"payload\\\",\\\"accuracies\\\"]]]],null],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"@reviewable\\\",\\\"&default\\\"],false,[\\\"div\\\",\\\"reviewable-topic-link\\\",\\\"reviewable-post-edits\\\",\\\"reviewable-created-by\\\",\\\"reviewable-post-header\\\",\\\"if\\\",\\\"p\\\",\\\"i18n\\\",\\\"html-safe\\\",\\\"yield\\\",\\\"model-accuracies\\\"]]\",\n    \"moduleName\": \"discourse/plugins/discourse-ai/discourse/components/reviewable-ai-post.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"reviewable-ai-post\"));\n});","define(\"discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-category-suggester\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/modifier\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/components/dropdown-menu\", \"discourse/helpers/category-badge\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse-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    async loadSuggestions() {\n      if (this.suggestions && !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      } 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      this.triggerIcon = \"discourse-sparkles\";\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"onClose\", [_object.action]))();\n    static #_11 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.showSuggestionButton}}\n          <DMenu\n            @title={{i18n \"discourse_ai.ai_helper.suggest\"}}\n            @icon={{this.triggerIcon}}\n            @identifier=\"ai-category-suggester\"\n            @onClose={{this.onClose}}\n            @triggerClass=\"btn-transparent suggestion-button suggest-category-button {{if\n              this.loading\n              'is-loading'\n            }}\"\n            @contentClass=\"ai-suggestions-menu\"\n            @onRegisterApi={{this.onRegisterApi}}\n            @modalForMobile={{true}}\n            @untriggers={{this.untriggers}}\n            {{on \"click\" this.loadSuggestions}}\n          >\n            <:content>\n              {{#unless this.loading}}\n                <DropdownMenu as |dropdown|>\n                  {{#each this.suggestions as |suggestion index|}}\n                    <dropdown.item>\n                      <DButton\n                        class=\"category-row\"\n                        data-name={{suggestion.name}}\n                        data-value={{index}}\n                        title={{suggestion.name}}\n                        @action={{fn this.applySuggestion suggestion}}\n                      >\n                        <div class=\"category-status\">\n                          {{categoryBadge suggestion}}\n                          <span class=\"topic-count\">x\n                            {{suggestion.topicCount}}</span>\n                        </div>\n                      </DButton>\n                    </dropdown.item>\n                  {{/each}}\n                </DropdownMenu>\n              {{/unless}}\n            </:content>\n          </DMenu>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"ckFiQc91\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showSuggestionButton\\\"]],[[[1,\\\"      \\\"],[8,[32,0],[[4,[32,2],[\\\"click\\\",[30,0,[\\\"loadSuggestions\\\"]]],null]],[[\\\"@title\\\",\\\"@icon\\\",\\\"@identifier\\\",\\\"@onClose\\\",\\\"@triggerClass\\\",\\\"@contentClass\\\",\\\"@onRegisterApi\\\",\\\"@modalForMobile\\\",\\\"@untriggers\\\"],[[28,[32,1],[\\\"discourse_ai.ai_helper.suggest\\\"],null],[30,0,[\\\"triggerIcon\\\"]],\\\"ai-category-suggester\\\",[30,0,[\\\"onClose\\\"]],[29,[\\\"btn-transparent suggestion-button suggest-category-button \\\",[52,[30,0,[\\\"loading\\\"]],\\\"is-loading\\\"]]],\\\"ai-suggestions-menu\\\",[30,0,[\\\"onRegisterApi\\\"]],true,[30,0,[\\\"untriggers\\\"]]]],[[\\\"content\\\"],[[[[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"loading\\\"]]],[[[1,\\\"            \\\"],[8,[32,3],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,3],[[28,[31,3],[[30,0,[\\\"suggestions\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[8,[30,1,[\\\"item\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[32,4],[[24,0,\\\"category-row\\\"],[16,\\\"data-name\\\",[30,2,[\\\"name\\\"]]],[16,\\\"data-value\\\",[30,3]],[16,\\\"title\\\",[30,2,[\\\"name\\\"]]]],[[\\\"@action\\\"],[[28,[32,5],[[30,0,[\\\"applySuggestion\\\"]],[30,2]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[10,0],[14,0,\\\"category-status\\\"],[12],[1,\\\"\\\\n                      \\\"],[1,[28,[32,6],[[30,2]],null]],[1,\\\"\\\\n                      \\\"],[10,1],[14,0,\\\"topic-count\\\"],[12],[1,\\\"x\\\\n                        \\\"],[1,[30,2,[\\\"topicCount\\\"]]],[13],[1,\\\"\\\\n                    \\\"],[13],[1,\\\"\\\\n                  \\\"]],[]]]]],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[2,3]],null],[1,\\\"            \\\"]],[1]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"dropdown\\\",\\\"suggestion\\\",\\\"index\\\"],false,[\\\"if\\\",\\\"unless\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-category-suggester.js\",\n      \"scope\": () => [_dMenu.default, _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, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"suggestions\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #suggestions = (() => (dt7948.i(this, \"suggestions\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"untriggers\", [_tracking.tracked], function () {\n      return [];\n    }))();\n    #untriggers = (() => (dt7948.i(this, \"untriggers\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"triggerIcon\", [_tracking.tracked], function () {\n      return \"discourse-sparkles\";\n    }))();\n    #triggerIcon = (() => (dt7948.i(this, \"triggerIcon\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"content\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #content = (() => (dt7948.i(this, \"content\"), void 0))();\n    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_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          this.toasts.error({\n            class: \"ai-suggestion-error\",\n            duration: 3000,\n            data: {\n              message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.suggest_errors.no_suggestions\")\n            }\n          });\n          return;\n        }\n      } catch (error) {\n        (0, _ajaxError.popupAjaxError)(error);\n      } finally {\n        this.loading = false;\n        this.triggerIcon = \"rotate\";\n      }\n      return this.suggestions;\n    }\n    static #_8 = (() => dt7948.n(this.prototype, \"loadSuggestions\", [_object.action]))();\n    #tagSelectorHasValues() {\n      const model = this.args.composer ? this.args.composer : this.args.buffered;\n      return model.get(\"tags\") && model.get(\"tags\").length > 0;\n    }\n    #removedAppliedTag(suggestion) {\n      return this.suggestions = this.suggestions.filter(s => s.id !== suggestion.id);\n    }\n    applySuggestion(suggestion) {\n      const maxTags = this.siteSettings.max_tags_per_topic;\n      const model = this.args.composer ? this.args.composer : this.args.buffered;\n      if (!model) {\n        return;\n      }\n      const tags = model.get(\"tags\");\n      if (!tags) {\n        model.set(\"tags\", [suggestion.name]);\n        this.#removedAppliedTag(suggestion);\n        return;\n      }\n      if (tags?.length >= maxTags) {\n        return this.toasts.error({\n          class: \"ai-suggestion-error\",\n          duration: 3000,\n          data: {\n            message: (0, _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 #_9 = (() => dt7948.n(this.prototype, \"applySuggestion\", [_object.action]))();\n    onRegisterApi(api) {\n      this.dMenu = api;\n    }\n    static #_10 = (() => dt7948.n(this.prototype, \"onRegisterApi\", [_object.action]))();\n    onClose() {\n      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 #_11 = (() => dt7948.n(this.prototype, \"onClose\", [_object.action]))();\n    static #_12 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.showSuggestionButton}}\n          <DMenu\n            @title={{i18n \"discourse_ai.ai_helper.suggest\"}}\n            @icon={{this.triggerIcon}}\n            @identifier=\"ai-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    async loadSuggestions() {\n      if (this.suggestions && !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      } 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      this.triggerIcon = \"discourse-sparkles\";\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              {{#unless this.loading}}\n                <DropdownMenu as |dropdown|>\n                  {{#each this.suggestions as |suggestion index|}}\n                    <dropdown.item>\n                      <DButton\n                        data-name={{suggestion}}\n                        data-value={{index}}\n                        title={{suggestion}}\n                        @action={{fn this.applySuggestion suggestion}}\n                      >\n                        {{suggestion}}\n                      </DButton>\n                    </dropdown.item>\n                  {{/each}}\n                </DropdownMenu>\n              {{/unless}}\n            </:content>\n          </DMenu>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"+B/3+brg\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showSuggestionButton\\\"]],[[[1,\\\"      \\\"],[8,[32,0],[[4,[32,2],[\\\"click\\\",[30,0,[\\\"loadSuggestions\\\"]]],null]],[[\\\"@title\\\",\\\"@icon\\\",\\\"@identifier\\\",\\\"@onClose\\\",\\\"@triggerClass\\\",\\\"@contentClass\\\",\\\"@onRegisterApi\\\",\\\"@modalForMobile\\\",\\\"@untriggers\\\"],[[28,[32,1],[\\\"discourse_ai.ai_helper.suggest\\\"],null],[30,0,[\\\"triggerIcon\\\"]],\\\"ai-title-suggester\\\",[30,0,[\\\"onClose\\\"]],[29,[\\\"btn-transparent suggestion-button suggest-titles-button \\\",[52,[30,0,[\\\"loading\\\"]],\\\"is-loading\\\"]]],\\\"ai-suggestions-menu\\\",[30,0,[\\\"onRegisterApi\\\"]],true,[30,0,[\\\"untriggers\\\"]]]],[[\\\"content\\\"],[[[[1,\\\"\\\\n\\\"],[41,[51,[30,0,[\\\"loading\\\"]]],[[[1,\\\"            \\\"],[8,[32,3],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[31,3],[[28,[31,3],[[30,0,[\\\"suggestions\\\"]]],null]],null],null,[[[1,\\\"                \\\"],[8,[30,1,[\\\"item\\\"]],null,null,[[\\\"default\\\"],[[[[1,\\\"\\\\n                  \\\"],[8,[32,4],[[16,\\\"data-name\\\",[30,2]],[16,\\\"data-value\\\",[30,3]],[16,\\\"title\\\",[30,2]]],[[\\\"@action\\\"],[[28,[32,5],[[30,0,[\\\"applySuggestion\\\"]],[30,2]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                    \\\"],[1,[30,2]],[1,\\\"\\\\n                  \\\"]],[]]]]],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[2,3]],null],[1,\\\"            \\\"]],[1]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"dropdown\\\",\\\"suggestion\\\",\\\"index\\\"],false,[\\\"if\\\",\\\"unless\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-title-suggester.js\",\n      \"scope\": () => [_dMenu.default, _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 = \"check-circle\";\n      this.selectLabel = \"discourse_ai.ai_helper.thumbnail_suggestions.selected\";\n      this.selected = true;\n      return this.args.addSelection(thumbnail);\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"toggleSelection\", [_object.action]))();\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"ai-thumbnail-suggestions__item\">\n          <DButton\n            @icon={{this.selectIcon}}\n            @label={{this.selectLabel}}\n            @action={{fn this.toggleSelection @thumbnail}}\n            class={{if this.selected \"btn-primary\"}}\n          />\n          <img\n            src={{@thumbnail.url}}\n            loading=\"lazy\"\n            width={{@thumbnail.thumbnail_width}}\n            height={{@thumbnail.thumbnail_height}}\n          />\n        </div>\n      \n    */\n    {\n      \"id\": \"BsBgpDKw\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"ai-thumbnail-suggestions__item\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,0],[[16,0,[52,[30,0,[\\\"selected\\\"]],\\\"btn-primary\\\"]]],[[\\\"@icon\\\",\\\"@label\\\",\\\"@action\\\"],[[30,0,[\\\"selectIcon\\\"]],[30,0,[\\\"selectLabel\\\"]],[28,[32,1],[[30,0,[\\\"toggleSelection\\\"]],[30,1]],null]]],null],[1,\\\"\\\\n      \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[30,1,[\\\"url\\\"]]],[14,\\\"loading\\\",\\\"lazy\\\"],[15,\\\"width\\\",[30,1,[\\\"thumbnail_width\\\"]]],[15,\\\"height\\\",[30,1,[\\\"thumbnail_height\\\"]]],[12],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[\\\"@thumbnail\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/components/thumbnail-suggestion-item.js\",\n      \"scope\": () => [_dButton.default, _helper.fn],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = ThumbnailSuggestionItem;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/admin-dashboard-tabs-after/admin-sentiment-dashbboard\", [\"exports\", \"@glimmer/component\", \"@ember/routing\", \"discourse-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(_outletArgs, helper) {\n      return helper.siteSettings.ai_sentiment_enabled;\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <li class=\"navigation-item sentiment\">\n          <LinkTo @route=\"admin.dashboardSentiment\" class=\"navigation-link\">\n            {{i18n \"discourse_ai.sentiments.dashboard.title\"}}\n          </LinkTo>\n        </li>\n      \n    */\n    {\n      \"id\": \"aCrw9598\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,\\\"li\\\"],[14,0,\\\"navigation-item sentiment\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,0],[[24,0,\\\"navigation-link\\\"]],[[\\\"@route\\\"],[\\\"admin.dashboardSentiment\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[32,1],[\\\"discourse_ai.sentiments.dashboard.title\\\"],null]],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/admin-dashboard-tabs-after/admin-sentiment-dashbboard.js\",\n      \"scope\": () => [_routing.LinkTo, _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\", \"discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-category-suggester\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _aiCategorySuggester, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiCategorySuggestion extends _component.default {\n    static shouldRender(outletArgs, helper) {\n      return (0, _showAiHelper.showComposerAiHelper)(outletArgs?.composer, helper.siteSettings, helper.currentUser, \"suggestions\");\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiCategorySuggester @composer={{@outletArgs.composer}} @topicState=\"new\" />\n      \n    */\n    {\n      \"id\": \"+cCgCEW+\",\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-category-input/ai-category-suggestion.js\",\n      \"scope\": () => [_aiCategorySuggester.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiCategorySuggestion;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/after-composer-tag-input/ai-tag-suggestion\", [\"exports\", \"@glimmer/component\", \"discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-tag-suggester\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _aiTagSuggester, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTagSuggestion extends _component.default {\n    static shouldRender(outletArgs, helper) {\n      return (0, _showAiHelper.showComposerAiHelper)(outletArgs?.composer, helper.siteSettings, helper.currentUser, \"suggestions\");\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiTagSuggester @composer={{@outletArgs.composer}} @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(outletArgs, helper) {\n      return (0, _showAiHelper.showComposerAiHelper)(outletArgs?.composer, helper.siteSettings, helper.currentUser, \"suggestions\");\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiTitleSuggester @composer={{@outletArgs.composer}} @topicState=\"new\" />\n      \n    */\n    {\n      \"id\": \"ri4Ypnvy\",\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-title-input/ai-title-suggestion.js\",\n      \"scope\": () => [_aiTitleSuggester.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiTitleSuggestion;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/after-d-editor/composer-open\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"discourse-i18n\"], function (_exports, _component, _object, _service, _discourseI18n) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class _default extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    get composerModel() {\n      return this.args?.outletArgs?.composer;\n    }\n    get renderChatWarning() {\n      return this.siteSettings.ai_bot_enable_chat_warning;\n    }\n    get aiBotClasses() {\n      if (this.composerModel?.title === (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.default_pm_prefix\")) {\n        return \"ai-bot-chat\";\n      } else {\n        return \"ai-bot-pm\";\n      }\n    }\n    static #_3 = (() => dt7948.n(this.prototype, \"aiBotClasses\", [(0, _object.computed)(\"composerModel.targetRecipients\", \"composerModel.title\")]))();\n    get isAiBotChat() {\n      if (this.composerModel && this.composerModel.targetRecipients && this.currentUser.ai_enabled_chat_bots) {\n        let recipients = this.composerModel.targetRecipients.split(\",\");\n        return this.currentUser.ai_enabled_chat_bots.any(bot => recipients.any(username => username === bot.username));\n      }\n      return false;\n    }\n    static #_4 = (() => dt7948.n(this.prototype, \"isAiBotChat\", [(0, _object.computed)(\"composerModel.targetRecipients\")]))();\n  }\n  _exports.default = _default;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/after-search-result-entry/search-result-decoration\", [\"exports\", \"discourse/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-after-save-or-cancel/ai-image-caption-loader\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"discourse/helpers/loading-spinner\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _loadingSpinner, _discourseI18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiImageCaptionLoader extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"imageCaptionPopup\", [_service.service]))();\n    #imageCaptionPopup = (() => (dt7948.i(this, \"imageCaptionPopup\"), void 0))();\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.imageCaptionPopup.showAutoCaptionLoader}}\n          <div class=\"auto-image-caption-loader\">\n            {{loadingSpinner size=\"small\"}}\n            <span>{{i18n\n                \"discourse_ai.ai_helper.image_caption.automatic_caption_loading\"\n              }}</span>\n          </div>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"/15Zu2iM\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"imageCaptionPopup\\\",\\\"showAutoCaptionLoader\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"auto-image-caption-loader\\\"],[12],[1,\\\"\\\\n        \\\"],[1,[28,[32,0],null,[[\\\"size\\\"],[\\\"small\\\"]]]],[1,\\\"\\\\n        \\\"],[10,1],[12],[1,[28,[32,1],[\\\"discourse_ai.ai_helper.image_caption.automatic_caption_loading\\\"],null]],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/composer-after-save-or-cancel/ai-image-caption-loader.js\",\n      \"scope\": () => [_loadingSpinner.default, _discourseI18n.i18n],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiImageCaptionLoader;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/composer-fields/persona-llm-selector\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/helper\", \"@ember/runloop\", \"@ember/service\", \"discourse/lib/key-value-store\", \"select-kit/components/dropdown-select-box\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _helper, _runloop, _service, _keyValueStore, _dropdownSelectBox, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  function isBotMessage(composer, currentUser) {\n    if (composer && composer.targetRecipients && currentUser.ai_enabled_chat_bots) {\n      const reciepients = composer.targetRecipients.split(\",\");\n      return currentUser.ai_enabled_chat_bots.filter(bot => bot.username).any(bot => reciepients.any(username => username === bot.username));\n    }\n    return false;\n  }\n  class BotSelector extends _component.default {\n    static shouldRender(args, container) {\n      return container?.currentUser?.ai_enabled_personas && isBotMessage(args.model, container.currentUser);\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"llm\", [_tracking.tracked]))();\n    #llm = (() => (dt7948.i(this, \"llm\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"allowLLMSelector\", [_tracking.tracked], function () {\n      return true;\n    }))();\n    #allowLLMSelector = (() => (dt7948.i(this, \"allowLLMSelector\"), void 0))();\n    STORE_NAMESPACE = \"discourse_ai_persona_selector_\";\n    LLM_STORE_NAMESPACE = \"discourse_ai_llm_selector_\";\n    preferredPersonaStore = (() => new _keyValueStore.default(this.STORE_NAMESPACE))();\n    preferredLlmStore = (() => new _keyValueStore.default(this.LLM_STORE_NAMESPACE))();\n    constructor() {\n      super(...arguments);\n      if (this.botOptions && this.botOptions.length && this.composer) {\n        let personaId = this.preferredPersonaStore.getObject(\"id\");\n        this._value = this.botOptions[0].id;\n        if (personaId) {\n          personaId = parseInt(personaId, 10);\n          if (this.botOptions.any(bot => bot.id === personaId)) {\n            this._value = personaId;\n          }\n        }\n        this.composer.metaData = {\n          ai_persona_id: this._value\n        };\n        this.setAllowLLMSelector();\n        if (this.hasLlmSelector) {\n          let llm = this.preferredLlmStore.getObject(\"id\");\n          const llmOption = this.llmOptions.find(innerLlmOption => innerLlmOption.id === llm) || this.llmOptions[0];\n          if (llmOption) {\n            llm = llmOption.id;\n          } else {\n            llm = \"\";\n          }\n          if (llm) {\n            (0, _runloop.next)(() => {\n              this.currentLlm = llm;\n            });\n          }\n        }\n        (0, _runloop.next)(() => {\n          this.resetTargetRecipients();\n        });\n      }\n    }\n    get composer() {\n      return this.args?.outletArgs?.model;\n    }\n    get hasLlmSelector() {\n      return this.currentUser.ai_enabled_chat_bots.any(bot => !bot.is_persona);\n    }\n    get botOptions() {\n      if (this.currentUser.ai_enabled_personas) {\n        let enabledPersonas = this.currentUser.ai_enabled_personas;\n        if (!this.hasLlmSelector) {\n          enabledPersonas = enabledPersonas.filter(persona => persona.username);\n        }\n        return enabledPersonas.map(persona => {\n          return {\n            id: persona.id,\n            name: persona.name,\n            description: persona.description\n          };\n        });\n      }\n    }\n    get filterable() {\n      return this.botOptions.length > 4;\n    }\n    get value() {\n      return this._value;\n    }\n    set value(newValue) {\n      this._value = newValue;\n      this.preferredPersonaStore.setObject({\n        key: \"id\",\n        value: newValue\n      });\n      this.composer.metaData = {\n        ai_persona_id: newValue\n      };\n      this.setAllowLLMSelector();\n      this.resetTargetRecipients();\n    }\n    setAllowLLMSelector() {\n      if (!this.hasLlmSelector) {\n        this.allowLLMSelector = false;\n        return;\n      }\n      const persona = this.currentUser.ai_enabled_personas.find(innerPersona => innerPersona.id === this._value);\n      this.allowLLMSelector = !persona?.force_default_llm;\n    }\n    get currentLlm() {\n      return this.llm;\n    }\n    set currentLlm(newValue) {\n      this.llm = newValue;\n      this.preferredLlmStore.setObject({\n        key: \"id\",\n        value: newValue\n      });\n      this.resetTargetRecipients();\n    }\n    resetTargetRecipients() {\n      if (this.allowLLMSelector) {\n        const botUsername = this.currentUser.ai_enabled_chat_bots.find(bot => bot.id === this.llm).username;\n        this.composer.set(\"targetRecipients\", botUsername);\n      } else {\n        const persona = this.currentUser.ai_enabled_personas.find(innerPersona => innerPersona.id === this._value);\n        this.composer.set(\"targetRecipients\", persona.username || \"\");\n      }\n    }\n    get llmOptions() {\n      const availableBots = this.currentUser.ai_enabled_chat_bots.filter(bot => !bot.is_persona).filter(Boolean);\n      return availableBots.map(bot => {\n        return {\n          id: bot.id,\n          name: bot.display_name\n        };\n      }).sort((a, b) => a.name.localeCompare(b.name));\n    }\n    static #_5 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <div class=\"persona-llm-selector\">\n          <div class=\"gpt-persona\">\n            <DropdownSelectBox\n              class=\"persona-llm-selector__persona-dropdown\"\n              @value={{this.value}}\n              @content={{this.botOptions}}\n              @options={{hash icon=\"robot\" filterable=this.filterable}}\n            />\n          </div>\n          {{#if this.allowLLMSelector}}\n            <div class=\"llm-selector\">\n              <DropdownSelectBox\n                class=\"persona-llm-selector__llm-dropdown\"\n                @value={{this.currentLlm}}\n                @content={{this.llmOptions}}\n                @options={{hash icon=\"globe\"}}\n              />\n            </div>\n          {{/if}}\n        </div>\n      \n    */\n    {\n      \"id\": \"3PhHsEc5\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"persona-llm-selector\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"gpt-persona\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[32,0],[[24,0,\\\"persona-llm-selector__persona-dropdown\\\"]],[[\\\"@value\\\",\\\"@content\\\",\\\"@options\\\"],[[30,0,[\\\"value\\\"]],[30,0,[\\\"botOptions\\\"]],[28,[32,1],null,[[\\\"icon\\\",\\\"filterable\\\"],[\\\"robot\\\",[30,0,[\\\"filterable\\\"]]]]]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"allowLLMSelector\\\"]],[[[1,\\\"        \\\"],[10,0],[14,0,\\\"llm-selector\\\"],[12],[1,\\\"\\\\n          \\\"],[8,[32,0],[[24,0,\\\"persona-llm-selector__llm-dropdown\\\"]],[[\\\"@value\\\",\\\"@content\\\",\\\"@options\\\"],[[30,0,[\\\"currentLlm\\\"]],[30,0,[\\\"llmOptions\\\"]],[28,[32,1],null,[[\\\"icon\\\"],[\\\"globe\\\"]]]]],null],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/composer-fields/persona-llm-selector.js\",\n      \"scope\": () => [_dropdownSelectBox.default, _helper.hash],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = BotSelector;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/edit-topic-category__after/ai-category-suggestion\", [\"exports\", \"@glimmer/component\", \"discourse/plugins/discourse-ai/discourse/components/suggestion-menus/ai-category-suggester\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _aiCategorySuggester, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiCategorySuggestion extends _component.default {\n    static shouldRender(outletArgs, helper) {\n      return (0, _showAiHelper.showComposerAiHelper)(outletArgs?.composer, helper.siteSettings, helper.currentUser, \"suggestions\");\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiCategorySuggester\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(outletArgs, helper) {\n      return (0, _showAiHelper.showComposerAiHelper)(outletArgs?.composer, helper.siteSettings, helper.currentUser, \"suggestions\");\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiTagSuggester @buffered={{@outletArgs.buffered}} @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(outletArgs, helper) {\n      return (0, _showAiHelper.showComposerAiHelper)(outletArgs?.composer, helper.siteSettings, helper.currentUser, \"suggestions\");\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiTitleSuggester @buffered={{@outletArgs.buffered}} @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(outletArgs, helper) {\n      return (0, _showAiHelper.showPostAIHelper)(outletArgs, helper);\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"suggestion\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #suggestion = (() => (dt7948.i(this, \"suggestion\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"_activeAIRequest\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #_activeAIRequest = (() => (dt7948.i(this, \"_activeAIRequest\"), void 0))();\n    get disabled() {\n      return this.loading || this.suggestion?.length > 0;\n    }\n    get mode() {\n      return this.currentUser?.ai_helper_prompts.find(prompt => prompt.name === \"proofread\");\n    }\n    suggest() {\n      this.loading = true;\n      this._activeAIRequest = (0, _ajax.ajax)(\"/discourse-ai/ai-helper/suggest\", {\n        method: \"POST\",\n        data: {\n          mode: this.mode.id,\n          text: this.args.outletArgs.initialValue,\n          custom_prompt: \"\"\n        }\n      });\n      this._activeAIRequest.then(_ref => {\n        let {\n          suggestions\n        } = _ref;\n        this.suggestion = suggestions[0].trim();\n        this.args.outletArgs.updateValue(this.suggestion);\n      }).catch(_ajaxError.popupAjaxError).finally(() => {\n        this.loading = false;\n      });\n      return this._activeAIRequest;\n    }\n    static #_5 = (() => dt7948.n(this.prototype, \"suggest\", [_object.action]))();\n    static #_6 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#unless @outletArgs.newValue}}\n          <DButton\n            class=\"btn-small btn-ai-suggest-edit\"\n            @action={{this.suggest}}\n            @icon=\"discourse-sparkles\"\n            @label=\"discourse_ai.ai_helper.fast_edit.suggest_button\"\n            @isLoading={{this.loading}}\n            @disabled={{this.disabled}}\n          />\n        {{/unless}}\n      \n    */\n    {\n      \"id\": \"9jHc25oQ\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[51,[30,1,[\\\"newValue\\\"]]],[[[1,\\\"      \\\"],[8,[32,0],[[24,0,\\\"btn-small btn-ai-suggest-edit\\\"]],[[\\\"@action\\\",\\\"@icon\\\",\\\"@label\\\",\\\"@isLoading\\\",\\\"@disabled\\\"],[[30,0,[\\\"suggest\\\"]],\\\"discourse-sparkles\\\",\\\"discourse_ai.ai_helper.fast_edit.suggest_button\\\",[30,0,[\\\"loading\\\"]],[30,0,[\\\"disabled\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@outletArgs\\\"],false,[\\\"unless\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/fast-edit-footer-after/ai-edit-suggestion-button.js\",\n      \"scope\": () => [_dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiEditSuggestionButton;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/full-page-search-below-search-header/ai-full-page-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 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, \"discobotDiscoveries\", [_service.service]))();\n    #discobotDiscoveries = (() => (dt7948.i(this, \"discobotDiscoveries\"), void 0))();\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \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    \n            <AiSearchDiscoveriesTooltip />\n          </h3>\n        {{/if}}\n    \n        <div class=\"full-page-discoveries\">\n          <AiSearchDiscoveries @searchTerm={{@outletArgs.search}} />\n        </div>\n      \n    */\n    {\n      \"id\": \"AdZsrjBv\",\n      \"block\": \"[[[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,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    \\\"],[10,0],[14,0,\\\"full-page-discoveries\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,3],null,[[\\\"@searchTerm\\\"],[[30,1,[\\\"search\\\"]]]],null],[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\": () => [_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/virtual-element-from-text-range\", \"truth-helpers/helpers/eq\", \"discourse/plugins/discourse-ai/discourse/components/ai-post-helper-menu\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _object, _service, _dButton, _virtualElementFromTextRange, _eq, _aiPostHelperMenu, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiPostHelperTrigger extends _component.default {\n    static shouldRender(outletArgs, helper) {\n      return (0, _showAiHelper.showPostAIHelper)(outletArgs, helper);\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"site\", [_service.service]))();\n    #site = (() => (dt7948.i(this, \"site\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"menu\", [_service.service]))();\n    #menu = (() => (dt7948.i(this, \"menu\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"menuState\", [_tracking.tracked], function () {\n      return this.MENU_STATES.triggers;\n    }))();\n    #menuState = (() => (dt7948.i(this, \"menuState\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"showMainButtons\", [_tracking.tracked], function () {\n      return true;\n    }))();\n    #showMainButtons = (() => (dt7948.i(this, \"showMainButtons\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"showAiButtons\", [_tracking.tracked], function () {\n      return true;\n    }))();\n    #showAiButtons = (() => (dt7948.i(this, \"showAiButtons\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"originalPostHTML\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #originalPostHTML = (() => (dt7948.i(this, \"originalPostHTML\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"postHighlighted\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #postHighlighted = (() => (dt7948.i(this, \"postHighlighted\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"currentMenu\", [_tracking.tracked], function () {\n      return this.menu.getByIdentifier(\"post-text-selection-toolbar\");\n    }))();\n    #currentMenu = (() => (dt7948.i(this, \"currentMenu\"), void 0))();\n    MENU_STATES = {\n      triggers: \"TRIGGERS\",\n      options: \"OPTIONS\"\n    };\n    willDestroy() {\n      super.willDestroy(...arguments);\n      this.removeHighlightedText();\n    }\n    highlightSelectedText() {\n      const postId = this.args.outletArgs.data.quoteState.postId;\n      const postElement = document.querySelector(`article[data-post-id='${postId}'] .cooked`);\n      if (!postElement) {\n        return;\n      }\n      this.originalPostHTML = postElement.innerHTML;\n      this.selectedText = this.args.outletArgs.data.quoteState.buffer;\n      const selection = window.getSelection();\n      if (!selection.rangeCount) {\n        return;\n      }\n      const range = selection.getRangeAt(0);\n      // Split start/end text nodes at their range boundary\n      if (range.startContainer.nodeType === Node.TEXT_NODE && range.startOffset > 0) {\n        const newStartNode = range.startContainer.splitText(range.startOffset);\n        range.setStart(newStartNode, 0);\n      }\n      if (range.endContainer.nodeType === Node.TEXT_NODE && range.endOffset < range.endContainer.length) {\n        range.endContainer.splitText(range.endOffset);\n      }\n      // Create a Walker to traverse text nodes within range\n      const walker = document.createTreeWalker(range.commonAncestorContainer, NodeFilter.SHOW_TEXT, {\n        acceptNode: node => range.intersectsNode(node) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT\n      });\n      const textNodes = [];\n      if (walker.currentNode?.nodeType === Node.TEXT_NODE) {\n        textNodes.push(walker.currentNode);\n      } else {\n        while (walker.nextNode()) {\n          textNodes.push(walker.currentNode);\n        }\n      }\n      for (let textNode of textNodes) {\n        const highlight = document.createElement(\"span\");\n        highlight.classList.add(\"ai-helper-highlighted-selection\");\n        // Replace textNode with highlighted clone\n        const clone = textNode.cloneNode(true);\n        highlight.appendChild(clone);\n        textNode.parentNode.replaceChild(highlight, textNode);\n      }\n      selection.removeAllRanges();\n      this.postHighlighted = true;\n    }\n    removeHighlightedText() {\n      if (!this.postHighlighted) {\n        return;\n      }\n      const postId = this.args.outletArgs.data.quoteState.postId;\n      const postElement = document.querySelector(`article[data-post-id='${postId}'] .cooked`);\n      if (!postElement) {\n        return;\n      }\n      postElement.innerHTML = this.originalPostHTML;\n      this.postHighlighted = false;\n    }\n    async showAiPostHelperMenu() {\n      this.highlightSelectedText();\n      if (this.site.mobileView) {\n        this.currentMenu.close();\n        await this.menu.show((0, _virtualElementFromTextRange.default)(), {\n          identifier: \"ai-post-helper-menu\",\n          component: _aiPostHelperMenu.default,\n          inline: true,\n          interactive: true,\n          placement: this.shouldRenderUnder ? \"bottom-start\" : \"top-start\",\n          fallbackPlacements: this.shouldRenderUnder ? [\"bottom-end\", \"top-start\"] : [\"bottom-start\"],\n          trapTab: false,\n          closeOnScroll: false,\n          modalForMobile: true,\n          data: this.menuData\n        });\n      }\n      this.showMainButtons = false;\n      this.menuState = this.MENU_STATES.options;\n    }\n    static #_9 = (() => dt7948.n(this.prototype, \"showAiPostHelperMenu\", [_object.action]))();\n    get menuData() {\n      // Streamline of data model to be passed to the component when\n      // instantiated as a DMenu or a simple component in the template\n      return {\n        ...this.args.outletArgs.data,\n        quoteState: {\n          buffer: this.args.outletArgs.data.quoteState.buffer,\n          opts: this.args.outletArgs.data.quoteState.opts,\n          postId: this.args.outletArgs.data.quoteState.postId\n        },\n        post: this.args.outletArgs.post,\n        selectedText: this.selectedText\n      };\n    }\n    static #_10 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.showMainButtons}}\n          {{yield}}\n        {{/if}}\n    \n        {{#if this.showAiButtons}}\n          <div class=\"ai-post-helper\">\n            {{#if (eq this.menuState this.MENU_STATES.triggers)}}\n              <DButton\n                @icon=\"discourse-sparkles\"\n                @title=\"discourse_ai.ai_helper.post_options_menu.title\"\n                @label=\"discourse_ai.ai_helper.post_options_menu.trigger\"\n                @action={{this.showAiPostHelperMenu}}\n                class=\"btn-flat ai-post-helper__trigger\"\n              />\n    \n            {{else if (eq this.menuState this.MENU_STATES.options)}}\n              <AiPostHelperMenu @data={{this.menuData}} />\n            {{/if}}\n          </div>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"NUAbK/gN\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showMainButtons\\\"]],[[[1,\\\"      \\\"],[18,1,null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showAiButtons\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"ai-post-helper\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[32,0],[[30,0,[\\\"menuState\\\"]],[30,0,[\\\"MENU_STATES\\\",\\\"triggers\\\"]]],null],[[[1,\\\"          \\\"],[8,[32,1],[[24,0,\\\"btn-flat ai-post-helper__trigger\\\"]],[[\\\"@icon\\\",\\\"@title\\\",\\\"@label\\\",\\\"@action\\\"],[\\\"discourse-sparkles\\\",\\\"discourse_ai.ai_helper.post_options_menu.title\\\",\\\"discourse_ai.ai_helper.post_options_menu.trigger\\\",[30,0,[\\\"showAiPostHelperMenu\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"]],[]],[[[41,[28,[32,0],[[30,0,[\\\"menuState\\\"]],[30,0,[\\\"MENU_STATES\\\",\\\"options\\\"]]],null],[[[1,\\\"          \\\"],[8,[32,2],null,[[\\\"@data\\\"],[[30,0,[\\\"menuData\\\"]]]],null],[1,\\\"\\\\n        \\\"]],[]],null]],[]]],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"&default\\\"],false,[\\\"if\\\",\\\"yield\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/post-text-buttons/ai-post-helper-trigger.js\",\n      \"scope\": () => [_eq.default, _dButton.default, _aiPostHelperMenu.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiPostHelperTrigger;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/search-menu-before-advanced-search/ai-quick-search-loader\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"discourse/helpers/loading-spinner\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _loadingSpinner, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiQuickSearchLoader extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"quickSearch\", [_service.service]))();\n    #quickSearch = (() => (dt7948.i(this, \"quickSearch\"), void 0))();\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.quickSearch.loading}}\n          <div class=\"ai-quick-search-spinner\">\n            {{loadingSpinner}}\n          </div>\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"apo2cAJf\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"quickSearch\\\",\\\"loading\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"ai-quick-search-spinner\\\"],[12],[1,\\\"\\\\n        \\\"],[1,[32,0]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/search-menu-before-advanced-search/ai-quick-search-loader.js\",\n      \"scope\": () => [_loadingSpinner.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiQuickSearchLoader;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/search-menu-initial-options/ai-quick-semantic-search\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"discourse/components/search-menu/results/assistant-item\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/search\", \"discourse-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(outletArgs, helper) {\n      return (0, _showAiHelper.showPostAIHelper)(outletArgs, helper);\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.siteSettings.ai_embeddings_enabled}}\n          <AiSplitTopicSuggester\n            @selectedPosts={{@outletArgs.selectedPosts}}\n            @mode=\"suggest_category\"\n            @updateAction={{@outletArgs.updateCategoryId}}\n          />\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"4O7HJkah\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"siteSettings\\\",\\\"ai_embeddings_enabled\\\"]],[[[1,\\\"      \\\"],[8,[32,0],null,[[\\\"@selectedPosts\\\",\\\"@mode\\\",\\\"@updateAction\\\"],[[30,1,[\\\"selectedPosts\\\"]],\\\"suggest_category\\\",[30,1,[\\\"updateCategoryId\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@outletArgs\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/split-new-topic-category-after/ai-category-suggestion.js\",\n      \"scope\": () => [_aiSplitTopicSuggester.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiCategorySuggestion;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/split-new-topic-tag-after/ai-tag-suggestion\", [\"exports\", \"@glimmer/component\", \"@ember/service\", \"discourse/plugins/discourse-ai/discourse/components/ai-split-topic-suggester\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _service, _aiSplitTopicSuggester, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTagSuggestion extends _component.default {\n    static shouldRender(outletArgs, helper) {\n      return (0, _showAiHelper.showPostAIHelper)(outletArgs, helper);\n    }\n    static #_ = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    static #_2 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if this.siteSettings.ai_embeddings_enabled}}\n          <AiSplitTopicSuggester\n            @selectedPosts={{@outletArgs.selectedPosts}}\n            @mode=\"suggest_tags\"\n            @updateAction={{@outletArgs.updateTags}}\n            @currentValue={{@outletArgs.tags}}\n          />\n        {{/if}}\n      \n    */\n    {\n      \"id\": \"jo6+zYZR\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"siteSettings\\\",\\\"ai_embeddings_enabled\\\"]],[[[1,\\\"      \\\"],[8,[32,0],null,[[\\\"@selectedPosts\\\",\\\"@mode\\\",\\\"@updateAction\\\",\\\"@currentValue\\\"],[[30,1,[\\\"selectedPosts\\\"]],\\\"suggest_tags\\\",[30,1,[\\\"updateTags\\\"]],[30,1,[\\\"tags\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"  \\\"]],[\\\"@outletArgs\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/split-new-topic-tag-after/ai-tag-suggestion.js\",\n      \"scope\": () => [_aiSplitTopicSuggester.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiTagSuggestion;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/split-new-topic-title-after/ai-title-suggestion\", [\"exports\", \"@glimmer/component\", \"discourse/plugins/discourse-ai/discourse/components/ai-split-topic-suggester\", \"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _aiSplitTopicSuggester, _showAiHelper, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTitleSuggestion extends _component.default {\n    static shouldRender(outletArgs, helper) {\n      return (0, _showAiHelper.showPostAIHelper)(outletArgs, helper);\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <AiSplitTopicSuggester\n          @selectedPosts={{@outletArgs.selectedPosts}}\n          @mode=\"suggest_title\"\n          @updateAction={{@outletArgs.updateTopicName}}\n        />\n      \n    */\n    {\n      \"id\": \"obhR2Q8M\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[8,[32,0],null,[[\\\"@selectedPosts\\\",\\\"@mode\\\",\\\"@updateAction\\\"],[[30,1,[\\\"selectedPosts\\\"]],\\\"suggest_title\\\",[30,1,[\\\"updateTopicName\\\"]]]],null],[1,\\\"\\\\n  \\\"]],[\\\"@outletArgs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/split-new-topic-title-after/ai-title-suggestion.js\",\n      \"scope\": () => [_aiSplitTopicSuggester.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiTitleSuggestion;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/topic-list-before-category/ai-topic-gist-placement\", [\"exports\", \"@glimmer/component\", \"discourse/plugins/discourse-ai/discourse/components/ai-topic-gist\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _aiTopicGist, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTopicGistPlacement extends _component.default {\n    static shouldRender(_outletArgs, helper) {\n      const settings = helper.siteSettings;\n      return settings.discourse_ai_enabled && settings.ai_summarization_enabled;\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      <AiTopicGist @topic={{@outletArgs.topic}} />\n    */\n    {\n      \"id\": \"H1L5toqM\",\n      \"block\": \"[[[8,[32,0],null,[[\\\"@topic\\\"],[[30,1,[\\\"topic\\\"]]]],null]],[\\\"@outletArgs\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/topic-list-before-category/ai-topic-gist-placement.js\",\n      \"scope\": () => [_aiTopicGist.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiTopicGistPlacement;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/topic-map-expanded-after/ai-summary-trigger\", [\"exports\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"discourse/components/d-button\", \"discourse/plugins/discourse-ai/discourse/components/modal/ai-summary-modal\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _dButton, _aiSummaryModal, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiSummaryTrigger extends _component.default {\n    static #_ = (() => dt7948.g(this.prototype, \"modal\", [_service.service]))();\n    #modal = (() => (dt7948.i(this, \"modal\"), void 0))();\n    openAiSummaryModal() {\n      this.modal.show(_aiSummaryModal.default, {\n        model: {\n          topic: this.args.outletArgs.topic,\n          postStream: this.args.outletArgs.postStream\n        }\n      });\n    }\n    static #_2 = (() => dt7948.n(this.prototype, \"openAiSummaryModal\", [_object.action]))();\n    static #_3 = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        {{#if @outletArgs.topic.summarizable}}\n          <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      \n    */\n    {\n      \"id\": \"PntbHtGv\",\n      \"block\": \"[[[1,\\\"\\\\n\\\"],[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],[1,\\\"  \\\"]],[\\\"@outletArgs\\\"],false,[\\\"if\\\"]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/topic-map-expanded-after/ai-summary-trigger.js\",\n      \"scope\": () => [_dButton.default],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AiSummaryTrigger;\n});","define(\"discourse/plugins/discourse-ai/discourse/connectors/user-preferences-nav/ai-preferences\", [\"exports\", \"@glimmer/component\", \"@ember/routing\", \"discourse/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  function showAiPreferences(user, settings) {\n    // Since we only have one AI related user setting we don't show\n    // AI preferences if these conditions aren't met.\n    // If we add more user settings in the future we can move this\n    // logic to the the specific settings and conditionally show it in the template.\n    const aiHelperEnabledFeatures = settings.ai_helper_enabled_features.split(\"|\");\n    return user?.user_allowed_ai_auto_image_captions && aiHelperEnabledFeatures.includes(\"image_caption\") && settings.ai_helper_enabled;\n  }\n  class AutoImageCaptionSetting extends _component.default {\n    static shouldRender(outletArgs, helper) {\n      return helper.siteSettings.discourse_ai_enabled && showAiPreferences(outletArgs.model, helper.siteSettings);\n    }\n    static #_ = (() => (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n    /*\n      \n        <li class=\"user-nav__preferences-ai\">\n          <LinkTo @route=\"preferences.ai\">\n            {{dIcon \"discourse-sparkles\"}}\n            <span>{{i18n \"discourse_ai.title\"}}</span>\n          </LinkTo>\n        </li>\n      \n    */\n    {\n      \"id\": \"/y5E1bgJ\",\n      \"block\": \"[[[1,\\\"\\\\n    \\\"],[10,\\\"li\\\"],[14,0,\\\"user-nav__preferences-ai\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,0],null,[[\\\"@route\\\"],[\\\"preferences.ai\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[32,1],[\\\"discourse-sparkles\\\"],null]],[1,\\\"\\\\n        \\\"],[10,1],[12],[1,[28,[32,2],[\\\"discourse_ai.title\\\"],null]],[13],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"]],[],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/discourse/connectors/user-preferences-nav/ai-preferences.js\",\n      \"scope\": () => [_routing.LinkTo, _dIcon.default, _discourseI18n.i18n],\n      \"isStrictMode\": true\n    }), this))();\n  }\n  _exports.default = AutoImageCaptionSetting;\n});","define(\"discourse/plugins/discourse-ai/discourse/controllers/admin-dashboard-sentiment\", [\"exports\", \"@ember/object\", \"admin/controllers/admin-dashboard-tab\"], function (_exports, _object, _adminDashboardTab) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AdminDashboardSentiment extends _adminDashboardTab.default {\n    get filters() {\n      return {\n        startDate: this.startDate,\n        endDate: this.endDate\n      };\n    }\n    static #_ = (() => dt7948.n(this.prototype, \"filters\", [(0, _object.computed)(\"startDate\", \"endDate\")]))();\n    get emotionFilters() {\n      return {\n        startDate: moment().subtract(2, \"month\").format(\"YYYY-MM-DD\"),\n        endDate: moment().format(\"YYYY-MM-DD\")\n      };\n    }\n    get emotions() {\n      const emotions = [\"admiration\", \"amusement\", \"anger\", \"annoyance\", \"approval\", \"caring\", \"confusion\", \"curiosity\", \"desire\", \"disappointment\", \"disapproval\", \"disgust\", \"embarrassment\", \"excitement\", \"fear\", \"gratitude\", \"grief\", \"joy\", \"love\", \"nervousness\", \"neutral\", \"optimism\", \"pride\", \"realization\", \"relief\", \"remorse\", \"sadness\", \"surprise\"];\n      return emotions;\n    }\n  }\n  _exports.default = AdminDashboardSentiment;\n});","define(\"discourse/plugins/discourse-ai/discourse/controllers/preferences-ai\", [\"exports\", \"@glimmer/tracking\", \"@ember/controller\", \"@ember/object\", \"@ember/service\", \"discourse/lib/ajax-error\", \"discourse/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: \"auto_image_caption\",\n        label: \"discourse_ai.ai_helper.image_caption.automatic_caption_setting\",\n        settingName: \"auto-image-caption\",\n        checked: this.model.user_option.auto_image_caption,\n        isIncluded: (() => {\n          const aiHelperEnabledFeatures = this.siteSettings.ai_helper_enabled_features.split(\"|\");\n          return this.model?.user_allowed_ai_auto_image_captions && aiHelperEnabledFeatures.includes(\"image_caption\") && this.siteSettings.ai_helper_enabled;\n        })()\n      }, {\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-shared-conversation-show-route-map\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _default;\n  function _default() {\n    this.route(\"discourse-ai-shared-conversation-show\", {\n      path: \"/discourse-ai/ai-bot/shared-ai-conversations/:share_key\"\n    });\n  }\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/ai-bot-helper\", [\"exports\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/models/composer\", \"discourse-i18n\", \"discourse/plugins/discourse-ai/discourse/components/modal/share-full-topic-modal\"], function (_exports, _ajax, _ajaxError, _composer, _discourseI18n, _shareFullTopicModal) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.composeAiBotMessage = composeAiBotMessage;\n  _exports.isPostFromAiBot = isPostFromAiBot;\n  _exports.showShareConversationModal = showShareConversationModal;\n  const MAX_PERSONA_USER_ID = -1200;\n  function isPostFromAiBot(post, currentUser) {\n    return post.user_id <= MAX_PERSONA_USER_ID || !!currentUser?.ai_enabled_chat_bots?.any(bot => post.username === bot.username);\n  }\n  function showShareConversationModal(modal, topicId) {\n    (0, _ajax.ajax)(`/discourse-ai/ai-bot/shared-ai-conversations/preview/${topicId}.json`).then(payload => {\n      modal.show(_shareFullTopicModal.default, {\n        model: payload\n      });\n    }).catch(_ajaxError.popupAjaxError);\n  }\n  function composeAiBotMessage(targetBot, composer) {\n    const currentUser = composer.currentUser;\n    const draftKey = \"new_private_message_ai_\" + new Date().getTime();\n    let botUsername = currentUser.ai_enabled_chat_bots.find(bot => bot.model_name === targetBot).username;\n    composer.focusComposer({\n      fallbackToNewTopic: true,\n      openOpts: {\n        action: _composer.default.PRIVATE_MESSAGE,\n        recipients: botUsername,\n        topicTitle: (0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.default_pm_prefix\"),\n        archetypeId: \"private_message\",\n        draftKey,\n        hasGroups: false,\n        warningsDisabled: true\n      }\n    });\n  }\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/ai-helper-suggestions\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.MIN_CHARACTER_COUNT = void 0;\n  const MIN_CHARACTER_COUNT = _exports.MIN_CHARACTER_COUNT = 40;\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/ai-streamer/progress-handlers\", [\"exports\", \"@ember/runloop\", \"discourse/plugins/discourse-ai/discourse/lib/ai-streamer/updaters/post-updater\"], function (_exports, _runloop, _postUpdater) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.MIN_LETTERS_PER_INTERVAL = void 0;\n  _exports.addProgressDot = addProgressDot;\n  _exports.applyProgress = applyProgress;\n  _exports.default = streamUpdaterText;\n  _exports.streamPostText = streamPostText;\n  const PROGRESS_INTERVAL = 40;\n  const GIVE_UP_INTERVAL = 60000;\n  const MIN_LETTERS_PER_INTERVAL = _exports.MIN_LETTERS_PER_INTERVAL = 6;\n  const MAX_FLUSH_TIME = 800;\n  let progressTimer = null;\n\n  /**\n   * Finds the last non-empty child element or text node of a given DOM element.\n   * Iterates backward through the element's child nodes and skips over empty text nodes.\n   *\n   * @param {HTMLElement} element - The DOM element to inspect.\n   * @returns {Node} - The last non-empty child node or null if none found.\n   */\n  function lastNonEmptyChild(element) {\n    let lastChild = element.lastChild;\n    while (lastChild && lastChild.nodeType === Node.TEXT_NODE && !/\\S/.test(lastChild.textContent)) {\n      lastChild = lastChild.previousSibling;\n    }\n    return lastChild;\n  }\n\n  /**\n   * Adds a progress dot (a span element with a \"progress-dot\" class) at the end of the\n   * last non-empty block within a given DOM element. This is used to visually indicate\n   * progress while content is being streamed.\n   *\n   * @param {HTMLElement} element - The DOM element to which the progress dot will be added.\n   */\n  function addProgressDot(element) {\n    let lastBlock = element;\n    while (true) {\n      let lastChild = lastNonEmptyChild(lastBlock);\n      if (!lastChild) {\n        break;\n      }\n      if (lastChild.nodeType === Node.ELEMENT_NODE) {\n        lastBlock = lastChild;\n      } else {\n        break;\n      }\n    }\n    const dotElement = document.createElement(\"span\");\n    dotElement.classList.add(\"progress-dot\");\n    lastBlock.appendChild(dotElement);\n  }\n\n  /**\n   * Applies progress to a streaming operation, updating the raw and cooked text,\n   * handling progress dots, and stopping streaming when complete.\n   *\n   * @param {Object} status - The current streaming status object.\n   * @param {Object} updater - An instance of a stream updater (e.g., PostUpdater or SummaryUpdater).\n   * @returns {Promise<boolean>} - Resolves to true if streaming is complete, otherwise false.\n   */\n  async function applyProgress(status, updater) {\n    status.startTime = status.startTime || Date.now();\n    if (Date.now() - status.startTime > GIVE_UP_INTERVAL) {\n      updater.streaming = false;\n      return true;\n    }\n    if (!updater.element) {\n      // wait till later\n      return false;\n    }\n    const oldRaw = updater.raw;\n    if (status.raw === oldRaw && !status.done) {\n      const hasProgressDot = updater.element.querySelector(\".progress-dot\");\n      if (hasProgressDot) {\n        return false;\n      }\n    }\n    if (status.raw !== undefined) {\n      let newRaw = status.raw;\n      if (!status.done) {\n        // rush update if we have a </details> tag (function call)\n        if (oldRaw.length === 0 && newRaw.indexOf(\"</details>\") !== -1) {\n          newRaw = status.raw;\n        } else {\n          const diff = newRaw.length - oldRaw.length;\n\n          // progress interval is 40ms\n          // by default we add 6 letters per interval\n          // but ... we want to be done in MAX_FLUSH_TIME\n          let letters = Math.floor(diff / (MAX_FLUSH_TIME / PROGRESS_INTERVAL));\n          if (letters < MIN_LETTERS_PER_INTERVAL) {\n            letters = MIN_LETTERS_PER_INTERVAL;\n          }\n          newRaw = status.raw.substring(0, oldRaw.length + letters);\n        }\n      }\n      await updater.setRaw(newRaw, status.done);\n    }\n    if (status.done) {\n      if (status.cooked) {\n        await updater.setCooked(status.cooked);\n      }\n      updater.streaming = false;\n    }\n    return status.done;\n  }\n\n  /**\n   * Handles progress updates for a post stream by applying the streaming status of\n   * each post and updating its content accordingly. This function ensures that progress\n   * is tracked and handled for multiple posts simultaneously.\n   *\n   * @param {Object} postStream - The post stream object containing the posts to be updated.\n   * @returns {Promise<boolean>} - Resolves to true if polling should continue, otherwise false.\n   */\n  async function handleProgress(postStream) {\n    const status = postStream.aiStreamingStatus;\n    let keepPolling = false;\n    const promises = Object.keys(status).map(async postId => {\n      let postStatus = status[postId];\n      const postUpdater = new _postUpdater.default(postStream, postStatus.post_id);\n      const done = await applyProgress(postStatus, postUpdater);\n      if (done) {\n        delete status[postId];\n      } else {\n        keepPolling = true;\n      }\n    });\n    await Promise.all(promises);\n    return keepPolling;\n  }\n\n  /**\n   * Ensures that progress for a post stream is being updated. It starts a progress timer\n   * if one is not already active, and continues polling for progress updates at regular intervals.\n   *\n   * @param {Object} postStream - The post stream object containing the posts to be updated.\n   */\n  function ensureProgress(postStream) {\n    if (!progressTimer) {\n      progressTimer = (0, _runloop.later)(async () => {\n        const keepPolling = await handleProgress(postStream);\n        progressTimer = null;\n        if (keepPolling) {\n          ensureProgress(postStream);\n        }\n      }, PROGRESS_INTERVAL);\n    }\n  }\n\n  /**\n   * Streams the raw text for a post by tracking its status and applying progress updates.\n   * If streaming is already in progress, this function ensures it continues to update the content.\n   *\n   * @param {Object} postStream - The post stream object containing the post to be updated.\n   * @param {Object} data - The data object containing raw and cooked content of the post.\n   */\n  function streamPostText(postStream, data) {\n    if (data.noop) {\n      return;\n    }\n    let status = postStream.aiStreamingStatus = postStream.aiStreamingStatus || {};\n    status[data.post_id] = data;\n    ensureProgress(postStream);\n  }\n\n  /**\n   * A generalized function to handle streaming of content using any specified updater class.\n   * It applies progress updates to the content (raw and cooked) based on the given data.\n   * Use this function to stream content for Glimmer components.\n   *\n   * @param {Function} updaterClass - The updater class to be used for streaming (e.g., PostUpdater, SummaryUpdater).\n   * @param {Object} data - The data object containing the content to be streamed.\n   * @param {Object} context - Additional context required for the updater (typically the context of the Ember component).\n   */\n  function streamUpdaterText(updaterClass, data, context) {\n    const updaterInstance = new updaterClass(data, context);\n    if (!progressTimer) {\n      progressTimer = (0, _runloop.later)(async () => {\n        await applyProgress(data, updaterInstance);\n        progressTimer = null;\n        if (!data.done) {\n          await applyProgress(data, updaterInstance);\n        }\n      }, PROGRESS_INTERVAL);\n    }\n  }\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/ai-streamer/updaters/post-updater\", [\"exports\", \"discourse/lib/load-morphlex\", \"discourse/lib/text\", \"discourse/plugins/discourse-ai/discourse/lib/ai-streamer/progress-handlers\", \"discourse/plugins/discourse-ai/discourse/lib/ai-streamer/updaters/stream-updater\"], function (_exports, _loadMorphlex, _text, _progressHandlers, _streamUpdater) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class PostUpdater extends _streamUpdater.default {\n    morphingOptions = {\n      beforeAttributeUpdated: (element, attributeName) => {\n        return !(element.tagName === \"DETAILS\" && attributeName === \"open\");\n      }\n    };\n    constructor(postStream, postId) {\n      super();\n      this.postStream = postStream;\n      this.postId = postId;\n      this.post = postStream.findLoadedPost(postId);\n      if (this.post) {\n        this.postElement = document.querySelector(`#post_${this.post.post_number}`);\n      }\n    }\n    get element() {\n      return this.postElement;\n    }\n    set streaming(value) {\n      if (this.postElement) {\n        if (value) {\n          this.postElement.classList.add(\"streaming\");\n        } else {\n          this.postElement.classList.remove(\"streaming\");\n        }\n      }\n    }\n    async setRaw(value, done) {\n      this.post.set(\"raw\", value);\n      const cooked = await (0, _text.cook)(value);\n\n      // resets animation\n      this.element.classList.remove(\"streaming\");\n      void this.element.offsetWidth;\n      this.element.classList.add(\"streaming\");\n      const cookedElement = document.createElement(\"div\");\n      cookedElement.innerHTML = cooked;\n      if (!done) {\n        (0, _progressHandlers.addProgressDot)(cookedElement);\n      }\n      await this.setCooked(cookedElement.innerHTML);\n    }\n    async setCooked(value) {\n      this.post.set(\"cooked\", value);\n      (await (0, _loadMorphlex.default)()).morphInner(this.postElement.querySelector(\".cooked\"), `<div>${value}</div>`, this.morphingOptions);\n    }\n    get raw() {\n      return this.post.get(\"raw\") || \"\";\n    }\n  }\n  _exports.default = PostUpdater;\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/ai-streamer/updaters/stream-updater\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /**\n   * Interface needed to implement for a streaming updater\n   */\n  class StreamUpdater {\n    set streaming(value) {\n      throw \"not implemented\";\n    }\n    async setCooked() {\n      throw \"not implemented\";\n    }\n    async setRaw() {\n      throw \"not implemented\";\n    }\n    get element() {\n      throw \"not implemented\";\n    }\n    get raw() {\n      throw \"not implemented\";\n    }\n  }\n  _exports.default = StreamUpdater;\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/ai-topic-summary\", [\"exports\", \"@glimmer/tracking\", \"discourse/lib/ajax\", \"discourse/lib/formatter\", \"discourse/lib/text\"], function (_exports, _tracking, _ajax, _formatter, _text3) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class AiTopicSummary {\n    static #_ = (() => dt7948.g(this.prototype, \"text\", [_tracking.tracked], function () {\n      return \"\";\n    }))();\n    #text = (() => (dt7948.i(this, \"text\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"summarizedOn\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #summarizedOn = (() => (dt7948.i(this, \"summarizedOn\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"summarizedBy\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #summarizedBy = (() => (dt7948.i(this, \"summarizedBy\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"newPostsSinceSummary\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #newPostsSinceSummary = (() => (dt7948.i(this, \"newPostsSinceSummary\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"outdated\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #outdated = (() => (dt7948.i(this, \"outdated\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"canRegenerate\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #canRegenerate = (() => (dt7948.i(this, \"canRegenerate\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"regenerated\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #regenerated = (() => (dt7948.i(this, \"regenerated\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"showSummaryBox\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showSummaryBox = (() => (dt7948.i(this, \"showSummaryBox\"), void 0))();\n    static #_9 = (() => dt7948.g(this.prototype, \"canCollapseSummary\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #canCollapseSummary = (() => (dt7948.i(this, \"canCollapseSummary\"), void 0))();\n    static #_10 = (() => dt7948.g(this.prototype, \"loadingSummary\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loadingSummary = (() => (dt7948.i(this, \"loadingSummary\"), void 0))();\n    processUpdate(update) {\n      const topicSummary = update.ai_topic_summary;\n      return (0, _text3.cook)(topicSummary.summarized_text).then(cooked => {\n        this.text = cooked;\n        this.loading = false;\n      }).then(() => {\n        if (update.done) {\n          this.summarizedOn = (0, _formatter.shortDateNoYear)(topicSummary.summarized_on);\n          this.summarizedBy = topicSummary.algorithm;\n          this.newPostsSinceSummary = topicSummary.new_posts_since_summary;\n          this.outdated = topicSummary.outdated;\n          this.newPostsSinceSummary = topicSummary.new_posts_since_summary;\n          this.canRegenerate = topicSummary.outdated && topicSummary.can_regenerate;\n        }\n      });\n    }\n    collapse() {\n      this.showSummaryBox = false;\n      this.canCollapseSummary = false;\n    }\n    generateSummary(currentUser, topicId) {\n      this.showSummaryBox = true;\n      if (this.text && !this.canRegenerate) {\n        this.canCollapseSummary = false;\n        return;\n      }\n      let fetchURL = `/discourse-ai/summarization/t/${topicId}?`;\n      if (currentUser) {\n        fetchURL += `stream=true`;\n        if (this.canRegenerate) {\n          fetchURL += \"&skip_age_check=true\";\n        }\n      }\n      this.loading = true;\n      return (0, _ajax.ajax)(fetchURL).then(data => {\n        if (!currentUser) {\n          data.done = true;\n          this.processUpdate(data);\n        }\n      });\n    }\n  }\n  _exports.default = AiTopicSummary;\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/copy-conversation\", [\"exports\", \"discourse/lib/ajax\", \"discourse/lib/utilities\", \"discourse-i18n\"], function (_exports, _ajax, _utilities, _discourseI18n) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _default;\n  async function _default(topic, fromPostNumber, toPostNumber) {\n    await (0, _utilities.clipboardCopyAsync)(async () => {\n      const text = await generateClipboard(topic, fromPostNumber, toPostNumber);\n      return new Blob([text], {\n        type: \"text/plain\"\n      });\n    });\n  }\n  async function generateClipboard(topic, fromPostNumber, toPostNumber) {\n    const stream = topic.get(\"postStream\");\n    let postNumbers = [];\n    // simpler to understand than Array.from\n    for (let i = fromPostNumber; i <= toPostNumber; i++) {\n      postNumbers.push(i);\n    }\n    const postIds = postNumbers.map(postNumber => {\n      return stream.findPostIdForPostNumber(postNumber);\n    });\n\n    // we need raw to construct so post stream will not help\n\n    const url = `/t/${topic.id}/posts.json`;\n    const data = {\n      post_ids: postIds,\n      include_raw: true\n    };\n    const response = await (0, _ajax.ajax)(url, {\n      data\n    });\n    let buffer = [];\n    buffer.push(\"<details class='ai-quote'>\");\n    buffer.push(\"<summary>\");\n    buffer.push(`<span>${topic.title}</span>`);\n    buffer.push(`<span title='${(0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.ai_title\")}'>${(0, _discourseI18n.i18n)(\"discourse_ai.ai_bot.ai_label\")}</span>`);\n    buffer.push(\"</summary>\");\n    response.post_stream.posts.forEach(post => {\n      buffer.push(\"\");\n      buffer.push(`**${post.username}:**`);\n      buffer.push(\"\");\n      buffer.push(post.raw);\n    });\n    buffer.push(\"</details>\");\n    const text = buffer.join(\"\\n\");\n    return text;\n  }\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/show-ai-helper\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.showComposerAiHelper = showComposerAiHelper;\n  _exports.showPostAIHelper = showPostAIHelper;\n  function showComposerAiHelper(composerModel, siteSettings, currentUser, featureType) {\n    const enableHelper = _helperEnabled(siteSettings);\n    const enableAssistant = currentUser.can_use_assistant;\n    const canShowInPM = siteSettings.ai_helper_allowed_in_pm;\n    const enableFeature = siteSettings.ai_helper_enabled_features.includes(featureType);\n    if (composerModel?.privateMessage) {\n      return enableHelper && enableAssistant && canShowInPM && enableFeature;\n    }\n    return enableHelper && enableAssistant && enableFeature;\n  }\n  function showPostAIHelper(outletArgs, helper) {\n    return _helperEnabled(helper.siteSettings) && helper.currentUser?.can_use_assistant_in_post;\n  }\n  function _helperEnabled(siteSettings) {\n    return siteSettings.discourse_ai_enabled && siteSettings.ai_helper_enabled;\n  }\n});","define(\"discourse/plugins/discourse-ai/discourse/lib/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/lib/virtual-element-from-caret-coords\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = virtualElementFromCaretCoords;\n  class VirtualElementFromCaretCoords {\n    constructor(caretCoords) {\n      let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0];\n      this.caretCoords = caretCoords;\n      this.offset = offset;\n      this.updateRect();\n    }\n    updateRect() {\n      const [xOffset, yOffset] = this.offset;\n      this.rect = {\n        top: this.caretCoords.y + yOffset,\n        right: this.caretCoords.x,\n        bottom: this.caretCoords.y + yOffset,\n        left: this.caretCoords.x + xOffset,\n        width: 0,\n        height: 0,\n        x: this.caretCoords.x,\n        y: this.caretCoords.y,\n        toJSON() {\n          return this;\n        }\n      };\n      return this.rect;\n    }\n    getBoundingClientRect() {\n      return this.rect;\n    }\n    getClientRects() {\n      return [this.rect];\n    }\n    get clientWidth() {\n      return this.rect.width;\n    }\n    get clientHeight() {\n      return this.rect.height;\n    }\n  }\n  function virtualElementFromCaretCoords(caretCoords, offset) {\n    return new VirtualElementFromCaretCoords(caretCoords, offset);\n  }\n});","define(\"discourse/plugins/discourse-ai/discourse/preferences-ai-route-map\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = {\n    resource: \"user.preferences\",\n    map() {\n      this.route(\"ai\");\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/discourse/routes/discourse-ai-shared-conversation-show\", [\"exports\", \"@ember/service\", \"discourse/routes/discourse\"], function (_exports, _service, _discourse) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class DiscourseAiSharedConversationShowRoute extends _discourse.default {\n    static #_ = (() => dt7948.g(this.prototype, \"currentUser\", [_service.service]))();\n    #currentUser = (() => (dt7948.i(this, \"currentUser\"), void 0))();\n    beforeModel(transition) {\n      if (this.currentUser?.user_option?.external_links_in_new_tab) {\n        window.open(transition.intent.url, \"_blank\");\n      } else {\n        this.redirect(transition.intent.url);\n      }\n      transition.abort();\n    }\n    redirect(url) {\n      window.location = url;\n    }\n  }\n  _exports.default = DiscourseAiSharedConversationShowRoute;\n});","define(\"discourse/plugins/discourse-ai/discourse/routes/preferences-ai\", [\"exports\", \"@ember/service\", \"discourse/lib/utilities\", \"discourse/routes/restricted-user\"], function (_exports, _service, _utilities, _restrictedUser) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class PreferencesAiRoute extends _restrictedUser.default {\n    static #_ = (() => dt7948.g(this.prototype, \"siteSettings\", [_service.service]))();\n    #siteSettings = (() => (dt7948.i(this, \"siteSettings\"), void 0))();\n    setupController(controller, user) {\n      if (!this.siteSettings.discourse_ai_enabled) {\n        return this.router.transitionTo(`discovery.${(0, _utilities.defaultHomepage)()}`);\n      }\n      controller.set(\"model\", user);\n    }\n  }\n  _exports.default = PreferencesAiRoute;\n});","define(\"discourse/plugins/discourse-ai/discourse/services/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;\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 = void 0;\n  class Gists extends _service.default {\n    static #_ = (() => dt7948.g(this.prototype, \"router\", [_service.service]))();\n    #router = (() => (dt7948.i(this, \"router\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"preference\", [_tracking.tracked], function () {\n      return localStorage.getItem(\"topicListLayout\");\n    }))();\n    #preference = (() => (dt7948.i(this, \"preference\"), void 0))();\n    get shouldShow() {\n      return this.router.currentRoute.attributes?.list?.topics?.some(topic => topic.ai_topic_gist);\n    }\n    setPreference(value) {\n      this.preference = value;\n      localStorage.setItem(\"topicListLayout\", value);\n      if (this.preference === \"table-ai\") {\n        localStorage.setItem(\"aiPreferred\", true);\n      }\n    }\n  }\n  _exports.default = Gists;\n});","define(\"discourse/plugins/discourse-ai/discourse/services/image-caption-popup\", [\"exports\", \"@glimmer/tracking\", \"@ember/service\", \"discourse/lib/uploads\"], function (_exports, _tracking, _service, _uploads) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class ImageCaptionPopup extends _service.default {\n    static #_ = (() => dt7948.g(this.prototype, \"composer\", [_service.service]))();\n    #composer = (() => (dt7948.i(this, \"composer\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"appEvents\", [_service.service]))();\n    #appEvents = (() => (dt7948.i(this, \"appEvents\"), void 0))();\n    static #_3 = (() => dt7948.g(this.prototype, \"showPopup\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showPopup = (() => (dt7948.i(this, \"showPopup\"), void 0))();\n    static #_4 = (() => dt7948.g(this.prototype, \"imageIndex\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #imageIndex = (() => (dt7948.i(this, \"imageIndex\"), void 0))();\n    static #_5 = (() => dt7948.g(this.prototype, \"imageSrc\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #imageSrc = (() => (dt7948.i(this, \"imageSrc\"), void 0))();\n    static #_6 = (() => dt7948.g(this.prototype, \"newCaption\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #newCaption = (() => (dt7948.i(this, \"newCaption\"), void 0))();\n    static #_7 = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_8 = (() => dt7948.g(this.prototype, \"popupTrigger\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #popupTrigger = (() => (dt7948.i(this, \"popupTrigger\"), void 0))();\n    static #_9 = (() => dt7948.g(this.prototype, \"showAutoCaptionLoader\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #showAutoCaptionLoader = (() => (dt7948.i(this, \"showAutoCaptionLoader\"), void 0))();\n    static #_10 = (() => dt7948.g(this.prototype, \"_request\", [_tracking.tracked], function () {\n      return null;\n    }))();\n    #_request = (() => (dt7948.i(this, \"_request\"), void 0))();\n    updateCaption() {\n      const matchingPlaceholder = this.composer.model.reply.match(_uploads.IMAGE_MARKDOWN_REGEX);\n      if (matchingPlaceholder) {\n        const match = matchingPlaceholder[this.imageIndex];\n        const replacement = match.replace(_uploads.IMAGE_MARKDOWN_REGEX, `![${this.newCaption}|$2$3$4]($5)`);\n        if (match) {\n          this.appEvents.trigger(\"composer:replace-text\", match, replacement);\n        }\n      }\n    }\n    toggleLoadingState(loading) {\n      if (loading) {\n        this.popupTrigger?.classList.add(\"disabled\");\n        return this.loading = true;\n      }\n      this.popupTrigger?.classList.remove(\"disabled\");\n      return this.loading = false;\n    }\n  }\n  _exports.default = ImageCaptionPopup;\n});","define(\"discourse/plugins/discourse-ai/discourse/services/quick-search\", [\"exports\", \"@glimmer/tracking\", \"@ember/service\"], function (_exports, _tracking, _service) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class QuickSearch extends _service.default {\n    static #_ = (() => dt7948.g(this.prototype, \"loading\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #loading = (() => (dt7948.i(this, \"loading\"), void 0))();\n    static #_2 = (() => dt7948.g(this.prototype, \"invalidTerm\", [_tracking.tracked], function () {\n      return false;\n    }))();\n    #invalidTerm = (() => (dt7948.i(this, \"invalidTerm\"), void 0))();\n  }\n  _exports.default = QuickSearch;\n});","define(\"discourse/plugins/discourse-ai/discourse/templates/admin-dashboard-sentiment\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"sentiment section\">\n    <div class=\"period-section\">\n      <div class=\"section-title\">\n        <h2 id=\"sentiment-heading\">\n          {{i18n \"discourse_ai.sentiments.dashboard.title\"}}\n        </h2>\n  \n        <DashboardPeriodSelector\n          @period={{this.period}}\n          @setPeriod={{this.setPeriod}}\n          @startDate={{this.startDate}}\n          @endDate={{this.endDate}}\n          @setCustomDateRange={{this.setCustomDateRange}}\n        />\n      </div>\n    </div>\n  \n    <div class=\"section-body\">\n      <div class=\"charts\">\n        <AdminReport\n          @dataSourceName=\"overall_sentiment\"\n          @filters={{this.filters}}\n          @showHeader={{true}}\n        />\n        <div class=\"admin-report activity-metrics\">\n          <div class=\"header\">\n            <ul class=\"breadcrumb\">\n              <li class=\"item report\">\n                <LinkTo @route=\"adminReports\" class=\"report-url\">\n                  {{i18n \"admin.dashboard.emotion.title\"}}\n                </LinkTo>\n                <DTooltip @interactive=\"true\">\n                  <:trigger>\n                    {{d-icon \"circle-question\"}}\n                  </:trigger>\n                  <:content>\n                    <span>{{i18n \"admin.dashboard.emotion.description\"}}</span>\n                  </:content>\n                </DTooltip>\n              </li>\n            </ul>\n          </div>\n          <div class=\"report-body\">\n            <div class=\"counters-list\">\n              <div class=\"counters-header\">\n                <div class=\"counters-cell\"></div>\n                <div class=\"counters-cell\">{{i18n\n                    \"admin.dashboard.reports.today\"\n                  }}</div>\n                <div class=\"counters-cell\">{{i18n\n                    \"admin.dashboard.reports.yesterday\"\n                  }}</div>\n                <div class=\"counters-cell\">{{i18n\n                    \"admin.dashboard.reports.last_7_days\"\n                  }}</div>\n                <div class=\"counters-cell\">{{i18n\n                    \"admin.dashboard.reports.last_30_days\"\n                  }}</div>\n              </div>\n              {{#each this.emotions as |metric|}}\n                <AdminReport\n                  @showHeader={{false}}\n                  @filters={{this.emotionFilters}}\n                  @forcedModes=\"emotion\"\n                  @dataSourceName=\"emotion_{{metric}}\"\n                />\n              {{/each}}\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  */\n  {\n    \"id\": \"kVhVidsY\",\n    \"block\": \"[[[10,0],[14,0,\\\"sentiment section\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"period-section\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"section-title\\\"],[12],[1,\\\"\\\\n      \\\"],[10,\\\"h2\\\"],[14,1,\\\"sentiment-heading\\\"],[12],[1,\\\"\\\\n        \\\"],[1,[28,[35,2],[\\\"discourse_ai.sentiments.dashboard.title\\\"],null]],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[8,[39,3],null,[[\\\"@period\\\",\\\"@setPeriod\\\",\\\"@startDate\\\",\\\"@endDate\\\",\\\"@setCustomDateRange\\\"],[[30,0,[\\\"period\\\"]],[30,0,[\\\"setPeriod\\\"]],[30,0,[\\\"startDate\\\"]],[30,0,[\\\"endDate\\\"]],[30,0,[\\\"setCustomDateRange\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"section-body\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"charts\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,4],null,[[\\\"@dataSourceName\\\",\\\"@filters\\\",\\\"@showHeader\\\"],[\\\"overall_sentiment\\\",[30,0,[\\\"filters\\\"]],true]],null],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"admin-report activity-metrics\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"header\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"ul\\\"],[14,0,\\\"breadcrumb\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"li\\\"],[14,0,\\\"item report\\\"],[12],[1,\\\"\\\\n              \\\"],[8,[39,7],[[24,0,\\\"report-url\\\"]],[[\\\"@route\\\"],[\\\"adminReports\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n                \\\"],[1,[28,[35,2],[\\\"admin.dashboard.emotion.title\\\"],null]],[1,\\\"\\\\n              \\\"]],[]]]]],[1,\\\"\\\\n              \\\"],[8,[39,8],null,[[\\\"@interactive\\\"],[\\\"true\\\"]],[[\\\"trigger\\\",\\\"content\\\"],[[[[1,\\\"\\\\n                  \\\"],[1,[28,[35,10],[\\\"circle-question\\\"],null]],[1,\\\"\\\\n                \\\"]],[]],[[[1,\\\"\\\\n                  \\\"],[10,1],[12],[1,[28,[35,2],[\\\"admin.dashboard.emotion.description\\\"],null]],[13],[1,\\\"\\\\n                \\\"]],[]]]]],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"report-body\\\"],[12],[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"counters-list\\\"],[12],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"counters-header\\\"],[12],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"counters-cell\\\"],[12],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"counters-cell\\\"],[12],[1,[28,[35,2],[\\\"admin.dashboard.reports.today\\\"],null]],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"counters-cell\\\"],[12],[1,[28,[35,2],[\\\"admin.dashboard.reports.yesterday\\\"],null]],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"counters-cell\\\"],[12],[1,[28,[35,2],[\\\"admin.dashboard.reports.last_7_days\\\"],null]],[13],[1,\\\"\\\\n              \\\"],[10,0],[14,0,\\\"counters-cell\\\"],[12],[1,[28,[35,2],[\\\"admin.dashboard.reports.last_30_days\\\"],null]],[13],[1,\\\"\\\\n            \\\"],[13],[1,\\\"\\\\n\\\"],[42,[28,[37,14],[[28,[37,14],[[30,0,[\\\"emotions\\\"]]],null]],null],null,[[[1,\\\"              \\\"],[8,[39,4],null,[[\\\"@showHeader\\\",\\\"@filters\\\",\\\"@forcedModes\\\",\\\"@dataSourceName\\\"],[false,[30,0,[\\\"emotionFilters\\\"]],\\\"emotion\\\",[29,[\\\"emotion_\\\",[30,1]]]]],null],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"metric\\\"],false,[\\\"div\\\",\\\"h2\\\",\\\"i18n\\\",\\\"dashboard-period-selector\\\",\\\"admin-report\\\",\\\"ul\\\",\\\"li\\\",\\\"link-to\\\",\\\"d-tooltip\\\",\\\":trigger\\\",\\\"d-icon\\\",\\\":content\\\",\\\"span\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n    \"moduleName\": \"discourse/plugins/discourse-ai/discourse/templates/admin-dashboard-sentiment.hbs\",\n    \"isStrictMode\": false\n  });\n});","define(\"discourse/plugins/discourse-ai/discourse/templates/connectors/after-d-editor/composer-open\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{#if this.isAiBotChat}}\n    {{body-class this.aiBotClasses}}\n    {{#if this.renderChatWarning}}\n      <div class=\"ai-bot-chat-warning\">{{i18n\n          \"discourse_ai.ai_bot.pm_warning\"\n        }}</div>\n    {{/if}}\n  {{/if}}\n  */\n  {\n    \"id\": \"t7q115/2\",\n    \"block\": \"[[[41,[30,0,[\\\"isAiBotChat\\\"]],[[[1,\\\"  \\\"],[1,[28,[35,1],[[30,0,[\\\"aiBotClasses\\\"]]],null]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"renderChatWarning\\\"]],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"ai-bot-chat-warning\\\"],[12],[1,[28,[35,3],[\\\"discourse_ai.ai_bot.pm_warning\\\"],null]],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null]],[],false,[\\\"if\\\",\\\"body-class\\\",\\\"div\\\",\\\"i18n\\\"]]\",\n    \"moduleName\": \"discourse/plugins/discourse-ai/discourse/templates/connectors/after-d-editor/composer-open.hbs\",\n    \"isStrictMode\": false\n  });\n});","define(\"discourse/plugins/discourse-ai/discourse/templates/preferences/ai\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"ai-user-preferences\">\n    <legend class=\"control-label\">{{i18n \"discourse_ai.title\"}}</legend>\n  \n    {{#each this.booleanSettings as |setting|}}\n      {{#if setting.isIncluded}}\n        <div class=\"control-group ai-setting\">\n          <PreferenceCheckbox\n            @labelKey={{setting.label}}\n            @checked={{get this.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 this.userSettingAttributes.length 0)}}\n      {{i18n \"discourse_ai.user_preferences.empty\"}}\n    {{/if}}\n  \n    {{#unless (eq this.userSettingAttributes.length 0)}}\n      <SaveControls\n        @id=\"user_ai_preference_save\"\n        @model={{this.model}}\n        @action={{this.save}}\n        @saved={{this.saved}}\n      />\n    {{/unless}}\n  </div>\n  */\n  {\n    \"id\": \"SNnAvZM0\",\n    \"block\": \"[[[10,0],[14,0,\\\"ai-user-preferences\\\"],[12],[1,\\\"\\\\n  \\\"],[10,\\\"legend\\\"],[14,0,\\\"control-label\\\"],[12],[1,[28,[35,2],[\\\"discourse_ai.title\\\"],null]],[13],[1,\\\"\\\\n\\\\n\\\"],[42,[28,[37,4],[[28,[37,4],[[30,0,[\\\"booleanSettings\\\"]]],null]],null],null,[[[41,[30,1,[\\\"isIncluded\\\"]],[[[1,\\\"      \\\"],[10,0],[14,0,\\\"control-group ai-setting\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,6],[[16,\\\"data-setting-name\\\",[30,1,[\\\"settingName\\\"]]],[16,0,[29,[\\\"pref-\\\",[30,1,[\\\"settingName\\\"]]]]]],[[\\\"@labelKey\\\",\\\"@checked\\\"],[[30,1,[\\\"label\\\"]],[28,[37,7],[[30,0,[\\\"model\\\",\\\"user_option\\\"]],[30,1,[\\\"key\\\"]]],null]]],null],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[1]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,8],[[30,0,[\\\"userSettingAttributes\\\",\\\"length\\\"]],0],null],[[[1,\\\"    \\\"],[1,[28,[35,2],[\\\"discourse_ai.user_preferences.empty\\\"],null]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[51,[28,[37,8],[[30,0,[\\\"userSettingAttributes\\\",\\\"length\\\"]],0],null]],[[[1,\\\"    \\\"],[8,[39,10],null,[[\\\"@id\\\",\\\"@model\\\",\\\"@action\\\",\\\"@saved\\\"],[\\\"user_ai_preference_save\\\",[30,0,[\\\"model\\\"]],[30,0,[\\\"save\\\"]],[30,0,[\\\"saved\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[13]],[\\\"setting\\\"],false,[\\\"div\\\",\\\"legend\\\",\\\"i18n\\\",\\\"each\\\",\\\"-track-array\\\",\\\"if\\\",\\\"preference-checkbox\\\",\\\"get\\\",\\\"eq\\\",\\\"unless\\\",\\\"save-controls\\\"]]\",\n    \"moduleName\": \"discourse/plugins/discourse-ai/discourse/templates/preferences/ai.hbs\",\n    \"isStrictMode\": false\n  });\n});","define(\"discourse/plugins/discourse-ai/initializers/admin-plugin-configuration-nav\", [\"exports\", \"discourse/lib/plugin-api\"], function (_exports, _pluginApi) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = {\n    name: \"discourse-ai-admin-plugin-configuration-nav\",\n    initialize(container) {\n      const currentUser = container.lookup(\"service:current-user\");\n      if (!currentUser || !currentUser.admin) {\n        return;\n      }\n      (0, _pluginApi.withPluginApi)(\"1.1.0\", api => {\n        api.addAdminPluginConfigurationNav(\"discourse-ai\", [{\n          label: \"discourse_ai.usage.short_title\",\n          route: \"adminPlugins.show.discourse-ai-usage\",\n          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/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/initializers/ai-artifacts\", [\"exports\", \"discourse/lib/plugin-api\", \"discourse/plugins/discourse-ai/discourse/components/ai-artifact\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _pluginApi, _aiArtifact, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  function initializeAiArtifacts(api) {\n    api.decorateCookedElement((element, helper) => {\n      if (!helper.renderGlimmer) {\n        return;\n      }\n      [...element.querySelectorAll(\"div.ai-artifact\")].forEach(artifactElement => {\n        const artifactId = artifactElement.getAttribute(\"data-ai-artifact-id\");\n        const artifactVersion = artifactElement.getAttribute(\"data-ai-artifact-version\");\n        helper.renderGlimmer(artifactElement, (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n        /*\n          \n                      <AiArtifact\n                        @artifactId={{artifactId}}\n                        @artifactVersion={{artifactVersion}}\n                      />\n                    \n        */\n        {\n          \"id\": \"F1alFwsw\",\n          \"block\": \"[[[1,\\\"\\\\n              \\\"],[8,[32,0],null,[[\\\"@artifactId\\\",\\\"@artifactVersion\\\"],[[32,1],[32,2]]],null],[1,\\\"\\\\n            \\\"]],[],false,[]]\",\n          \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/initializers/ai-artifacts.js\",\n          \"scope\": () => [_aiArtifact.default, artifactId, artifactVersion],\n          \"isStrictMode\": true\n        }), (0, _templateOnly.default)(undefined, undefined)));\n      });\n    }, {\n      id: \"ai-artifact\",\n      onlyStream: true\n    });\n  }\n  var _default = _exports.default = {\n    name: \"ai-artifact\",\n    initialize() {\n      (0, _pluginApi.withPluginApi)(\"0.8.7\", initializeAiArtifacts);\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/initializers/ai-bot-replies\", [\"exports\", \"discourse/lib/plugin-api\", \"discourse/widgets/render-glimmer\", \"discourse/plugins/discourse-ai/discourse/components/ai-bot-header-icon\", \"discourse/plugins/discourse-ai/discourse/components/post-menu/ai-cancel-streaming-button\", \"discourse/plugins/discourse-ai/discourse/components/post-menu/ai-debug-button\", \"discourse/plugins/discourse-ai/discourse/components/post-menu/ai-share-button\", \"discourse/plugins/discourse-ai/discourse/lib/ai-bot-helper\", \"discourse/plugins/discourse-ai/discourse/lib/ai-streamer/progress-handlers\", \"@ember/template-factory\"], function (_exports, _pluginApi, _renderGlimmer, _aiBotHeaderIcon, _aiCancelStreamingButton, _aiDebugButton, _aiShareButton, _aiBotHelper, _progressHandlers, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  let enabledChatBotIds = [];\n  let allowDebug = false;\n  function isGPTBot(user) {\n    return user && enabledChatBotIds.includes(user.id);\n  }\n  function attachHeaderIcon(api) {\n    api.headerIcons.add(\"ai\", _aiBotHeaderIcon.default);\n  }\n  function initializeAIBotReplies(api) {\n    initializePauseButton(api);\n    api.modifyClass(\"controller:topic\", {\n      pluginId: \"discourse-ai\",\n      onAIBotStreamedReply: function (data) {\n        (0, _progressHandlers.streamPostText)(this.model.postStream, data);\n      },\n      subscribe: function () {\n        this._super();\n        if (this.model.isPrivateMessage && this.model.details.allowed_users && this.model.details.allowed_users.filter(isGPTBot).length >= 1) {\n          // we attempt to recover the last message in the bus\n          // so we subscribe at -2\n          this.messageBus.subscribe(`discourse-ai/ai-bot/topic/${this.model.id}`, this.onAIBotStreamedReply.bind(this), -2);\n        }\n      },\n      unsubscribe: function () {\n        this.messageBus.unsubscribe(\"discourse-ai/ai-bot/topic/*\");\n        this._super();\n      }\n    });\n  }\n  function initializePersonaDecorator(api) {\n    let topicController = null;\n    api.decorateWidget(`poster-name:after`, dec => {\n      if (!isGPTBot(dec.attrs.user)) {\n        return;\n      }\n      // this is hacky and will need to change\n      // trouble is we need to get the model for the topic\n      // and it is not available in the decorator\n      // long term this will not be a problem once we remove widgets and\n      // have a saner structure for our model\n      topicController = topicController || api.container.lookup(\"controller:topic\");\n      return dec.widget.attach(\"persona-flair\", {\n        topicController\n      });\n    });\n    (0, _renderGlimmer.registerWidgetShim)(\"persona-flair\", \"span.persona-flair\", (0, _templateFactory.createTemplateFactory)(\n    /*\n      {{@data.topicController.model.ai_persona_name}}\n    */\n    {\n      \"id\": \"9jYzNJdM\",\n      \"block\": \"[[[1,[30,1,[\\\"topicController\\\",\\\"model\\\",\\\"ai_persona_name\\\"]]]],[\\\"@data\\\"],false,[]]\",\n      \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/initializers/ai-bot-replies.js\",\n      \"isStrictMode\": false\n    }));\n  }\n  function initializePauseButton(api) {\n    api.registerValueTransformer(\"post-menu-buttons\", _ref2 => {\n      let {\n        value: dag,\n        context: {\n          post,\n          firstButtonKey\n        }\n      } = _ref2;\n      if (isGPTBot(post.user)) {\n        dag.add(\"ai-cancel-gpt\", _aiCancelStreamingButton.default, {\n          before: firstButtonKey,\n          after: [\"ai-share\", \"ai-debug\"]\n        });\n      }\n    });\n  }\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        enabledChatBotIds = user.ai_enabled_chat_bots.map(bot => bot.id);\n        allowDebug = user.can_debug_ai_bot_conversations;\n        (0, _pluginApi.withPluginApi)(\"1.6.0\", attachHeaderIcon);\n        (0, _pluginApi.withPluginApi)(\"1.34.0\", initializeAIBotReplies);\n        (0, _pluginApi.withPluginApi)(\"1.6.0\", initializePersonaDecorator);\n        (0, _pluginApi.withPluginApi)(\"1.34.0\", api => initializeDebugButton(api, container));\n        (0, _pluginApi.withPluginApi)(\"1.34.0\", api => initializeShareButton(api, container));\n        (0, _pluginApi.withPluginApi)(\"1.22.0\", api => initializeShareTopicButton(api, container));\n      }\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/initializers/ai-chat-summarization\", [\"exports\", \"discourse/lib/api\", \"discourse/plugins/discourse-ai/discourse/components/modal/chat-modal-channel-summary\"], function (_exports, _api, _chatModalChannelSummary) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _api.apiInitializer)(\"1.34.0\", api => {\n    const siteSettings = api.container.lookup(\"service:site-settings\");\n    const currentUser = api.getCurrentUser();\n    const chatService = api.container.lookup(\"service:chat\");\n    const modal = api.container.lookup(\"service:modal\");\n    const canSummarize = currentUser && currentUser.can_summarize;\n    if (!siteSettings.chat_enabled || !chatService?.userCanChat || !canSummarize) {\n      return;\n    }\n    api.registerChatComposerButton({\n      translatedLabel: \"discourse_ai.summarization.chat.title\",\n      id: \"channel-summary\",\n      icon: \"discourse-sparkles\",\n      position: \"dropdown\",\n      action: () => {\n        modal.show(_chatModalChannelSummary.default, {\n          model: {\n            channelId: chatService.activeChannel?.id\n          }\n        });\n      }\n    });\n  });\n});","define(\"discourse/plugins/discourse-ai/initializers/ai-helper\", [\"exports\", \"discourse/lib/plugin-api\", \"discourse-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        shortcut: \"ALT+P\",\n        shortcutAction: toolbarEvent => {\n          if (toolbarEvent.getText().length === 0) {\n            const toasts = api.container.lookup(\"service:toasts\");\n            return toasts.error({\n              class: \"ai-proofread-error-toast\",\n              duration: 3000,\n              data: {\n                message: (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.no_content_error\")\n              }\n            });\n          }\n          const mode = currentUser?.ai_helper_prompts.find(p => p.name === \"proofread\").id;\n          modal.show(_diffModal.default, {\n            model: {\n              mode,\n              selectedText: selectedText(toolbarEvent),\n              toolbarEvent\n            }\n          });\n        },\n        condition: () => (0, _showAiHelper.showComposerAiHelper)(api.container.lookup(\"service:composer\").model, api.container.lookup(\"service:site-settings\"), currentUser, \"context_menu\"),\n        sendAction: event => {\n          const menu = api.container.lookup(\"service:menu\");\n          menu.show(document.querySelector(\".ai-helper-trigger\"), {\n            identifier: \"ai-composer-helper-menu\",\n            component: _aiComposerHelperMenu.default,\n            modalForMobile: true,\n            interactive: true,\n            data: {\n              toolbarEvent: event,\n              selectedText: selectedText(event)\n            }\n          });\n        }\n      });\n    });\n  }\n  var _default = _exports.default = {\n    name: \"discourse-ai-helper\",\n    initialize() {\n      (0, _pluginApi.withPluginApi)(\"1.1.0\", api => {\n        initializeAiHelperTrigger(api);\n      });\n    }\n  };\n});","define(\"discourse/plugins/discourse-ai/initializers/ai-image-caption\", [\"exports\", \"discourse/lib/ajax\", \"discourse/lib/ajax-error\", \"discourse/lib/api\", \"discourse/lib/uploads\", \"discourse-i18n\"], function (_exports, _ajax, _ajaxError, _api, _uploads, _discourseI18n) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _api.apiInitializer)(\"1.25.0\", api => {\n    const buttonAttrs = {\n      label: (0, _discourseI18n.i18n)(\"discourse_ai.ai_helper.image_caption.button_label\"),\n      icon: \"discourse-sparkles\",\n      class: \"generate-caption\"\n    };\n    const settings = api.container.lookup(\"service:site-settings\");\n    const currentUser = api.getCurrentUser();\n    if (!settings.ai_helper_enabled_features.includes(\"image_caption\") || !currentUser?.can_use_assistant) {\n      return;\n    }\n    api.addSaveableUserOptionField(\"auto_image_caption\");\n    api.addComposerImageWrapperButton(buttonAttrs.label, buttonAttrs.class, buttonAttrs.icon, event => {\n      const imageCaptionPopup = api.container.lookup(\"service:imageCaptionPopup\");\n      imageCaptionPopup.popupTrigger = event.target;\n      if (imageCaptionPopup.popupTrigger.classList.contains(\"generate-caption\")) {\n        const buttonWrapper = event.target.closest(\".button-wrapper\");\n        const imageIndex = parseInt(buttonWrapper.getAttribute(\"data-image-index\"), 10);\n        const imageSrc = event.target.closest(\".image-wrapper\").querySelector(\"img\").getAttribute(\"src\");\n        imageCaptionPopup.toggleLoadingState(true);\n        const site = api.container.lookup(\"service:site\");\n        if (!site.mobileView) {\n          imageCaptionPopup.showPopup = !imageCaptionPopup.showPopup;\n        }\n        imageCaptionPopup._request = (0, _ajax.ajax)(`/discourse-ai/ai-helper/caption_image`, {\n          method: \"POST\",\n          data: {\n            image_url: imageSrc,\n            image_url_type: \"long_url\"\n          }\n        });\n        imageCaptionPopup._request.then(_ref => {\n          let {\n            caption\n          } = _ref;\n          imageCaptionPopup.imageSrc = imageSrc;\n          imageCaptionPopup.imageIndex = imageIndex;\n          imageCaptionPopup.newCaption = caption;\n          if (site.mobileView) {\n            // Auto-saves caption on mobile view\n            imageCaptionPopup.updateCaption();\n          }\n        }).catch(_ajaxError.popupAjaxError).finally(() => {\n          imageCaptionPopup.toggleLoadingState(false);\n        });\n      }\n    });\n\n    // Checks if image is small (≤ 0.1 MP)\n    function isSmallImage(width, height) {\n      const megapixels = width * height / 1000000;\n      return megapixels <= 0.1;\n    }\n    function needsImprovedCaption(caption) {\n      return caption.length < 20 || caption.split(\" \").length === 1;\n    }\n    function getUploadUrlFromMarkdown(markdown) {\n      const regex = /\\(upload:\\/\\/([^)]+)\\)/;\n      const match = markdown.match(regex);\n      return match ? `upload://${match[1]}` : null;\n    }\n    async function fetchImageCaption(imageUrl, urlType) {\n      try {\n        const response = await (0, _ajax.ajax)(`/discourse-ai/ai-helper/caption_image`, {\n          method: \"POST\",\n          data: {\n            image_url: imageUrl,\n            image_url_type: urlType\n          }\n        });\n        return response.caption;\n      } catch (error) {\n        toasts.error({\n          class: \"ai-image-caption-error-toast\",\n          duration: 3000,\n          data: {\n            message: (0, _ajaxError.extractError)(error)\n          }\n        });\n      }\n    }\n    const autoCaptionAllowedGroups = settings?.ai_auto_image_caption_allowed_groups.split(\"|\").map(id => parseInt(id, 10));\n    const currentUserGroups = currentUser.groups.map(g => g.id);\n    if (!currentUserGroups.some(groupId => autoCaptionAllowedGroups.includes(groupId))) {\n      return;\n    }\n    const toasts = api.container.lookup(\"service:toasts\");\n    // Automatically caption uploaded images\n    api.addComposerUploadMarkdownResolver(async upload => {\n      const autoCaptionEnabled = currentUser.get(\"user_option.auto_image_caption\");\n      if (!autoCaptionEnabled || !(0, _uploads.isImage)(upload.url) || !needsImprovedCaption(upload.original_filename) || isSmallImage(upload.width, upload.height)) {\n        return (0, _uploads.getUploadMarkdown)(upload);\n      }\n      const caption = await fetchImageCaption(upload.url, \"long_url\");\n      if (!caption) {\n        return (0, _uploads.getUploadMarkdown)(upload);\n      }\n      return `![${caption}|${upload.thumbnail_width}x${upload.thumbnail_height}](${upload.short_url})`;\n    });\n\n    // Conditionally show dialog to auto image caption\n    api.composerBeforeSave(() => {\n      return new Promise((resolve, reject) => {\n        const dialog = api.container.lookup(\"service:dialog\");\n        const composer = api.container.lookup(\"service:composer\");\n        const localePrefix = \"discourse_ai.ai_helper.image_caption.automatic_caption_dialog\";\n        const autoCaptionEnabled = currentUser.get(\"user_option.auto_image_caption\");\n        const imageUploads = composer.model.reply.match(_uploads.IMAGE_MARKDOWN_REGEX);\n        const hasImageUploads = imageUploads?.length > 0;\n        if (!hasImageUploads) {\n          resolve();\n        }\n        const imagesToCaption = imageUploads.filter(image => {\n          const caption = image.substring(image.indexOf(\"[\") + 1, image.indexOf(\"]\")).split(\"|\")[0];\n          // We don't check if the image is small to show the prompt here\n          // because the width/height are the thumbnail sizes so the mp count\n          // is incorrect. It doesn't matter because the auto caption won't\n          // happen anyways if its small because that uses the actual upload dimensions\n          return needsImprovedCaption(caption);\n        });\n        const needsBetterCaptions = imagesToCaption?.length > 0;\n        const keyValueStore = api.container.lookup(\"service:key-value-store\");\n        const imageCaptionPopup = api.container.lookup(\"service:imageCaptionPopup\");\n        const autoCaptionPromptKey = \"ai-auto-caption-seen\";\n        const seenAutoCaptionPrompt = keyValueStore.getItem(autoCaptionPromptKey);\n        if (autoCaptionEnabled || !needsBetterCaptions || seenAutoCaptionPrompt) {\n          return resolve();\n        }\n        keyValueStore.setItem(autoCaptionPromptKey, true);\n        dialog.confirm({\n          message: (0, _discourseI18n.i18n)(`${localePrefix}.prompt`),\n          confirmButtonLabel: `${localePrefix}.confirm`,\n          cancelButtonLabel: `${localePrefix}.cancel`,\n          class: \"ai-image-caption-prompt-dialog\",\n          didConfirm: async () => {\n            try {\n              currentUser.set(\"user_option.auto_image_caption\", true);\n              await currentUser.save([\"auto_image_caption\"]);\n              imagesToCaption.forEach(async imageMarkdown => {\n                const uploadUrl = getUploadUrlFromMarkdown(imageMarkdown);\n                imageCaptionPopup.showAutoCaptionLoader = true;\n                const caption = await fetchImageCaption(uploadUrl, \"short_url\");\n\n                // Find and replace the caption in the reply\n                const regex = new RegExp(`(!\\\\[)[^|]+(\\\\|[^\\\\]]+\\\\]\\\\(${uploadUrl}\\\\))`);\n                const newReply = composer.model.reply.replace(regex, `$1${caption}$2`);\n                composer.model.set(\"reply\", newReply);\n                imageCaptionPopup.showAutoCaptionLoader = false;\n                resolve();\n              });\n            } catch (error) {\n              // Reject the promise if an error occurs\n              // Show an error saying unable to generate captions\n              reject(error);\n            }\n          },\n          didCancel: () => {\n            // Don't enable auto captions and continue with the save\n            resolve();\n          }\n        });\n      });\n    });\n  });\n});","define(\"discourse/plugins/discourse-ai/initializers/ai-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/initializers/ai-semantic-search\", [\"exports\", \"discourse/lib/api\"], function (_exports, _api) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = (0, _api.apiInitializer)(\"1.15.0\", api => {\n    api.modifyClass(\"component:search-result-entry\", {\n      pluginId: \"discourse-ai\",\n      classNameBindings: [\"bulkSelectEnabled\", \"post.generatedByAi:ai-result\"]\n    });\n  });\n});","define(\"discourse/plugins/discourse-ai/initializers/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)(\"1.15.0\", 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/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\": \"ub/16OCY\",\n    \"block\": \"[[[1,\\\"\\\\n  \\\"],[10,0],[14,\\\"role\\\",\\\"complementary\\\"],[14,\\\"aria-labelledby\\\",\\\"related-topics-title\\\"],[14,1,\\\"related-topics\\\"],[14,0,\\\"more-topics__list\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h3\\\"],[14,1,\\\"related-topics-title\\\"],[14,0,\\\"more-topics__list-title\\\"],[12],[1,\\\"\\\\n      \\\"],[1,[28,[32,0],[\\\"discourse-sparkles\\\"],null]],[1,[28,[32,1],[\\\"discourse_ai.related_topics.title\\\"],null]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"topics\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[32,2],null,[[\\\"@topics\\\"],[[30,1,[\\\"relatedTopics\\\"]]]],null],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@topic\\\"],false,[]]\",\n    \"moduleName\": \"/var/www/discourse/app/assets/javascripts/discourse/discourse/plugins/discourse-ai/initializers/related-topics.js\",\n    \"scope\": () => [_dIcon.default, _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)(\"1.37.2\", 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/lib/discourse-markdown/ai-tags\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.setup = setup;\n  function setup(helper) {\n    helper.allowList([\"details[class=ai-quote]\"]);\n    helper.allowList([\"div[class=ai-artifact]\", \"div[data-ai-artifact-id]\", \"div[data-ai-artifact-version]\"]);\n  }\n});"],"mappings":"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","ignoreList":[]}