diff --git a/app/serializers/localized_ai_persona_serializer.rb b/app/serializers/localized_ai_persona_serializer.rb index 90e14c0d..b2e75fd4 100644 --- a/app/serializers/localized_ai_persona_serializer.rb +++ b/app/serializers/localized_ai_persona_serializer.rb @@ -56,8 +56,6 @@ class LocalizedAiPersonaSerializer < ApplicationSerializer end def features - object.features.map do |feature| - { id: feature.module_id, module_name: feature.module_name, name: feature.name } - end + object.features.map { |feature| { id: feature.module_id, name: feature.module_name } } end end diff --git a/assets/javascripts/discourse/components/ai-persona-list-editor.gjs b/assets/javascripts/discourse/components/ai-persona-list-editor.gjs index 77b8eb21..ee201de5 100644 --- a/assets/javascripts/discourse/components/ai-persona-list-editor.gjs +++ b/assets/javascripts/discourse/components/ai-persona-list-editor.gjs @@ -4,6 +4,7 @@ import { concat, fn, hash } from "@ember/helper"; import { action } from "@ember/object"; import { LinkTo } from "@ember/routing"; import { service } from "@ember/service"; +import { gt } from "truth-helpers"; import DBreadcrumbsItem from "discourse/components/d-breadcrumbs-item"; import DButton from "discourse/components/d-button"; import DPageSubheader from "discourse/components/d-page-subheader"; @@ -59,7 +60,7 @@ export default class AiPersonaListEditor extends Component { if (this.featureFilter !== "all") { personas = personas.filter((persona) => (persona.features || []).some( - (feature) => feature.module_name === this.featureFilter + (feature) => feature.name === this.featureFilter ) ); } @@ -76,7 +77,11 @@ export default class AiPersonaListEditor extends Component { feature.name?.toLowerCase().includes(term) ); - return textMatches || featureMatches; + const llmMatches = persona.default_llm?.display_name + ?.toLowerCase() + .includes(term); + + return textMatches || featureMatches || llmMatches; }); } @@ -87,8 +92,8 @@ export default class AiPersonaListEditor extends Component { let features = []; (this.args.personas || []).forEach((persona) => { (persona.features || []).forEach((feature) => { - if (feature?.module_name && !features.includes(feature.module_name)) { - features.push(feature.module_name); + if (feature?.name && !features.includes(feature.name)) { + features.push(feature.name); } }); }); @@ -98,9 +103,9 @@ export default class AiPersonaListEditor extends Component { value: "all", label: i18n("discourse_ai.ai_persona.filters.all_features"), }, - ...features.map((module_name) => ({ - value: module_name, - label: i18n(`discourse_ai.features.${module_name}.name`), + ...features.map((name) => ({ + value: name, + label: i18n(`discourse_ai.features.${name}.name`), })), ]; } @@ -248,6 +253,7 @@ export default class AiPersonaListEditor extends Component { {{i18n "discourse_ai.ai_persona.name"}} + {{i18n "discourse_ai.llms.short_title"}} {{i18n "discourse_ai.features.short_title"}} @@ -274,22 +280,43 @@ export default class AiPersonaListEditor extends Component { - - {{#each persona.features as |feature|}} + + {{#if persona.default_llm}} + + {{i18n "discourse_ai.ai_persona.llms_list"}} + - {{/each}} + {{/if}} + + + {{#if persona.features.length}} + + {{i18n + "discourse_ai.ai_persona.features_list" + count=persona.features.length + }} + + {{#each persona.features as |feature index|}} + + {{#if (gt index 0)}}, {{/if}} + + + {{/each}} + {{/if}}