WIP rename persona -> agent

This commit is contained in:
Sam Saffron 2025-05-29 15:17:34 +10:00
parent ad5c48d9ae
commit 4ba091aa8b
No known key found for this signature in database
GPG Key ID: B9606168D2FFD9F5
289 changed files with 2786 additions and 2372 deletions

View File

@ -0,0 +1,19 @@
import DiscourseRoute from "discourse/routes/discourse";
export default class AdminPluginsShowDiscourseAiAgentsEdit extends DiscourseRoute {
async model(params) {
const allAgents = this.modelFor(
"adminPlugins.show.discourse-ai-agents"
);
const id = parseInt(params.id, 10);
return allAgents.findBy("id", id);
}
setupController(controller, model) {
super.setupController(controller, model);
controller.set(
"allAgents",
this.modelFor("adminPlugins.show.discourse-ai-agents")
);
}
}

View File

@ -1,16 +1,16 @@
import { AUTO_GROUPS } from "discourse/lib/constants";
import DiscourseRoute from "discourse/routes/discourse";
export default class AdminPluginsShowDiscourseAiPersonasNew extends DiscourseRoute {
export default class AdminPluginsShowDiscourseAiAgentsNew extends DiscourseRoute {
async model() {
const record = this.store.createRecord("ai-persona");
const record = this.store.createRecord("ai-agent");
record.set("allowed_group_ids", [AUTO_GROUPS.trust_level_0.id]);
record.set("rag_uploads", []);
// these match the defaults on the table
record.set("rag_chunk_tokens", 374);
record.set("rag_chunk_overlap_tokens", 10);
record.set("rag_conversation_chunks", 10);
record.set("allow_personal_messages", true);
record.set("allow_agentl_messages", true);
record.set("tool_details", false);
return record;
}
@ -18,8 +18,8 @@ export default class AdminPluginsShowDiscourseAiPersonasNew extends DiscourseRou
setupController(controller, model) {
super.setupController(controller, model);
controller.set(
"allPersonas",
this.modelFor("adminPlugins.show.discourse-ai-personas")
"allAgents",
this.modelFor("adminPlugins.show.discourse-ai-agents")
);
}
}

View File

@ -0,0 +1,7 @@
import DiscourseRoute from "discourse/routes/discourse";
export default class DiscourseAiAiAgentsRoute extends DiscourseRoute {
model() {
return this.store.findAll("ai-agent");
}
}

View File

@ -1,19 +0,0 @@
import DiscourseRoute from "discourse/routes/discourse";
export default class AdminPluginsShowDiscourseAiPersonasEdit extends DiscourseRoute {
async model(params) {
const allPersonas = this.modelFor(
"adminPlugins.show.discourse-ai-personas"
);
const id = parseInt(params.id, 10);
return allPersonas.findBy("id", id);
}
setupController(controller, model) {
super.setupController(controller, model);
controller.set(
"allPersonas",
this.modelFor("adminPlugins.show.discourse-ai-personas")
);
}
}

View File

@ -1,7 +0,0 @@
import DiscourseRoute from "discourse/routes/discourse";
export default class DiscourseAiAiPersonasRoute extends DiscourseRoute {
model() {
return this.store.findAll("ai-persona");
}
}

View File

@ -0,0 +1,4 @@
<AiAgentListEditor
@agents={{this.allAgents}}
@currentAgent={{this.model}}
/>

View File

@ -0,0 +1 @@
<AiAgentListEditor @agents={{this.model}} />

View File

@ -0,0 +1,4 @@
<AiAgentListEditor
@agents={{this.allAgents}}
@currentAgent={{this.model}}
/>

View File

@ -15,7 +15,7 @@ export default RouteTemplate(
const prefix = "discourse_ai.features.list.header";
return [
i18n(`${prefix}.name`),
i18n(`${prefix}.persona`),
i18n(`${prefix}.agent`),
i18n(`${prefix}.groups`),
"",
];
@ -75,21 +75,21 @@ export default RouteTemplate(
</span>
</td>
<td
class="d-admin-row__detail ai-feature-list__row-item ai-feature-list__persona"
class="d-admin-row__detail ai-feature-list__row-item ai-feature-list__agent"
>
<DButton
class="btn-flat btn-small ai-feature-list__row-item-persona"
@translatedLabel={{feature.persona.name}}
@route="adminPlugins.show.discourse-ai-personas.edit"
@routeModels={{feature.persona.id}}
class="btn-flat btn-small ai-feature-list__row-item-agent"
@translatedLabel={{feature.agent.name}}
@route="adminPlugins.show.discourse-ai-agents.edit"
@routeModels={{feature.agent.id}}
/>
</td>
<td
class="d-admin-row__detail ai-feature-list__row-item ai-feature-list__groups"
>
{{#if (gt feature.persona.allowed_groups.length 0)}}
{{#if (gt feature.agent.allowed_groups.length 0)}}
<ul class="ai-feature-list__row-item-groups">
{{#each feature.persona.allowed_groups as |group|}}
{{#each feature.agent.allowed_groups as |group|}}
<li>{{group.name}}</li>
{{/each}}
</ul>

View File

@ -1,4 +0,0 @@
<AiPersonaListEditor
@personas={{this.allPersonas}}
@currentPersona={{this.model}}
/>

View File

@ -1 +0,0 @@
<AiPersonaListEditor @personas={{this.model}} />

View File

@ -1,4 +0,0 @@
<AiPersonaListEditor
@personas={{this.allPersonas}}
@currentPersona={{this.model}}
/>

View File

@ -1,4 +1,4 @@
<section class="ai-persona-tool-editor__current admin-detail pull-left">
<section class="ai-agent-tool-editor__current admin-detail pull-left">
<AiToolEditor
@tools={{this.allTools}}
@model={{this.model}}

View File

@ -1,4 +1,4 @@
<section class="ai-persona-tool-editor__current admin-detail pull-left">
<section class="ai-agent-tool-editor__current admin-detail pull-left">
<AiToolEditor
@tools={{this.allTools}}
@model={{this.model}}

View File

@ -2,20 +2,20 @@
module DiscourseAi
module Admin
class AiPersonasController < ::Admin::AdminController
class AiAgentsController < ::Admin::AdminController
requires_plugin ::DiscourseAi::PLUGIN_NAME
before_action :find_ai_persona, only: %i[edit update destroy create_user]
before_action :find_ai_agent, only: %i[edit update destroy create_user]
def index
ai_personas =
AiPersona.ordered.map do |persona|
ai_agents =
AiAgent.ordered.map do |agent|
# we use a special serializer here cause names and descriptions are
# localized for system personas
LocalizedAiPersonaSerializer.new(persona, root: false)
# localized for system agents
LocalizedAiAgentSerializer.new(agent, root: false)
end
tools =
DiscourseAi::Personas::Persona.all_available_tools.map do |tool|
DiscourseAi::Agents::Agent.all_available_tools.map do |tool|
AiToolSerializer.new(tool, root: false)
end
AiTool
@ -36,7 +36,7 @@ module DiscourseAi
allowed_seeded_llm_ids: SiteSetting.ai_bot_allowed_seeded_models_map,
)
render json: {
ai_personas: ai_personas,
ai_agents: ai_agents,
meta: {
tools: tools,
llms: llms,
@ -51,55 +51,55 @@ module DiscourseAi
end
def edit
render json: LocalizedAiPersonaSerializer.new(@ai_persona)
render json: LocalizedAiAgentSerializer.new(@ai_agent)
end
def create
ai_persona = AiPersona.new(ai_persona_params.except(:rag_uploads))
if ai_persona.save
RagDocumentFragment.link_target_and_uploads(ai_persona, attached_upload_ids)
ai_agent = AiAgent.new(ai_agent_params.except(:rag_uploads))
if ai_agent.save
RagDocumentFragment.link_target_and_uploads(ai_agent, attached_upload_ids)
render json: {
ai_persona: LocalizedAiPersonaSerializer.new(ai_persona, root: false),
ai_agent: LocalizedAiAgentSerializer.new(ai_agent, root: false),
},
status: :created
else
render_json_error ai_persona
render_json_error ai_agent
end
end
def create_user
user = @ai_persona.create_user!
user = @ai_agent.create_user!
render json: BasicUserSerializer.new(user, root: "user")
end
def update
if @ai_persona.update(ai_persona_params.except(:rag_uploads))
RagDocumentFragment.update_target_uploads(@ai_persona, attached_upload_ids)
if @ai_agent.update(ai_agent_params.except(:rag_uploads))
RagDocumentFragment.update_target_uploads(@ai_agent, attached_upload_ids)
render json: LocalizedAiPersonaSerializer.new(@ai_persona, root: false)
render json: LocalizedAiAgentSerializer.new(@ai_agent, root: false)
else
render_json_error @ai_persona
render_json_error @ai_agent
end
end
def destroy
if @ai_persona.destroy
if @ai_agent.destroy
head :no_content
else
render_json_error @ai_persona
render_json_error @ai_agent
end
end
def stream_reply
persona =
AiPersona.find_by(name: params[:persona_name]) ||
AiPersona.find_by(id: params[:persona_id])
return render_json_error(I18n.t("discourse_ai.errors.persona_not_found")) if persona.nil?
agent =
AiAgent.find_by(name: params[:agent_name]) ||
AiAgent.find_by(id: params[:agent_id])
return render_json_error(I18n.t("discourse_ai.errors.agent_not_found")) if agent.nil?
return render_json_error(I18n.t("discourse_ai.errors.persona_disabled")) if !persona.enabled
return render_json_error(I18n.t("discourse_ai.errors.agent_disabled")) if !agent.enabled
if persona.default_llm.blank?
if agent.default_llm.blank?
return render_json_error(I18n.t("discourse_ai.errors.no_default_llm"))
end
@ -107,8 +107,8 @@ module DiscourseAi
return render_json_error(I18n.t("discourse_ai.errors.no_query_specified"))
end
if !persona.user_id
return render_json_error(I18n.t("discourse_ai.errors.no_user_for_persona"))
if !agent.user_id
return render_json_error(I18n.t("discourse_ai.errors.no_user_for_agent"))
end
if !params[:username] && !params[:user_unique_id]
@ -142,7 +142,7 @@ module DiscourseAi
DiscourseAi::AiBot::ResponseHttpStreamer.queue_streamed_reply(
io: io,
persona: persona,
agent: agent,
user: user,
topic: topic,
query: params[:query].to_s,
@ -178,17 +178,17 @@ module DiscourseAi
end
end
def find_ai_persona
@ai_persona = AiPersona.find(params[:id])
def find_ai_agent
@ai_agent = AiAgent.find(params[:id])
end
def attached_upload_ids
ai_persona_params[:rag_uploads].to_a.map { |h| h[:id] }
ai_agent_params[:rag_uploads].to_a.map { |h| h[:id] }
end
def ai_persona_params
def ai_agent_params
permitted =
params.require(:ai_persona).permit(
params.require(:ai_agent).permit(
:name,
:description,
:enabled,
@ -209,7 +209,7 @@ module DiscourseAi
:allow_chat_channel_mentions,
:allow_chat_direct_messages,
:allow_topic_mentions,
:allow_personal_messages,
:allow_agentl_messages,
:tool_details,
:forced_tool_count,
:force_default_llm,
@ -217,15 +217,15 @@ module DiscourseAi
rag_uploads: [:id],
)
if tools = params.dig(:ai_persona, :tools)
if tools = params.dig(:ai_agent, :tools)
permitted[:tools] = permit_tools(tools)
end
if response_format = params.dig(:ai_persona, :response_format)
if response_format = params.dig(:ai_agent, :response_format)
permitted[:response_format] = permit_response_format(response_format)
end
if examples = params.dig(:ai_persona, :examples)
if examples = params.dig(:ai_agent, :examples)
permitted[:examples] = permit_examples(examples)
end

View File

@ -17,19 +17,19 @@ module DiscourseAi
private
def serialize_features(features)
features.map { |feature| feature.merge(persona: serialize_persona(feature[:persona])) }
features.map { |feature| feature.merge(agent: serialize_agent(feature[:agent])) }
end
def serialize_feature(feature)
return nil if feature.blank?
feature.merge(persona: serialize_persona(feature[:persona]))
feature.merge(agent: serialize_agent(feature[:agent]))
end
def serialize_persona(persona)
return nil if persona.blank?
def serialize_agent(agent)
return nil if agent.blank?
serialize_data(persona, AiFeaturesPersonaSerializer, root: false)
serialize_data(agent, AiFeaturesAgentSerializer, root: false)
end
end
end

View File

@ -6,8 +6,8 @@ module DiscourseAi
requires_plugin ::DiscourseAi::PLUGIN_NAME
def indexing_status_check
if params[:target_type] == "AiPersona"
@target = AiPersona.find(params[:target_id])
if params[:target_type] == "AiAgent"
@target = AiAgent.find(params[:target_id])
elsif params[:target_type] == "AiTool"
@target = AiTool.find(params[:target_id])
else

View File

@ -46,17 +46,17 @@ module DiscourseAi
end
def discover
ai_persona =
AiPersona
.all_personas(enabled_only: false)
.find { |persona| persona.id == SiteSetting.ai_bot_discover_persona.to_i }
ai_agent =
AiAgent
.all_agents(enabled_only: false)
.find { |agent| agent.id == SiteSetting.ai_bot_discover_agent.to_i }
if ai_persona.nil? || !current_user.in_any_groups?(ai_persona.allowed_group_ids.to_a)
if ai_agent.nil? || !current_user.in_any_groups?(ai_agent.allowed_group_ids.to_a)
raise Discourse::InvalidAccess.new
end
if ai_persona.default_llm_id.blank?
render_json_error "Discover persona is missing a default LLM model.", status: 503
if ai_agent.default_llm_id.blank?
render_json_error "Discover agent is missing a default LLM model.", status: 503
return
end
@ -77,7 +77,7 @@ module DiscourseAi
user = User.find(params[:user_id])
bot_user_id = AiPersona.find_by(id: SiteSetting.ai_bot_discover_persona).user_id
bot_user_id = AiAgent.find_by(id: SiteSetting.ai_bot_discover_agent).user_id
bot_username = User.find_by(id: bot_user_id).username
query = params[:query]

View File

@ -11,12 +11,12 @@ module ::Jobs
message = ::Chat::Message.find_by(id: args[:message_id])
return if message.blank?
personaClass =
DiscourseAi::Personas::Persona.find_by(id: args[:persona_id], user: message.user)
return if personaClass.blank?
agentClass =
DiscourseAi::Agents::Agent.find_by(id: args[:agent_id], user: message.user)
return if agentClass.blank?
user = User.find_by(id: personaClass.user_id)
bot = DiscourseAi::Personas::Bot.as(user, persona: personaClass.new)
user = User.find_by(id: agentClass.user_id)
bot = DiscourseAi::Agents::Bot.as(user, agent: agentClass.new)
DiscourseAi::AiBot::Playground.new(bot).reply_to_chat_message(
message,

View File

@ -7,18 +7,18 @@ module ::Jobs
def execute(args)
return unless bot_user = User.find_by(id: args[:bot_user_id])
return unless post = Post.includes(:topic).find_by(id: args[:post_id])
persona_id = args[:persona_id]
agent_id = args[:agent_id]
begin
persona = DiscourseAi::Personas::Persona.find_by(user: post.user, id: persona_id)
raise DiscourseAi::Personas::Bot::BOT_NOT_FOUND if persona.nil?
agent = DiscourseAi::Agents::Agent.find_by(user: post.user, id: agent_id)
raise DiscourseAi::Agents::Bot::BOT_NOT_FOUND if agent.nil?
bot = DiscourseAi::Personas::Bot.as(bot_user, persona: persona.new)
bot = DiscourseAi::Agents::Bot.as(bot_user, agent: agent.new)
DiscourseAi::AiBot::Playground.new(bot).reply_to(post)
rescue DiscourseAi::Personas::Bot::BOT_NOT_FOUND
rescue DiscourseAi::Agents::Bot::BOT_NOT_FOUND
Rails.logger.warn(
"Bot not found for post #{post.id} - perhaps persona was deleted or bot was disabled",
"Bot not found for post #{post.id} - perhaps agent was deleted or bot was disabled",
)
end
end

View File

@ -9,8 +9,8 @@ module Jobs
return unless SiteSetting.ai_discord_search_enabled
if SiteSetting.ai_discord_search_mode == "persona"
DiscourseAi::Discord::Bot::PersonaReplier.new(interaction).handle_interaction!
if SiteSetting.ai_discord_search_mode == "agent"
DiscourseAi::Discord::Bot::AgentReplier.new(interaction).handle_interaction!
else
DiscourseAi::Discord::Bot::Search.new(interaction).handle_interaction!
end

View File

@ -8,20 +8,20 @@ module Jobs
return if (user = User.find_by(id: args[:user_id])).nil?
return if (query = args[:query]).blank?
ai_persona_klass =
AiPersona
.all_personas(enabled_only: false)
.find { |persona| persona.id == SiteSetting.ai_bot_discover_persona.to_i }
ai_agent_klass =
AiAgent
.all_agents(enabled_only: false)
.find { |agent| agent.id == SiteSetting.ai_bot_discover_agent.to_i }
if ai_persona_klass.nil? || !user.in_any_groups?(ai_persona_klass.allowed_group_ids.to_a)
if ai_agent_klass.nil? || !user.in_any_groups?(ai_agent_klass.allowed_group_ids.to_a)
return
end
return if (llm_model = LlmModel.find_by(id: ai_persona_klass.default_llm_id)).nil?
return if (llm_model = LlmModel.find_by(id: ai_agent_klass.default_llm_id)).nil?
bot =
DiscourseAi::Personas::Bot.as(
DiscourseAi::Agents::Bot.as(
Discourse.system_user,
persona: ai_persona_klass.new,
agent: ai_agent_klass.new,
model: llm_model,
)
@ -31,7 +31,7 @@ module Jobs
base = { query: query, model_used: llm_model.display_name }
context =
DiscourseAi::Personas::BotContext.new(
DiscourseAi::Agents::BotContext.new(
messages: [{ type: :user, content: query }],
skip_tool_details: true,
)

View File

@ -1,16 +1,16 @@
# frozen_string_literal: true
class AiPersona < ActiveRecord::Base
class AiAgent < ActiveRecord::Base
# TODO remove this line 01-10-2025
self.ignored_columns = %i[default_llm question_consolidator_llm]
# places a hard limit, so per site we cache a maximum of 500 classes
MAX_PERSONAS_PER_SITE = 500
MAX_AGENTS_PER_SITE = 500
validates :name, presence: true, uniqueness: true, length: { maximum: 100 }
validates :description, presence: true, length: { maximum: 2000 }
validates :system_prompt, presence: true, length: { maximum: 10_000_000 }
validate :system_persona_unchangeable, on: :update, if: :system
validate :system_agent_unchangeable, on: :update, if: :system
validate :chat_preconditions
validate :allowed_seeded_model, if: :default_llm_id
validate :well_formated_examples
@ -41,50 +41,50 @@ class AiPersona < ActiveRecord::Base
before_destroy :ensure_not_system
before_update :regenerate_rag_fragments
def self.persona_cache
@persona_cache ||= ::DiscourseAi::MultisiteHash.new("persona_cache")
def self.agent_cache
@agent_cache ||= ::DiscourseAi::MultisiteHash.new("agent_cache")
end
scope :ordered, -> { order("priority DESC, lower(name) ASC") }
def self.all_personas(enabled_only: true)
persona_cache[:value] ||= AiPersona
def self.all_agents(enabled_only: true)
agent_cache[:value] ||= AiAgent
.ordered
.all
.limit(MAX_PERSONAS_PER_SITE)
.limit(MAX_AGENTS_PER_SITE)
.map(&:class_instance)
if enabled_only
persona_cache[:value].select { |p| p.enabled }
agent_cache[:value].select { |p| p.enabled }
else
persona_cache[:value]
agent_cache[:value]
end
end
def self.persona_users(user: nil)
persona_users =
persona_cache[:persona_users] ||= AiPersona
def self.agent_users(user: nil)
agent_users =
agent_cache[:agent_users] ||= AiAgent
.where(enabled: true)
.joins(:user)
.map do |persona|
.map do |agent|
{
id: persona.id,
user_id: persona.user_id,
username: persona.user.username_lower,
allowed_group_ids: persona.allowed_group_ids,
default_llm_id: persona.default_llm_id,
force_default_llm: persona.force_default_llm,
allow_chat_channel_mentions: persona.allow_chat_channel_mentions,
allow_chat_direct_messages: persona.allow_chat_direct_messages,
allow_topic_mentions: persona.allow_topic_mentions,
allow_personal_messages: persona.allow_personal_messages,
id: agent.id,
user_id: agent.user_id,
username: agent.user.username_lower,
allowed_group_ids: agent.allowed_group_ids,
default_llm_id: agent.default_llm_id,
force_default_llm: agent.force_default_llm,
allow_chat_channel_mentions: agent.allow_chat_channel_mentions,
allow_chat_direct_messages: agent.allow_chat_direct_messages,
allow_topic_mentions: agent.allow_topic_mentions,
allow_agentl_messages: agent.allow_agentl_messages,
}
end
if user
persona_users.select { |persona_user| user.in_any_groups?(persona_user[:allowed_group_ids]) }
agent_users.select { |agent_user| user.in_any_groups?(agent_user[:allowed_group_ids]) }
else
persona_users
agent_users
end
end
@ -93,31 +93,31 @@ class AiPersona < ActiveRecord::Base
allow_chat_channel_mentions: false,
allow_chat_direct_messages: false,
allow_topic_mentions: false,
allow_personal_messages: false
allow_agentl_messages: false
)
index =
"modality-#{allow_chat_channel_mentions}-#{allow_chat_direct_messages}-#{allow_topic_mentions}-#{allow_personal_messages}"
"modality-#{allow_chat_channel_mentions}-#{allow_chat_direct_messages}-#{allow_topic_mentions}-#{allow_agentl_messages}"
personas =
persona_cache[index.to_sym] ||= persona_users.select do |persona|
next true if allow_chat_channel_mentions && persona[:allow_chat_channel_mentions]
next true if allow_chat_direct_messages && persona[:allow_chat_direct_messages]
next true if allow_topic_mentions && persona[:allow_topic_mentions]
next true if allow_personal_messages && persona[:allow_personal_messages]
agents =
agent_cache[index.to_sym] ||= agent_users.select do |agent|
next true if allow_chat_channel_mentions && agent[:allow_chat_channel_mentions]
next true if allow_chat_direct_messages && agent[:allow_chat_direct_messages]
next true if allow_topic_mentions && agent[:allow_topic_mentions]
next true if allow_agentl_messages && agent[:allow_agentl_messages]
false
end
if user
personas.select { |u| user.in_any_groups?(u[:allowed_group_ids]) }
agents.select { |u| user.in_any_groups?(u[:allowed_group_ids]) }
else
personas
agents
end
end
after_commit :bump_cache
def bump_cache
self.class.persona_cache.flush!
self.class.agent_cache.flush!
end
def tools_can_not_be_duplicated
@ -138,7 +138,7 @@ class AiPersona < ActiveRecord::Base
end
if seen_tools.include?(inner_name)
errors.add(:tools, I18n.t("discourse_ai.ai_bot.personas.cannot_have_duplicate_tools"))
errors.add(:tools, I18n.t("discourse_ai.ai_bot.agents.cannot_have_duplicate_tools"))
break
else
seen_tools.add(inner_name)
@ -154,7 +154,7 @@ class AiPersona < ActiveRecord::Base
.pluck(:tool_name)
.each do |tool_name|
if builtin_tool_names.include?(tool_name.downcase)
errors.add(:tools, I18n.t("discourse_ai.ai_bot.personas.cannot_have_duplicate_tools"))
errors.add(:tools, I18n.t("discourse_ai.ai_bot.agents.cannot_have_duplicate_tools"))
break
end
end
@ -176,7 +176,7 @@ class AiPersona < ActiveRecord::Base
allow_chat_channel_mentions
allow_chat_direct_messages
allow_topic_mentions
allow_personal_messages
allow_agentl_messages
force_default_llm
name
description
@ -208,14 +208,14 @@ class AiPersona < ActiveRecord::Base
if inner_name.start_with?("custom-")
custom_tool_id = inner_name.split("-", 2).last.to_i
if AiTool.exists?(id: custom_tool_id, enabled: true)
klass = DiscourseAi::Personas::Tools::Custom.class_instance(custom_tool_id)
klass = DiscourseAi::Agents::Tools::Custom.class_instance(custom_tool_id)
end
else
inner_name = inner_name.gsub("Tool", "")
inner_name = "List#{inner_name}" if %w[Categories Tags].include?(inner_name)
begin
klass = "DiscourseAi::Personas::Tools::#{inner_name}".constantize
klass = "DiscourseAi::Agents::Tools::#{inner_name}".constantize
options[klass] = current_options if current_options
rescue StandardError
end
@ -225,14 +225,14 @@ class AiPersona < ActiveRecord::Base
klass
end
persona_class = DiscourseAi::Personas::Persona.system_personas_by_id[self.id]
if persona_class
agent_class = DiscourseAi::Agents::Agent.system_agents_by_id[self.id]
if agent_class
return(
# we need a new copy so we don't leak information
# across sites
Class.new(persona_class) do
Class.new(agent_class) do
# required for localization
define_singleton_method(:to_s) { persona_class.to_s }
define_singleton_method(:to_s) { agent_class.to_s }
instance_attributes.each do |key, value|
# description/name are localized
define_singleton_method(key) { value } if key != :description && key != :name
@ -242,9 +242,9 @@ class AiPersona < ActiveRecord::Base
)
end
ai_persona_id = self.id
ai_agent_id = self.id
Class.new(DiscourseAi::Personas::Persona) do
Class.new(DiscourseAi::Agents::Agent) do
instance_attributes.each { |key, value| define_singleton_method(key) { value } }
define_singleton_method(:to_s) do
@ -254,24 +254,24 @@ class AiPersona < ActiveRecord::Base
define_singleton_method(:inspect) { to_s }
define_method(:initialize) do |*args, **kwargs|
@ai_persona = AiPersona.find_by(id: ai_persona_id)
@ai_agent = AiAgent.find_by(id: ai_agent_id)
super(*args, **kwargs)
end
define_method(:tools) { tools }
define_method(:force_tool_use) { force_tool_use }
define_method(:forced_tool_count) { @ai_persona&.forced_tool_count }
define_method(:forced_tool_count) { @ai_agent&.forced_tool_count }
define_method(:options) { options }
define_method(:temperature) { @ai_persona&.temperature }
define_method(:top_p) { @ai_persona&.top_p }
define_method(:system_prompt) { @ai_persona&.system_prompt || "You are a helpful bot." }
define_method(:uploads) { @ai_persona&.uploads }
define_method(:response_format) { @ai_persona&.response_format }
define_method(:examples) { @ai_persona&.examples }
define_method(:temperature) { @ai_agent&.temperature }
define_method(:top_p) { @ai_agent&.top_p }
define_method(:system_prompt) { @ai_agent&.system_prompt || "You are a helpful bot." }
define_method(:uploads) { @ai_agent&.uploads }
define_method(:response_format) { @ai_agent&.response_format }
define_method(:examples) { @ai_agent&.examples }
end
end
FIRST_PERSONA_USER_ID = -1200
FIRST_AGENT_USER_ID = -1200
def create_user!
raise "User already exists" if user_id && User.exists?(user_id)
@ -279,7 +279,7 @@ class AiPersona < ActiveRecord::Base
# find the first id smaller than FIRST_USER_ID that is not taken
id = nil
id = DB.query_single(<<~SQL, FIRST_PERSONA_USER_ID, FIRST_PERSONA_USER_ID - 200).first
id = DB.query_single(<<~SQL, FIRST_AGENT_USER_ID, FIRST_AGENT_USER_ID - 200).first
WITH seq AS (
SELECT generate_series(?, ?, -1) AS id
)
@ -323,12 +323,12 @@ class AiPersona < ActiveRecord::Base
allow_chat_channel_mentions || allow_chat_direct_messages || allow_topic_mentions ||
force_default_llm
) && !default_llm_id
errors.add(:default_llm, I18n.t("discourse_ai.ai_bot.personas.default_llm_required"))
errors.add(:default_llm, I18n.t("discourse_ai.ai_bot.agents.default_llm_required"))
end
end
def system_persona_unchangeable
error_msg = I18n.t("discourse_ai.ai_bot.personas.cannot_edit_system_persona")
def system_agent_unchangeable
error_msg = I18n.t("discourse_ai.ai_bot.agents.cannot_edit_system_agent")
if top_p_changed? || temperature_changed? || system_prompt_changed? || name_changed? ||
description_changed?
@ -356,7 +356,7 @@ class AiPersona < ActiveRecord::Base
def ensure_not_system
if system
errors.add(:base, I18n.t("discourse_ai.ai_bot.personas.cannot_delete_system_persona"))
errors.add(:base, I18n.t("discourse_ai.ai_bot.agents.cannot_delete_system_agent"))
throw :abort
end
end
@ -380,13 +380,13 @@ class AiPersona < ActiveRecord::Base
return
end
errors.add(:examples, I18n.t("discourse_ai.personas.malformed_examples"))
errors.add(:examples, I18n.t("discourse_ai.agents.malformed_examples"))
end
end
# == Schema Information
#
# Table name: ai_personas
# Table name: ai_agents
#
# id :bigint not null, primary key
# name :string(100) not null
@ -414,7 +414,7 @@ end
# allow_chat_channel_mentions :boolean default(FALSE), not null
# allow_chat_direct_messages :boolean default(FALSE), not null
# allow_topic_mentions :boolean default(FALSE), not null
# allow_personal_messages :boolean default(TRUE), not null
# allow_agentl_messages :boolean default(TRUE), not null
# force_default_llm :boolean default(FALSE), not null
# rag_llm_model_id :bigint
# default_llm_id :bigint
@ -424,5 +424,5 @@ end
#
# Indexes
#
# index_ai_personas_on_name (name) UNIQUE
# index_ai_agents_on_name (name) UNIQUE
#

View File

@ -36,7 +36,7 @@ class AiTool < ActiveRecord::Base
end
def runner(parameters, llm:, bot_user:, context: nil)
DiscourseAi::Personas::ToolRunner.new(
DiscourseAi::Agents::ToolRunner.new(
parameters: parameters,
llm: llm,
bot_user: bot_user,
@ -45,10 +45,10 @@ class AiTool < ActiveRecord::Base
)
end
after_commit :bump_persona_cache
after_commit :bump_agent_cache
def bump_persona_cache
AiPersona.persona_cache.flush!
def bump_agent_cache
AiAgent.agent_cache.flush!
end
def regenerate_rag_fragments
@ -176,11 +176,11 @@ class AiTool < ActiveRecord::Base
* user_id_or_username (number | string): The ID or username of the user.
* Returns: Object (User details using UserSerializer structure) or null if not found.
*
* discourse.getPersona(name): Gets an object representing another AI Persona configured on the site.
* discourse.getAgent(name): Gets an object representing another AI Agent configured on the site.
* Parameters:
* name (string): The name of the target persona.
* Returns: Object { respondTo: function(params) } or null if persona not found.
* respondTo(params): Instructs the target persona to generate a response within the current context (e.g., replying to the same post or chat message).
* name (string): The name of the target agent.
* Returns: Object { respondTo: function(params) } or null if agent not found.
* respondTo(params): Instructs the target agent to generate a response within the current context (e.g., replying to the same post or chat message).
* Parameters:
* params (Object, optional): { instructions: string, whisper: boolean }
* Returns: { success: boolean, post_id?: number, post_number?: number, message_id?: number } or { error: string }
@ -201,7 +201,7 @@ class AiTool < ActiveRecord::Base
* private_message (boolean): Whether the context is a private message (in Post context).
* message_id (number): ID of the chat message triggering the tool (if in Chat context).
* channel_id (number): ID of the chat channel (if in Chat context).
* user (Object): Details of the user invoking the tool/persona (structure may vary, often null or SystemUser details unless explicitly passed).
* user (Object): Details of the user invoking the tool/agent (structure may vary, often null or SystemUser details unless explicitly passed).
* participants (string): Comma-separated list of usernames in a PM (if applicable).
* // ... other potential context-specific properties added by the calling environment.
*

View File

@ -2,7 +2,7 @@
class RagDocumentFragment < ActiveRecord::Base
# TODO Jan 2025 - remove
self.ignored_columns = %i[ai_persona_id]
self.ignored_columns = %i[ai_agent_id]
belongs_to :upload
belongs_to :target, polymorphic: true
@ -38,7 +38,7 @@ class RagDocumentFragment < ActiveRecord::Base
end
end
def indexing_status(persona, uploads)
def indexing_status(agent, uploads)
embeddings_table = DiscourseAi::Embeddings::Schema.for(self).table
results =
@ -56,8 +56,8 @@ class RagDocumentFragment < ActiveRecord::Base
WHERE uploads.id IN (:upload_ids)
GROUP BY uploads.id
SQL
target_id: persona.id,
target_type: persona.class.to_s,
target_id: agent.id,
target_type: agent.class.to_s,
upload_ids: uploads.map(&:id),
)

View File

@ -51,13 +51,13 @@ class SharedAiConversation < ActiveRecord::Base
# but this name works
class SharedPost
attr_accessor :user
attr_reader :id, :user_id, :created_at, :cooked, :persona
attr_reader :id, :user_id, :created_at, :cooked, :agent
def initialize(post)
@id = post[:id]
@user_id = post[:user_id]
@created_at = DateTime.parse(post[:created_at])
@cooked = post[:cooked]
@persona = post[:persona]
@agent = post[:agent]
end
end
@ -140,9 +140,9 @@ class SharedAiConversation < ActiveRecord::Base
llm_name = ActiveSupport::Inflector.humanize(llm_name) if llm_name
llm_name ||= I18n.t("discourse_ai.unknown_model")
persona = nil
if persona_id = topic.custom_fields["ai_persona_id"]
persona = AiPersona.find_by(id: persona_id.to_i)&.name
agent = nil
if agent_id = topic.custom_fields["ai_agent_id"]
agent = AiAgent.find_by(id: agent_id.to_i)&.name
end
posts =
@ -167,7 +167,7 @@ class SharedAiConversation < ActiveRecord::Base
cooked: cook_artifacts(post),
}
mapped[:persona] = persona if ai_bot_participant&.id == post.user_id
mapped[:agent] = agent if ai_bot_participant&.id == post.user_id
mapped[:username] = post.user&.username if include_usernames
mapped
end,

View File

@ -1,6 +1,6 @@
# frozen_string_literal: true
class AiFeaturesPersonaSerializer < ApplicationSerializer
class AiFeaturesAgentSerializer < ApplicationSerializer
attributes :id, :name, :system_prompt, :allowed_groups, :enabled
def allowed_groups

View File

@ -2,7 +2,7 @@
class LlmModelSerializer < ApplicationSerializer
# TODO: we probably should rename the table LlmModel to AiLlm
# it is consistent with AiPersona and AiTool
# it is consistent with AiAgent and AiTool
# LLM model is a bit confusing given that large langauge model model is a confusing
# name
root "ai_llm"

View File

@ -1,7 +1,7 @@
# frozen_string_literal: true
class LocalizedAiPersonaSerializer < ApplicationSerializer
root "ai_persona"
class LocalizedAiAgentSerializer < ApplicationSerializer
root "ai_agent"
attributes :id,
:name,
@ -29,7 +29,7 @@ class LocalizedAiPersonaSerializer < ApplicationSerializer
:allow_chat_channel_mentions,
:allow_chat_direct_messages,
:allow_topic_mentions,
:allow_personal_messages,
:allow_agentl_messages,
:force_default_llm,
:response_format,
:examples

View File

@ -43,8 +43,8 @@
<article class="post">
<header class="post__header">
<span class="post__user"><%= post.user.username %></span>
<%if post.persona.present? %>
<span class="post__persona"><%= post.persona %></span>
<%if post.agent.present? %>
<span class="post__agent"><%= post.agent %></span>
<% end %>
<time class="post__date" datetime="<%= post.created_at.iso8601 %>"><%= post.created_at.strftime('%Y-%m-%d') %></time>
</header>

View File

@ -4,7 +4,7 @@ export default {
path: "/plugins",
map() {
this.route("discourse-ai-personas", { path: "ai-personas" }, function () {
this.route("discourse-ai-agents", { path: "ai-agents" }, function () {
this.route("new");
this.route("edit", { path: "/:id/edit" });
});

View File

@ -16,6 +16,6 @@ export default class Adapter extends RestAdapter {
}
apiNameFor() {
return "ai-persona";
return "ai-agent";
}
}

View File

@ -29,7 +29,7 @@ const CREATE_ATTRIBUTES = [
"allow_chat",
"tool_details",
"forced_tool_count",
"allow_personal_messages",
"allow_agentl_messages",
"allow_topic_mentions",
"allow_chat_channel_mentions",
"allow_chat_direct_messages",
@ -58,16 +58,16 @@ const SYSTEM_ATTRIBUTES = [
"rag_llm_model_id",
"question_consolidator_llm_id",
"tool_details",
"allow_personal_messages",
"allow_agentl_messages",
"allow_topic_mentions",
"allow_chat_channel_mentions",
"allow_chat_direct_messages",
];
export default class AiPersona extends RestModel {
export default class AiAgent extends RestModel {
async createUser() {
const result = await ajax(
`/admin/plugins/discourse-ai/ai-personas/${this.id}/create-user.json`,
`/admin/plugins/discourse-ai/ai-agents/${this.id}/create-user.json`,
{
type: "POST",
}
@ -143,10 +143,10 @@ export default class AiPersona extends RestModel {
fromPOJO(data) {
const dataClone = JSON.parse(JSON.stringify(data));
const persona = AiPersona.create(dataClone);
persona.tools = this.flattenedToolStructure(dataClone);
const agent = AiAgent.create(dataClone);
agent.tools = this.flattenedToolStructure(dataClone);
return persona;
return agent;
}
toPOJO() {

View File

@ -8,8 +8,8 @@ export default class AiFeature extends RestModel {
"ref",
"description",
"enable_setting",
"persona",
"persona_setting"
"agent",
"agent_setting"
);
}
}

View File

@ -15,15 +15,15 @@ import Group from "discourse/models/group";
import { i18n } from "discourse-i18n";
import AdminUser from "admin/models/admin-user";
import GroupChooser from "select-kit/components/group-chooser";
import AiPersonaResponseFormatEditor from "../components/modal/ai-persona-response-format-editor";
import AiAgentResponseFormatEditor from "../components/modal/ai-agent-response-format-editor";
import AiLlmSelector from "./ai-llm-selector";
import AiPersonaCollapsableExample from "./ai-persona-example";
import AiPersonaToolOptions from "./ai-persona-tool-options";
import AiAgentCollapsableExample from "./ai-agent-example";
import AiAgentToolOptions from "./ai-agent-tool-options";
import AiToolSelector from "./ai-tool-selector";
import RagOptionsFk from "./rag-options-fk";
import RagUploader from "./rag-uploader";
export default class PersonaEditor extends Component {
export default class AgentEditor extends Component {
@service router;
@service store;
@service dialog;
@ -59,12 +59,12 @@ export default class PersonaEditor extends Component {
}
get allTools() {
return this.args.personas.resultSetMeta.tools;
return this.args.agents.resultSetMeta.tools;
}
get maxPixelValues() {
const l = (key) =>
i18n(`discourse_ai.ai_persona.vision_max_pixel_sizes.${key}`);
i18n(`discourse_ai.ai_agent.vision_max_pixel_sizes.${key}`);
return [
{ name: l("low"), id: 65536 },
{ name: l("medium"), id: 262144 },
@ -76,14 +76,14 @@ export default class PersonaEditor extends Component {
const content = [
{
id: -1,
name: i18n("discourse_ai.ai_persona.tool_strategies.all"),
name: i18n("discourse_ai.ai_agent.tool_strategies.all"),
},
];
[1, 2, 5].forEach((i) => {
content.push({
id: i,
name: i18n("discourse_ai.ai_persona.tool_strategies.replies", {
name: i18n("discourse_ai.ai_agent.tool_strategies.replies", {
count: i,
}),
});
@ -112,23 +112,23 @@ export default class PersonaEditor extends Component {
this.isSaving = true;
try {
const personaToSave = Object.assign(
const agentToSave = Object.assign(
this.args.model,
this.args.model.fromPOJO(data)
);
await personaToSave.save();
this.#sortPersonas();
await agentToSave.save();
this.#sortAgents();
if (isNew && this.args.model.rag_uploads.length === 0) {
this.args.personas.addObject(personaToSave);
this.args.agents.addObject(agentToSave);
this.router.transitionTo(
"adminPlugins.show.discourse-ai-personas.edit",
personaToSave
"adminPlugins.show.discourse-ai-agents.edit",
agentToSave
);
} else {
this.toasts.success({
data: { message: i18n("discourse_ai.ai_persona.saved") },
data: { message: i18n("discourse_ai.ai_agent.saved") },
duration: 2000,
});
}
@ -151,12 +151,12 @@ export default class PersonaEditor extends Component {
@action
delete() {
return this.dialog.confirm({
message: i18n("discourse_ai.ai_persona.confirm_delete"),
message: i18n("discourse_ai.ai_agent.confirm_delete"),
didConfirm: () => {
return this.args.model.destroyRecord().then(() => {
this.args.personas.removeObject(this.args.model);
this.args.agents.removeObject(this.args.model);
this.router.transitionTo(
"adminPlugins.show.discourse-ai-personas.index"
"adminPlugins.show.discourse-ai-agents.index"
);
});
},
@ -259,7 +259,7 @@ export default class PersonaEditor extends Component {
return updatedOptions;
}
async persistField(dirtyData, field, newValue, sortPersonas) {
async persistField(dirtyData, field, newValue, sortAgents) {
if (!this.args.model.isNew) {
const updatedDirtyData = Object.assign({}, dirtyData);
updatedDirtyData[field] = newValue;
@ -270,8 +270,8 @@ export default class PersonaEditor extends Component {
this.dirtyFormData = updatedDirtyData;
await this.args.model.update(args);
if (sortPersonas) {
this.#sortPersonas();
if (sortAgents) {
this.#sortAgents();
}
} catch (e) {
popupAjaxError(e);
@ -279,8 +279,8 @@ export default class PersonaEditor extends Component {
}
}
#sortPersonas() {
const sorted = this.args.personas.toArray().sort((a, b) => {
#sortAgents() {
const sorted = this.args.agents.toArray().sort((a, b) => {
if (a.priority && !b.priority) {
return -1;
} else if (!a.priority && b.priority) {
@ -289,20 +289,20 @@ export default class PersonaEditor extends Component {
return a.name.localeCompare(b.name);
}
});
this.args.personas.clear();
this.args.personas.setObjects(sorted);
this.args.agents.clear();
this.args.agents.setObjects(sorted);
}
<template>
<BackButton
@route="adminPlugins.show.discourse-ai-personas"
@label="discourse_ai.ai_persona.back"
@route="adminPlugins.show.discourse-ai-agents"
@label="discourse_ai.ai_agent.back"
/>
<div class="ai-persona-editor" {{didInsert this.updateAllGroups @model.id}}>
<div class="ai-agent-editor" {{didInsert this.updateAllGroups @model.id}}>
<Form @onSubmit={{this.save}} @data={{this.formData}} as |form data|>
<form.Field
@name="name"
@title={{i18n "discourse_ai.ai_persona.name"}}
@title={{i18n "discourse_ai.ai_agent.name"}}
@validation="required|length:1,100"
@disabled={{data.system}}
@format="large"
@ -313,7 +313,7 @@ export default class PersonaEditor extends Component {
<form.Field
@name="description"
@title={{i18n "discourse_ai.ai_persona.description"}}
@title={{i18n "discourse_ai.ai_agent.description"}}
@validation="required|length:1,100"
@disabled={{data.system}}
@format="large"
@ -324,7 +324,7 @@ export default class PersonaEditor extends Component {
<form.Field
@name="system_prompt"
@title={{i18n "discourse_ai.ai_persona.system_prompt"}}
@title={{i18n "discourse_ai.ai_agent.system_prompt"}}
@validation="required|length:1,100000"
@disabled={{data.system}}
@format="large"
@ -333,28 +333,28 @@ export default class PersonaEditor extends Component {
<field.Textarea />
</form.Field>
<AiPersonaResponseFormatEditor @form={{form}} @data={{data}} />
<AiAgentResponseFormatEditor @form={{form}} @data={{data}} />
<form.Field
@name="default_llm_id"
@title={{i18n "discourse_ai.ai_persona.default_llm"}}
@tooltip={{i18n "discourse_ai.ai_persona.default_llm_help"}}
@title={{i18n "discourse_ai.ai_agent.default_llm"}}
@tooltip={{i18n "discourse_ai.ai_agent.default_llm_help"}}
@format="large"
as |field|
>
<field.Custom>
<AiLlmSelector
@value={{field.value}}
@llms={{@personas.resultSetMeta.llms}}
@llms={{@agents.resultSetMeta.llms}}
@onChange={{field.set}}
@class="ai-persona-editor__llms"
@class="ai-agent-editor__llms"
/>
</field.Custom>
</form.Field>
<form.Field
@name="allowed_group_ids"
@title={{i18n "discourse_ai.ai_persona.allowed_groups"}}
@title={{i18n "discourse_ai.ai_agent.allowed_groups"}}
@format="large"
as |field|
>
@ -369,8 +369,8 @@ export default class PersonaEditor extends Component {
<form.Field
@name="vision_enabled"
@title={{i18n "discourse_ai.ai_persona.vision_enabled"}}
@tooltip={{i18n "discourse_ai.ai_persona.vision_enabled_help"}}
@title={{i18n "discourse_ai.ai_agent.vision_enabled"}}
@tooltip={{i18n "discourse_ai.ai_agent.vision_enabled_help"}}
@format="large"
as |field|
>
@ -380,7 +380,7 @@ export default class PersonaEditor extends Component {
{{#if data.vision_enabled}}
<form.Field
@name="vision_max_pixels"
@title={{i18n "discourse_ai.ai_persona.vision_max_pixels"}}
@title={{i18n "discourse_ai.ai_agent.vision_max_pixels"}}
@onSet={{this.onChangeMaxPixels}}
@format="large"
as |field|
@ -397,8 +397,8 @@ export default class PersonaEditor extends Component {
<form.Field
@name="max_context_posts"
@title={{i18n "discourse_ai.ai_persona.max_context_posts"}}
@tooltip={{i18n "discourse_ai.ai_persona.max_context_posts_help"}}
@title={{i18n "discourse_ai.ai_agent.max_context_posts"}}
@tooltip={{i18n "discourse_ai.ai_agent.max_context_posts_help"}}
@format="large"
as |field|
>
@ -408,8 +408,8 @@ export default class PersonaEditor extends Component {
{{#unless data.system}}
<form.Field
@name="temperature"
@title={{i18n "discourse_ai.ai_persona.temperature"}}
@tooltip={{i18n "discourse_ai.ai_persona.temperature_help"}}
@title={{i18n "discourse_ai.ai_agent.temperature"}}
@tooltip={{i18n "discourse_ai.ai_agent.temperature_help"}}
@disabled={{data.system}}
@format="large"
as |field|
@ -419,8 +419,8 @@ export default class PersonaEditor extends Component {
<form.Field
@name="top_p"
@title={{i18n "discourse_ai.ai_persona.top_p"}}
@tooltip={{i18n "discourse_ai.ai_persona.top_p_help"}}
@title={{i18n "discourse_ai.ai_agent.top_p"}}
@tooltip={{i18n "discourse_ai.ai_agent.top_p_help"}}
@disabled={{data.system}}
@format="large"
as |field|
@ -430,22 +430,22 @@ export default class PersonaEditor extends Component {
{{/unless}}
<form.Section
@title={{i18n "discourse_ai.ai_persona.examples.title"}}
@subtitle={{i18n "discourse_ai.ai_persona.examples.examples_help"}}
@title={{i18n "discourse_ai.ai_agent.examples.title"}}
@subtitle={{i18n "discourse_ai.ai_agent.examples.examples_help"}}
>
{{#unless data.system}}
<form.Container>
<form.Button
@action={{fn this.addExamplesPair form data}}
@label="discourse_ai.ai_persona.examples.new"
class="ai-persona-editor__new_example"
@label="discourse_ai.ai_agent.examples.new"
class="ai-agent-editor__new_example"
/>
</form.Container>
{{/unless}}
{{#if (gt data.examples.length 0)}}
<form.Collection @name="examples" as |exCollection exCollectionIdx|>
<AiPersonaCollapsableExample
<AiAgentCollapsableExample
@examplesCollection={{exCollection}}
@exampleNumber={{exCollectionIdx}}
@system={{data.system}}
@ -455,10 +455,10 @@ export default class PersonaEditor extends Component {
{{/if}}
</form.Section>
<form.Section @title={{i18n "discourse_ai.ai_persona.ai_tools"}}>
<form.Section @title={{i18n "discourse_ai.ai_agent.ai_tools"}}>
<form.Field
@name="tools"
@title={{i18n "discourse_ai.ai_persona.tools"}}
@title={{i18n "discourse_ai.ai_agent.tools"}}
@format="large"
as |field|
>
@ -467,7 +467,7 @@ export default class PersonaEditor extends Component {
@value={{field.value}}
@disabled={{data.system}}
@onChange={{fn this.updateToolNames form data}}
@content={{@personas.resultSetMeta.tools}}
@content={{@agents.resultSetMeta.tools}}
/>
</field.Custom>
</form.Field>
@ -475,7 +475,7 @@ export default class PersonaEditor extends Component {
{{#if (gt data.tools.length 0)}}
<form.Field
@name="forcedTools"
@title={{i18n "discourse_ai.ai_persona.forced_tools"}}
@title={{i18n "discourse_ai.ai_agent.forced_tools"}}
@format="large"
as |field|
>
@ -493,7 +493,7 @@ export default class PersonaEditor extends Component {
{{#if (gt data.forcedTools.length 0)}}
<form.Field
@name="forced_tool_count"
@title={{i18n "discourse_ai.ai_persona.forced_tool_strategy"}}
@title={{i18n "discourse_ai.ai_agent.forced_tool_strategy"}}
@format="large"
as |field|
>
@ -508,19 +508,19 @@ export default class PersonaEditor extends Component {
{{#if (gt data.tools.length 0)}}
<form.Field
@name="tool_details"
@title={{i18n "discourse_ai.ai_persona.tool_details"}}
@tooltip={{i18n "discourse_ai.ai_persona.tool_details_help"}}
@title={{i18n "discourse_ai.ai_agent.tool_details"}}
@tooltip={{i18n "discourse_ai.ai_agent.tool_details_help"}}
@format="large"
as |field|
>
<field.Checkbox />
</form.Field>
<AiPersonaToolOptions
<AiAgentToolOptions
@form={{form}}
@data={{data}}
@llms={{@personas.resultSetMeta.llms}}
@allTools={{@personas.resultSetMeta.tools}}
@llms={{@agents.resultSetMeta.llms}}
@allTools={{@agents.resultSetMeta.tools}}
/>
{{/if}}
</form.Section>
@ -535,10 +535,10 @@ export default class PersonaEditor extends Component {
<field.Custom>
<RagUploader
@target={{data}}
@targetName="AiPersona"
@targetName="AiAgent"
@updateUploads={{fn this.updateUploads form}}
@onRemove={{fn this.removeUpload form data field.value}}
@allowImages={{@personas.resultSetMeta.settings.rag_images_enabled}}
@allowImages={{@agents.resultSetMeta.settings.rag_images_enabled}}
/>
</field.Custom>
</form.Field>
@ -546,16 +546,16 @@ export default class PersonaEditor extends Component {
<RagOptionsFk
@form={{form}}
@data={{data}}
@llms={{@personas.resultSetMeta.llms}}
@allowImages={{@personas.resultSetMeta.settings.rag_images_enabled}}
@llms={{@agents.resultSetMeta.llms}}
@allowImages={{@agents.resultSetMeta.settings.rag_images_enabled}}
>
<form.Field
@name="rag_conversation_chunks"
@title={{i18n
"discourse_ai.ai_persona.rag_conversation_chunks"
"discourse_ai.ai_agent.rag_conversation_chunks"
}}
@tooltip={{i18n
"discourse_ai.ai_persona.rag_conversation_chunks_help"
"discourse_ai.ai_agent.rag_conversation_chunks_help"
}}
@format="large"
as |field|
@ -566,10 +566,10 @@ export default class PersonaEditor extends Component {
<form.Field
@name="question_consolidator_llm_id"
@title={{i18n
"discourse_ai.ai_persona.question_consolidator_llm"
"discourse_ai.ai_agent.question_consolidator_llm"
}}
@tooltip={{i18n
"discourse_ai.ai_persona.question_consolidator_llm_help"
"discourse_ai.ai_agent.question_consolidator_llm_help"
}}
@format="large"
as |field|
@ -577,9 +577,9 @@ export default class PersonaEditor extends Component {
<field.Custom>
<AiLlmSelector
@value={{field.value}}
@llms={{@personas.resultSetMeta.llms}}
@llms={{@agents.resultSetMeta.llms}}
@onChange={{field.set}}
@class="ai-persona-editor__llms"
@class="ai-agent-editor__llms"
/>
</field.Custom>
</form.Field>
@ -587,10 +587,10 @@ export default class PersonaEditor extends Component {
</form.Section>
{{/if}}
<form.Section @title={{i18n "discourse_ai.ai_persona.ai_bot.title"}}>
<form.Section @title={{i18n "discourse_ai.ai_agent.ai_bot.title"}}>
<form.Field
@name="enabled"
@title={{i18n "discourse_ai.ai_persona.enabled"}}
@title={{i18n "discourse_ai.ai_agent.enabled"}}
@onSet={{fn this.toggleEnabled data}}
as |field|
>
@ -599,21 +599,21 @@ export default class PersonaEditor extends Component {
<form.Field
@name="priority"
@title={{i18n "discourse_ai.ai_persona.priority"}}
@title={{i18n "discourse_ai.ai_agent.priority"}}
@onSet={{fn this.togglePriority data}}
@tooltip={{i18n "discourse_ai.ai_persona.priority_help"}}
@tooltip={{i18n "discourse_ai.ai_agent.priority_help"}}
as |field|
>
<field.Toggle />
</form.Field>
{{#if @model.isNew}}
<div>{{i18n "discourse_ai.ai_persona.ai_bot.save_first"}}</div>
<div>{{i18n "discourse_ai.ai_agent.ai_bot.save_first"}}</div>
{{else}}
{{#if data.default_llm_id}}
<form.Field
@name="force_default_llm"
@title={{i18n "discourse_ai.ai_persona.force_default_llm"}}
@title={{i18n "discourse_ai.ai_agent.force_default_llm"}}
@format="large"
as |field|
>
@ -622,12 +622,12 @@ export default class PersonaEditor extends Component {
{{/if}}
<form.Container
@title={{i18n "discourse_ai.ai_persona.user"}}
@title={{i18n "discourse_ai.ai_agent.user"}}
@tooltip={{unless
data.user
(i18n "discourse_ai.ai_persona.create_user_help")
(i18n "discourse_ai.ai_agent.create_user_help")
}}
class="ai-persona-editor__ai_bot_user"
class="ai-agent-editor__ai_bot_user"
>
{{#if data.user}}
<a
@ -643,20 +643,20 @@ export default class PersonaEditor extends Component {
{{else}}
<form.Button
@action={{fn this.createUser form}}
@label="discourse_ai.ai_persona.create_user"
class="ai-persona-editor__create-user"
@label="discourse_ai.ai_agent.create_user"
class="ai-agent-editor__create-user"
/>
{{/if}}
</form.Container>
{{#if data.user}}
<form.Field
@name="allow_personal_messages"
@name="allow_agentl_messages"
@title={{i18n
"discourse_ai.ai_persona.allow_personal_messages"
"discourse_ai.ai_agent.allow_agentl_messages"
}}
@tooltip={{i18n
"discourse_ai.ai_persona.allow_personal_messages_help"
"discourse_ai.ai_agent.allow_agentl_messages_help"
}}
@format="large"
as |field|
@ -666,9 +666,9 @@ export default class PersonaEditor extends Component {
<form.Field
@name="allow_topic_mentions"
@title={{i18n "discourse_ai.ai_persona.allow_topic_mentions"}}
@title={{i18n "discourse_ai.ai_agent.allow_topic_mentions"}}
@tooltip={{i18n
"discourse_ai.ai_persona.allow_topic_mentions_help"
"discourse_ai.ai_agent.allow_topic_mentions_help"
}}
@format="large"
as |field|
@ -680,10 +680,10 @@ export default class PersonaEditor extends Component {
<form.Field
@name="allow_chat_direct_messages"
@title={{i18n
"discourse_ai.ai_persona.allow_chat_direct_messages"
"discourse_ai.ai_agent.allow_chat_direct_messages"
}}
@tooltip={{i18n
"discourse_ai.ai_persona.allow_chat_direct_messages_help"
"discourse_ai.ai_agent.allow_chat_direct_messages_help"
}}
@format="large"
as |field|
@ -694,10 +694,10 @@ export default class PersonaEditor extends Component {
<form.Field
@name="allow_chat_channel_mentions"
@title={{i18n
"discourse_ai.ai_persona.allow_chat_channel_mentions"
"discourse_ai.ai_agent.allow_chat_channel_mentions"
}}
@tooltip={{i18n
"discourse_ai.ai_persona.allow_chat_channel_mentions_help"
"discourse_ai.ai_agent.allow_chat_channel_mentions_help"
}}
@format="large"
as |field|
@ -715,7 +715,7 @@ export default class PersonaEditor extends Component {
{{#unless (or @model.isNew @model.system)}}
<form.Button
@action={{this.delete}}
@label="discourse_ai.ai_persona.delete"
@label="discourse_ai.ai_agent.delete"
class="btn-danger"
/>
{{/unless}}

View File

@ -7,7 +7,7 @@ import { eq } from "truth-helpers";
import icon from "discourse/helpers/d-icon";
import { i18n } from "discourse-i18n";
export default class AiPersonaCollapsableExample extends Component {
export default class AiAgentCollapsableExample extends Component {
@tracked collapsed = true;
get caretIcon() {
@ -26,7 +26,7 @@ export default class AiPersonaCollapsableExample extends Component {
}
get exampleTitle() {
return i18n("discourse_ai.ai_persona.examples.collapsable_title", {
return i18n("discourse_ai.ai_agent.examples.collapsable_title", {
number: this.args.exampleNumber + 1,
});
}
@ -41,7 +41,7 @@ export default class AiPersonaCollapsableExample extends Component {
<exPair.Field
@title={{i18n
(concat
"discourse_ai.ai_persona.examples."
"discourse_ai.ai_agent.examples."
(if (eq pairIdx 0) "user" "model")
)
}}
@ -57,8 +57,8 @@ export default class AiPersonaCollapsableExample extends Component {
<@form.Container>
<@form.Button
@action={{this.deletePair}}
@label="discourse_ai.ai_persona.examples.remove"
class="ai-persona-editor__delete_example btn-danger"
@label="discourse_ai.ai_agent.examples.remove"
class="ai-agent-editor__delete_example btn-danger"
/>
</@form.Container>
{{/unless}}

View File

@ -0,0 +1,117 @@
import Component from "@glimmer/component";
import { fn } from "@ember/helper";
import { on } from "@ember/modifier";
import { action } from "@ember/object";
import { LinkTo } from "@ember/routing";
import { service } from "@ember/service";
import DBreadcrumbsItem from "discourse/components/d-breadcrumbs-item";
import DPageSubheader from "discourse/components/d-page-subheader";
import DToggleSwitch from "discourse/components/d-toggle-switch";
import concatClass from "discourse/helpers/concat-class";
import { popupAjaxError } from "discourse/lib/ajax-error";
import { i18n } from "discourse-i18n";
import AdminConfigAreaEmptyList from "admin/components/admin-config-area-empty-list";
import AiAgentEditor from "./ai-agent-editor";
export default class AiAgentListEditor extends Component {
@service adminPluginNavManager;
@action
async toggleEnabled(agent) {
const oldValue = agent.enabled;
const newValue = !oldValue;
try {
agent.set("enabled", newValue);
await agent.save();
} catch (err) {
agent.set("enabled", oldValue);
popupAjaxError(err);
}
}
<template>
<DBreadcrumbsItem
@path="/admin/plugins/{{this.adminPluginNavManager.currentPlugin.name}}/ai-agents"
@label={{i18n "discourse_ai.ai_agent.short_title"}}
/>
<section class="ai-agent-list-editor__current admin-detail pull-left">
{{#if @currentAgent}}
<AiAgentEditor @model={{@currentAgent}} @agents={{@agents}} />
{{else}}
<DPageSubheader
@titleLabel={{i18n "discourse_ai.ai_agent.short_title"}}
@descriptionLabel={{i18n
"discourse_ai.ai_agent.agent_description"
}}
@learnMoreUrl="https://meta.discourse.org/t/ai-bot-agents/306099"
>
<:actions as |actions|>
<actions.Primary
@label="discourse_ai.ai_agent.new"
@route="adminPlugins.show.discourse-ai-agents.new"
@icon="plus"
class="ai-agent-list-editor__new-button"
/>
</:actions>
</DPageSubheader>
{{#if @agents}}
<table class="content-list ai-agent-list-editor d-admin-table">
<thead>
<tr>
<th>{{i18n "discourse_ai.ai_agent.name"}}</th>
<th>{{i18n "discourse_ai.ai_agent.list.enabled"}}</th>
<th></th>
</tr>
</thead>
<tbody>
{{#each @agents as |agent|}}
<tr
data-agent-id={{agent.id}}
class={{concatClass
"ai-agent-list__row d-admin-row__content"
(if agent.priority "priority")
}}
>
<td class="d-admin-row__overview">
<div class="ai-agent-list__name-with-description">
<div class="ai-agent-list__name">
<strong>
{{agent.name}}
</strong>
</div>
<div class="ai-agent-list__description">
{{agent.description}}
</div>
</div>
</td>
<td class="d-admin-row__detail">
<DToggleSwitch
@state={{agent.enabled}}
{{on "click" (fn this.toggleEnabled agent)}}
/>
</td>
<td class="d-admin-row__controls">
<LinkTo
@route="adminPlugins.show.discourse-ai-agents.edit"
@model={{agent}}
class="btn btn-text btn-small"
>{{i18n "discourse_ai.ai_agent.edit"}} </LinkTo>
</td>
</tr>
{{/each}}
</tbody>
</table>
{{else}}
<AdminConfigAreaEmptyList
@ctaLabel="discourse_ai.ai_agent.new"
@ctaRoute="adminPlugins.show.discourse-ai-agents.new"
@ctaClass="ai-agent-list-editor__empty-new-button"
@emptyLabel="discourse_ai.ai_agent.no_agents"
/>
{{/if}}
{{/if}}
</section>
</template>
}

View File

@ -6,10 +6,10 @@ import { service } from "@ember/service";
import { i18n } from "discourse-i18n";
import DropdownSelectBox from "select-kit/components/dropdown-select-box";
const PERSONA_SELECTOR_KEY = "ai_persona_selector_id";
const AGENT_SELECTOR_KEY = "ai_agent_selector_id";
const LLM_SELECTOR_KEY = "ai_llm_selector_id";
export default class AiPersonaLlmSelector extends Component {
export default class AiAgentLlmSelector extends Component {
@service currentUser;
@service keyValueStore;
@ -20,7 +20,7 @@ export default class AiPersonaLlmSelector extends Component {
super(...arguments);
if (this.botOptions?.length) {
this.#loadStoredPersona();
this.#loadStoredAgent();
this.#loadStoredLlm();
next(() => {
@ -34,25 +34,25 @@ export default class AiPersonaLlmSelector extends Component {
}
get hasLlmSelector() {
return this.currentUser.ai_enabled_chat_bots.any((bot) => !bot.is_persona);
return this.currentUser.ai_enabled_chat_bots.any((bot) => !bot.is_agent);
}
get botOptions() {
if (!this.currentUser.ai_enabled_personas) {
if (!this.currentUser.ai_enabled_agents) {
return;
}
let enabledPersonas = this.currentUser.ai_enabled_personas;
let enabledAgents = this.currentUser.ai_enabled_agents;
if (!this.hasLlmSelector) {
enabledPersonas = enabledPersonas.filter((persona) => persona.username);
enabledAgents = enabledAgents.filter((agent) => agent.username);
}
return enabledPersonas.map((persona) => {
return enabledAgents.map((agent) => {
return {
id: persona.id,
name: persona.name,
description: persona.description,
id: agent.id,
name: agent.name,
description: agent.description,
};
});
}
@ -67,8 +67,8 @@ export default class AiPersonaLlmSelector extends Component {
set value(newValue) {
this._value = newValue;
this.keyValueStore.setItem(PERSONA_SELECTOR_KEY, newValue);
this.args.setPersonaId(newValue);
this.keyValueStore.setItem(AGENT_SELECTOR_KEY, newValue);
this.args.setAgentId(newValue);
this.setAllowLLMSelector();
this.resetTargetRecipients();
}
@ -79,11 +79,11 @@ export default class AiPersonaLlmSelector extends Component {
return;
}
const persona = this.currentUser.ai_enabled_personas.find(
(innerPersona) => innerPersona.id === this._value
const agent = this.currentUser.ai_enabled_agents.find(
(innerAgent) => innerAgent.id === this._value
);
this.allowLLMSelector = !persona?.force_default_llm;
this.allowLLMSelector = !agent?.force_default_llm;
}
get currentLlm() {
@ -104,16 +104,16 @@ export default class AiPersonaLlmSelector extends Component {
).username;
this.args.setTargetRecipient(botUsername);
} else {
const persona = this.currentUser.ai_enabled_personas.find(
(innerPersona) => innerPersona.id === this._value
const agent = this.currentUser.ai_enabled_agents.find(
(innerAgent) => innerAgent.id === this._value
);
this.args.setTargetRecipient(persona.username || "");
this.args.setTargetRecipient(agent.username || "");
}
}
get llmOptions() {
const availableBots = this.currentUser.ai_enabled_chat_bots
.filter((bot) => !bot.is_persona)
.filter((bot) => !bot.is_agent)
.filter(Boolean);
return availableBots
@ -130,18 +130,18 @@ export default class AiPersonaLlmSelector extends Component {
return this.allowLLMSelector && this.llmOptions.length > 1;
}
#loadStoredPersona() {
let personaId = this.keyValueStore.getItem(PERSONA_SELECTOR_KEY);
#loadStoredAgent() {
let agentId = this.keyValueStore.getItem(AGENT_SELECTOR_KEY);
this._value = this.botOptions[0].id;
if (personaId) {
personaId = parseInt(personaId, 10);
if (this.botOptions.any((bot) => bot.id === personaId)) {
this._value = personaId;
if (agentId) {
agentId = parseInt(agentId, 10);
if (this.botOptions.any((bot) => bot.id === agentId)) {
this._value = agentId;
}
}
this.args.setPersonaId(this._value);
this.args.setAgentId(this._value);
}
#loadStoredLlm() {
@ -172,13 +172,13 @@ export default class AiPersonaLlmSelector extends Component {
}
<template>
<div class="persona-llm-selector">
<div class="persona-llm-selector__selection-wrapper gpt-persona">
<div class="agent-llm-selector">
<div class="agent-llm-selector__selection-wrapper gpt-agent">
{{#if @showLabels}}
<label>{{i18n "discourse_ai.ai_bot.persona"}}</label>
<label>{{i18n "discourse_ai.ai_bot.agent"}}</label>
{{/if}}
<DropdownSelectBox
class="persona-llm-selector__persona-dropdown"
class="agent-llm-selector__agent-dropdown"
@value={{this.value}}
@content={{this.botOptions}}
@options={{hash
@ -188,12 +188,12 @@ export default class AiPersonaLlmSelector extends Component {
/>
</div>
{{#if this.showLLMSelector}}
<div class="persona-llm-selector__selection-wrapper llm-selector">
<div class="agent-llm-selector__selection-wrapper llm-selector">
{{#if @showLabels}}
<label>{{i18n "discourse_ai.ai_bot.llm"}}</label>
{{/if}}
<DropdownSelectBox
class="persona-llm-selector__llm-dropdown"
class="agent-llm-selector__llm-dropdown"
@value={{this.currentLlm}}
@content={{this.llmOptions}}
@options={{hash icon=(if @showLabels "angle-down" "globe")}}

View File

@ -4,7 +4,7 @@ import { eq } from "truth-helpers";
import { i18n } from "discourse-i18n";
import AiLlmSelector from "./ai-llm-selector";
export default class AiPersonaToolOptions extends Component {
export default class AiAgentToolOptions extends Component {
get showToolOptions() {
const allTools = this.args.allTools;
if (!allTools || !this.args.data.tools) {
@ -36,19 +36,19 @@ export default class AiPersonaToolOptions extends Component {
<template>
{{#if this.showToolOptions}}
<@form.Container
@title={{i18n "discourse_ai.ai_persona.tool_options"}}
@title={{i18n "discourse_ai.ai_agent.tool_options"}}
@direction="column"
@format="full"
>
<@form.Object
@name="toolOptions"
@title={{i18n "discourse_ai.ai_persona.tool_options"}}
@title={{i18n "discourse_ai.ai_agent.tool_options"}}
as |toolObj optsPerTool|
>
{{#each (this.formObjectKeys optsPerTool) as |toolId|}}
<div class="ai-persona-editor__tool-options">
<div class="ai-agent-editor__tool-options">
{{#let (get this.toolsMetadata toolId) as |toolMeta|}}
<div class="ai-persona-editor__tool-options-name">
<div class="ai-agent-editor__tool-options-name">
{{toolMeta.name}}
</div>
<toolObj.Object @name={{toolId}} as |optionsObj optionData|>
@ -73,7 +73,7 @@ export default class AiPersonaToolOptions extends Component {
@value={{field.value}}
@llms={{@llms}}
@onChange={{field.set}}
@class="ai-persona-tool-option-editor__llms"
@class="ai-agent-tool-option-editor__llms"
/>
</field.Custom>
{{else if (eq optionMeta.type "boolean")}}

View File

@ -23,7 +23,7 @@ import {
} from "discourse/lib/user-status-on-autocomplete";
import { clipboardHelpers } from "discourse/lib/utilities";
import { i18n } from "discourse-i18n";
import AiPersonaLlmSelector from "discourse/plugins/discourse-ai/discourse/components/ai-persona-llm-selector";
import AiAgentLlmSelector from "discourse/plugins/discourse-ai/discourse/components/ai-agent-llm-selector";
export default class AiBotConversations extends Component {
@service aiBotConversationsHiddenSubmit;
@ -133,8 +133,8 @@ export default class AiBotConversations extends Component {
}
@action
setPersonaId(id) {
this.aiBotConversationsHiddenSubmit.personaId = id;
setAgentId(id) {
this.aiBotConversationsHiddenSubmit.agentId = id;
}
@action
@ -279,9 +279,9 @@ export default class AiBotConversations extends Component {
<template>
<div class="ai-bot-conversations">
<AiPersonaLlmSelector
<AiAgentLlmSelector
@showLabels={{true}}
@setPersonaId={{this.setPersonaId}}
@setAgentId={{this.setAgentId}}
@setTargetRecipient={{this.setTargetRecipient}}
/>

View File

@ -116,7 +116,7 @@ export default class AiLlmEditorForm extends Component {
const localized = usedBy.map((m) => {
return i18n(`discourse_ai.llms.usage.${m.type}`, {
persona: m.name,
agent: m.name,
});
});

View File

@ -8,7 +8,7 @@ const AiLlmSelector = <template>
@onChange={{@onChange}}
@options={{hash
filterable=true
none="discourse_ai.ai_persona.no_llm_selected"
none="discourse_ai.ai_agent.no_llm_selected"
}}
class={{@class}}
/>

View File

@ -112,9 +112,9 @@ export default class AiLlmsListEditor extends Component {
}
localizeUsage(usage) {
if (usage.type === "ai_persona") {
return i18n("discourse_ai.llms.usage.ai_persona", {
persona: usage.name,
if (usage.type === "ai_agent") {
return i18n("discourse_ai.llms.usage.ai_agent", {
agent: usage.name,
});
} else if (usage.type === "automation") {
return i18n("discourse_ai.llms.usage.automation", {

View File

@ -1,117 +0,0 @@
import Component from "@glimmer/component";
import { fn } from "@ember/helper";
import { on } from "@ember/modifier";
import { action } from "@ember/object";
import { LinkTo } from "@ember/routing";
import { service } from "@ember/service";
import DBreadcrumbsItem from "discourse/components/d-breadcrumbs-item";
import DPageSubheader from "discourse/components/d-page-subheader";
import DToggleSwitch from "discourse/components/d-toggle-switch";
import concatClass from "discourse/helpers/concat-class";
import { popupAjaxError } from "discourse/lib/ajax-error";
import { i18n } from "discourse-i18n";
import AdminConfigAreaEmptyList from "admin/components/admin-config-area-empty-list";
import AiPersonaEditor from "./ai-persona-editor";
export default class AiPersonaListEditor extends Component {
@service adminPluginNavManager;
@action
async toggleEnabled(persona) {
const oldValue = persona.enabled;
const newValue = !oldValue;
try {
persona.set("enabled", newValue);
await persona.save();
} catch (err) {
persona.set("enabled", oldValue);
popupAjaxError(err);
}
}
<template>
<DBreadcrumbsItem
@path="/admin/plugins/{{this.adminPluginNavManager.currentPlugin.name}}/ai-personas"
@label={{i18n "discourse_ai.ai_persona.short_title"}}
/>
<section class="ai-persona-list-editor__current admin-detail pull-left">
{{#if @currentPersona}}
<AiPersonaEditor @model={{@currentPersona}} @personas={{@personas}} />
{{else}}
<DPageSubheader
@titleLabel={{i18n "discourse_ai.ai_persona.short_title"}}
@descriptionLabel={{i18n
"discourse_ai.ai_persona.persona_description"
}}
@learnMoreUrl="https://meta.discourse.org/t/ai-bot-personas/306099"
>
<:actions as |actions|>
<actions.Primary
@label="discourse_ai.ai_persona.new"
@route="adminPlugins.show.discourse-ai-personas.new"
@icon="plus"
class="ai-persona-list-editor__new-button"
/>
</:actions>
</DPageSubheader>
{{#if @personas}}
<table class="content-list ai-persona-list-editor d-admin-table">
<thead>
<tr>
<th>{{i18n "discourse_ai.ai_persona.name"}}</th>
<th>{{i18n "discourse_ai.ai_persona.list.enabled"}}</th>
<th></th>
</tr>
</thead>
<tbody>
{{#each @personas as |persona|}}
<tr
data-persona-id={{persona.id}}
class={{concatClass
"ai-persona-list__row d-admin-row__content"
(if persona.priority "priority")
}}
>
<td class="d-admin-row__overview">
<div class="ai-persona-list__name-with-description">
<div class="ai-persona-list__name">
<strong>
{{persona.name}}
</strong>
</div>
<div class="ai-persona-list__description">
{{persona.description}}
</div>
</div>
</td>
<td class="d-admin-row__detail">
<DToggleSwitch
@state={{persona.enabled}}
{{on "click" (fn this.toggleEnabled persona)}}
/>
</td>
<td class="d-admin-row__controls">
<LinkTo
@route="adminPlugins.show.discourse-ai-personas.edit"
@model={{persona}}
class="btn btn-text btn-small"
>{{i18n "discourse_ai.ai_persona.edit"}} </LinkTo>
</td>
</tr>
{{/each}}
</tbody>
</table>
{{else}}
<AdminConfigAreaEmptyList
@ctaLabel="discourse_ai.ai_persona.new"
@ctaRoute="adminPlugins.show.discourse-ai-personas.new"
@ctaClass="ai-persona-list-editor__empty-new-button"
@emptyLabel="discourse_ai.ai_persona.no_personas"
/>
{{/if}}
{{/if}}
</section>
</template>
}

View File

@ -154,8 +154,8 @@ export default class AiSearchDiscoveries extends Component {
}
get canContinueConversation() {
const personas = this.currentUser?.ai_enabled_personas;
if (!personas) {
const agents = this.currentUser?.ai_enabled_agents;
if (!agents) {
return false;
}
@ -163,16 +163,16 @@ export default class AiSearchDiscoveries extends Component {
return false;
}
const discoverPersona = personas.find(
(persona) =>
persona.id === parseInt(this.siteSettings?.ai_bot_discover_persona, 10)
const discoverAgent = agents.find(
(agent) =>
agent.id === parseInt(this.siteSettings?.ai_bot_discover_agent, 10)
);
const discoverPersonaHasBot = discoverPersona?.username;
const discoverAgentHasBot = discoverAgent?.username;
return (
this.discobotDiscoveries.discovery?.length > 0 &&
!this.smoothStreamer.isStreaming &&
discoverPersonaHasBot
discoverAgentHasBot
);
}

View File

@ -7,16 +7,16 @@ import ModalJsonSchemaEditor from "discourse/components/modal/json-schema-editor
import { prettyJSON } from "discourse/lib/formatter";
import { i18n } from "discourse-i18n";
export default class AiPersonaResponseFormatEditor extends Component {
export default class AiAgentResponseFormatEditor extends Component {
@tracked showJsonEditorModal = false;
jsonSchema = {
type: "array",
uniqueItems: true,
title: i18n("discourse_ai.ai_persona.response_format.modal.root_title"),
title: i18n("discourse_ai.ai_agent.response_format.modal.root_title"),
items: {
type: "object",
title: i18n("discourse_ai.ai_persona.response_format.modal.key_title"),
title: i18n("discourse_ai.ai_agent.response_format.modal.key_title"),
properties: {
key: {
type: "string",
@ -30,7 +30,7 @@ export default class AiPersonaResponseFormatEditor extends Component {
};
get editorTitle() {
return i18n("discourse_ai.ai_persona.response_format.title");
return i18n("discourse_ai.ai_agent.response_format.title");
}
get responseFormatAsJSON() {
@ -64,21 +64,21 @@ export default class AiPersonaResponseFormatEditor extends Component {
<template>
<@form.Container @title={{this.editorTitle}} @format="large">
<div class="ai-persona-editor__response-format">
<div class="ai-agent-editor__response-format">
{{#if (gt @data.response_format.length 0)}}
<pre class="ai-persona-editor__response-format-pre">
<pre class="ai-agent-editor__response-format-pre">
<code
>{{this.displayJSON}}</code>
</pre>
{{else}}
<div class="ai-persona-editor__response-format-none">
{{i18n "discourse_ai.ai_persona.response_format.no_format"}}
<div class="ai-agent-editor__response-format-none">
{{i18n "discourse_ai.ai_agent.response_format.no_format"}}
</div>
{{/if}}
<@form.Button
@action={{this.openModal}}
@label="discourse_ai.ai_persona.response_format.open_modal"
@label="discourse_ai.ai_agent.response_format.open_modal"
@disabled={{@data.system}}
/>
</div>

View File

@ -1,14 +1,14 @@
import Component from "@glimmer/component";
import { isGPTBot } from "../../lib/ai-bot-helper";
export default class AiPersonaFlair extends Component {
export default class AiAgentFlair extends Component {
static shouldRender(args) {
return isGPTBot(args.post.user);
}
<template>
<span class="persona-flair">
{{@outletArgs.post.topic.ai_persona_name}}
<span class="agent-flair">
{{@outletArgs.post.topic.ai_agent_name}}
</span>
</template>
}

View File

@ -70,7 +70,7 @@ export default class RagOptionsFk extends Component {
@value={{field.value}}
@llms={{this.visionLlms}}
@onChange={{field.set}}
@class="ai-persona-editor__llms"
@class="ai-agent-editor__llms"
/>
</field.Custom>
</@form.Field>

View File

@ -1,7 +1,7 @@
import Component from "@glimmer/component";
import { action } from "@ember/object";
import { service } from "@ember/service";
import AiPersonaLlmSelector from "discourse/plugins/discourse-ai/discourse/components/ai-persona-llm-selector";
import AiAgentLlmSelector from "discourse/plugins/discourse-ai/discourse/components/ai-agent-llm-selector";
function isBotMessage(composer, currentUser) {
if (
@ -21,7 +21,7 @@ function isBotMessage(composer, currentUser) {
export default class BotSelector extends Component {
static shouldRender(args, container) {
return (
container?.currentUser?.ai_enabled_personas &&
container?.currentUser?.ai_enabled_agents &&
isBotMessage(args.model, container.currentUser)
);
}
@ -29,8 +29,8 @@ export default class BotSelector extends Component {
@service currentUser;
@action
setPersonaIdOnComposer(id) {
this.args.outletArgs.model.metaData = { ai_persona_id: id };
setAgentIdOnComposer(id) {
this.args.outletArgs.model.metaData = { ai_agent_id: id };
}
@action
@ -39,8 +39,8 @@ export default class BotSelector extends Component {
}
<template>
<AiPersonaLlmSelector
@setPersonaId={{this.setPersonaIdOnComposer}}
<AiAgentLlmSelector
@setAgentId={{this.setAgentIdOnComposer}}
@setTargetRecipient={{this.setTargetRecipientsOnComposer}}
/>
</template>

View File

@ -9,8 +9,8 @@ import AiSearchDiscoveriesTooltip from "../../components/ai-search-discoveries-t
export default class AiFullPageDiscobotDiscoveries extends Component {
static shouldRender(_args, { siteSettings, currentUser }) {
return (
siteSettings.ai_bot_discover_persona &&
currentUser?.can_use_ai_bot_discover_persona &&
siteSettings.ai_bot_discover_agent &&
currentUser?.can_use_ai_bot_discover_agent &&
currentUser?.user_option?.ai_search_discoveries
);
}

View File

@ -8,8 +8,8 @@ import AiSearchDiscoveriesTooltip from "../../components/ai-search-discoveries-t
export default class AiDiscobotDiscoveries extends Component {
static shouldRender(args, { siteSettings, currentUser }) {
return (
siteSettings.ai_bot_discover_persona &&
currentUser?.can_use_ai_bot_discover_persona &&
siteSettings.ai_bot_discover_agent &&
currentUser?.can_use_ai_bot_discover_agent &&
currentUser?.user_option?.ai_search_discoveries
);
}

View File

@ -35,8 +35,8 @@ export default class PreferencesAiController extends Controller {
checked: this.model.user_option.ai_search_discoveries,
isIncluded: (() => {
return (
this.siteSettings.ai_bot_discover_persona &&
this.model?.can_use_ai_bot_discover_persona &&
this.siteSettings.ai_bot_discover_agent &&
this.model?.can_use_ai_bot_discover_agent &&
this.siteSettings.ai_bot_enabled
);
})(),

View File

@ -5,7 +5,7 @@ import Composer from "discourse/models/composer";
import { i18n } from "discourse-i18n";
import ShareFullTopicModal from "../components/modal/share-full-topic-modal";
const MAX_PERSONA_USER_ID = -1200;
const MAX_AGENT_USER_ID = -1200;
let enabledChatBotMap = null;
@ -40,12 +40,12 @@ export function getBotType(user) {
if (!bot) {
return;
}
return bot.is_persona ? "persona" : "llm";
return bot.is_agent ? "agent" : "llm";
}
export function isPostFromAiBot(post, currentUser) {
return (
post.user_id <= MAX_PERSONA_USER_ID ||
post.user_id <= MAX_AGENT_USER_ID ||
!!currentUser?.ai_enabled_chat_bots?.any(
(bot) => post.username === bot.username
)
@ -66,7 +66,7 @@ export async function composeAiBotMessage(
options = {
skipFocus: false,
topicBody: "",
personaUsername: null,
agentUsername: null,
}
) {
const currentUser = composer.currentUser;
@ -77,8 +77,8 @@ export async function composeAiBotMessage(
botUsername = currentUser.ai_enabled_chat_bots.find(
(bot) => bot.model_name === targetBot
)?.username;
} else if (options.personaUsername) {
botUsername = options.personaUsername;
} else if (options.agentUsername) {
botUsername = options.agentUsername;
} else {
botUsername = currentUser.ai_enabled_chat_bots[0].username;
}

View File

@ -16,7 +16,7 @@ export default class AiBotConversationsHiddenSubmit extends Service {
@tracked loading = false;
personaId;
agentId;
targetUsername;
uploads = [];
@ -35,12 +35,12 @@ export default class AiBotConversationsHiddenSubmit extends Service {
async submitToBot() {
if (
this.inputValue.length <
this.siteSettings.min_personal_message_post_length
this.siteSettings.min_agentl_message_post_length
) {
return this.dialog.alert({
message: i18n(
"discourse_ai.ai_bot.conversations.min_input_length_message",
{ count: this.siteSettings.min_personal_message_post_length }
{ count: this.siteSettings.min_agentl_message_post_length }
),
didConfirm: () => this.focusInput(),
didCancel: () => this.focusInput(),
@ -78,7 +78,7 @@ export default class AiBotConversationsHiddenSubmit extends Service {
title,
archetype: "private_message",
target_recipients: this.targetUsername,
meta_data: { ai_persona_id: this.personaId },
meta_data: { ai_agent_id: this.agentId },
},
});

View File

@ -22,9 +22,9 @@ export default {
description: "discourse_ai.llms.preconfigured.description",
},
{
label: "discourse_ai.ai_persona.short_title",
route: "adminPlugins.show.discourse-ai-personas",
description: "discourse_ai.ai_persona.persona_description",
label: "discourse_ai.ai_agent.short_title",
route: "adminPlugins.show.discourse-ai-agents",
description: "discourse_ai.ai_agent.agent_description",
},
{
label: "discourse_ai.embeddings.short_title",

View File

@ -3,7 +3,7 @@ import { withSilencedDeprecations } from "discourse/lib/deprecated";
import { withPluginApi } from "discourse/lib/plugin-api";
import { registerWidgetShim } from "discourse/widgets/render-glimmer";
import AiBotHeaderIcon from "../discourse/components/ai-bot-header-icon";
import AiPersonaFlair from "../discourse/components/post/ai-persona-flair";
import AiAgentFlair from "../discourse/components/post/ai-agent-flair";
import AiCancelStreamingButton from "../discourse/components/post-menu/ai-cancel-streaming-button";
import AiDebugButton from "../discourse/components/post-menu/ai-debug-button";
import AiShareButton from "../discourse/components/post-menu/ai-share-button";
@ -53,35 +53,35 @@ function initializeAIBotReplies(api) {
});
}
function initializePersonaDecorator(api) {
api.renderAfterWrapperOutlet("post-meta-data-poster-name", AiPersonaFlair);
function initializeAgentDecorator(api) {
api.renderAfterWrapperOutlet("post-meta-data-poster-name", AiAgentFlair);
withSilencedDeprecations("discourse.post-stream-widget-overrides", () =>
initializeWidgetPersonaDecorator(api)
initializeWidgetAgentDecorator(api)
);
}
function initializeWidgetPersonaDecorator(api) {
function initializeWidgetAgentDecorator(api) {
api.decorateWidget(`poster-name:after`, (dec) => {
const botType = getBotType(dec.attrs.user);
// we have 2 ways of decorating
// 1. if a bot is a LLM we decorate with persona name
// 2. if bot is a persona we decorate with LLM name
// 1. if a bot is a LLM we decorate with agent name
// 2. if bot is a agent we decorate with LLM name
if (botType === "llm") {
return dec.widget.attach("persona-flair", {
personaName: dec.model?.topic?.ai_persona_name,
return dec.widget.attach("agent-flair", {
agentName: dec.model?.topic?.ai_agent_name,
});
} else if (botType === "persona") {
return dec.widget.attach("persona-flair", {
personaName: dec.model?.llm_name,
} else if (botType === "agent") {
return dec.widget.attach("agent-flair", {
agentName: dec.model?.llm_name,
});
}
});
registerWidgetShim(
"persona-flair",
"span.persona-flair",
hbs`{{@data.personaName}}`
"agent-flair",
"span.agent-flair",
hbs`{{@data.agentName}}`
);
}
@ -149,11 +149,11 @@ function initializeShareTopicButton(api) {
showShareConversationModal(modal, this.topic.id);
},
classNames: ["share-ai-conversation-button"],
dependentKeys: ["topic.ai_persona_name"],
dependentKeys: ["topic.ai_agent_name"],
displayed() {
return (
currentUser?.can_share_ai_bot_conversations &&
this.topic.ai_persona_name
this.topic.ai_agent_name
);
},
});
@ -171,7 +171,7 @@ export default {
withPluginApi((api) => {
attachHeaderIcon(api);
initializeAIBotReplies(api);
initializePersonaDecorator(api);
initializeAgentDecorator(api);
initializeDebugButton(api, container);
initializeShareButton(api, container);
initializeShareTopicButton(api, container);

View File

@ -6,7 +6,7 @@ export default apiInitializer((api) => {
if (
!settings.ai_bot_enabled ||
!currentUser?.can_use_ai_bot_discover_persona
!currentUser?.can_use_ai_bot_discover_agent
) {
return;
}

View File

@ -8,7 +8,7 @@
display: block;
}
&__row-item-persona {
&__row-item-agent {
padding: 0;
text-align: left;

View File

@ -157,7 +157,7 @@ body.has-ai-conversations-sidebar {
flex-direction: column;
height: calc(100dvh - var(--header-offset) - 5em);
.persona-llm-selector {
.agent-llm-selector {
display: flex;
gap: 0.5em;
justify-content: flex-start;

View File

@ -1,8 +1,8 @@
.admin-contents .ai-persona-list-editor {
.admin-contents .ai-agent-list-editor {
margin-top: 0;
}
.ai-persona-list-editor {
.ai-agent-list-editor {
&__header {
display: flex;
justify-content: space-between;
@ -23,7 +23,7 @@
}
}
.ai-persona-tool-option-editor {
.ai-agent-tool-option-editor {
&__instructions {
color: var(--primary-medium);
font-size: var(--font-down-1);
@ -31,7 +31,7 @@
}
}
.ai-personas__container {
.ai-agents__container {
display: flex;
flex-direction: row;
align-items: center;
@ -39,7 +39,7 @@
width: 100%;
}
.ai-persona-editor {
.ai-agent-editor {
padding-left: 0.5em;
&__tool-options {

View File

@ -11,7 +11,7 @@ nav.post-controls .actions button.cancel-streaming {
}
}
.persona-llm-selector {
.agent-llm-selector {
display: flex;
justify-content: space-between;
align-items: center;
@ -24,7 +24,7 @@ nav.post-controls .actions button.cancel-streaming {
}
.ai-bot-pm {
.gpt-persona {
.gpt-agent {
margin-bottom: 5px;
}
@ -75,7 +75,7 @@ article.streaming nav.post-controls .actions button.cancel-streaming {
}
}
.topic-body .persona-flair {
.topic-body .agent-flair {
order: 2;
font-size: var(--font-down-1);
}

View File

@ -1,4 +1,4 @@
.ai-persona-editor {
.ai-agent-editor {
&__system_prompt,
&__description,
.select-kit.multi-select {

View File

@ -45,7 +45,7 @@
}
.ai-tool-list-editor__current,
.ai-persona-list-editor__current,
.ai-agent-list-editor__current,
.ai-llms-list-editor__configured {
.d-admin-table {
tr:hover {

View File

@ -128,7 +128,7 @@ ar:
flag_post:
label: "الإبلاغ عن المنشور"
description: "يبلغ عن المنشور (سواءً كان عشوائيًا أو للمراجعة)"
include_personal_messages:
include_agentl_messages:
label: "تضمين الرسائل الشخصية"
description: "افحص الرسائل الشخصية وافرزها أيضًا"
model:
@ -219,7 +219,7 @@ ar:
last_week: "الأسبوع الماضي"
last_month: "الشهر الماضي"
custom: "مُخصَّص..."
ai_persona:
ai_agent:
ai_tools: "الأدوات"
tool_strategies:
all: "التطبيق على كل الردود"
@ -261,8 +261,8 @@ ar:
allow_chat_direct_messages_help: "إذا تم التفعيل، يمكن للمستخدمين في المجموعات المسموح بها إرسال رسالة مباشرة إلى هذه الشخصية."
allow_chat_channel_mentions: "السماح بالإشارات في قناة الدردشة"
allow_chat_channel_mentions_help: "إذا تم التفعيل، يمكن للمستخدمين في المجموعات المسموح بها الإشارة إلى هذه الشخصية في قنوات الدردشة."
allow_personal_messages: "السماح بالرسائل الشخصية"
allow_personal_messages_help: "إذا تم التفعيل، يمكن للمستخدمين في المجموعات المسموح بها إرسال رسائل شخصية إلى هذه الشخصية."
allow_agentl_messages: "السماح بالرسائل الشخصية"
allow_agentl_messages_help: "إذا تم التفعيل، يمكن للمستخدمين في المجموعات المسموح بها إرسال رسائل شخصية إلى هذه الشخصية."
allow_topic_mentions: "السماح بالإشارات في الموضوعات"
allow_topic_mentions_help: "إذا تم التفعيل، يمكن للمستخدمين في المجموعات المسموح بها الإشارة إلى هذه الشخصية في الموضوعات."
force_default_llm: "استخدام نموذج اللغة الافتراضي دائمًا"
@ -274,7 +274,7 @@ ar:
allowed_groups: "المجموعات المسموح بها"
confirm_delete: "هل تريد بالتأكيد حذف هذه الشخصية؟"
new: "شخصية جديدة"
no_personas: "لم تُنشئ أي شخصيات بعد"
no_agents: "لم تُنشئ أي شخصيات بعد"
title: "الشخصيات"
short_title: "الشخصيات"
delete: "حذف"
@ -287,7 +287,7 @@ ar:
tool_options: "خيارات الأداة"
rag_conversation_chunks: "البحث في أجزاء المحادثة"
rag_conversation_chunks_help: "عدد الأجزاء التي سيتم استخدامها لإي عمليات البحث ضمن نموذج RAG. يزداد مقدار السياق الذي يمكن للذكاء الاصطناعي استخدامه بزيادة القيمة."
persona_description: "تُعد الشخصيات ميزة قوية تتيح لك تخصيص سلوك محرك الذكاء الاصطناعي في منتدى Discourse الخاص بك. إنها تعمل بمثابة \"رسالة نظام\" توجِّه ردود الذكاء الاصطناعي وتفاعلاته، مما يساعد في إنشاء تجربة مستخدم أكثر تخصيصًا وتفاعليةً."
agent_description: "تُعد الشخصيات ميزة قوية تتيح لك تخصيص سلوك محرك الذكاء الاصطناعي في منتدى Discourse الخاص بك. إنها تعمل بمثابة \"رسالة نظام\" توجِّه ردود الذكاء الاصطناعي وتفاعلاته، مما يساعد في إنشاء تجربة مستخدم أكثر تخصيصًا وتفاعليةً."
response_format:
open_modal: "تعديل"
modal:
@ -380,7 +380,7 @@ ar:
usage:
ai_bot: "روبوت الذكاء الاصطناعي"
ai_helper: "المساعد"
ai_persona: "الشخصية (%{persona})"
ai_agent: "الشخصية (%{agent})"
ai_summarization: "تلخيص"
ai_embeddings_semantic_search: "البحث باستخدام الذكاء الاصطناعي"
ai_spam: "عشوائي"

View File

@ -50,7 +50,7 @@ be:
summary: "вынік"
username: "Імя карыстальніка"
total_requests: "Усяго запытаў"
ai_persona:
ai_agent:
back: "Назад"
name: "імя"
edit: "рэдагаваць"

View File

@ -56,7 +56,7 @@ bg:
periods:
last_day: "Последните 24 часа"
custom: "Ръчно задаване..."
ai_persona:
ai_agent:
back: "Назад"
name: "Име"
edit: "Редактирай"

View File

@ -51,7 +51,7 @@ bs_BA:
usage:
summary: "Sažetak"
username: "Nadimak"
ai_persona:
ai_agent:
back: "Prethodno"
name: "Ime"
edit: "Edit"

View File

@ -55,7 +55,7 @@ ca:
total_requests: "Total de peticions"
periods:
last_day: "Últimes 24 hores"
ai_persona:
ai_agent:
back: "Enrere"
name: "Nom"
edit: "Edita"
@ -100,7 +100,7 @@ ca:
success: "Èxit!"
providers:
google: "Google"
fake: "Personalitzat"
fake: "Agentlitzat"
ai_helper:
context_menu:
cancel: "Cancel·la"
@ -126,7 +126,7 @@ ca:
display_name: "Nom"
providers:
google: "Google"
fake: "Personalitzat"
fake: "Agentlitzat"
ai_bot:
debug_ai_modal:
request: "Sol·licita"

View File

@ -58,7 +58,7 @@ cs:
periods:
last_day: "Posledních 24 hodin"
custom: "Vlastní…"
ai_persona:
ai_agent:
back: "Zpět"
name: "Jméno"
edit: "Upravit"

View File

@ -59,7 +59,7 @@ da:
periods:
last_day: "Seneste 24 timer"
custom: "Tilpasset..."
ai_persona:
ai_agent:
back: "Tilbage"
name: "Navn"
edit: "Rediger"

View File

@ -12,8 +12,8 @@ de:
descriptions:
discourse_ai:
search: "Ermöglicht KI-Suche"
stream_completion: "Ermöglicht das Streamen von KI-Persona-Vervollständigungen"
update_personas: "Ermöglicht die Aktualisierung von KI-Personas"
stream_completion: "Ermöglicht das Streamen von KI-Agent-Vervollständigungen"
update_agents: "Ermöglicht die Aktualisierung von KI-Agents"
site_settings:
categories:
discourse_ai: "Discourse-KI"
@ -102,17 +102,17 @@ de:
tool:
label: "Werkzeug"
description: "Werkzeug für die Triage (das Werkzeug darf keine Parameter definiert haben)"
llm_persona_triage:
llm_agent_triage:
fields:
persona:
label: "Persona"
description: "KI-Persona, die für die Triage verwendet werden soll (Standard-LLM und -Benutzer müssen eingestellt sein)"
agent:
label: "Agent"
description: "KI-Agent, die für die Triage verwendet werden soll (Standard-LLM und -Benutzer müssen eingestellt sein)"
whisper:
label: "Als Flüstern antworten"
description: "Ob die Antwort der Persona ein Flüstern sein soll"
description: "Ob die Antwort der Agent ein Flüstern sein soll"
silent_mode:
label: "Stiller Modus"
description: "Im stillen Modus empfängt die Persona den Inhalt, schreibt aber nichts in das Forum - nützlich bei der Triage mit Tools"
description: "Im stillen Modus empfängt die Agent den Inhalt, schreibt aber nichts in das Forum - nützlich bei der Triage mit Tools"
llm_triage:
fields:
system_prompt:
@ -148,15 +148,15 @@ de:
flag_post:
label: "Beitrag melden"
description: "Meldet den Beitrag (entweder als Spam oder zur Überprüfung)"
include_personal_messages:
include_agentl_messages:
label: "Persönliche Nachrichten einbeziehen"
description: "Auch persönliche Nachrichten scannen und sortieren"
whisper:
label: "Als Flüstern antworten"
description: "Ob die Antwort der KI ein Flüstern sein soll"
reply_persona:
label: "Antwort Persona"
description: "KI-Persona, die für Antworten verwendet werden soll (muss Standard-LLM haben), wird gegenüber vorgefertigten Antworten bevorzugt"
reply_agent:
label: "Antwort Agent"
description: "KI-Agent, die für Antworten verwendet werden soll (muss Standard-LLM haben), wird gegenüber vorgefertigten Antworten bevorzugt"
model:
label: "Modell"
description: "Für die Triage verwendetes Sprachmodell"
@ -167,12 +167,12 @@ de:
title: "KI"
features:
short_title: "Funktionen"
description: "Dies sind die KI-Funktionen, die den Besuchern deiner Website zur Verfügung stehen. Sie können so konfiguriert werden, dass sie bestimmte Personas und LLM verwenden, und der Zugriff kann mithilfe von Gruppen gesteuert werden."
description: "Dies sind die KI-Funktionen, die den Besuchern deiner Website zur Verfügung stehen. Sie können so konfiguriert werden, dass sie bestimmte Agents und LLM verwenden, und der Zugriff kann mithilfe von Gruppen gesteuert werden."
back: "Zurück"
list:
header:
name: "Name"
persona: "Persona"
agent: "Agent"
groups: "Gruppen"
edit: "Bearbeiten"
set_up: "Einrichten"
@ -253,7 +253,7 @@ de:
last_week: "Letzte Woche"
last_month: "Letzter Monat"
custom: "Benutzerdefiniert …"
ai_persona:
ai_agent:
ai_tools: "Tools"
tool_strategies:
all: "Auf alle Antworten anwenden"
@ -265,7 +265,7 @@ de:
edit: "Bearbeiten"
description: "Beschreibung"
no_llm_selected: "Kein Sprachmodell ausgewählt"
use_parent_llm: "Verwende das Personas Sprachmodell"
use_parent_llm: "Verwende das Agents Sprachmodell"
max_context_posts: "Max. Kontext-Beiträge"
max_context_posts_help: "Die maximale Anzahl von Beiträgen, die die KI als Kontext für die Antwort auf einen Nutzer verwenden soll (leer für Standardwert)."
vision_enabled: Sehen aktiviert
@ -278,12 +278,12 @@ de:
tool_details: Tool-Details anzeigen
tool_details_help: Zeigt den Endnutzern Details darüber, welche Tools das Sprachmodell ausgelöst hat.
mentionable: Erwähnungen zulassen
mentionable_help: Wenn diese Funktion aktiviert ist, können Nutzer in erlaubten Gruppen diesen Nutzer in Beiträgen erwähnen und die KI wird als diese Persona antworten.
mentionable_help: Wenn diese Funktion aktiviert ist, können Nutzer in erlaubten Gruppen diesen Nutzer in Beiträgen erwähnen und die KI wird als diese Agent antworten.
user: Nutzer
create_user: Benutzer erstellen
create_user_help: Du kannst dieser Persona optional einen Nutzer zuordnen. Wenn du das tust, wird die KI diesen Nutzer verwenden, um auf Anfragen zu antworten.
create_user_help: Du kannst dieser Agent optional einen Nutzer zuordnen. Wenn du das tust, wird die KI diesen Nutzer verwenden, um auf Anfragen zu antworten.
default_llm: Standard-Sprachmodell
default_llm_help: Das Standard-Sprachmodell, das für diese Persona verwendet werden soll. Erforderlich, wenn du die Persona in öffentlichen Beiträgen erwähnen möchtest.
default_llm_help: Das Standard-Sprachmodell, das für diese Agent verwendet werden soll. Erforderlich, wenn du die Agent in öffentlichen Beiträgen erwähnen möchtest.
question_consolidator_llm: Sprachmodell für Fragenkonsolidierer
question_consolidator_llm_help: Das Sprachmodell, das für den Fragenkonsolidierer verwendet werden soll. Du kannst ein weniger leistungsfähiges Modell wählen, um Kosten zu sparen.
system_prompt: System-Eingabeaufforderung
@ -291,34 +291,34 @@ de:
allow_chat_direct_messages: "Chat-Direktnachrichten zulassen"
allow_chat_direct_messages_help: "Wenn aktiviert, können Benutzer in zulässigen Gruppen Direktnachrichten an diese Person senden."
allow_chat_channel_mentions: "Chat-Kanal-Erwähnungen zulassen"
allow_chat_channel_mentions_help: "Wenn aktiviert, können Benutzer in zulässigen Gruppen diese Persona in Chatkanälen erwähnen."
allow_personal_messages: "Persönliche Nachrichten zulassen"
allow_personal_messages_help: "Wenn aktiviert, können Benutzer in zulässigen Gruppen persönliche Nachrichten an diese Persona senden."
allow_chat_channel_mentions_help: "Wenn aktiviert, können Benutzer in zulässigen Gruppen diese Agent in Chatkanälen erwähnen."
allow_agentl_messages: "Persönliche Nachrichten zulassen"
allow_agentl_messages_help: "Wenn aktiviert, können Benutzer in zulässigen Gruppen persönliche Nachrichten an diese Agent senden."
allow_topic_mentions: "Themenerwähnungen zulassen"
allow_topic_mentions_help: "Wenn aktiviert, können Benutzer in zulässigen Gruppen diese Persona in Themen erwähnen."
allow_topic_mentions_help: "Wenn aktiviert, können Benutzer in zulässigen Gruppen diese Agent in Themen erwähnen."
force_default_llm: "Immer das Standard-Sprachmodell verwenden"
save: "Speichern"
saved: "Persona gespeichert"
saved: "Agent gespeichert"
enabled: "Aktiviert?"
tools: "Aktivierte Tools"
forced_tools: "Erzwungene Tools"
allowed_groups: "Zulässige Gruppen"
confirm_delete: "Bist du sicher, dass du diese Persona löschen willst?"
new: "Neue Persona"
no_personas: "Du hast noch keine Personas erstellt"
title: "Personas"
short_title: "Personas"
confirm_delete: "Bist du sicher, dass du diese Agent löschen willst?"
new: "Neue Agent"
no_agents: "Du hast noch keine Agents erstellt"
title: "Agents"
short_title: "Agents"
delete: "Löschen"
temperature: "Temperatur"
temperature_help: "Temperatur, die für das LLM verwendet werden soll. Erhöhen, um die Kreativität zu steigern (leer lassen, um den Standardwert des Modells zu verwenden, im Allgemeinen ein Wert zwischen 0,0 und 2,0)"
top_p: "Top P"
top_p_help: "Top P für das LLM. Erhöhen, um die Zufälligkeit zu steigern (leer lassen, um den Standardwert des Modells zu verwenden, in der Regel ein Wert zwischen 0,0 und 1,0)"
priority: "Priorität"
priority_help: "Personas mit Priorität werden den Benutzern am Anfang der Persona-Liste angezeigt. Wenn mehrere Personas Priorität haben, werden sie alphabetisch sortiert."
priority_help: "Agents mit Priorität werden den Benutzern am Anfang der Agent-Liste angezeigt. Wenn mehrere Agents Priorität haben, werden sie alphabetisch sortiert."
tool_options: "Tool-Optionen"
rag_conversation_chunks: "Unterhaltungs-Chunks durchsuchen"
rag_conversation_chunks_help: "Die Anzahl der Chunks, die für die RAG-Modell-Suche verwendet werden. Erhöhen, um die Menge des Kontexts zu steigern, den die KI verwenden kann."
persona_description: "Personas sind eine leistungsstarke Funktion, mit der du das Verhalten der KI-Engine in deinem Discourse-Forum anpassen kannst. Sie fungieren als „Systemnachricht“, welche die Antworten und Interaktionen der KI steuert und dazu beiträgt, ein persönlicheres und ansprechenderes Erlebnis für Benutzer zu schaffen."
agent_description: "Agents sind eine leistungsstarke Funktion, mit der du das Verhalten der KI-Engine in deinem Discourse-Forum anpassen kannst. Sie fungieren als „Systemnachricht“, welche die Antworten und Interaktionen der KI steuert und dazu beiträgt, ein persönlicheres und ansprechenderes Erlebnis für Benutzer zu schaffen."
response_format:
title: "JSON-Antwortformat"
no_format: "Kein JSON-Format angegeben"
@ -338,7 +338,7 @@ de:
enabled: "KI-Bot?"
ai_bot:
title: "KI-Bot-Optionen"
save_first: "Weitere KI-Bot-Optionen werden verfügbar, sobald du die Persona gespeichert hast."
save_first: "Weitere KI-Bot-Optionen werden verfügbar, sobald du die Agent gespeichert hast."
rag:
title: "RAG"
options:
@ -369,7 +369,7 @@ de:
name_help: "Der Name wird in der Discourse-Benutzeroberfläche angezeigt und ist die Kurzkennung, die Du verwendest, um das Werkzeug in verschiedenen Einstellungen zu finden. Er sollte eindeutig sein (er ist erforderlich)."
new: "Neues Tool"
tool_name: "Werkzeugname"
tool_name_help: "Der Werkzeugname wird dem großen Sprachmodell präsentiert. Es ist nicht eindeutig, aber es ist von Person zu Person unterschiedlich. (Persona wird beim Speichern validiert)"
tool_name_help: "Der Werkzeugname wird dem großen Sprachmodell präsentiert. Es ist nicht eindeutig, aber es ist von Person zu Person unterschiedlich. (Agent wird beim Speichern validiert)"
description: "Beschreibung"
description_help: "Eine klare Beschreibung des Zwecks des Tools für das Sprachmodell"
subheader_description: "Tools erweitern die Fähigkeiten von KI-Bots mit benutzerdefinierten JavaScript-Funktionen."
@ -445,7 +445,7 @@ de:
ai_bot: "KI-Bot"
ai_helper: "Helfer"
ai_helper_image_caption: "Bildbeschriftungen"
ai_persona: "Persona (%{persona})"
ai_agent: "Agent (%{agent})"
ai_summarization: "Zusammenfassen"
ai_embeddings_semantic_search: "KI-Suche"
ai_spam: "Spam"
@ -658,7 +658,7 @@ de:
collapse_view_label: "Vollbild verlassen (ESC- oder Zurück-Taste)"
click_to_run_label: "Artefakt ausführen"
ai_bot:
persona: "Persona"
agent: "Agent"
llm: "Modell"
pm_warning: "KI-Chatbot-Nachrichten werden regelmäßig von Moderatoren überwacht."
cancel_streaming: "Antwort abbrechen"

View File

@ -57,7 +57,7 @@ el:
periods:
last_day: "Τελευταίες 24 ώρες"
custom: "Προσαρμοσμένο..."
ai_persona:
ai_agent:
back: "Πίσω"
name: "Όνομα"
edit: "Επεξεργασία"

View File

@ -6,8 +6,8 @@ en:
descriptions:
discourse_ai:
search: "Allows AI search"
stream_completion: "Allows streaming AI persona completions"
update_personas: "Allows updating AI personas"
stream_completion: "Allows streaming AI agent completions"
update_agents: "Allows updating AI agents"
site_settings:
categories:
@ -100,17 +100,17 @@ en:
label: "Tool"
description: "Tool to use for triage (tool must have no parameters defined)"
llm_persona_triage:
llm_agent_triage:
fields:
persona:
label: "Persona"
description: "AI Persona to use for triage (must have default LLM and User set)"
agent:
label: "Agent"
description: "AI Agent to use for triage (must have default LLM and User set)"
whisper:
label: "Reply as Whisper"
description: "Whether the persona's response should be a whisper"
description: "Whether the agent's response should be a whisper"
silent_mode:
label: "Silent Mode"
description: "In silent mode persona will receive the content but will not post anything on the forum - useful when performing triage using tools"
description: "In silent mode agent will receive the content but will not post anything on the forum - useful when performing triage using tools"
llm_triage:
fields:
system_prompt:
@ -146,15 +146,15 @@ en:
flag_post:
label: "Flag post"
description: "Flags post (either as spam or for review)"
include_personal_messages:
label: "Include personal messages"
description: "Also scan and triage personal messages"
include_agentl_messages:
label: "Include agentl messages"
description: "Also scan and triage agentl messages"
whisper:
label: "Reply as Whisper"
description: "Whether the AI's response should be a whisper"
reply_persona:
label: "Reply Persona"
description: "AI Persona to use for replies (must have default LLM), will be prioritized over canned reply"
reply_agent:
label: "Reply Agent"
description: "AI Agent to use for replies (must have default LLM), will be prioritized over canned reply"
model:
label: "Model"
description: "Language model used for triage"
@ -167,12 +167,12 @@ en:
features:
short_title: "Features"
description: "These are the AI features available to visitors on your site. These can be configured to use specific personas and LLMs, and can be access controlled by groups."
description: "These are the AI features available to visitors on your site. These can be configured to use specific agents and LLMs, and can be access controlled by groups."
back: "Back"
list:
header:
name: "Name"
persona: "Persona"
agent: "Agent"
groups: "Groups"
edit: "Edit"
set_up: "Set up"
@ -257,7 +257,7 @@ en:
last_month: "Last month"
custom: "Custom..."
ai_persona:
ai_agent:
ai_tools: "Tools"
tool_strategies:
all: "Apply to all replies"
@ -269,7 +269,7 @@ en:
edit: "Edit"
description: "Description"
no_llm_selected: "No language model selected"
use_parent_llm: "Use personas language model"
use_parent_llm: "Use agents language model"
max_context_posts: "Max context posts"
max_context_posts_help: "The maximum number of posts to use as context for the AI when responding to a user. (empty for default)"
vision_enabled: Vision enabled
@ -282,47 +282,47 @@ en:
tool_details: Show tool details
tool_details_help: Will show end users details on which tools the language model has triggered.
mentionable: Allow mentions
mentionable_help: If enabled, users in allowed groups can mention this user in posts, the AI will respond as this persona.
mentionable_help: If enabled, users in allowed groups can mention this user in posts, the AI will respond as this agent.
user: User
create_user: Create user
create_user_help: You can optionally attach a user to this persona. If you do, the AI will use this user to respond to requests.
create_user_help: You can optionally attach a user to this agent. If you do, the AI will use this user to respond to requests.
default_llm: Default language model
default_llm_help: The default language model to use for this persona. Required if you wish to mention persona on public posts.
default_llm_help: The default language model to use for this agent. Required if you wish to mention agent on public posts.
question_consolidator_llm: Language Model for Question Consolidator
question_consolidator_llm_help: The language model to use for the question consolidator, you may choose a less powerful model to save costs.
system_prompt: System prompt
forced_tool_strategy: Forced tool strategy
allow_chat_direct_messages: "Allow chat direct messages"
allow_chat_direct_messages_help: "If enabled, users in allowed groups can send direct messages to this persona."
allow_chat_direct_messages_help: "If enabled, users in allowed groups can send direct messages to this agent."
allow_chat_channel_mentions: "Allow chat channel mentions"
allow_chat_channel_mentions_help: "If enabled, users in allowed groups can mention this persona in chat channels."
allow_personal_messages: "Allow personal messages"
allow_personal_messages_help: "If enabled, users in allowed groups can send personal messages to this persona."
allow_chat_channel_mentions_help: "If enabled, users in allowed groups can mention this agent in chat channels."
allow_agentl_messages: "Allow agentl messages"
allow_agentl_messages_help: "If enabled, users in allowed groups can send agentl messages to this agent."
allow_topic_mentions: "Allow topic mentions"
allow_topic_mentions_help: "If enabled, users in allowed groups can mention this persona in topics."
allow_topic_mentions_help: "If enabled, users in allowed groups can mention this agent in topics."
force_default_llm: "Always use default language model"
save: "Save"
saved: "Persona saved"
saved: "Agent saved"
enabled: "Enabled?"
tools: "Enabled tools"
forced_tools: "Forced tools"
allowed_groups: "Allowed groups"
confirm_delete: "Are you sure you want to delete this persona?"
new: "New persona"
no_personas: "You have not created any personas yet"
title: "Personas"
short_title: "Personas"
confirm_delete: "Are you sure you want to delete this agent?"
new: "New agent"
no_agents: "You have not created any agents yet"
title: "Agents"
short_title: "Agents"
delete: "Delete"
temperature: "Temperature"
temperature_help: "Temperature to use for the LLM. Increase to increase creativity (leave empty to use model default, generally a value from 0.0 to 2.0)"
top_p: "Top P"
top_p_help: "Top P to use for the LLM, increase to increase randomness (leave empty to use model default, generally a value from 0.0 to 1.0)"
priority: "Priority"
priority_help: "Priority personas are displayed to users at the top of the persona list. If multiple personas have priority, they will be sorted alphabetically."
priority_help: "Priority agents are displayed to users at the top of the agent list. If multiple agents have priority, they will be sorted alphabetically."
tool_options: "Tool options"
rag_conversation_chunks: "Search conversation chunks"
rag_conversation_chunks_help: "The number of chunks to use for the RAG model searches. Increase to increase the amount of context the AI can use."
persona_description: "Personas are a powerful feature that allows you to customize the behavior of the AI engine in your Discourse forum. They act as a 'system message' that guides the AI's responses and interactions, helping to create a more personalized and engaging user experience."
agent_description: "Agents are a powerful feature that allows you to customize the behavior of the AI engine in your Discourse forum. They act as a 'system message' that guides the AI's responses and interactions, helping to create a more agentlized and engaging user experience."
response_format:
title: "JSON response format"
no_format: "No JSON format specified"
@ -344,7 +344,7 @@ en:
ai_bot:
title: "AI bot options"
save_first: "More AI bot options will become available once you save the persona."
save_first: "More AI bot options will become available once you save the agent."
rag:
title: "RAG"
@ -377,7 +377,7 @@ en:
name_help: "Name will show up in the Discourse UI and is the short identifier you will use to find the tool in various settings, it should be distinct (it is required)"
new: "New tool"
tool_name: "Tool Name"
tool_name_help: "Tool Name is presented to the large language model. It is not distinct, but it is distinct per persona. (persona validates on save)"
tool_name_help: "Tool Name is presented to the large language model. It is not distinct, but it is distinct per agent. (agent validates on save)"
description: "Description"
description_help: "A clear description of the tool's purpose for the language model"
subheader_description: "Tools extend the capabilities of AI bots with user-defined JavaScript functions."
@ -455,7 +455,7 @@ en:
ai_bot: "AI bot"
ai_helper: "Helper"
ai_helper_image_caption: "Image caption"
ai_persona: "Persona (%{persona})"
ai_agent: "Agent (%{agent})"
ai_summarization: "Summarize"
ai_embeddings_semantic_search: "AI search"
ai_spam: "Spam"
@ -681,7 +681,7 @@ en:
click_to_run_label: "Run Artifact"
ai_bot:
persona: "Persona"
agent: "Agent"
llm: "Model"
pm_warning: "AI chatbot messages are monitored regularly by moderators."
cancel_streaming: "Stop reply"

View File

@ -15,7 +15,7 @@ en_GB:
discourse_ai:
usage:
summary: "Summary"
ai_persona:
ai_agent:
description: "Description"
tools:
description: "Description"

View File

@ -12,7 +12,7 @@ es:
descriptions:
discourse_ai:
search: "Permite la búsqueda de IA"
stream_completion: "Permite la transmisión de realización de personas de IA"
stream_completion: "Permite la transmisión de realización de agents de IA"
site_settings:
categories:
discourse_ai: "Discourse AI"
@ -128,9 +128,9 @@ es:
flag_post:
label: "Denunciar publicación"
description: "Denuncia la publicación (como spam o para revisión)"
include_personal_messages:
label: "Incluir mensajes personales"
description: "También escanea y clasifica los mensajes personales"
include_agentl_messages:
label: "Incluir mensajes agentles"
description: "También escanea y clasifica los mensajes agentles"
model:
label: "Modelo"
description: "Modelo lingüístico utilizado para el triaje"
@ -152,8 +152,8 @@ es:
short_title: "Spam"
title: "Configurar el manejo de correo no deseado"
select_llm: "Seleccionar LLM"
custom_instructions: "Instrucciones personalizadas"
custom_instructions_help: "Instrucciones personalizadas específicas de tu sitio para ayudar a guiar a la IA en la identificación del correo no deseado, por ejemplo: «Sé más agresivo a la hora de escanear los mensajes que no estén en inglés»."
custom_instructions: "Instrucciones agentlizadas"
custom_instructions_help: "Instrucciones agentlizadas específicas de tu sitio para ayudar a guiar a la IA en la identificación del correo no deseado, por ejemplo: «Sé más agresivo a la hora de escanear los mensajes que no estén en inglés»."
last_seven_days: "Últimos 7 días"
scanned_count: "Publicaciones escaneadas"
false_positives: "Denunciado incorrectamente"
@ -218,8 +218,8 @@ es:
last_day: "Últimas 24 horas"
last_week: "Última semana"
last_month: "Último mes"
custom: "Personalizado..."
ai_persona:
custom: "Agentlizado..."
ai_agent:
ai_tools: "Herramientas"
tool_strategies:
all: "Aplicar a todas las respuestas"
@ -243,47 +243,47 @@ es:
tool_details: Mostrar detalles de la herramienta
tool_details_help: Mostrará a los usuarios finales detalles sobre qué herramientas ha activado el modelo de lenguaje.
mentionable: Permitir menciones
mentionable_help: Si está activada, los usuarios de los grupos permitidos pueden mencionar a este usuario en sus mensajes, y la IA responderá como esta persona.
mentionable_help: Si está activada, los usuarios de los grupos permitidos pueden mencionar a este usuario en sus mensajes, y la IA responderá como esta agent.
user: Usuario
create_user: Crear usuario
create_user_help: Opcionalmente, puedes adjuntar un usuario a esta persona. Si lo haces, la IA utilizará a este usuario para responder a las solicitudes.
create_user_help: Opcionalmente, puedes adjuntar un usuario a esta agent. Si lo haces, la IA utilizará a este usuario para responder a las solicitudes.
default_llm: Modelo lingüístico por defecto
default_llm_help: El modelo de idioma por defecto que se utilizará para esta persona. Obligatorio si deseas mencionar a la persona en publicaciones públicas.
default_llm_help: El modelo de idioma por defecto que se utilizará para esta agent. Obligatorio si deseas mencionar a la agent en publicaciones públicas.
question_consolidator_llm: Modelo lingüístico para el consolidador de preguntas
question_consolidator_llm_help: El modelo lingüístico a utilizar para el consolidador de preguntas, puedes elegir un modelo menos potente para ahorrar costes.
system_prompt: Aviso del sistema
forced_tool_strategy: Estrategia de herramienta forzada
allow_chat_direct_messages: "Permitir mensajes directos de chat"
allow_chat_direct_messages_help: "Si se activa, los usuarios de los grupos permitidos pueden enviar mensajes directos a esta persona."
allow_chat_direct_messages_help: "Si se activa, los usuarios de los grupos permitidos pueden enviar mensajes directos a esta agent."
allow_chat_channel_mentions: "Permitir menciones en el canal de chat"
allow_chat_channel_mentions_help: "Si se activa, los usuarios de los grupos permitidos pueden mencionar a esta persona en los canales de chat."
allow_personal_messages: "Permitir mensajes personales"
allow_personal_messages_help: "Si se activa, los usuarios de los grupos permitidos pueden enviar mensajes personales a esta persona."
allow_chat_channel_mentions_help: "Si se activa, los usuarios de los grupos permitidos pueden mencionar a esta agent en los canales de chat."
allow_agentl_messages: "Permitir mensajes agentles"
allow_agentl_messages_help: "Si se activa, los usuarios de los grupos permitidos pueden enviar mensajes agentles a esta agent."
allow_topic_mentions: "Permitir menciones en temas"
allow_topic_mentions_help: "Si se activa, los usuarios de los grupos permitidos pueden mencionar a esta persona en los temas."
allow_topic_mentions_help: "Si se activa, los usuarios de los grupos permitidos pueden mencionar a esta agent en los temas."
force_default_llm: "Utilizar siempre el modelo de idioma por defecto"
save: "Guardar"
saved: "Persona guardada"
saved: "Agent guardada"
enabled: "¿Activado?"
tools: "Herramientas habilitadas"
forced_tools: "Herramientas forzadas"
allowed_groups: "Grupos permitidos"
confirm_delete: "¿Seguro que quieres eliminar esta persona?"
new: "Nueva persona"
no_personas: "Aún no has creado ninguna persona"
title: "Personas"
short_title: "Personas"
confirm_delete: "¿Seguro que quieres eliminar esta agent?"
new: "Nueva agent"
no_agents: "Aún no has creado ninguna agent"
title: "Agents"
short_title: "Agents"
delete: "Eliminar"
temperature: "Temperatura"
temperature_help: "Temperatura que se utilizará para el LLM. Aumentar para aumentar la creatividad (dejar vacío para utilizar el valor por defecto del modelo, generalmente un valor de 0,0 a 2,0)"
top_p: "Top P"
top_p_help: "Top P a utilizar para el LLM, aumentar para aumentar la aleatoriedad (dejar vacío para utilizar el modelo por defecto, generalmente un valor de 0,0 a 1,0)"
priority: "Prioridad"
priority_help: "Las personas prioritarias se muestran a los usuarios en la parte superior de la lista de personas. Si varias personas tienen prioridad, se ordenarán alfabéticamente."
priority_help: "Las agents prioritarias se muestran a los usuarios en la parte superior de la lista de agents. Si varias agents tienen prioridad, se ordenarán alfabéticamente."
tool_options: "Opciones de herramientas"
rag_conversation_chunks: "Buscar fragmentos de conversación"
rag_conversation_chunks_help: "El número de fragmentos a utilizar para las búsquedas del modelo RAG. Aumentar para incrementar la cantidad de contexto que puede utilizar la IA."
persona_description: "Las personas son una potente característica que te permite personalizar el comportamiento del motor de IA en tu foro de Discourse. Actúan como un «mensaje del sistema» que guía las respuestas e interacciones de la IA, ayudando a crear una experiencia de usuario más personalizada y atractiva."
agent_description: "Las agents son una potente característica que te permite agentlizar el comportamiento del motor de IA en tu foro de Discourse. Actúan como un «mensaje del sistema» que guía las respuestas e interacciones de la IA, ayudando a crear una experiencia de usuario más agentlizada y atractiva."
response_format:
open_modal: "Editar"
modal:
@ -369,14 +369,14 @@ es:
six_hours: "6 horas"
day: "24 horas"
week: "7 días"
custom: "Personalizado..."
custom: "Agentlizado..."
hours: "horas"
max_tokens_help: "Número máximo de tokens (palabras y caracteres) que cada usuario de este grupo puede utilizar dentro de la duración especificada. Los tokens son las unidades que utilizan los modelos de IA para procesar texto: aproximadamente 1 token = 4 caracteres o 3/4 de una palabra."
max_usages_help: "Número máximo de veces que cada usuario de este grupo puede utilizar el modelo de IA dentro de la duración especificada. Esta cuota se controla por usuario individual, no se comparte con todo el grupo."
usage:
ai_bot: "Bot de IA"
ai_helper: "Ayudante"
ai_persona: "Persona (%{persona})"
ai_agent: "Agent (%{agent})"
ai_summarization: "Resumir"
ai_embeddings_semantic_search: "Búsqueda de IA"
ai_spam: "Spam"
@ -429,7 +429,7 @@ es:
samba_nova: "SambaNova"
mistral: "Mistral"
open_router: "OpenRouter"
fake: "Personalizado"
fake: "Agentlizado"
provider_fields:
access_key_id: "ID de la clave de acceso a AWS Bedrock"
region: "Región de AWS Bedrock"
@ -463,8 +463,8 @@ es:
discard: "Descartar"
changes: "Ediciones sugeridas"
custom_prompt:
title: "Instruccón personalizada"
placeholder: "Introduzca un aviso personalizado..."
title: "Instruccón agentlizada"
placeholder: "Introduzca un aviso agentlizado..."
submit: "Enviar instrucción"
translate_prompt: "Traducir a %{language}"
post_options_menu:
@ -542,7 +542,7 @@ es:
google: "Google"
cloudflare: "Cloudflare"
CDCK: "CDCK"
fake: "Personalizado"
fake: "Agentlizado"
provider_fields:
model_name: "Nombre del modelo"
semantic_search: "Temas (semánticos)"

View File

@ -52,7 +52,7 @@ et:
summary: "Kokkuvõte"
username: "Kasutajanimi"
total_requests: "Kokku päringuid"
ai_persona:
ai_agent:
back: "Tagasi"
name: "Nimi"
edit: "Muuda"

View File

@ -83,7 +83,7 @@ fa_IR:
periods:
last_day: "۲۴ ساعت گذشته"
custom: "سفارشی..."
ai_persona:
ai_agent:
back: "بازگشت"
name: "نام"
edit: "ویرایش"

View File

@ -128,7 +128,7 @@ fi:
flag_post:
label: "Liputa viesti"
description: "Liputtaa viestin (joko roskapostiksi tai käsiteltäväksi)"
include_personal_messages:
include_agentl_messages:
label: "Sisällytä yksityisviestit"
description: "Skannaa ja luokittele myös yksityisviestit"
model:
@ -219,7 +219,7 @@ fi:
last_week: "Viime viikko"
last_month: "Viime kuukausi"
custom: "Mukautettu..."
ai_persona:
ai_agent:
ai_tools: "Työkalut"
tool_strategies:
all: "Käytä kaikkiin vastauksiin"
@ -257,8 +257,8 @@ fi:
allow_chat_direct_messages_help: "Jos tämä on käytössä, sallittujen ryhmien käyttäjät voivat lähettää yksityisviestejä tälle persoonalle."
allow_chat_channel_mentions: "Salli chat-kanavamaininnat"
allow_chat_channel_mentions_help: "Jos tämä on käytössä, sallittujen ryhmien käyttäjät voivat mainita tämän persoonan chat-kanavilla."
allow_personal_messages: "Salli yksityisviestit"
allow_personal_messages_help: "Jos tämä on käytössä, sallittujen ryhmien käyttäjät voivat lähettää yksityisviestejä tälle persoonalle."
allow_agentl_messages: "Salli yksityisviestit"
allow_agentl_messages_help: "Jos tämä on käytössä, sallittujen ryhmien käyttäjät voivat lähettää yksityisviestejä tälle persoonalle."
allow_topic_mentions: "Salli ketjumaininnat"
allow_topic_mentions_help: "Jos tämä on käytössä, sallittujen ryhmien käyttäjät voivat mainita tämän persoonan ketjuissa."
force_default_llm: "Käytä aina oletuskielimallia"
@ -270,7 +270,7 @@ fi:
allowed_groups: "Sallitut ryhmät"
confirm_delete: "Oletko varma, että haluat poistaa tämän persoonan?"
new: "Uusi persoona"
no_personas: "Et ole vielä luonut persoonia"
no_agents: "Et ole vielä luonut persoonia"
title: "Persoonat"
short_title: "Persoonat"
delete: "Poista"
@ -283,7 +283,7 @@ fi:
tool_options: "Työkaluasetukset"
rag_conversation_chunks: "Hakukeskustelulohkot"
rag_conversation_chunks_help: "RAG-mallin hauissa käytettävien lohkojen määrä. Lisää kontekstin määrää, jota tekoäly voi käyttää, kasvattamalla arvoa."
persona_description: "Personat ovat tehokas ominaisuus, jonka avulla voit mukauttaa tekoälymoduulin toimintaa Discourse-foorumillasi. Ne toimivat \"järjestelmäviestinä\", joka ohjaa tekoälyn vastauksia ja vuorovaikutusta ja auttaa luomaan personoidumman ja kiinnostavamman käyttökokemuksen."
agent_description: "Agentt ovat tehokas ominaisuus, jonka avulla voit mukauttaa tekoälymoduulin toimintaa Discourse-foorumillasi. Ne toimivat \"järjestelmäviestinä\", joka ohjaa tekoälyn vastauksia ja vuorovaikutusta ja auttaa luomaan personoidumman ja kiinnostavamman käyttökokemuksen."
response_format:
open_modal: "Muokkaa"
modal:
@ -376,7 +376,7 @@ fi:
usage:
ai_bot: "Tekoälyrobotti"
ai_helper: "Apuri"
ai_persona: "Persoona (%{persona})"
ai_agent: "Persoona (%{agent})"
ai_summarization: "Tee yhteenveto"
ai_embeddings_semantic_search: "Tekoälyhaku"
ai_spam: "Roskaposti"

View File

@ -128,7 +128,7 @@ fr:
flag_post:
label: "Signaler cette publication"
description: "Signale la publication (soit comme spam ou pour examen)"
include_personal_messages:
include_agentl_messages:
label: "Inclure les messages personnels"
description: "Analysez et triez également les messages personnels"
model:
@ -219,7 +219,7 @@ fr:
last_week: "La semaine dernière"
last_month: "Le mois dernier"
custom: "Personnalisé…"
ai_persona:
ai_agent:
ai_tools: "Outils"
tool_strategies:
all: "Appliquer à toutes les réponses"
@ -257,8 +257,8 @@ fr:
allow_chat_direct_messages_help: "Si cette option est activée, les utilisateurs des groupes autorisés peuvent envoyer des messages directs à ce personnage."
allow_chat_channel_mentions: "Autoriser les mentions du canal de discussion"
allow_chat_channel_mentions_help: "Si cette option est activée, les utilisateurs des groupes autorisés peuvent mentionner ce personnage dans les canaux de discussion."
allow_personal_messages: "Autoriser les messages personnels"
allow_personal_messages_help: "Si cette option est activée, les utilisateurs des groupes autorisés peuvent envoyer des messages personnels à ce personnage."
allow_agentl_messages: "Autoriser les messages personnels"
allow_agentl_messages_help: "Si cette option est activée, les utilisateurs des groupes autorisés peuvent envoyer des messages personnels à ce personnage."
allow_topic_mentions: "Autoriser les mentions de sujets"
allow_topic_mentions_help: "Si cette option est activée, les utilisateurs des groupes autorisés peuvent mentionner ce personnage dans les sujets."
force_default_llm: "Toujours utiliser le modèle linguistique par défaut"
@ -270,7 +270,7 @@ fr:
allowed_groups: "Groupes autorisés"
confirm_delete: "Voulez-vous vraiment supprimer ce personnage ?"
new: "Nouveau personnage"
no_personas: "Vous n'avez pas encore créé de personnage"
no_agents: "Vous n'avez pas encore créé de personnage"
title: "Personnages"
short_title: "Personnages"
delete: "Supprimer"
@ -283,7 +283,7 @@ fr:
tool_options: "Options de l'outil"
rag_conversation_chunks: "Rechercher des morceaux de conversation"
rag_conversation_chunks_help: "Le nombre de segments à utiliser pour les recherches de modèles RAG. Augmentez pour augmenter la quantité de contexte que l'IA peut utiliser."
persona_description: "Les personnages sont une fonctionnalité puissante qui vous permet de personnaliser le comportement du moteur d'IA dans votre forum Discourse. Ils agissent comme un « message système » qui guide les réponses et les interactions de l'IA, en contribuant ainsi à créer une expérience utilisateur plus personnalisée et plus interactive."
agent_description: "Les personnages sont une fonctionnalité puissante qui vous permet de personnaliser le comportement du moteur d'IA dans votre forum Discourse. Ils agissent comme un « message système » qui guide les réponses et les interactions de l'IA, en contribuant ainsi à créer une expérience utilisateur plus personnalisée et plus interactive."
response_format:
open_modal: "Modifier"
modal:
@ -376,7 +376,7 @@ fr:
usage:
ai_bot: "Robot IA"
ai_helper: "Assistant"
ai_persona: "Personnage (%{persona})"
ai_agent: "Personnage (%{agent})"
ai_summarization: "Résumer"
ai_embeddings_semantic_search: "Recherche IA"
ai_spam: "Spam"

View File

@ -55,8 +55,8 @@ gl:
username: "Nome de usuario"
total_requests: "Solicitudes totais"
periods:
custom: "Personalizar..."
ai_persona:
custom: "Agentlizar..."
ai_agent:
back: "Volver"
name: "Nome"
edit: "Editar"
@ -97,7 +97,7 @@ gl:
hour: "1 hora"
six_hours: "6 horas"
day: "24 horas"
custom: "Personalizar..."
custom: "Agentlizar..."
hours: "horas"
usage:
ai_spam: "Lixo"
@ -107,7 +107,7 @@ gl:
success: "Feito!"
providers:
google: "Google"
fake: "Personalizado"
fake: "Agentlizado"
ai_helper:
context_menu:
cancel: "Cancelar"
@ -133,7 +133,7 @@ gl:
display_name: "Nome"
providers:
google: "Google"
fake: "Personalizado"
fake: "Agentlizado"
ai_bot:
debug_ai_modal:
request: "Petición"

View File

@ -13,7 +13,7 @@ he:
discourse_ai:
search: "מאפשר חיפוש בינה מלאכותית"
stream_completion: "מאפשר הזרמת השלמות דמות בינה מלאכותית"
update_personas: "מאפשר לעדכן דמויות בינה מלאכותית"
update_agents: "מאפשר לעדכן דמויות בינה מלאכותית"
site_settings:
categories:
discourse_ai: "בינה מלאכותית ב־Discourse"
@ -100,9 +100,9 @@ he:
label: "מודל"
tool:
label: "כלי"
llm_persona_triage:
llm_agent_triage:
fields:
persona:
agent:
label: "דמות"
silent_mode:
label: "מצב שקט"
@ -141,10 +141,10 @@ he:
flag_post:
label: "סימון פוסט"
description: "סימון פוסט (או כספאם או לסקירה)"
include_personal_messages:
include_agentl_messages:
label: "כולל הודעות פרטיות"
description: "לסרוק ולאמת הודעות אישיות"
reply_persona:
reply_agent:
label: "דמות לתגובה"
model:
label: "מודל"
@ -161,7 +161,7 @@ he:
list:
header:
name: "שם"
persona: "דמות"
agent: "דמות"
groups: "קבוצות"
edit: "עריכה"
set_up: "הגדרה"
@ -234,7 +234,7 @@ he:
last_week: "בשבוע שעבר"
last_month: "בחודש שעבר"
custom: "התאמה אישית…"
ai_persona:
ai_agent:
ai_tools: "כלים"
tool_strategies:
all: "החלה על כל התגובות"
@ -275,8 +275,8 @@ he:
allow_chat_direct_messages_help: "אם האפשרות פעילה, משתמשים בקבוצות המורשות יכולים לשלוח הודעות ישירות לדמות הזאת."
allow_chat_channel_mentions: "לאפשר אזכורים בערוצי צ׳אט"
allow_chat_channel_mentions_help: "אם האפשרות פעילה, משתמשים בקבוצות המורשות יכולים לאזכר את הדמות הזאת בערוצי צ׳אט."
allow_personal_messages: "לאפשר הודעות פרטיות"
allow_personal_messages_help: "אם האפשרות פעילה, משתמשים בקבוצות המורשות יכולים לשלוח הודעות פרטיות לדמות הזאת."
allow_agentl_messages: "לאפשר הודעות פרטיות"
allow_agentl_messages_help: "אם האפשרות פעילה, משתמשים בקבוצות המורשות יכולים לשלוח הודעות פרטיות לדמות הזאת."
allow_topic_mentions: "לאפשר אזכורים בנושאים"
allow_topic_mentions_help: "אם האפשרות פעילה, משתמשים בקבוצות המורשות יכולים לאזכר את הדמות הזאת בנושאים."
force_default_llm: "תמיד להשתמש במודל השפה כברירת מחדל"
@ -288,7 +288,7 @@ he:
allowed_groups: "קבוצות מורשות"
confirm_delete: "למחוק את הדמות?"
new: "דמות חדשה"
no_personas: "לא יצרת דמויות עדיין"
no_agents: "לא יצרת דמויות עדיין"
title: "דמויות"
short_title: "דמויות"
delete: "מחיקה"
@ -301,7 +301,7 @@ he:
tool_options: "אפשרויות כלי"
rag_conversation_chunks: "חיפוש בחלקי הדיון"
rag_conversation_chunks_help: "מספר הנתחים לשימוש לחיפושים עם מודל ה־RAG. הגדלה תגדיל את כמות ההקשר בו יכולה להשתמש הבינה המלאכותית."
persona_description: "דמויות הן יכולות רבות עוצמה שמאפשר להתאים את התנהגות מנוע הבינה המלאכותית בפורום הדיסקורס שלך. הן מתנהגות כמו ‚הודעות מערכת’ שמנחות את תגובות והתנהלות הבינה המלאכותית, כדי לסייע ליצור חוויית משתמש מותאמת ומקרבת יותר."
agent_description: "דמויות הן יכולות רבות עוצמה שמאפשר להתאים את התנהגות מנוע הבינה המלאכותית בפורום הדיסקורס שלך. הן מתנהגות כמו ‚הודעות מערכת’ שמנחות את תגובות והתנהלות הבינה המלאכותית, כדי לסייע ליצור חוויית משתמש מותאמת ומקרבת יותר."
response_format:
title: "תבנית תגובת JSON"
no_format: "לא צוינה תבנית JSON"
@ -422,7 +422,7 @@ he:
ai_bot: "בוט בינה מלאכותית"
ai_helper: "מסייע"
ai_helper_image_caption: "כותרת תמונה"
ai_persona: "דמות (%{persona})"
ai_agent: "דמות (%{agent})"
ai_summarization: "סיכום"
ai_embeddings_semantic_search: "חיפוש בינה מלאכותית"
ai_spam: "ספאם"
@ -623,7 +623,7 @@ he:
collapse_view_label: "יציאה ממסך מלא (כפתורי ESC או Back)"
click_to_run_label: "הרצת תוצר"
ai_bot:
persona: "דמות"
agent: "דמות"
llm: "מודל"
pm_warning: "הודעות בוט שיח בינה מלאכותית לא נאכפות דרך קבע על ידי המפקחים."
cancel_streaming: "עצירת התגובה"

View File

@ -58,7 +58,7 @@ hr:
periods:
last_day: "Posljednja 24 sata"
custom: "Prilagođeno..."
ai_persona:
ai_agent:
back: "Natrag"
name: "Ime"
edit: "Uredi"

View File

@ -59,7 +59,7 @@ hu:
periods:
last_day: "Elmúlt 24 óra"
custom: "Egyéni…"
ai_persona:
ai_agent:
back: "Vissza"
name: "Név"
edit: "Szerkesztés"

View File

@ -52,7 +52,7 @@ hy:
summary: "Ամփոփումը"
username: "Օգտանուն"
total_requests: "Ընդհանուր հարցումներ"
ai_persona:
ai_agent:
back: "Ետ"
name: "Անուն"
edit: "Խմբագրել"

View File

@ -116,12 +116,12 @@ id:
username: "Nama Pengguna"
periods:
last_day: "24 jam terakhir"
ai_persona:
ai_agent:
back: "Kembali"
name: "Nama"
edit: "Ubah"
description: "Deskripsi"
mentionable_help: Jika diaktifkan, pengguna di grup yang diizinkan dapat menyebut pengguna ini di posting, AI akan merespons sebagai persona ini.
mentionable_help: Jika diaktifkan, pengguna di grup yang diizinkan dapat menyebut pengguna ini di posting, AI akan merespons sebagai agent ini.
user: Pengguna
question_consolidator_llm: Model Bahasa untuk Konsolidator Pertanyaan
question_consolidator_llm_help: Model bahasa yang digunakan untuk konsolidator pertanyaan, Anda dapat memilih model yang kurang kuat untuk menghemat biaya.

View File

@ -12,7 +12,7 @@ it:
descriptions:
discourse_ai:
search: "Consente la ricerca IA"
stream_completion: "Consente lo streaming di completamenti di personaggi IA"
stream_completion: "Consente lo streaming di completamenti di agentggi IA"
site_settings:
categories:
discourse_ai: "Discourse AI"
@ -128,9 +128,9 @@ it:
flag_post:
label: "Segnala messaggio"
description: "Segnala il post (come spam o per la revisione)"
include_personal_messages:
label: "Includi messaggi personali"
description: "Esegui anche la scansione e la selezione dei messaggi personali"
include_agentl_messages:
label: "Includi messaggi agentli"
description: "Esegui anche la scansione e la selezione dei messaggi agentli"
model:
label: "Modello"
description: "Modello linguistico utilizzato per il triage"
@ -152,8 +152,8 @@ it:
short_title: "Spam"
title: "Configura la gestione dello spam"
select_llm: "Seleziona LLM"
custom_instructions: "Istruzioni personalizzate"
custom_instructions_help: "Istruzioni personalizzate specifiche per il tuo sito per aiutare l'intelligenza artificiale a identificare lo spam, ad esempio \"Sii più aggressivo nell'analizzare i post in una lingua diversa dall'italiano\"."
custom_instructions: "Istruzioni agentlizzate"
custom_instructions_help: "Istruzioni agentlizzate specifiche per il tuo sito per aiutare l'intelligenza artificiale a identificare lo spam, ad esempio \"Sii più aggressivo nell'analizzare i post in una lingua diversa dall'italiano\"."
last_seven_days: "Ultimi 7 giorni"
scanned_count: "Messaggi scansionati"
false_positives: "Segnalato in modo errato"
@ -218,8 +218,8 @@ it:
last_day: "Ultime 24 ore"
last_week: "Ultima settimana"
last_month: "Ultimo mese"
custom: "Personalizza..."
ai_persona:
custom: "Agentlizza..."
ai_agent:
ai_tools: "Strumenti"
tool_strategies:
all: "Applica a tutte le risposte"
@ -243,47 +243,47 @@ it:
tool_details: Mostra i dettagli dello strumento
tool_details_help: Mostrerà agli utenti finali i dettagli su quali strumenti ha attivato il modello linguistico.
mentionable: Consenti menzioni
mentionable_help: Se l'opzione è abilitata, gli utenti nei gruppi consentiti possono menzionare questo utente nei post, l'IA risponderà come questa persona.
mentionable_help: Se l'opzione è abilitata, gli utenti nei gruppi consentiti possono menzionare questo utente nei post, l'IA risponderà come questa agent.
user: Utente
create_user: Crea utente
create_user_help: Facoltativamente, è possibile associare un utente a questa persona. In tal caso, l'IA utilizzerà questo utente per rispondere alle richieste.
create_user_help: Facoltativamente, è possibile associare un utente a questa agent. In tal caso, l'IA utilizzerà questo utente per rispondere alle richieste.
default_llm: Modello linguistico predefinito
default_llm_help: Il modello linguistico predefinito da utilizzare per questa persona. Obbligatorio se desideri menzionare la persona nei post pubblici.
default_llm_help: Il modello linguistico predefinito da utilizzare per questa agent. Obbligatorio se desideri menzionare la agent nei post pubblici.
question_consolidator_llm: Modello linguistico per il consolidatore di domande
question_consolidator_llm_help: Il modello linguistico da utilizzare per il consolidatore di domande. È possibile scegliere un modello meno potente per risparmiare sui costi.
system_prompt: Comando di sistema
forced_tool_strategy: Strategia degli strumenti forzati
allow_chat_direct_messages: "Consenti messaggi diretti in chat"
allow_chat_direct_messages_help: "Se l'opzione è abilitata, gli utenti nei gruppi consentiti possono inviare messaggi diretti a questa persona."
allow_chat_direct_messages_help: "Se l'opzione è abilitata, gli utenti nei gruppi consentiti possono inviare messaggi diretti a questa agent."
allow_chat_channel_mentions: "Consenti menzioni nei canali di chat"
allow_chat_channel_mentions_help: "Se abilitato, gli utenti nei gruppi consentiti possono menzionare questo personaggio nei canali di chat."
allow_personal_messages: "Consenti messaggi personali"
allow_personal_messages_help: "Se l'opzione è abilitata, gli utenti nei gruppi consentiti possono inviare messaggi personali a questo personaggio."
allow_chat_channel_mentions_help: "Se abilitato, gli utenti nei gruppi consentiti possono menzionare questo agentggio nei canali di chat."
allow_agentl_messages: "Consenti messaggi agentli"
allow_agentl_messages_help: "Se l'opzione è abilitata, gli utenti nei gruppi consentiti possono inviare messaggi agentli a questo agentggio."
allow_topic_mentions: "Consenti menzioni nell'argomento"
allow_topic_mentions_help: "Se abilitato, gli utenti nei gruppi consentiti possono menzionare questa persona negli argomenti."
allow_topic_mentions_help: "Se abilitato, gli utenti nei gruppi consentiti possono menzionare questa agent negli argomenti."
force_default_llm: "Usa sempre il modello linguistico predefinito"
save: "Salva"
saved: "Persona salvata"
saved: "Agent salvata"
enabled: "Abilitato?"
tools: "Strumenti abilitati"
forced_tools: "Strumenti forzati"
allowed_groups: "Gruppi ammessi"
confirm_delete: "Vuoi davvero eliminare questo personaggio?"
new: "Nuovo personaggio"
no_personas: "Non hai ancora creato nessun personaggio"
title: "Personaggi"
short_title: "Personaggi"
confirm_delete: "Vuoi davvero eliminare questo agentggio?"
new: "Nuovo agentggio"
no_agents: "Non hai ancora creato nessun agentggio"
title: "Agentggi"
short_title: "Agentggi"
delete: "Elimina"
temperature: "Temperatura"
temperature_help: "Temperatura da utilizzare per LLM. Aumenta per aumentare la creatività (lascia vuoto per utilizzare il modello predefinito, generalmente un valore compreso tra 0,0 e 2,0)"
top_p: "P superiore"
top_p_help: "P superiore da utilizzare per LLM, aumenta per aumentare la casualità (lascia vuoto per utilizzare l'impostazione predefinita del modello, generalmente un valore compreso tra 0,0 e 1,0)"
priority: "Priorità"
priority_help: "I personaggi prioritari vengono visualizzati agli utenti nella parte superiore dell'elenco dei personaggi. Se più personaggi hanno la priorità, verranno ordinati in ordine alfabetico."
priority_help: "I agentggi prioritari vengono visualizzati agli utenti nella parte superiore dell'elenco dei agentggi. Se più agentggi hanno la priorità, verranno ordinati in ordine alfabetico."
tool_options: "Opzioni dello strumento"
rag_conversation_chunks: "Cerca blocchi di conversazione"
rag_conversation_chunks_help: "Il numero di blocchi da utilizzare per le ricerche del modello RAG. Aumenta per aumentare la quantità di contesto che l'IA può utilizzare."
persona_description: "I personaggi sono una potente funzionalità che ti consente di personalizzare il comportamento del motore IA nel tuo forum Discourse. Agiscono come un \"messaggio di sistema\" che guida le risposte e le interazioni dell'IA, aiutando a creare un'esperienza utente più personalizzata e coinvolgente."
agent_description: "I agentggi sono una potente funzionalità che ti consente di agentlizzare il comportamento del motore IA nel tuo forum Discourse. Agiscono come un \"messaggio di sistema\" che guida le risposte e le interazioni dell'IA, aiutando a creare un'esperienza utente più agentlizzata e coinvolgente."
response_format:
open_modal: "Modifica"
modal:
@ -369,14 +369,14 @@ it:
six_hours: "6 ore"
day: "24 ore"
week: "7 giorni"
custom: "Personalizza..."
custom: "Agentlizza..."
hours: "ore"
max_tokens_help: "Numero massimo di token (parole e caratteri) che ogni utente di questo gruppo può utilizzare entro la durata specificata. I token sono le unità utilizzate dai modelli IA per elaborare il testo: circa 1 token = 4 caratteri o 3/4 di parola."
max_usages_help: "Numero massimo di volte in cui ogni utente in questo gruppo può usare il modello IA entro la durata specificata. Questa quota viene tracciata per singolo utente, non condivisa tra il gruppo."
usage:
ai_bot: "Bot IA"
ai_helper: "Assistente"
ai_persona: "Personaggio (%{persona})"
ai_agent: "Agentggio (%{agent})"
ai_summarization: "Riassumi"
ai_embeddings_semantic_search: "Ricerca IA"
ai_spam: "Spam"
@ -429,7 +429,7 @@ it:
samba_nova: "SambaNova"
mistral: "Mistral"
open_router: "OpenRouter"
fake: "Personalizzato"
fake: "Agentlizzato"
provider_fields:
access_key_id: "ID chiave di accesso AWS Bedrock"
region: "Regione AWS Bedrock"
@ -463,8 +463,8 @@ it:
discard: "Elimina"
changes: "Modifiche suggerite"
custom_prompt:
title: "Comando personalizzato"
placeholder: "Inserisci un comando personalizzato..."
title: "Comando agentlizzato"
placeholder: "Inserisci un comando agentlizzato..."
submit: "Invia comando"
translate_prompt: "Traduci in %{language}"
post_options_menu:
@ -542,7 +542,7 @@ it:
google: "Google"
cloudflare: "Cloudflare"
CDCK: "CDCK"
fake: "Personalizzato"
fake: "Agentlizzato"
provider_fields:
model_name: "Nome del modello"
semantic_search: "Argomenti (semantici)"

View File

@ -128,7 +128,7 @@ ja:
flag_post:
label: "投稿を通報"
description: "投稿を通報 (迷惑またはレビュー対象)"
include_personal_messages:
include_agentl_messages:
label: "個人メッセージを含める"
description: "個人メッセージのスキャンとトリアージも行う"
model:
@ -218,7 +218,7 @@ ja:
last_week: "先週"
last_month: "先月"
custom: "カスタム..."
ai_persona:
ai_agent:
ai_tools: "ツール"
tool_strategies:
all: "すべての返信に適用"
@ -255,8 +255,8 @@ ja:
allow_chat_direct_messages_help: "有効にすると、許可されているグループのユーザーはこのペルソナにダイレクトメッセージを送信できます。"
allow_chat_channel_mentions: "チャットチャンネルのメンションを許可"
allow_chat_channel_mentions_help: "有効にすると、許可されたグループ内のユーザーはチャットチャンネルでこのペルソナをメンションできます。"
allow_personal_messages: "個人メッセージを許可"
allow_personal_messages_help: "有効にすると、許可されているグループのユーザーはこのペルソナに個人メッセージを送信できます。"
allow_agentl_messages: "個人メッセージを許可"
allow_agentl_messages_help: "有効にすると、許可されているグループのユーザーはこのペルソナに個人メッセージを送信できます。"
allow_topic_mentions: "トピックのメンションを許可"
allow_topic_mentions_help: "有効にすると、許可されたグループ内のユーザーはトピックでこのペルソナをメンションできます。"
force_default_llm: "常にデフォルトの言語モデルを使用する"
@ -268,7 +268,7 @@ ja:
allowed_groups: "許可されたグループ"
confirm_delete: "このペルソナを削除してもよろしいですか?"
new: "新しいペルソナ"
no_personas: "ペルソナをまだ作成していません"
no_agents: "ペルソナをまだ作成していません"
title: "ペルソナ"
short_title: "ペルソナ"
delete: "削除"
@ -281,7 +281,7 @@ ja:
tool_options: "ツールのオプション"
rag_conversation_chunks: "会話チャンクを検索"
rag_conversation_chunks_help: "RAG モデル検索に使用するチャンクの数。値を増やすと、AI が使用できるコンテキストの量が増えます。"
persona_description: "ペルソナは、Discourse フォーラムの AI エンジンの動作をカスタマイズできる強力な機能です。AI の応答と対話を誘導する「システムメッセージ」として機能し、よりパーソナライズされた魅力的なユーザーエクスペリエンスの作成に役立ちます。"
agent_description: "ペルソナは、Discourse フォーラムの AI エンジンの動作をカスタマイズできる強力な機能です。AI の応答と対話を誘導する「システムメッセージ」として機能し、よりパーソナライズされた魅力的なユーザーエクスペリエンスの作成に役立ちます。"
response_format:
open_modal: "編集"
modal:
@ -374,7 +374,7 @@ ja:
usage:
ai_bot: "AI ボット"
ai_helper: "ヘルパー"
ai_persona: "ペルソナ (%{persona})"
ai_agent: "ペルソナ (%{agent})"
ai_summarization: "要約"
ai_embeddings_semantic_search: "AI 検索"
ai_spam: "迷惑"

View File

@ -60,7 +60,7 @@ ko:
periods:
last_day: "지난 24시간"
custom: "사용자 지정..."
ai_persona:
ai_agent:
back: "뒤로"
name: "그룹명"
edit: "편집"

View File

@ -95,7 +95,7 @@ lt:
periods:
last_day: "Paskutinės 24 valandos"
custom: "Pasirinktinis..."
ai_persona:
ai_agent:
back: "Atgal"
name: "Vardas"
edit: "Redaguoti"

View File

@ -54,7 +54,7 @@ lv:
username: "Lietotājvārds"
periods:
last_day: "Pēdējās 24 stundas"
ai_persona:
ai_agent:
back: "Atpakaļ"
name: "Vārds"
edit: "Rediģēt"

View File

@ -55,7 +55,7 @@ nb_NO:
total_requests: "Totalt forespørsler"
periods:
last_day: "Siste 24 timer"
ai_persona:
ai_agent:
back: "Forrige"
name: "Navn"
edit: "Endre"

View File

@ -12,7 +12,7 @@ nl:
descriptions:
discourse_ai:
search: "Staat AI zoeken toe"
stream_completion: "Maakt streamen van voltooiingen van AI persona's mogelijk"
stream_completion: "Maakt streamen van voltooiingen van AI agent's mogelijk"
site_settings:
categories:
discourse_ai: "Discourse AI"
@ -128,7 +128,7 @@ nl:
flag_post:
label: "Bericht markeren"
description: "Markeert berichten (als spam of ter beoordeling)"
include_personal_messages:
include_agentl_messages:
label: "Persoonlijke berichten opnemen"
description: "Scan en triageer ook persoonlijke berichten"
model:
@ -219,7 +219,7 @@ nl:
last_week: "Vorige week"
last_month: "Vorige maand"
custom: "Aangepast..."
ai_persona:
ai_agent:
ai_tools: "Tools"
tool_strategies:
all: "Toepassen op alle antwoorden"
@ -243,47 +243,47 @@ nl:
tool_details: Tooldetails weergeven
tool_details_help: Toont eindgebruikers informatie over welke tools het taalmodel heeft geactiveerd.
mentionable: Vermeldingen toestaan
mentionable_help: Indien ingeschakeld, kunnen gebruikers in toegestane groepen deze gebruiker vermelden in berichten. De AI reageert als deze persona.
mentionable_help: Indien ingeschakeld, kunnen gebruikers in toegestane groepen deze gebruiker vermelden in berichten. De AI reageert als deze agent.
user: Gebruiker
create_user: Gebruiker maken
create_user_help: Je kunt optioneel een gebruiker aan deze persona koppelen. Als je dat doet, gebruikt de AI deze gebruiker om op verzoeken te antwoorden.
create_user_help: Je kunt optioneel een gebruiker aan deze agent koppelen. Als je dat doet, gebruikt de AI deze gebruiker om op verzoeken te antwoorden.
default_llm: Standaard taalmodel
default_llm_help: Het standaard taalmodel dat voor deze persona moet worden gebruikt. Vereist als je de persona wilt vermelden in openbare berichten.
default_llm_help: Het standaard taalmodel dat voor deze agent moet worden gebruikt. Vereist als je de agent wilt vermelden in openbare berichten.
question_consolidator_llm: Taalmodel voor Vragenconsolidator
question_consolidator_llm_help: Het te gebruiken taalmodel voor de vragenconsolidator. Je kunt een minder krachtig model kiezen om kosten te besparen.
system_prompt: Systeemprompt
forced_tool_strategy: Gedwongen toolstrategie
allow_chat_direct_messages: "Directe chatberichten toestaan"
allow_chat_direct_messages_help: "Indien ingeschakeld, kunnen gebruikers in toegestane groepen directe berichten naar deze persona sturen."
allow_chat_direct_messages_help: "Indien ingeschakeld, kunnen gebruikers in toegestane groepen directe berichten naar deze agent sturen."
allow_chat_channel_mentions: "Vermelding in chatkanalen toestaan"
allow_chat_channel_mentions_help: "Indien ingeschakeld, kunnen gebruikers in toegestane groepen deze persona vermelden in chatkanalen."
allow_personal_messages: "Persoonlijke berichten toestaan"
allow_personal_messages_help: "Indien ingeschakeld, kunnen gebruikers in toegestane groepen persoonlijke berichten naar deze persona sturen."
allow_chat_channel_mentions_help: "Indien ingeschakeld, kunnen gebruikers in toegestane groepen deze agent vermelden in chatkanalen."
allow_agentl_messages: "Persoonlijke berichten toestaan"
allow_agentl_messages_help: "Indien ingeschakeld, kunnen gebruikers in toegestane groepen persoonlijke berichten naar deze agent sturen."
allow_topic_mentions: "Vermelding in topics toestaan"
allow_topic_mentions_help: "Indien ingeschakeld, kunnen gebruikers in toegestane groepen deze persona vermelden in topics."
allow_topic_mentions_help: "Indien ingeschakeld, kunnen gebruikers in toegestane groepen deze agent vermelden in topics."
force_default_llm: "Altijd standaard taalmodel gebruiken"
save: "Opslaan"
saved: "Persona opgeslagen"
saved: "Agent opgeslagen"
enabled: "Ingeschakeld?"
tools: "Ingeschakelde tools"
forced_tools: "Geforceerde tools"
allowed_groups: "Toegestane groepen"
confirm_delete: "Weet je zeker dat je deze persona wilt verwijderen?"
new: "Nieuwe persona"
no_personas: "Je hebt nog geen persona's gemaakt"
title: "Persona's"
short_title: "Persona's"
confirm_delete: "Weet je zeker dat je deze agent wilt verwijderen?"
new: "Nieuwe agent"
no_agents: "Je hebt nog geen agent's gemaakt"
title: "Agent's"
short_title: "Agent's"
delete: "Verwijderen"
temperature: "Temperatuur"
temperature_help: "Te gebruiken temperatuur voor de LLM. Verhoog deze om de creativiteit te vergroten (laat dit leeg om de standaardinstelling van het model te gebruiken, doorgaans een waarde van 0,0 tot 2,0)"
top_p: "Top P"
top_p_help: "Te gebruiken Top P voor de LLM. Verhoog deze om de willekeurigheid te vergroten (laat dit leeg om de standaardinstelling van het model te gebruiken, doorgaans een waarde van 0,0 tot 2,0)"
priority: "Prioriteit"
priority_help: "Prioritaire persona's worden bovenaan de personalijst weergegeven voor gebruikers. Als meerdere persona's prioriteit hebben, worden deze alfabetisch gesorteerd."
priority_help: "Prioritaire agent's worden bovenaan de agentlijst weergegeven voor gebruikers. Als meerdere agent's prioriteit hebben, worden deze alfabetisch gesorteerd."
tool_options: "Toolopties"
rag_conversation_chunks: "Conversatiechunks zoeken"
rag_conversation_chunks_help: "Het te gebruiken aantal chunks voor zoeken door het RAG-model. Verhoog dit om de hoeveelheid context te vergroten die de AI kan gebruiken."
persona_description: "Persona's zijn een krachtige functie waarmee je het gedrag van de AI-engine kunt aanpassen in je Discourse-forum. Ze fungeren als een 'systeembericht' dat de reacties en interacties van de AI stuurt, waardoor je een persoonlijkere en boeiendere gebruikerservaring creëert."
agent_description: "Agent's zijn een krachtige functie waarmee je het gedrag van de AI-engine kunt aanpassen in je Discourse-forum. Ze fungeren als een 'systeembericht' dat de reacties en interacties van de AI stuurt, waardoor je een persoonlijkere en boeiendere gebruikerservaring creëert."
response_format:
open_modal: "Bewerken"
modal:
@ -376,7 +376,7 @@ nl:
usage:
ai_bot: "AI-bot"
ai_helper: "Helper"
ai_persona: "Persona (%{persona})"
ai_agent: "Agent (%{agent})"
ai_summarization: "Samenvatten"
ai_embeddings_semantic_search: "AI zoeken"
ai_spam: "Spam"

View File

@ -95,13 +95,13 @@ pl_PL:
description: "Domyślny model językowy używany do selekcji"
tool:
label: "Narzędzie"
llm_persona_triage:
llm_agent_triage:
fields:
persona:
agent:
label: "Osobowość"
silent_mode:
label: "Tryb cichy"
description: "W trybie cichym persona otrzyma zawartość, ale nie opublikuje niczego na forum - przydatne podczas przeprowadzania selekcji przy użyciu narzędzi."
description: "W trybie cichym agent otrzyma zawartość, ale nie opublikuje niczego na forum - przydatne podczas przeprowadzania selekcji przy użyciu narzędzi."
llm_triage:
fields:
system_prompt:
@ -136,12 +136,12 @@ pl_PL:
flag_post:
label: "Oflaguj post"
description: "Oflaguj post (jako spam lub do sprawdzenia)"
include_personal_messages:
include_agentl_messages:
label: "Dołącz osobiste wiadomości"
description: "Skanuj i sortuj również wiadomości prywatne"
reply_persona:
label: "Persona odpowiedzi"
description: "AI Persona użyta do odpowiedzi (musi mieć domyślną wartość LLM), będzie traktowana priorytetowo nad gotową odpowiedzią"
reply_agent:
label: "Agent odpowiedzi"
description: "AI Agent użyta do odpowiedzi (musi mieć domyślną wartość LLM), będzie traktowana priorytetowo nad gotową odpowiedzią"
model:
label: "Model"
description: "Model językowy używany do selekcji"
@ -155,7 +155,7 @@ pl_PL:
list:
header:
name: "Nazwa"
persona: "Osobowość"
agent: "Osobowość"
groups: "Grupy"
edit: "Edytuj"
set_up: "Skonfiguruj"
@ -227,7 +227,7 @@ pl_PL:
last_week: "Ostatni tydzień"
last_month: "Ostatni miesiąc"
custom: "Niestandardowy..."
ai_persona:
ai_agent:
ai_tools: "Narzędzia"
tool_strategies:
all: "Zastosuj do wszystkich odpowiedzi"
@ -254,20 +254,20 @@ pl_PL:
default_llm: Domyślny model językowy
default_llm_help: Domyślny model językowy używany dla tej persony. Wymagane, jeśli chcesz wspomnieć o osobie w postach publicznych.
system_prompt: Prompt systemowy
allow_personal_messages: "Zezwalaj na wiadomości osobiste"
allow_personal_messages_help: "Jeśli ta opcja jest włączona, użytkownicy w dozwolonych grupach mogą wysyłać osobiste wiadomości do tej persony."
allow_agentl_messages: "Zezwalaj na wiadomości osobiste"
allow_agentl_messages_help: "Jeśli ta opcja jest włączona, użytkownicy w dozwolonych grupach mogą wysyłać osobiste wiadomości do tej persony."
allow_topic_mentions: "Zezwalaj na wzmianki o temacie"
allow_topic_mentions_help: "Jeśli ta opcja jest włączona, użytkownicy w dozwolonych grupach mogą wspominać o tej personie w tematach."
force_default_llm: "Zawsze używaj domyślnego modelu języka"
save: "Zapisz"
saved: "Persona zapisana"
saved: "Agent zapisana"
enabled: "Włączona?"
tools: "Włączone narzędzia"
forced_tools: "Narzędzia wymuszone"
allowed_groups: "Dozwolone grupy"
confirm_delete: "Czy na pewno chcesz usunąć tę personę?"
new: "Nowa persona"
no_personas: "Nie utworzyłeś jeszcze żadnych person"
new: "Nowa agent"
no_agents: "Nie utworzyłeś jeszcze żadnych person"
title: "Persony"
short_title: "Persony"
delete: "Usuń"
@ -306,7 +306,7 @@ pl_PL:
name_help: "Nazwa pojawi się w interfejsie użytkownika Discourse i będzie krótkim identyfikatorem, którego będziesz używać do znajdowania narzędzia w różnych ustawieniach. Powinna być ona unikatowa (jest wymagana)"
new: "Nowe narzędzie"
tool_name: "Nazwa narzędzia"
tool_name_help: "Nazwa narzędzia jest prezentowana w dużym modelu językowym. Nie jest ona odrębna, ale jest odrębna dla każdej persony. (persona sprawdza poprawność przy zapisywaniu)"
tool_name_help: "Nazwa narzędzia jest prezentowana w dużym modelu językowym. Nie jest ona odrębna, ale jest odrębna dla każdej persony. (agent sprawdza poprawność przy zapisywaniu)"
description: "Opis"
description_help: "Jasny opis celu narzędzia dla modelu językowego"
subheader_description: "Narzędzia rozszerzają możliwości botów AI o zdefiniowane przez użytkownika funkcje JavaScript."
@ -374,7 +374,7 @@ pl_PL:
usage:
ai_bot: "Bot AI"
ai_helper: "Pomocnik"
ai_persona: "Persona (%{persona})"
ai_agent: "Agent (%{agent})"
ai_summarization: "Podsumuj"
ai_embeddings_semantic_search: "Wyszukiwanie AI"
ai_spam: "Spam"
@ -505,7 +505,7 @@ pl_PL:
expand_view_label: "Rozszerz widok"
collapse_view_label: "Wyjdź z trybu pełnoekranowego (przycisk ESC lub Wstecz)"
ai_bot:
persona: "Osobowość"
agent: "Osobowość"
llm: "Model"
pm_warning: "Wiadomości wysyłane przez chatboty AI są regularnie monitorowane przez moderatorów."
cancel_streaming: "Zatrzymaj odpowiedź"

View File

@ -55,8 +55,8 @@ pt:
total_requests: "Total de pedidos"
periods:
last_day: "Últimas 24 horas"
custom: "Personalizar..."
ai_persona:
custom: "Agentlizar..."
ai_agent:
back: "Retroceder"
name: "Nome"
edit: "Editar"
@ -99,7 +99,7 @@ pt:
six_hours: "6 horas"
day: "24 horas"
week: "7 dias"
custom: "Personalizar..."
custom: "Agentlizar..."
hours: "horas"
usage:
ai_summarization: "Resumir"
@ -108,7 +108,7 @@ pt:
title: "Próximo"
providers:
google: "Google"
fake: "Personalizar"
fake: "Agentlizar"
ai_helper:
context_menu:
cancel: "Cancelar"
@ -133,7 +133,7 @@ pt:
display_name: "Nome"
providers:
google: "Google"
fake: "Personalizar"
fake: "Agentlizar"
ai_bot:
debug_ai_modal:
request: "Pedido"

View File

@ -12,7 +12,7 @@ pt_BR:
descriptions:
discourse_ai:
search: "Permite pesquisa com IA"
stream_completion: "Permite transmissão de conclusão com persona de IA"
stream_completion: "Permite transmissão de conclusão com agent de IA"
site_settings:
categories:
discourse_ai: "Discourse IA"
@ -128,7 +128,7 @@ pt_BR:
flag_post:
label: "Sinalizar postagem"
description: "Sinaliza a postagem (como spam ou para revisão)"
include_personal_messages:
include_agentl_messages:
label: "Incluir mensagens pessoais"
description: "Também verificar e fazer triagem de mensagens pessoais"
model:
@ -152,7 +152,7 @@ pt_BR:
short_title: "Spam"
title: "Configurar tratamento de spam"
select_llm: "Selecionar LLM"
custom_instructions: "Instruções personalizadas"
custom_instructions: "Instruções agentlizadas"
custom_instructions_help: "Instruções específicas para seu site para ajudar a orientar a IA na identificação de spam, por exemplo: \"Verificar com mais agressividade postagens que não estão em inglês\"."
last_seven_days: "Últimos sete dias"
scanned_count: "Postagens verificadas"
@ -218,8 +218,8 @@ pt_BR:
last_day: "Últimas 24 horas"
last_week: "Semana passada"
last_month: "Mês passado"
custom: "Personalizado..."
ai_persona:
custom: "Agentlizado..."
ai_agent:
ai_tools: "Ferramentas"
tool_strategies:
all: "Aplicar a todas as respostas"
@ -243,47 +243,47 @@ pt_BR:
tool_details: Exibir detalhes da ferramenta
tool_details_help: Serão exibidos aos(às) usuários(as) finais as ferramentas nas quais o modelo de linguagem foi acionado.
mentionable: Permitir menções
mentionable_help: Ative para que os(as) usuários(as) nos grupos permitidos possam mencionar este(a) usuário(a) nas postagens. A IA responderá como esta persona.
mentionable_help: Ative para que os(as) usuários(as) nos grupos permitidos possam mencionar este(a) usuário(a) nas postagens. A IA responderá como esta agent.
user: Usuário(a)
create_user: Criar usuário(a)
create_user_help: Como alternativa, você poderá anexar um(a) usuário(a) a esta persona. Se fizer isso, a IA usará este(a) usuário(a) para responder aos pedidos.
create_user_help: Como alternativa, você poderá anexar um(a) usuário(a) a esta agent. Se fizer isso, a IA usará este(a) usuário(a) para responder aos pedidos.
default_llm: Modelo de linguagem padrão
default_llm_help: O modelo de linguagem padrão a ser usado para esta persona. É obrigatório se você quiser mencionar a persona em postagens públicas.
default_llm_help: O modelo de linguagem padrão a ser usado para esta agent. É obrigatório se você quiser mencionar a agent em postagens públicas.
question_consolidator_llm: Modelo de linguagem para consolidador de pergunta
question_consolidator_llm_help: O modelo de linguagem a ser usado para o consolidador de pergunta. Para economizar, você pode escolher um modelo menos robusto.
system_prompt: Prompt do sistema
forced_tool_strategy: Estratégia de ferramenta forçada
allow_chat_direct_messages: "Permitir mensagens diretas do chat"
allow_chat_direct_messages_help: "Ative para que os(às) usuários(as) nos grupos permitidos possam enviar mensagens diretas a esta persona."
allow_chat_direct_messages_help: "Ative para que os(às) usuários(as) nos grupos permitidos possam enviar mensagens diretas a esta agent."
allow_chat_channel_mentions: "Permitir menções no canal de chat"
allow_chat_channel_mentions_help: "Ative para os(as) usuários(as) nos grupos permitidos poderem mencionar esta persona nos canais de chat"
allow_personal_messages: "Permitir mensagens pessoais"
allow_personal_messages_help: "Ative para que os(as) usuários(as) nos grupos permitidos possam enviar mensagens pessoais a esta persona."
allow_chat_channel_mentions_help: "Ative para os(as) usuários(as) nos grupos permitidos poderem mencionar esta agent nos canais de chat"
allow_agentl_messages: "Permitir mensagens pessoais"
allow_agentl_messages_help: "Ative para que os(as) usuários(as) nos grupos permitidos possam enviar mensagens pessoais a esta agent."
allow_topic_mentions: "Permtir menções de tópicos"
allow_topic_mentions_help: "Ative para os(as) usuários(as) nos grupos permitidos poderem mencionar esta persona nos tópicos."
allow_topic_mentions_help: "Ative para os(as) usuários(as) nos grupos permitidos poderem mencionar esta agent nos tópicos."
force_default_llm: "Usar sempre o modelo de linguagem padrão"
save: "Salvar"
saved: "Persona salva"
saved: "Agent salva"
enabled: "Ativado(a)?"
tools: "Ferramentas ativadas"
forced_tools: "Ferramentas forçadas"
allowed_groups: "Grupos permitidos"
confirm_delete: "Você tem certeza de que deseja excluir esta persona?"
new: "Nova persona"
no_personas: "Você ainda não criou nenhuma persona"
title: "Personas"
short_title: "Personas"
confirm_delete: "Você tem certeza de que deseja excluir esta agent?"
new: "Nova agent"
no_agents: "Você ainda não criou nenhuma agent"
title: "Agents"
short_title: "Agents"
delete: "Excluir"
temperature: "Temperatura"
temperature_help: "A Temperatura a ser usada para o LLM. Aumente para incrementar a criatividade (deixe vazio para usar o padrão do modelo, que geralmente é um valor que varia entre 0.0 e 2.0)"
top_p: "P Máximo"
top_p_help: "O P Máximo a ser usado para o LLM, aumente para incrementar o fator aleatório (deixe vazio para usar o padrão do modelo, que geralmente é um valor que varia entre 0.0 e 1.0)"
priority: "Prioridade"
priority_help: "Personas de prioridade são exibidas aos(às) usuários(as) no topo da lista de personas. Se várias personas tiverem prioridade, serão escolhidas em ordem alfabética."
priority_help: "Agents de prioridade são exibidas aos(às) usuários(as) no topo da lista de agents. Se várias agents tiverem prioridade, serão escolhidas em ordem alfabética."
tool_options: "Opções de ferramenta"
rag_conversation_chunks: "Pesquisar pedaços de conversa"
rag_conversation_chunks_help: "O número de pedaços a serem usados para pesquisas de modelo RAG. Aumente para incrementar a quantidade de contexto que a IA pode usar."
persona_description: "Personas são um recurso poderoso que permite personalizar o comportamento da engine de IA no seu fórum do Discourse. Atuam como uma \"mensagem de sistema\" que orienta as respostas e as interações da IA, ajudando a criar uma experiência mais personzalidada e envolvente para o(a) usuário(a)."
agent_description: "Agents são um recurso poderoso que permite agentlizar o comportamento da engine de IA no seu fórum do Discourse. Atuam como uma \"mensagem de sistema\" que orienta as respostas e as interações da IA, ajudando a criar uma experiência mais personzalidada e envolvente para o(a) usuário(a)."
response_format:
open_modal: "Editar"
modal:
@ -369,14 +369,14 @@ pt_BR:
six_hours: "6 horas"
day: "24 horas"
week: "Sete dias"
custom: "Personalizado..."
custom: "Agentlizado..."
hours: "horas"
max_tokens_help: "Quantidade máxima de tokens (palavras e caracteres) que podem ser usados por cada usuário(a) neste grupo durante o período especificado. Tokens são unidades usadas para modelos de IA processarem texto: 1 token equivale a aproximadamente 4 caracteres ou 3/4 de uma palavra."
max_usages_help: "A quantidade máxima de vezes que cada usuário(a) neste grupo pode usar o modelo de IA durante o período especificado. Essa cota é rastreada por cada usuário(a) individual e não é compartilhada no grupo."
usage:
ai_bot: "Bot de IA"
ai_helper: "Ajudante"
ai_persona: "Persona (%{persona})"
ai_agent: "Agent (%{agent})"
ai_summarization: "Resumir"
ai_embeddings_semantic_search: "Pesquisa com IA"
ai_spam: "Spam"
@ -429,7 +429,7 @@ pt_BR:
samba_nova: "SambaNova"
mistral: "Mistral"
open_router: "OpenRouter"
fake: "Personalizados(as)"
fake: "Agentlizados(as)"
provider_fields:
access_key_id: "ID da chave de acesso do AWS Bedrock"
region: "Região do AWS Bedrock"
@ -463,8 +463,8 @@ pt_BR:
discard: "Descartar"
changes: "Edições sugeridas"
custom_prompt:
title: "Prompt personalizado"
placeholder: "Insira um prompt personalizado..."
title: "Prompt agentlizado"
placeholder: "Insira um prompt agentlizado..."
submit: "Enviar prompt"
translate_prompt: "Traduzir para %{language}"
post_options_menu:
@ -542,7 +542,7 @@ pt_BR:
google: "Google"
cloudflare: "Cloudflare"
CDCK: "CDCK"
fake: "Personalizados(as)"
fake: "Agentlizados(as)"
provider_fields:
model_name: "Nome do modelo"
semantic_search: "Tópicos (semântica)"

View File

@ -57,8 +57,8 @@ ro:
total_requests: "Total cereri"
periods:
last_day: "Ultimele 24 de ore"
custom: "Personalizat..."
ai_persona:
custom: "Agentlizat..."
ai_agent:
back: "Înapoi"
name: "Nume"
edit: "Modifică"
@ -96,7 +96,7 @@ ro:
hour: "o oră"
six_hours: "6 de ore"
day: "24 de ore"
custom: "Personalizat..."
custom: "Agentlizat..."
hours: "de ore"
usage:
ai_summarization: "Rezumat"
@ -107,7 +107,7 @@ ro:
success: "Succes!"
providers:
google: "Google"
fake: "Personalizat"
fake: "Agentlizat"
ai_helper:
context_menu:
cancel: "Anulare"
@ -133,7 +133,7 @@ ro:
display_name: "Nume"
providers:
google: "Google"
fake: "Personalizat"
fake: "Agentlizat"
ai_bot:
debug_ai_modal:
request: "Cere"

View File

@ -128,7 +128,7 @@ ru:
flag_post:
label: "Пометить публикацию"
description: "Пометить публикацию (как спам или для отправки на проверку)"
include_personal_messages:
include_agentl_messages:
label: "Включать личные сообщения"
description: "Также сканировать и выполнять триаж личных сообщений"
model:
@ -219,7 +219,7 @@ ru:
last_week: "На прошлой неделе"
last_month: "В прошлом месяце"
custom: "Другое…"
ai_persona:
ai_agent:
ai_tools: "Инструменты"
tool_strategies:
all: "Применить ко всем ответам"
@ -259,8 +259,8 @@ ru:
allow_chat_direct_messages_help: "Если параметр включен, пользователи в разрешенных группах смогут отправлять прямые сообщения этой персоне."
allow_chat_channel_mentions: "Разрешить упоминания в каналах чата"
allow_chat_channel_mentions_help: "Если параметр включен, пользователи в разрешенных группах смогут упоминать эту персону в каналах чата."
allow_personal_messages: "Разрешить личные сообщения"
allow_personal_messages_help: "Если параметр включен, пользователи в разрешенных группах смогут отправлять личные сообщения этой персоне."
allow_agentl_messages: "Разрешить личные сообщения"
allow_agentl_messages_help: "Если параметр включен, пользователи в разрешенных группах смогут отправлять личные сообщения этой персоне."
allow_topic_mentions: "Разрешить упоминания в темах"
allow_topic_mentions_help: "Если параметр включен, пользователи в разрешенных группах смогут упоминать эту персону в темах."
force_default_llm: "Всегда использовать языковую модель по умолчанию"
@ -272,7 +272,7 @@ ru:
allowed_groups: "Разрешённые группы"
confirm_delete: "Точно удалить эту персону?"
new: "Новая персона"
no_personas: "Вы еще не создали ни одной персоны"
no_agents: "Вы еще не создали ни одной персоны"
title: "Персоны"
short_title: "Персоны"
delete: "Удалить"
@ -285,7 +285,7 @@ ru:
tool_options: "Параметры инструмента"
rag_conversation_chunks: "Фрагменты разговора для поиска"
rag_conversation_chunks_help: "Количество фрагментов для поиска в модели RAG. Увеличьте это значение, чтобы увеличить объем контекста, который может использовать AI."
persona_description: "Персоны — полезная функция, с помощью которой вы можете настроить поведение движка AI на вашем форуме Discourse. Они действуют как «системное сообщение», задающее направление для ответов AI и обеспечивающее более персонализированное взаимодействие с пользователями."
agent_description: "Персоны — полезная функция, с помощью которой вы можете настроить поведение движка AI на вашем форуме Discourse. Они действуют как «системное сообщение», задающее направление для ответов AI и обеспечивающее более персонализированное взаимодействие с пользователями."
response_format:
open_modal: "Изменить"
modal:
@ -378,7 +378,7 @@ ru:
usage:
ai_bot: "AI-бот"
ai_helper: "Помощник"
ai_persona: "Персона (%{persona})"
ai_agent: "Персона (%{agent})"
ai_summarization: "Сводка"
ai_embeddings_semantic_search: "AI-поиск"
ai_spam: "Спам"

View File

@ -61,7 +61,7 @@ sk:
periods:
last_day: "Posledných 24 hodín"
custom: "Vlastné..."
ai_persona:
ai_agent:
back: "Späť"
name: "Meno"
edit: "Upraviť"

View File

@ -55,7 +55,7 @@ sl:
periods:
last_day: "Zadnjih 24 ur"
custom: "Po meri..."
ai_persona:
ai_agent:
back: "Nazaj"
name: "Ime"
edit: "Uredi"

View File

@ -52,7 +52,7 @@ sq:
summary: "Përmbledhja"
username: "Emri i përdoruesit"
total_requests: "Total requests"
ai_persona:
ai_agent:
back: "Kthehu mbrapa"
name: "Emri"
edit: "Redakto"

Some files were not shown because too many files have changed in this diff Show More