mirror of
https://github.com/discourse/discourse-ai.git
synced 2025-07-08 15:22:47 +00:00
WIP rename persona -> agent
This commit is contained in:
parent
ad5c48d9ae
commit
4ba091aa8b
@ -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")
|
||||
);
|
||||
}
|
||||
}
|
@ -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")
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
import DiscourseRoute from "discourse/routes/discourse";
|
||||
|
||||
export default class DiscourseAiAiAgentsRoute extends DiscourseRoute {
|
||||
model() {
|
||||
return this.store.findAll("ai-agent");
|
||||
}
|
||||
}
|
@ -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")
|
||||
);
|
||||
}
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
import DiscourseRoute from "discourse/routes/discourse";
|
||||
|
||||
export default class DiscourseAiAiPersonasRoute extends DiscourseRoute {
|
||||
model() {
|
||||
return this.store.findAll("ai-persona");
|
||||
}
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
<AiAgentListEditor
|
||||
@agents={{this.allAgents}}
|
||||
@currentAgent={{this.model}}
|
||||
/>
|
@ -0,0 +1 @@
|
||||
<AiAgentListEditor @agents={{this.model}} />
|
@ -0,0 +1,4 @@
|
||||
<AiAgentListEditor
|
||||
@agents={{this.allAgents}}
|
||||
@currentAgent={{this.model}}
|
||||
/>
|
@ -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>
|
||||
|
@ -1,4 +0,0 @@
|
||||
<AiPersonaListEditor
|
||||
@personas={{this.allPersonas}}
|
||||
@currentPersona={{this.model}}
|
||||
/>
|
@ -1 +0,0 @@
|
||||
<AiPersonaListEditor @personas={{this.model}} />
|
@ -1,4 +0,0 @@
|
||||
<AiPersonaListEditor
|
||||
@personas={{this.allPersonas}}
|
||||
@currentPersona={{this.model}}
|
||||
/>
|
@ -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}}
|
||||
|
@ -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}}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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]
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
)
|
||||
|
@ -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
|
||||
#
|
@ -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.
|
||||
*
|
||||
|
@ -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),
|
||||
)
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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
|
@ -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"
|
||||
|
@ -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
|
@ -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>
|
||||
|
@ -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" });
|
||||
});
|
||||
|
@ -16,6 +16,6 @@ export default class Adapter extends RestAdapter {
|
||||
}
|
||||
|
||||
apiNameFor() {
|
||||
return "ai-persona";
|
||||
return "ai-agent";
|
||||
}
|
||||
}
|
@ -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() {
|
@ -8,8 +8,8 @@ export default class AiFeature extends RestModel {
|
||||
"ref",
|
||||
"description",
|
||||
"enable_setting",
|
||||
"persona",
|
||||
"persona_setting"
|
||||
"agent",
|
||||
"agent_setting"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -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}}
|
@ -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}}
|
117
assets/javascripts/discourse/components/ai-agent-list-editor.gjs
Normal file
117
assets/javascripts/discourse/components/ai-agent-list-editor.gjs
Normal 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>
|
||||
}
|
@ -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")}}
|
@ -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")}}
|
@ -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}}
|
||||
/>
|
||||
|
||||
|
@ -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,
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -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}}
|
||||
/>
|
||||
|
@ -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", {
|
||||
|
@ -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>
|
||||
}
|
@ -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
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -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>
|
@ -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>
|
||||
}
|
@ -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>
|
||||
|
@ -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>
|
@ -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
|
||||
);
|
||||
}
|
||||
|
@ -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
|
||||
);
|
||||
}
|
||||
|
@ -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
|
||||
);
|
||||
})(),
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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 },
|
||||
},
|
||||
});
|
||||
|
||||
|
@ -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",
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -8,7 +8,7 @@
|
||||
display: block;
|
||||
}
|
||||
|
||||
&__row-item-persona {
|
||||
&__row-item-agent {
|
||||
padding: 0;
|
||||
text-align: left;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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 {
|
@ -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);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
.ai-persona-editor {
|
||||
.ai-agent-editor {
|
||||
&__system_prompt,
|
||||
&__description,
|
||||
.select-kit.multi-select {
|
@ -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 {
|
||||
|
@ -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: "عشوائي"
|
||||
|
@ -50,7 +50,7 @@ be:
|
||||
summary: "вынік"
|
||||
username: "Імя карыстальніка"
|
||||
total_requests: "Усяго запытаў"
|
||||
ai_persona:
|
||||
ai_agent:
|
||||
back: "Назад"
|
||||
name: "імя"
|
||||
edit: "рэдагаваць"
|
||||
|
@ -56,7 +56,7 @@ bg:
|
||||
periods:
|
||||
last_day: "Последните 24 часа"
|
||||
custom: "Ръчно задаване..."
|
||||
ai_persona:
|
||||
ai_agent:
|
||||
back: "Назад"
|
||||
name: "Име"
|
||||
edit: "Редактирай"
|
||||
|
@ -51,7 +51,7 @@ bs_BA:
|
||||
usage:
|
||||
summary: "Sažetak"
|
||||
username: "Nadimak"
|
||||
ai_persona:
|
||||
ai_agent:
|
||||
back: "Prethodno"
|
||||
name: "Ime"
|
||||
edit: "Edit"
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -59,7 +59,7 @@ da:
|
||||
periods:
|
||||
last_day: "Seneste 24 timer"
|
||||
custom: "Tilpasset..."
|
||||
ai_persona:
|
||||
ai_agent:
|
||||
back: "Tilbage"
|
||||
name: "Navn"
|
||||
edit: "Rediger"
|
||||
|
@ -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"
|
||||
|
@ -57,7 +57,7 @@ el:
|
||||
periods:
|
||||
last_day: "Τελευταίες 24 ώρες"
|
||||
custom: "Προσαρμοσμένο..."
|
||||
ai_persona:
|
||||
ai_agent:
|
||||
back: "Πίσω"
|
||||
name: "Όνομα"
|
||||
edit: "Επεξεργασία"
|
||||
|
@ -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"
|
||||
|
@ -15,7 +15,7 @@ en_GB:
|
||||
discourse_ai:
|
||||
usage:
|
||||
summary: "Summary"
|
||||
ai_persona:
|
||||
ai_agent:
|
||||
description: "Description"
|
||||
tools:
|
||||
description: "Description"
|
||||
|
@ -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)"
|
||||
|
@ -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"
|
||||
|
@ -83,7 +83,7 @@ fa_IR:
|
||||
periods:
|
||||
last_day: "۲۴ ساعت گذشته"
|
||||
custom: "سفارشی..."
|
||||
ai_persona:
|
||||
ai_agent:
|
||||
back: "بازگشت"
|
||||
name: "نام"
|
||||
edit: "ویرایش"
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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: "עצירת התגובה"
|
||||
|
@ -58,7 +58,7 @@ hr:
|
||||
periods:
|
||||
last_day: "Posljednja 24 sata"
|
||||
custom: "Prilagođeno..."
|
||||
ai_persona:
|
||||
ai_agent:
|
||||
back: "Natrag"
|
||||
name: "Ime"
|
||||
edit: "Uredi"
|
||||
|
@ -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"
|
||||
|
@ -52,7 +52,7 @@ hy:
|
||||
summary: "Ամփոփումը"
|
||||
username: "Օգտանուն"
|
||||
total_requests: "Ընդհանուր հարցումներ"
|
||||
ai_persona:
|
||||
ai_agent:
|
||||
back: "Ետ"
|
||||
name: "Անուն"
|
||||
edit: "Խմբագրել"
|
||||
|
@ -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.
|
||||
|
@ -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)"
|
||||
|
@ -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: "迷惑"
|
||||
|
@ -60,7 +60,7 @@ ko:
|
||||
periods:
|
||||
last_day: "지난 24시간"
|
||||
custom: "사용자 지정..."
|
||||
ai_persona:
|
||||
ai_agent:
|
||||
back: "뒤로"
|
||||
name: "그룹명"
|
||||
edit: "편집"
|
||||
|
@ -95,7 +95,7 @@ lt:
|
||||
periods:
|
||||
last_day: "Paskutinės 24 valandos"
|
||||
custom: "Pasirinktinis..."
|
||||
ai_persona:
|
||||
ai_agent:
|
||||
back: "Atgal"
|
||||
name: "Vardas"
|
||||
edit: "Redaguoti"
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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ź"
|
||||
|
@ -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"
|
||||
|
@ -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)"
|
||||
|
@ -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"
|
||||
|
@ -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: "Спам"
|
||||
|
@ -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ť"
|
||||
|
@ -55,7 +55,7 @@ sl:
|
||||
periods:
|
||||
last_day: "Zadnjih 24 ur"
|
||||
custom: "Po meri..."
|
||||
ai_persona:
|
||||
ai_agent:
|
||||
back: "Nazaj"
|
||||
name: "Ime"
|
||||
edit: "Uredi"
|
||||
|
@ -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
Loading…
x
Reference in New Issue
Block a user