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 { AUTO_GROUPS } from "discourse/lib/constants";
|
||||||
import DiscourseRoute from "discourse/routes/discourse";
|
import DiscourseRoute from "discourse/routes/discourse";
|
||||||
|
|
||||||
export default class AdminPluginsShowDiscourseAiPersonasNew extends DiscourseRoute {
|
export default class AdminPluginsShowDiscourseAiAgentsNew extends DiscourseRoute {
|
||||||
async model() {
|
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("allowed_group_ids", [AUTO_GROUPS.trust_level_0.id]);
|
||||||
record.set("rag_uploads", []);
|
record.set("rag_uploads", []);
|
||||||
// these match the defaults on the table
|
// these match the defaults on the table
|
||||||
record.set("rag_chunk_tokens", 374);
|
record.set("rag_chunk_tokens", 374);
|
||||||
record.set("rag_chunk_overlap_tokens", 10);
|
record.set("rag_chunk_overlap_tokens", 10);
|
||||||
record.set("rag_conversation_chunks", 10);
|
record.set("rag_conversation_chunks", 10);
|
||||||
record.set("allow_personal_messages", true);
|
record.set("allow_agentl_messages", true);
|
||||||
record.set("tool_details", false);
|
record.set("tool_details", false);
|
||||||
return record;
|
return record;
|
||||||
}
|
}
|
||||||
@ -18,8 +18,8 @@ export default class AdminPluginsShowDiscourseAiPersonasNew extends DiscourseRou
|
|||||||
setupController(controller, model) {
|
setupController(controller, model) {
|
||||||
super.setupController(controller, model);
|
super.setupController(controller, model);
|
||||||
controller.set(
|
controller.set(
|
||||||
"allPersonas",
|
"allAgents",
|
||||||
this.modelFor("adminPlugins.show.discourse-ai-personas")
|
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";
|
const prefix = "discourse_ai.features.list.header";
|
||||||
return [
|
return [
|
||||||
i18n(`${prefix}.name`),
|
i18n(`${prefix}.name`),
|
||||||
i18n(`${prefix}.persona`),
|
i18n(`${prefix}.agent`),
|
||||||
i18n(`${prefix}.groups`),
|
i18n(`${prefix}.groups`),
|
||||||
"",
|
"",
|
||||||
];
|
];
|
||||||
@ -75,21 +75,21 @@ export default RouteTemplate(
|
|||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
<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
|
<DButton
|
||||||
class="btn-flat btn-small ai-feature-list__row-item-persona"
|
class="btn-flat btn-small ai-feature-list__row-item-agent"
|
||||||
@translatedLabel={{feature.persona.name}}
|
@translatedLabel={{feature.agent.name}}
|
||||||
@route="adminPlugins.show.discourse-ai-personas.edit"
|
@route="adminPlugins.show.discourse-ai-agents.edit"
|
||||||
@routeModels={{feature.persona.id}}
|
@routeModels={{feature.agent.id}}
|
||||||
/>
|
/>
|
||||||
</td>
|
</td>
|
||||||
<td
|
<td
|
||||||
class="d-admin-row__detail ai-feature-list__row-item ai-feature-list__groups"
|
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">
|
<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>
|
<li>{{group.name}}</li>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</ul>
|
</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
|
<AiToolEditor
|
||||||
@tools={{this.allTools}}
|
@tools={{this.allTools}}
|
||||||
@model={{this.model}}
|
@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
|
<AiToolEditor
|
||||||
@tools={{this.allTools}}
|
@tools={{this.allTools}}
|
||||||
@model={{this.model}}
|
@model={{this.model}}
|
||||||
|
@ -2,20 +2,20 @@
|
|||||||
|
|
||||||
module DiscourseAi
|
module DiscourseAi
|
||||||
module Admin
|
module Admin
|
||||||
class AiPersonasController < ::Admin::AdminController
|
class AiAgentsController < ::Admin::AdminController
|
||||||
requires_plugin ::DiscourseAi::PLUGIN_NAME
|
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
|
def index
|
||||||
ai_personas =
|
ai_agents =
|
||||||
AiPersona.ordered.map do |persona|
|
AiAgent.ordered.map do |agent|
|
||||||
# we use a special serializer here cause names and descriptions are
|
# we use a special serializer here cause names and descriptions are
|
||||||
# localized for system personas
|
# localized for system agents
|
||||||
LocalizedAiPersonaSerializer.new(persona, root: false)
|
LocalizedAiAgentSerializer.new(agent, root: false)
|
||||||
end
|
end
|
||||||
tools =
|
tools =
|
||||||
DiscourseAi::Personas::Persona.all_available_tools.map do |tool|
|
DiscourseAi::Agents::Agent.all_available_tools.map do |tool|
|
||||||
AiToolSerializer.new(tool, root: false)
|
AiToolSerializer.new(tool, root: false)
|
||||||
end
|
end
|
||||||
AiTool
|
AiTool
|
||||||
@ -36,7 +36,7 @@ module DiscourseAi
|
|||||||
allowed_seeded_llm_ids: SiteSetting.ai_bot_allowed_seeded_models_map,
|
allowed_seeded_llm_ids: SiteSetting.ai_bot_allowed_seeded_models_map,
|
||||||
)
|
)
|
||||||
render json: {
|
render json: {
|
||||||
ai_personas: ai_personas,
|
ai_agents: ai_agents,
|
||||||
meta: {
|
meta: {
|
||||||
tools: tools,
|
tools: tools,
|
||||||
llms: llms,
|
llms: llms,
|
||||||
@ -51,55 +51,55 @@ module DiscourseAi
|
|||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
render json: LocalizedAiPersonaSerializer.new(@ai_persona)
|
render json: LocalizedAiAgentSerializer.new(@ai_agent)
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
ai_persona = AiPersona.new(ai_persona_params.except(:rag_uploads))
|
ai_agent = AiAgent.new(ai_agent_params.except(:rag_uploads))
|
||||||
if ai_persona.save
|
if ai_agent.save
|
||||||
RagDocumentFragment.link_target_and_uploads(ai_persona, attached_upload_ids)
|
RagDocumentFragment.link_target_and_uploads(ai_agent, attached_upload_ids)
|
||||||
|
|
||||||
render json: {
|
render json: {
|
||||||
ai_persona: LocalizedAiPersonaSerializer.new(ai_persona, root: false),
|
ai_agent: LocalizedAiAgentSerializer.new(ai_agent, root: false),
|
||||||
},
|
},
|
||||||
status: :created
|
status: :created
|
||||||
else
|
else
|
||||||
render_json_error ai_persona
|
render_json_error ai_agent
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_user
|
def create_user
|
||||||
user = @ai_persona.create_user!
|
user = @ai_agent.create_user!
|
||||||
render json: BasicUserSerializer.new(user, root: "user")
|
render json: BasicUserSerializer.new(user, root: "user")
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
if @ai_persona.update(ai_persona_params.except(:rag_uploads))
|
if @ai_agent.update(ai_agent_params.except(:rag_uploads))
|
||||||
RagDocumentFragment.update_target_uploads(@ai_persona, attached_upload_ids)
|
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
|
else
|
||||||
render_json_error @ai_persona
|
render_json_error @ai_agent
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
if @ai_persona.destroy
|
if @ai_agent.destroy
|
||||||
head :no_content
|
head :no_content
|
||||||
else
|
else
|
||||||
render_json_error @ai_persona
|
render_json_error @ai_agent
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def stream_reply
|
def stream_reply
|
||||||
persona =
|
agent =
|
||||||
AiPersona.find_by(name: params[:persona_name]) ||
|
AiAgent.find_by(name: params[:agent_name]) ||
|
||||||
AiPersona.find_by(id: params[:persona_id])
|
AiAgent.find_by(id: params[:agent_id])
|
||||||
return render_json_error(I18n.t("discourse_ai.errors.persona_not_found")) if persona.nil?
|
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"))
|
return render_json_error(I18n.t("discourse_ai.errors.no_default_llm"))
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -107,8 +107,8 @@ module DiscourseAi
|
|||||||
return render_json_error(I18n.t("discourse_ai.errors.no_query_specified"))
|
return render_json_error(I18n.t("discourse_ai.errors.no_query_specified"))
|
||||||
end
|
end
|
||||||
|
|
||||||
if !persona.user_id
|
if !agent.user_id
|
||||||
return render_json_error(I18n.t("discourse_ai.errors.no_user_for_persona"))
|
return render_json_error(I18n.t("discourse_ai.errors.no_user_for_agent"))
|
||||||
end
|
end
|
||||||
|
|
||||||
if !params[:username] && !params[:user_unique_id]
|
if !params[:username] && !params[:user_unique_id]
|
||||||
@ -142,7 +142,7 @@ module DiscourseAi
|
|||||||
|
|
||||||
DiscourseAi::AiBot::ResponseHttpStreamer.queue_streamed_reply(
|
DiscourseAi::AiBot::ResponseHttpStreamer.queue_streamed_reply(
|
||||||
io: io,
|
io: io,
|
||||||
persona: persona,
|
agent: agent,
|
||||||
user: user,
|
user: user,
|
||||||
topic: topic,
|
topic: topic,
|
||||||
query: params[:query].to_s,
|
query: params[:query].to_s,
|
||||||
@ -178,17 +178,17 @@ module DiscourseAi
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_ai_persona
|
def find_ai_agent
|
||||||
@ai_persona = AiPersona.find(params[:id])
|
@ai_agent = AiAgent.find(params[:id])
|
||||||
end
|
end
|
||||||
|
|
||||||
def attached_upload_ids
|
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
|
end
|
||||||
|
|
||||||
def ai_persona_params
|
def ai_agent_params
|
||||||
permitted =
|
permitted =
|
||||||
params.require(:ai_persona).permit(
|
params.require(:ai_agent).permit(
|
||||||
:name,
|
:name,
|
||||||
:description,
|
:description,
|
||||||
:enabled,
|
:enabled,
|
||||||
@ -209,7 +209,7 @@ module DiscourseAi
|
|||||||
:allow_chat_channel_mentions,
|
:allow_chat_channel_mentions,
|
||||||
:allow_chat_direct_messages,
|
:allow_chat_direct_messages,
|
||||||
:allow_topic_mentions,
|
:allow_topic_mentions,
|
||||||
:allow_personal_messages,
|
:allow_agentl_messages,
|
||||||
:tool_details,
|
:tool_details,
|
||||||
:forced_tool_count,
|
:forced_tool_count,
|
||||||
:force_default_llm,
|
:force_default_llm,
|
||||||
@ -217,15 +217,15 @@ module DiscourseAi
|
|||||||
rag_uploads: [:id],
|
rag_uploads: [:id],
|
||||||
)
|
)
|
||||||
|
|
||||||
if tools = params.dig(:ai_persona, :tools)
|
if tools = params.dig(:ai_agent, :tools)
|
||||||
permitted[:tools] = permit_tools(tools)
|
permitted[:tools] = permit_tools(tools)
|
||||||
end
|
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)
|
permitted[:response_format] = permit_response_format(response_format)
|
||||||
end
|
end
|
||||||
|
|
||||||
if examples = params.dig(:ai_persona, :examples)
|
if examples = params.dig(:ai_agent, :examples)
|
||||||
permitted[:examples] = permit_examples(examples)
|
permitted[:examples] = permit_examples(examples)
|
||||||
end
|
end
|
||||||
|
|
@ -17,19 +17,19 @@ module DiscourseAi
|
|||||||
private
|
private
|
||||||
|
|
||||||
def serialize_features(features)
|
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
|
end
|
||||||
|
|
||||||
def serialize_feature(feature)
|
def serialize_feature(feature)
|
||||||
return nil if feature.blank?
|
return nil if feature.blank?
|
||||||
|
|
||||||
feature.merge(persona: serialize_persona(feature[:persona]))
|
feature.merge(agent: serialize_agent(feature[:agent]))
|
||||||
end
|
end
|
||||||
|
|
||||||
def serialize_persona(persona)
|
def serialize_agent(agent)
|
||||||
return nil if persona.blank?
|
return nil if agent.blank?
|
||||||
|
|
||||||
serialize_data(persona, AiFeaturesPersonaSerializer, root: false)
|
serialize_data(agent, AiFeaturesAgentSerializer, root: false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -6,8 +6,8 @@ module DiscourseAi
|
|||||||
requires_plugin ::DiscourseAi::PLUGIN_NAME
|
requires_plugin ::DiscourseAi::PLUGIN_NAME
|
||||||
|
|
||||||
def indexing_status_check
|
def indexing_status_check
|
||||||
if params[:target_type] == "AiPersona"
|
if params[:target_type] == "AiAgent"
|
||||||
@target = AiPersona.find(params[:target_id])
|
@target = AiAgent.find(params[:target_id])
|
||||||
elsif params[:target_type] == "AiTool"
|
elsif params[:target_type] == "AiTool"
|
||||||
@target = AiTool.find(params[:target_id])
|
@target = AiTool.find(params[:target_id])
|
||||||
else
|
else
|
||||||
|
@ -46,17 +46,17 @@ module DiscourseAi
|
|||||||
end
|
end
|
||||||
|
|
||||||
def discover
|
def discover
|
||||||
ai_persona =
|
ai_agent =
|
||||||
AiPersona
|
AiAgent
|
||||||
.all_personas(enabled_only: false)
|
.all_agents(enabled_only: false)
|
||||||
.find { |persona| persona.id == SiteSetting.ai_bot_discover_persona.to_i }
|
.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
|
raise Discourse::InvalidAccess.new
|
||||||
end
|
end
|
||||||
|
|
||||||
if ai_persona.default_llm_id.blank?
|
if ai_agent.default_llm_id.blank?
|
||||||
render_json_error "Discover persona is missing a default LLM model.", status: 503
|
render_json_error "Discover agent is missing a default LLM model.", status: 503
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -77,7 +77,7 @@ module DiscourseAi
|
|||||||
|
|
||||||
user = User.find(params[:user_id])
|
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
|
bot_username = User.find_by(id: bot_user_id).username
|
||||||
|
|
||||||
query = params[:query]
|
query = params[:query]
|
||||||
|
@ -11,12 +11,12 @@ module ::Jobs
|
|||||||
message = ::Chat::Message.find_by(id: args[:message_id])
|
message = ::Chat::Message.find_by(id: args[:message_id])
|
||||||
return if message.blank?
|
return if message.blank?
|
||||||
|
|
||||||
personaClass =
|
agentClass =
|
||||||
DiscourseAi::Personas::Persona.find_by(id: args[:persona_id], user: message.user)
|
DiscourseAi::Agents::Agent.find_by(id: args[:agent_id], user: message.user)
|
||||||
return if personaClass.blank?
|
return if agentClass.blank?
|
||||||
|
|
||||||
user = User.find_by(id: personaClass.user_id)
|
user = User.find_by(id: agentClass.user_id)
|
||||||
bot = DiscourseAi::Personas::Bot.as(user, persona: personaClass.new)
|
bot = DiscourseAi::Agents::Bot.as(user, agent: agentClass.new)
|
||||||
|
|
||||||
DiscourseAi::AiBot::Playground.new(bot).reply_to_chat_message(
|
DiscourseAi::AiBot::Playground.new(bot).reply_to_chat_message(
|
||||||
message,
|
message,
|
||||||
|
@ -7,18 +7,18 @@ module ::Jobs
|
|||||||
def execute(args)
|
def execute(args)
|
||||||
return unless bot_user = User.find_by(id: args[:bot_user_id])
|
return unless bot_user = User.find_by(id: args[:bot_user_id])
|
||||||
return unless post = Post.includes(:topic).find_by(id: args[:post_id])
|
return unless post = Post.includes(:topic).find_by(id: args[:post_id])
|
||||||
persona_id = args[:persona_id]
|
agent_id = args[:agent_id]
|
||||||
|
|
||||||
begin
|
begin
|
||||||
persona = DiscourseAi::Personas::Persona.find_by(user: post.user, id: persona_id)
|
agent = DiscourseAi::Agents::Agent.find_by(user: post.user, id: agent_id)
|
||||||
raise DiscourseAi::Personas::Bot::BOT_NOT_FOUND if persona.nil?
|
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)
|
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(
|
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
|
||||||
end
|
end
|
||||||
|
@ -9,8 +9,8 @@ module Jobs
|
|||||||
|
|
||||||
return unless SiteSetting.ai_discord_search_enabled
|
return unless SiteSetting.ai_discord_search_enabled
|
||||||
|
|
||||||
if SiteSetting.ai_discord_search_mode == "persona"
|
if SiteSetting.ai_discord_search_mode == "agent"
|
||||||
DiscourseAi::Discord::Bot::PersonaReplier.new(interaction).handle_interaction!
|
DiscourseAi::Discord::Bot::AgentReplier.new(interaction).handle_interaction!
|
||||||
else
|
else
|
||||||
DiscourseAi::Discord::Bot::Search.new(interaction).handle_interaction!
|
DiscourseAi::Discord::Bot::Search.new(interaction).handle_interaction!
|
||||||
end
|
end
|
||||||
|
@ -8,20 +8,20 @@ module Jobs
|
|||||||
return if (user = User.find_by(id: args[:user_id])).nil?
|
return if (user = User.find_by(id: args[:user_id])).nil?
|
||||||
return if (query = args[:query]).blank?
|
return if (query = args[:query]).blank?
|
||||||
|
|
||||||
ai_persona_klass =
|
ai_agent_klass =
|
||||||
AiPersona
|
AiAgent
|
||||||
.all_personas(enabled_only: false)
|
.all_agents(enabled_only: false)
|
||||||
.find { |persona| persona.id == SiteSetting.ai_bot_discover_persona.to_i }
|
.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
|
return
|
||||||
end
|
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 =
|
bot =
|
||||||
DiscourseAi::Personas::Bot.as(
|
DiscourseAi::Agents::Bot.as(
|
||||||
Discourse.system_user,
|
Discourse.system_user,
|
||||||
persona: ai_persona_klass.new,
|
agent: ai_agent_klass.new,
|
||||||
model: llm_model,
|
model: llm_model,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ module Jobs
|
|||||||
base = { query: query, model_used: llm_model.display_name }
|
base = { query: query, model_used: llm_model.display_name }
|
||||||
|
|
||||||
context =
|
context =
|
||||||
DiscourseAi::Personas::BotContext.new(
|
DiscourseAi::Agents::BotContext.new(
|
||||||
messages: [{ type: :user, content: query }],
|
messages: [{ type: :user, content: query }],
|
||||||
skip_tool_details: true,
|
skip_tool_details: true,
|
||||||
)
|
)
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class AiPersona < ActiveRecord::Base
|
class AiAgent < ActiveRecord::Base
|
||||||
# TODO remove this line 01-10-2025
|
# TODO remove this line 01-10-2025
|
||||||
self.ignored_columns = %i[default_llm question_consolidator_llm]
|
self.ignored_columns = %i[default_llm question_consolidator_llm]
|
||||||
|
|
||||||
# places a hard limit, so per site we cache a maximum of 500 classes
|
# 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 :name, presence: true, uniqueness: true, length: { maximum: 100 }
|
||||||
validates :description, presence: true, length: { maximum: 2000 }
|
validates :description, presence: true, length: { maximum: 2000 }
|
||||||
validates :system_prompt, presence: true, length: { maximum: 10_000_000 }
|
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 :chat_preconditions
|
||||||
validate :allowed_seeded_model, if: :default_llm_id
|
validate :allowed_seeded_model, if: :default_llm_id
|
||||||
validate :well_formated_examples
|
validate :well_formated_examples
|
||||||
@ -41,50 +41,50 @@ class AiPersona < ActiveRecord::Base
|
|||||||
before_destroy :ensure_not_system
|
before_destroy :ensure_not_system
|
||||||
before_update :regenerate_rag_fragments
|
before_update :regenerate_rag_fragments
|
||||||
|
|
||||||
def self.persona_cache
|
def self.agent_cache
|
||||||
@persona_cache ||= ::DiscourseAi::MultisiteHash.new("persona_cache")
|
@agent_cache ||= ::DiscourseAi::MultisiteHash.new("agent_cache")
|
||||||
end
|
end
|
||||||
|
|
||||||
scope :ordered, -> { order("priority DESC, lower(name) ASC") }
|
scope :ordered, -> { order("priority DESC, lower(name) ASC") }
|
||||||
|
|
||||||
def self.all_personas(enabled_only: true)
|
def self.all_agents(enabled_only: true)
|
||||||
persona_cache[:value] ||= AiPersona
|
agent_cache[:value] ||= AiAgent
|
||||||
.ordered
|
.ordered
|
||||||
.all
|
.all
|
||||||
.limit(MAX_PERSONAS_PER_SITE)
|
.limit(MAX_AGENTS_PER_SITE)
|
||||||
.map(&:class_instance)
|
.map(&:class_instance)
|
||||||
|
|
||||||
if enabled_only
|
if enabled_only
|
||||||
persona_cache[:value].select { |p| p.enabled }
|
agent_cache[:value].select { |p| p.enabled }
|
||||||
else
|
else
|
||||||
persona_cache[:value]
|
agent_cache[:value]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.persona_users(user: nil)
|
def self.agent_users(user: nil)
|
||||||
persona_users =
|
agent_users =
|
||||||
persona_cache[:persona_users] ||= AiPersona
|
agent_cache[:agent_users] ||= AiAgent
|
||||||
.where(enabled: true)
|
.where(enabled: true)
|
||||||
.joins(:user)
|
.joins(:user)
|
||||||
.map do |persona|
|
.map do |agent|
|
||||||
{
|
{
|
||||||
id: persona.id,
|
id: agent.id,
|
||||||
user_id: persona.user_id,
|
user_id: agent.user_id,
|
||||||
username: persona.user.username_lower,
|
username: agent.user.username_lower,
|
||||||
allowed_group_ids: persona.allowed_group_ids,
|
allowed_group_ids: agent.allowed_group_ids,
|
||||||
default_llm_id: persona.default_llm_id,
|
default_llm_id: agent.default_llm_id,
|
||||||
force_default_llm: persona.force_default_llm,
|
force_default_llm: agent.force_default_llm,
|
||||||
allow_chat_channel_mentions: persona.allow_chat_channel_mentions,
|
allow_chat_channel_mentions: agent.allow_chat_channel_mentions,
|
||||||
allow_chat_direct_messages: persona.allow_chat_direct_messages,
|
allow_chat_direct_messages: agent.allow_chat_direct_messages,
|
||||||
allow_topic_mentions: persona.allow_topic_mentions,
|
allow_topic_mentions: agent.allow_topic_mentions,
|
||||||
allow_personal_messages: persona.allow_personal_messages,
|
allow_agentl_messages: agent.allow_agentl_messages,
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
if user
|
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
|
else
|
||||||
persona_users
|
agent_users
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -93,31 +93,31 @@ class AiPersona < ActiveRecord::Base
|
|||||||
allow_chat_channel_mentions: false,
|
allow_chat_channel_mentions: false,
|
||||||
allow_chat_direct_messages: false,
|
allow_chat_direct_messages: false,
|
||||||
allow_topic_mentions: false,
|
allow_topic_mentions: false,
|
||||||
allow_personal_messages: false
|
allow_agentl_messages: false
|
||||||
)
|
)
|
||||||
index =
|
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 =
|
agents =
|
||||||
persona_cache[index.to_sym] ||= persona_users.select do |persona|
|
agent_cache[index.to_sym] ||= agent_users.select do |agent|
|
||||||
next true if allow_chat_channel_mentions && persona[:allow_chat_channel_mentions]
|
next true if allow_chat_channel_mentions && agent[:allow_chat_channel_mentions]
|
||||||
next true if allow_chat_direct_messages && persona[:allow_chat_direct_messages]
|
next true if allow_chat_direct_messages && agent[:allow_chat_direct_messages]
|
||||||
next true if allow_topic_mentions && persona[:allow_topic_mentions]
|
next true if allow_topic_mentions && agent[:allow_topic_mentions]
|
||||||
next true if allow_personal_messages && persona[:allow_personal_messages]
|
next true if allow_agentl_messages && agent[:allow_agentl_messages]
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
if user
|
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
|
else
|
||||||
personas
|
agents
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
after_commit :bump_cache
|
after_commit :bump_cache
|
||||||
|
|
||||||
def bump_cache
|
def bump_cache
|
||||||
self.class.persona_cache.flush!
|
self.class.agent_cache.flush!
|
||||||
end
|
end
|
||||||
|
|
||||||
def tools_can_not_be_duplicated
|
def tools_can_not_be_duplicated
|
||||||
@ -138,7 +138,7 @@ class AiPersona < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
if seen_tools.include?(inner_name)
|
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
|
break
|
||||||
else
|
else
|
||||||
seen_tools.add(inner_name)
|
seen_tools.add(inner_name)
|
||||||
@ -154,7 +154,7 @@ class AiPersona < ActiveRecord::Base
|
|||||||
.pluck(:tool_name)
|
.pluck(:tool_name)
|
||||||
.each do |tool_name|
|
.each do |tool_name|
|
||||||
if builtin_tool_names.include?(tool_name.downcase)
|
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
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -176,7 +176,7 @@ class AiPersona < ActiveRecord::Base
|
|||||||
allow_chat_channel_mentions
|
allow_chat_channel_mentions
|
||||||
allow_chat_direct_messages
|
allow_chat_direct_messages
|
||||||
allow_topic_mentions
|
allow_topic_mentions
|
||||||
allow_personal_messages
|
allow_agentl_messages
|
||||||
force_default_llm
|
force_default_llm
|
||||||
name
|
name
|
||||||
description
|
description
|
||||||
@ -208,14 +208,14 @@ class AiPersona < ActiveRecord::Base
|
|||||||
if inner_name.start_with?("custom-")
|
if inner_name.start_with?("custom-")
|
||||||
custom_tool_id = inner_name.split("-", 2).last.to_i
|
custom_tool_id = inner_name.split("-", 2).last.to_i
|
||||||
if AiTool.exists?(id: custom_tool_id, enabled: true)
|
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
|
end
|
||||||
else
|
else
|
||||||
inner_name = inner_name.gsub("Tool", "")
|
inner_name = inner_name.gsub("Tool", "")
|
||||||
inner_name = "List#{inner_name}" if %w[Categories Tags].include?(inner_name)
|
inner_name = "List#{inner_name}" if %w[Categories Tags].include?(inner_name)
|
||||||
|
|
||||||
begin
|
begin
|
||||||
klass = "DiscourseAi::Personas::Tools::#{inner_name}".constantize
|
klass = "DiscourseAi::Agents::Tools::#{inner_name}".constantize
|
||||||
options[klass] = current_options if current_options
|
options[klass] = current_options if current_options
|
||||||
rescue StandardError
|
rescue StandardError
|
||||||
end
|
end
|
||||||
@ -225,14 +225,14 @@ class AiPersona < ActiveRecord::Base
|
|||||||
klass
|
klass
|
||||||
end
|
end
|
||||||
|
|
||||||
persona_class = DiscourseAi::Personas::Persona.system_personas_by_id[self.id]
|
agent_class = DiscourseAi::Agents::Agent.system_agents_by_id[self.id]
|
||||||
if persona_class
|
if agent_class
|
||||||
return(
|
return(
|
||||||
# we need a new copy so we don't leak information
|
# we need a new copy so we don't leak information
|
||||||
# across sites
|
# across sites
|
||||||
Class.new(persona_class) do
|
Class.new(agent_class) do
|
||||||
# required for localization
|
# 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|
|
instance_attributes.each do |key, value|
|
||||||
# description/name are localized
|
# description/name are localized
|
||||||
define_singleton_method(key) { value } if key != :description && key != :name
|
define_singleton_method(key) { value } if key != :description && key != :name
|
||||||
@ -242,9 +242,9 @@ class AiPersona < ActiveRecord::Base
|
|||||||
)
|
)
|
||||||
end
|
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 } }
|
instance_attributes.each { |key, value| define_singleton_method(key) { value } }
|
||||||
|
|
||||||
define_singleton_method(:to_s) do
|
define_singleton_method(:to_s) do
|
||||||
@ -254,24 +254,24 @@ class AiPersona < ActiveRecord::Base
|
|||||||
define_singleton_method(:inspect) { to_s }
|
define_singleton_method(:inspect) { to_s }
|
||||||
|
|
||||||
define_method(:initialize) do |*args, **kwargs|
|
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)
|
super(*args, **kwargs)
|
||||||
end
|
end
|
||||||
|
|
||||||
define_method(:tools) { tools }
|
define_method(:tools) { tools }
|
||||||
define_method(:force_tool_use) { force_tool_use }
|
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(:options) { options }
|
||||||
define_method(:temperature) { @ai_persona&.temperature }
|
define_method(:temperature) { @ai_agent&.temperature }
|
||||||
define_method(:top_p) { @ai_persona&.top_p }
|
define_method(:top_p) { @ai_agent&.top_p }
|
||||||
define_method(:system_prompt) { @ai_persona&.system_prompt || "You are a helpful bot." }
|
define_method(:system_prompt) { @ai_agent&.system_prompt || "You are a helpful bot." }
|
||||||
define_method(:uploads) { @ai_persona&.uploads }
|
define_method(:uploads) { @ai_agent&.uploads }
|
||||||
define_method(:response_format) { @ai_persona&.response_format }
|
define_method(:response_format) { @ai_agent&.response_format }
|
||||||
define_method(:examples) { @ai_persona&.examples }
|
define_method(:examples) { @ai_agent&.examples }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
FIRST_PERSONA_USER_ID = -1200
|
FIRST_AGENT_USER_ID = -1200
|
||||||
|
|
||||||
def create_user!
|
def create_user!
|
||||||
raise "User already exists" if user_id && User.exists?(user_id)
|
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
|
# find the first id smaller than FIRST_USER_ID that is not taken
|
||||||
id = nil
|
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 (
|
WITH seq AS (
|
||||||
SELECT generate_series(?, ?, -1) AS id
|
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 ||
|
allow_chat_channel_mentions || allow_chat_direct_messages || allow_topic_mentions ||
|
||||||
force_default_llm
|
force_default_llm
|
||||||
) && !default_llm_id
|
) && !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
|
||||||
end
|
end
|
||||||
|
|
||||||
def system_persona_unchangeable
|
def system_agent_unchangeable
|
||||||
error_msg = I18n.t("discourse_ai.ai_bot.personas.cannot_edit_system_persona")
|
error_msg = I18n.t("discourse_ai.ai_bot.agents.cannot_edit_system_agent")
|
||||||
|
|
||||||
if top_p_changed? || temperature_changed? || system_prompt_changed? || name_changed? ||
|
if top_p_changed? || temperature_changed? || system_prompt_changed? || name_changed? ||
|
||||||
description_changed?
|
description_changed?
|
||||||
@ -356,7 +356,7 @@ class AiPersona < ActiveRecord::Base
|
|||||||
|
|
||||||
def ensure_not_system
|
def ensure_not_system
|
||||||
if 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
|
throw :abort
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -380,13 +380,13 @@ class AiPersona < ActiveRecord::Base
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
errors.add(:examples, I18n.t("discourse_ai.personas.malformed_examples"))
|
errors.add(:examples, I18n.t("discourse_ai.agents.malformed_examples"))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# == Schema Information
|
# == Schema Information
|
||||||
#
|
#
|
||||||
# Table name: ai_personas
|
# Table name: ai_agents
|
||||||
#
|
#
|
||||||
# id :bigint not null, primary key
|
# id :bigint not null, primary key
|
||||||
# name :string(100) not null
|
# name :string(100) not null
|
||||||
@ -414,7 +414,7 @@ end
|
|||||||
# allow_chat_channel_mentions :boolean default(FALSE), not null
|
# allow_chat_channel_mentions :boolean default(FALSE), not null
|
||||||
# allow_chat_direct_messages :boolean default(FALSE), not null
|
# allow_chat_direct_messages :boolean default(FALSE), not null
|
||||||
# allow_topic_mentions :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
|
# force_default_llm :boolean default(FALSE), not null
|
||||||
# rag_llm_model_id :bigint
|
# rag_llm_model_id :bigint
|
||||||
# default_llm_id :bigint
|
# default_llm_id :bigint
|
||||||
@ -424,5 +424,5 @@ end
|
|||||||
#
|
#
|
||||||
# Indexes
|
# Indexes
|
||||||
#
|
#
|
||||||
# index_ai_personas_on_name (name) UNIQUE
|
# index_ai_agents_on_name (name) UNIQUE
|
||||||
#
|
#
|
@ -36,7 +36,7 @@ class AiTool < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
def runner(parameters, llm:, bot_user:, context: nil)
|
def runner(parameters, llm:, bot_user:, context: nil)
|
||||||
DiscourseAi::Personas::ToolRunner.new(
|
DiscourseAi::Agents::ToolRunner.new(
|
||||||
parameters: parameters,
|
parameters: parameters,
|
||||||
llm: llm,
|
llm: llm,
|
||||||
bot_user: bot_user,
|
bot_user: bot_user,
|
||||||
@ -45,10 +45,10 @@ class AiTool < ActiveRecord::Base
|
|||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
after_commit :bump_persona_cache
|
after_commit :bump_agent_cache
|
||||||
|
|
||||||
def bump_persona_cache
|
def bump_agent_cache
|
||||||
AiPersona.persona_cache.flush!
|
AiAgent.agent_cache.flush!
|
||||||
end
|
end
|
||||||
|
|
||||||
def regenerate_rag_fragments
|
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.
|
* 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.
|
* 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:
|
* Parameters:
|
||||||
* name (string): The name of the target persona.
|
* name (string): The name of the target agent.
|
||||||
* Returns: Object { respondTo: function(params) } or null if persona not found.
|
* Returns: Object { respondTo: function(params) } or null if agent 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).
|
* 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:
|
* Parameters:
|
||||||
* params (Object, optional): { instructions: string, whisper: boolean }
|
* params (Object, optional): { instructions: string, whisper: boolean }
|
||||||
* Returns: { success: boolean, post_id?: number, post_number?: number, message_id?: number } or { error: string }
|
* 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).
|
* 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).
|
* 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).
|
* 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).
|
* participants (string): Comma-separated list of usernames in a PM (if applicable).
|
||||||
* // ... other potential context-specific properties added by the calling environment.
|
* // ... other potential context-specific properties added by the calling environment.
|
||||||
*
|
*
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
class RagDocumentFragment < ActiveRecord::Base
|
class RagDocumentFragment < ActiveRecord::Base
|
||||||
# TODO Jan 2025 - remove
|
# TODO Jan 2025 - remove
|
||||||
self.ignored_columns = %i[ai_persona_id]
|
self.ignored_columns = %i[ai_agent_id]
|
||||||
|
|
||||||
belongs_to :upload
|
belongs_to :upload
|
||||||
belongs_to :target, polymorphic: true
|
belongs_to :target, polymorphic: true
|
||||||
@ -38,7 +38,7 @@ class RagDocumentFragment < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def indexing_status(persona, uploads)
|
def indexing_status(agent, uploads)
|
||||||
embeddings_table = DiscourseAi::Embeddings::Schema.for(self).table
|
embeddings_table = DiscourseAi::Embeddings::Schema.for(self).table
|
||||||
|
|
||||||
results =
|
results =
|
||||||
@ -56,8 +56,8 @@ class RagDocumentFragment < ActiveRecord::Base
|
|||||||
WHERE uploads.id IN (:upload_ids)
|
WHERE uploads.id IN (:upload_ids)
|
||||||
GROUP BY uploads.id
|
GROUP BY uploads.id
|
||||||
SQL
|
SQL
|
||||||
target_id: persona.id,
|
target_id: agent.id,
|
||||||
target_type: persona.class.to_s,
|
target_type: agent.class.to_s,
|
||||||
upload_ids: uploads.map(&:id),
|
upload_ids: uploads.map(&:id),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -51,13 +51,13 @@ class SharedAiConversation < ActiveRecord::Base
|
|||||||
# but this name works
|
# but this name works
|
||||||
class SharedPost
|
class SharedPost
|
||||||
attr_accessor :user
|
attr_accessor :user
|
||||||
attr_reader :id, :user_id, :created_at, :cooked, :persona
|
attr_reader :id, :user_id, :created_at, :cooked, :agent
|
||||||
def initialize(post)
|
def initialize(post)
|
||||||
@id = post[:id]
|
@id = post[:id]
|
||||||
@user_id = post[:user_id]
|
@user_id = post[:user_id]
|
||||||
@created_at = DateTime.parse(post[:created_at])
|
@created_at = DateTime.parse(post[:created_at])
|
||||||
@cooked = post[:cooked]
|
@cooked = post[:cooked]
|
||||||
@persona = post[:persona]
|
@agent = post[:agent]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -140,9 +140,9 @@ class SharedAiConversation < ActiveRecord::Base
|
|||||||
llm_name = ActiveSupport::Inflector.humanize(llm_name) if llm_name
|
llm_name = ActiveSupport::Inflector.humanize(llm_name) if llm_name
|
||||||
llm_name ||= I18n.t("discourse_ai.unknown_model")
|
llm_name ||= I18n.t("discourse_ai.unknown_model")
|
||||||
|
|
||||||
persona = nil
|
agent = nil
|
||||||
if persona_id = topic.custom_fields["ai_persona_id"]
|
if agent_id = topic.custom_fields["ai_agent_id"]
|
||||||
persona = AiPersona.find_by(id: persona_id.to_i)&.name
|
agent = AiAgent.find_by(id: agent_id.to_i)&.name
|
||||||
end
|
end
|
||||||
|
|
||||||
posts =
|
posts =
|
||||||
@ -167,7 +167,7 @@ class SharedAiConversation < ActiveRecord::Base
|
|||||||
cooked: cook_artifacts(post),
|
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[:username] = post.user&.username if include_usernames
|
||||||
mapped
|
mapped
|
||||||
end,
|
end,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class AiFeaturesPersonaSerializer < ApplicationSerializer
|
class AiFeaturesAgentSerializer < ApplicationSerializer
|
||||||
attributes :id, :name, :system_prompt, :allowed_groups, :enabled
|
attributes :id, :name, :system_prompt, :allowed_groups, :enabled
|
||||||
|
|
||||||
def allowed_groups
|
def allowed_groups
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
class LlmModelSerializer < ApplicationSerializer
|
class LlmModelSerializer < ApplicationSerializer
|
||||||
# TODO: we probably should rename the table LlmModel to AiLlm
|
# 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
|
# LLM model is a bit confusing given that large langauge model model is a confusing
|
||||||
# name
|
# name
|
||||||
root "ai_llm"
|
root "ai_llm"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class LocalizedAiPersonaSerializer < ApplicationSerializer
|
class LocalizedAiAgentSerializer < ApplicationSerializer
|
||||||
root "ai_persona"
|
root "ai_agent"
|
||||||
|
|
||||||
attributes :id,
|
attributes :id,
|
||||||
:name,
|
:name,
|
||||||
@ -29,7 +29,7 @@ class LocalizedAiPersonaSerializer < ApplicationSerializer
|
|||||||
:allow_chat_channel_mentions,
|
:allow_chat_channel_mentions,
|
||||||
:allow_chat_direct_messages,
|
:allow_chat_direct_messages,
|
||||||
:allow_topic_mentions,
|
:allow_topic_mentions,
|
||||||
:allow_personal_messages,
|
:allow_agentl_messages,
|
||||||
:force_default_llm,
|
:force_default_llm,
|
||||||
:response_format,
|
:response_format,
|
||||||
:examples
|
:examples
|
@ -43,8 +43,8 @@
|
|||||||
<article class="post">
|
<article class="post">
|
||||||
<header class="post__header">
|
<header class="post__header">
|
||||||
<span class="post__user"><%= post.user.username %></span>
|
<span class="post__user"><%= post.user.username %></span>
|
||||||
<%if post.persona.present? %>
|
<%if post.agent.present? %>
|
||||||
<span class="post__persona"><%= post.persona %></span>
|
<span class="post__agent"><%= post.agent %></span>
|
||||||
<% end %>
|
<% end %>
|
||||||
<time class="post__date" datetime="<%= post.created_at.iso8601 %>"><%= post.created_at.strftime('%Y-%m-%d') %></time>
|
<time class="post__date" datetime="<%= post.created_at.iso8601 %>"><%= post.created_at.strftime('%Y-%m-%d') %></time>
|
||||||
</header>
|
</header>
|
||||||
|
@ -4,7 +4,7 @@ export default {
|
|||||||
path: "/plugins",
|
path: "/plugins",
|
||||||
|
|
||||||
map() {
|
map() {
|
||||||
this.route("discourse-ai-personas", { path: "ai-personas" }, function () {
|
this.route("discourse-ai-agents", { path: "ai-agents" }, function () {
|
||||||
this.route("new");
|
this.route("new");
|
||||||
this.route("edit", { path: "/:id/edit" });
|
this.route("edit", { path: "/:id/edit" });
|
||||||
});
|
});
|
||||||
|
@ -16,6 +16,6 @@ export default class Adapter extends RestAdapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
apiNameFor() {
|
apiNameFor() {
|
||||||
return "ai-persona";
|
return "ai-agent";
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -29,7 +29,7 @@ const CREATE_ATTRIBUTES = [
|
|||||||
"allow_chat",
|
"allow_chat",
|
||||||
"tool_details",
|
"tool_details",
|
||||||
"forced_tool_count",
|
"forced_tool_count",
|
||||||
"allow_personal_messages",
|
"allow_agentl_messages",
|
||||||
"allow_topic_mentions",
|
"allow_topic_mentions",
|
||||||
"allow_chat_channel_mentions",
|
"allow_chat_channel_mentions",
|
||||||
"allow_chat_direct_messages",
|
"allow_chat_direct_messages",
|
||||||
@ -58,16 +58,16 @@ const SYSTEM_ATTRIBUTES = [
|
|||||||
"rag_llm_model_id",
|
"rag_llm_model_id",
|
||||||
"question_consolidator_llm_id",
|
"question_consolidator_llm_id",
|
||||||
"tool_details",
|
"tool_details",
|
||||||
"allow_personal_messages",
|
"allow_agentl_messages",
|
||||||
"allow_topic_mentions",
|
"allow_topic_mentions",
|
||||||
"allow_chat_channel_mentions",
|
"allow_chat_channel_mentions",
|
||||||
"allow_chat_direct_messages",
|
"allow_chat_direct_messages",
|
||||||
];
|
];
|
||||||
|
|
||||||
export default class AiPersona extends RestModel {
|
export default class AiAgent extends RestModel {
|
||||||
async createUser() {
|
async createUser() {
|
||||||
const result = await ajax(
|
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",
|
type: "POST",
|
||||||
}
|
}
|
||||||
@ -143,10 +143,10 @@ export default class AiPersona extends RestModel {
|
|||||||
fromPOJO(data) {
|
fromPOJO(data) {
|
||||||
const dataClone = JSON.parse(JSON.stringify(data));
|
const dataClone = JSON.parse(JSON.stringify(data));
|
||||||
|
|
||||||
const persona = AiPersona.create(dataClone);
|
const agent = AiAgent.create(dataClone);
|
||||||
persona.tools = this.flattenedToolStructure(dataClone);
|
agent.tools = this.flattenedToolStructure(dataClone);
|
||||||
|
|
||||||
return persona;
|
return agent;
|
||||||
}
|
}
|
||||||
|
|
||||||
toPOJO() {
|
toPOJO() {
|
@ -8,8 +8,8 @@ export default class AiFeature extends RestModel {
|
|||||||
"ref",
|
"ref",
|
||||||
"description",
|
"description",
|
||||||
"enable_setting",
|
"enable_setting",
|
||||||
"persona",
|
"agent",
|
||||||
"persona_setting"
|
"agent_setting"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,15 +15,15 @@ import Group from "discourse/models/group";
|
|||||||
import { i18n } from "discourse-i18n";
|
import { i18n } from "discourse-i18n";
|
||||||
import AdminUser from "admin/models/admin-user";
|
import AdminUser from "admin/models/admin-user";
|
||||||
import GroupChooser from "select-kit/components/group-chooser";
|
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 AiLlmSelector from "./ai-llm-selector";
|
||||||
import AiPersonaCollapsableExample from "./ai-persona-example";
|
import AiAgentCollapsableExample from "./ai-agent-example";
|
||||||
import AiPersonaToolOptions from "./ai-persona-tool-options";
|
import AiAgentToolOptions from "./ai-agent-tool-options";
|
||||||
import AiToolSelector from "./ai-tool-selector";
|
import AiToolSelector from "./ai-tool-selector";
|
||||||
import RagOptionsFk from "./rag-options-fk";
|
import RagOptionsFk from "./rag-options-fk";
|
||||||
import RagUploader from "./rag-uploader";
|
import RagUploader from "./rag-uploader";
|
||||||
|
|
||||||
export default class PersonaEditor extends Component {
|
export default class AgentEditor extends Component {
|
||||||
@service router;
|
@service router;
|
||||||
@service store;
|
@service store;
|
||||||
@service dialog;
|
@service dialog;
|
||||||
@ -59,12 +59,12 @@ export default class PersonaEditor extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get allTools() {
|
get allTools() {
|
||||||
return this.args.personas.resultSetMeta.tools;
|
return this.args.agents.resultSetMeta.tools;
|
||||||
}
|
}
|
||||||
|
|
||||||
get maxPixelValues() {
|
get maxPixelValues() {
|
||||||
const l = (key) =>
|
const l = (key) =>
|
||||||
i18n(`discourse_ai.ai_persona.vision_max_pixel_sizes.${key}`);
|
i18n(`discourse_ai.ai_agent.vision_max_pixel_sizes.${key}`);
|
||||||
return [
|
return [
|
||||||
{ name: l("low"), id: 65536 },
|
{ name: l("low"), id: 65536 },
|
||||||
{ name: l("medium"), id: 262144 },
|
{ name: l("medium"), id: 262144 },
|
||||||
@ -76,14 +76,14 @@ export default class PersonaEditor extends Component {
|
|||||||
const content = [
|
const content = [
|
||||||
{
|
{
|
||||||
id: -1,
|
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) => {
|
[1, 2, 5].forEach((i) => {
|
||||||
content.push({
|
content.push({
|
||||||
id: i,
|
id: i,
|
||||||
name: i18n("discourse_ai.ai_persona.tool_strategies.replies", {
|
name: i18n("discourse_ai.ai_agent.tool_strategies.replies", {
|
||||||
count: i,
|
count: i,
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
@ -112,23 +112,23 @@ export default class PersonaEditor extends Component {
|
|||||||
this.isSaving = true;
|
this.isSaving = true;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const personaToSave = Object.assign(
|
const agentToSave = Object.assign(
|
||||||
this.args.model,
|
this.args.model,
|
||||||
this.args.model.fromPOJO(data)
|
this.args.model.fromPOJO(data)
|
||||||
);
|
);
|
||||||
|
|
||||||
await personaToSave.save();
|
await agentToSave.save();
|
||||||
this.#sortPersonas();
|
this.#sortAgents();
|
||||||
|
|
||||||
if (isNew && this.args.model.rag_uploads.length === 0) {
|
if (isNew && this.args.model.rag_uploads.length === 0) {
|
||||||
this.args.personas.addObject(personaToSave);
|
this.args.agents.addObject(agentToSave);
|
||||||
this.router.transitionTo(
|
this.router.transitionTo(
|
||||||
"adminPlugins.show.discourse-ai-personas.edit",
|
"adminPlugins.show.discourse-ai-agents.edit",
|
||||||
personaToSave
|
agentToSave
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
this.toasts.success({
|
this.toasts.success({
|
||||||
data: { message: i18n("discourse_ai.ai_persona.saved") },
|
data: { message: i18n("discourse_ai.ai_agent.saved") },
|
||||||
duration: 2000,
|
duration: 2000,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -151,12 +151,12 @@ export default class PersonaEditor extends Component {
|
|||||||
@action
|
@action
|
||||||
delete() {
|
delete() {
|
||||||
return this.dialog.confirm({
|
return this.dialog.confirm({
|
||||||
message: i18n("discourse_ai.ai_persona.confirm_delete"),
|
message: i18n("discourse_ai.ai_agent.confirm_delete"),
|
||||||
didConfirm: () => {
|
didConfirm: () => {
|
||||||
return this.args.model.destroyRecord().then(() => {
|
return this.args.model.destroyRecord().then(() => {
|
||||||
this.args.personas.removeObject(this.args.model);
|
this.args.agents.removeObject(this.args.model);
|
||||||
this.router.transitionTo(
|
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;
|
return updatedOptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
async persistField(dirtyData, field, newValue, sortPersonas) {
|
async persistField(dirtyData, field, newValue, sortAgents) {
|
||||||
if (!this.args.model.isNew) {
|
if (!this.args.model.isNew) {
|
||||||
const updatedDirtyData = Object.assign({}, dirtyData);
|
const updatedDirtyData = Object.assign({}, dirtyData);
|
||||||
updatedDirtyData[field] = newValue;
|
updatedDirtyData[field] = newValue;
|
||||||
@ -270,8 +270,8 @@ export default class PersonaEditor extends Component {
|
|||||||
|
|
||||||
this.dirtyFormData = updatedDirtyData;
|
this.dirtyFormData = updatedDirtyData;
|
||||||
await this.args.model.update(args);
|
await this.args.model.update(args);
|
||||||
if (sortPersonas) {
|
if (sortAgents) {
|
||||||
this.#sortPersonas();
|
this.#sortAgents();
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
popupAjaxError(e);
|
popupAjaxError(e);
|
||||||
@ -279,8 +279,8 @@ export default class PersonaEditor extends Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#sortPersonas() {
|
#sortAgents() {
|
||||||
const sorted = this.args.personas.toArray().sort((a, b) => {
|
const sorted = this.args.agents.toArray().sort((a, b) => {
|
||||||
if (a.priority && !b.priority) {
|
if (a.priority && !b.priority) {
|
||||||
return -1;
|
return -1;
|
||||||
} else if (!a.priority && b.priority) {
|
} else if (!a.priority && b.priority) {
|
||||||
@ -289,20 +289,20 @@ export default class PersonaEditor extends Component {
|
|||||||
return a.name.localeCompare(b.name);
|
return a.name.localeCompare(b.name);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
this.args.personas.clear();
|
this.args.agents.clear();
|
||||||
this.args.personas.setObjects(sorted);
|
this.args.agents.setObjects(sorted);
|
||||||
}
|
}
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<BackButton
|
<BackButton
|
||||||
@route="adminPlugins.show.discourse-ai-personas"
|
@route="adminPlugins.show.discourse-ai-agents"
|
||||||
@label="discourse_ai.ai_persona.back"
|
@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 @onSubmit={{this.save}} @data={{this.formData}} as |form data|>
|
||||||
<form.Field
|
<form.Field
|
||||||
@name="name"
|
@name="name"
|
||||||
@title={{i18n "discourse_ai.ai_persona.name"}}
|
@title={{i18n "discourse_ai.ai_agent.name"}}
|
||||||
@validation="required|length:1,100"
|
@validation="required|length:1,100"
|
||||||
@disabled={{data.system}}
|
@disabled={{data.system}}
|
||||||
@format="large"
|
@format="large"
|
||||||
@ -313,7 +313,7 @@ export default class PersonaEditor extends Component {
|
|||||||
|
|
||||||
<form.Field
|
<form.Field
|
||||||
@name="description"
|
@name="description"
|
||||||
@title={{i18n "discourse_ai.ai_persona.description"}}
|
@title={{i18n "discourse_ai.ai_agent.description"}}
|
||||||
@validation="required|length:1,100"
|
@validation="required|length:1,100"
|
||||||
@disabled={{data.system}}
|
@disabled={{data.system}}
|
||||||
@format="large"
|
@format="large"
|
||||||
@ -324,7 +324,7 @@ export default class PersonaEditor extends Component {
|
|||||||
|
|
||||||
<form.Field
|
<form.Field
|
||||||
@name="system_prompt"
|
@name="system_prompt"
|
||||||
@title={{i18n "discourse_ai.ai_persona.system_prompt"}}
|
@title={{i18n "discourse_ai.ai_agent.system_prompt"}}
|
||||||
@validation="required|length:1,100000"
|
@validation="required|length:1,100000"
|
||||||
@disabled={{data.system}}
|
@disabled={{data.system}}
|
||||||
@format="large"
|
@format="large"
|
||||||
@ -333,28 +333,28 @@ export default class PersonaEditor extends Component {
|
|||||||
<field.Textarea />
|
<field.Textarea />
|
||||||
</form.Field>
|
</form.Field>
|
||||||
|
|
||||||
<AiPersonaResponseFormatEditor @form={{form}} @data={{data}} />
|
<AiAgentResponseFormatEditor @form={{form}} @data={{data}} />
|
||||||
|
|
||||||
<form.Field
|
<form.Field
|
||||||
@name="default_llm_id"
|
@name="default_llm_id"
|
||||||
@title={{i18n "discourse_ai.ai_persona.default_llm"}}
|
@title={{i18n "discourse_ai.ai_agent.default_llm"}}
|
||||||
@tooltip={{i18n "discourse_ai.ai_persona.default_llm_help"}}
|
@tooltip={{i18n "discourse_ai.ai_agent.default_llm_help"}}
|
||||||
@format="large"
|
@format="large"
|
||||||
as |field|
|
as |field|
|
||||||
>
|
>
|
||||||
<field.Custom>
|
<field.Custom>
|
||||||
<AiLlmSelector
|
<AiLlmSelector
|
||||||
@value={{field.value}}
|
@value={{field.value}}
|
||||||
@llms={{@personas.resultSetMeta.llms}}
|
@llms={{@agents.resultSetMeta.llms}}
|
||||||
@onChange={{field.set}}
|
@onChange={{field.set}}
|
||||||
@class="ai-persona-editor__llms"
|
@class="ai-agent-editor__llms"
|
||||||
/>
|
/>
|
||||||
</field.Custom>
|
</field.Custom>
|
||||||
</form.Field>
|
</form.Field>
|
||||||
|
|
||||||
<form.Field
|
<form.Field
|
||||||
@name="allowed_group_ids"
|
@name="allowed_group_ids"
|
||||||
@title={{i18n "discourse_ai.ai_persona.allowed_groups"}}
|
@title={{i18n "discourse_ai.ai_agent.allowed_groups"}}
|
||||||
@format="large"
|
@format="large"
|
||||||
as |field|
|
as |field|
|
||||||
>
|
>
|
||||||
@ -369,8 +369,8 @@ export default class PersonaEditor extends Component {
|
|||||||
|
|
||||||
<form.Field
|
<form.Field
|
||||||
@name="vision_enabled"
|
@name="vision_enabled"
|
||||||
@title={{i18n "discourse_ai.ai_persona.vision_enabled"}}
|
@title={{i18n "discourse_ai.ai_agent.vision_enabled"}}
|
||||||
@tooltip={{i18n "discourse_ai.ai_persona.vision_enabled_help"}}
|
@tooltip={{i18n "discourse_ai.ai_agent.vision_enabled_help"}}
|
||||||
@format="large"
|
@format="large"
|
||||||
as |field|
|
as |field|
|
||||||
>
|
>
|
||||||
@ -380,7 +380,7 @@ export default class PersonaEditor extends Component {
|
|||||||
{{#if data.vision_enabled}}
|
{{#if data.vision_enabled}}
|
||||||
<form.Field
|
<form.Field
|
||||||
@name="vision_max_pixels"
|
@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}}
|
@onSet={{this.onChangeMaxPixels}}
|
||||||
@format="large"
|
@format="large"
|
||||||
as |field|
|
as |field|
|
||||||
@ -397,8 +397,8 @@ export default class PersonaEditor extends Component {
|
|||||||
|
|
||||||
<form.Field
|
<form.Field
|
||||||
@name="max_context_posts"
|
@name="max_context_posts"
|
||||||
@title={{i18n "discourse_ai.ai_persona.max_context_posts"}}
|
@title={{i18n "discourse_ai.ai_agent.max_context_posts"}}
|
||||||
@tooltip={{i18n "discourse_ai.ai_persona.max_context_posts_help"}}
|
@tooltip={{i18n "discourse_ai.ai_agent.max_context_posts_help"}}
|
||||||
@format="large"
|
@format="large"
|
||||||
as |field|
|
as |field|
|
||||||
>
|
>
|
||||||
@ -408,8 +408,8 @@ export default class PersonaEditor extends Component {
|
|||||||
{{#unless data.system}}
|
{{#unless data.system}}
|
||||||
<form.Field
|
<form.Field
|
||||||
@name="temperature"
|
@name="temperature"
|
||||||
@title={{i18n "discourse_ai.ai_persona.temperature"}}
|
@title={{i18n "discourse_ai.ai_agent.temperature"}}
|
||||||
@tooltip={{i18n "discourse_ai.ai_persona.temperature_help"}}
|
@tooltip={{i18n "discourse_ai.ai_agent.temperature_help"}}
|
||||||
@disabled={{data.system}}
|
@disabled={{data.system}}
|
||||||
@format="large"
|
@format="large"
|
||||||
as |field|
|
as |field|
|
||||||
@ -419,8 +419,8 @@ export default class PersonaEditor extends Component {
|
|||||||
|
|
||||||
<form.Field
|
<form.Field
|
||||||
@name="top_p"
|
@name="top_p"
|
||||||
@title={{i18n "discourse_ai.ai_persona.top_p"}}
|
@title={{i18n "discourse_ai.ai_agent.top_p"}}
|
||||||
@tooltip={{i18n "discourse_ai.ai_persona.top_p_help"}}
|
@tooltip={{i18n "discourse_ai.ai_agent.top_p_help"}}
|
||||||
@disabled={{data.system}}
|
@disabled={{data.system}}
|
||||||
@format="large"
|
@format="large"
|
||||||
as |field|
|
as |field|
|
||||||
@ -430,22 +430,22 @@ export default class PersonaEditor extends Component {
|
|||||||
{{/unless}}
|
{{/unless}}
|
||||||
|
|
||||||
<form.Section
|
<form.Section
|
||||||
@title={{i18n "discourse_ai.ai_persona.examples.title"}}
|
@title={{i18n "discourse_ai.ai_agent.examples.title"}}
|
||||||
@subtitle={{i18n "discourse_ai.ai_persona.examples.examples_help"}}
|
@subtitle={{i18n "discourse_ai.ai_agent.examples.examples_help"}}
|
||||||
>
|
>
|
||||||
{{#unless data.system}}
|
{{#unless data.system}}
|
||||||
<form.Container>
|
<form.Container>
|
||||||
<form.Button
|
<form.Button
|
||||||
@action={{fn this.addExamplesPair form data}}
|
@action={{fn this.addExamplesPair form data}}
|
||||||
@label="discourse_ai.ai_persona.examples.new"
|
@label="discourse_ai.ai_agent.examples.new"
|
||||||
class="ai-persona-editor__new_example"
|
class="ai-agent-editor__new_example"
|
||||||
/>
|
/>
|
||||||
</form.Container>
|
</form.Container>
|
||||||
{{/unless}}
|
{{/unless}}
|
||||||
|
|
||||||
{{#if (gt data.examples.length 0)}}
|
{{#if (gt data.examples.length 0)}}
|
||||||
<form.Collection @name="examples" as |exCollection exCollectionIdx|>
|
<form.Collection @name="examples" as |exCollection exCollectionIdx|>
|
||||||
<AiPersonaCollapsableExample
|
<AiAgentCollapsableExample
|
||||||
@examplesCollection={{exCollection}}
|
@examplesCollection={{exCollection}}
|
||||||
@exampleNumber={{exCollectionIdx}}
|
@exampleNumber={{exCollectionIdx}}
|
||||||
@system={{data.system}}
|
@system={{data.system}}
|
||||||
@ -455,10 +455,10 @@ export default class PersonaEditor extends Component {
|
|||||||
{{/if}}
|
{{/if}}
|
||||||
</form.Section>
|
</form.Section>
|
||||||
|
|
||||||
<form.Section @title={{i18n "discourse_ai.ai_persona.ai_tools"}}>
|
<form.Section @title={{i18n "discourse_ai.ai_agent.ai_tools"}}>
|
||||||
<form.Field
|
<form.Field
|
||||||
@name="tools"
|
@name="tools"
|
||||||
@title={{i18n "discourse_ai.ai_persona.tools"}}
|
@title={{i18n "discourse_ai.ai_agent.tools"}}
|
||||||
@format="large"
|
@format="large"
|
||||||
as |field|
|
as |field|
|
||||||
>
|
>
|
||||||
@ -467,7 +467,7 @@ export default class PersonaEditor extends Component {
|
|||||||
@value={{field.value}}
|
@value={{field.value}}
|
||||||
@disabled={{data.system}}
|
@disabled={{data.system}}
|
||||||
@onChange={{fn this.updateToolNames form data}}
|
@onChange={{fn this.updateToolNames form data}}
|
||||||
@content={{@personas.resultSetMeta.tools}}
|
@content={{@agents.resultSetMeta.tools}}
|
||||||
/>
|
/>
|
||||||
</field.Custom>
|
</field.Custom>
|
||||||
</form.Field>
|
</form.Field>
|
||||||
@ -475,7 +475,7 @@ export default class PersonaEditor extends Component {
|
|||||||
{{#if (gt data.tools.length 0)}}
|
{{#if (gt data.tools.length 0)}}
|
||||||
<form.Field
|
<form.Field
|
||||||
@name="forcedTools"
|
@name="forcedTools"
|
||||||
@title={{i18n "discourse_ai.ai_persona.forced_tools"}}
|
@title={{i18n "discourse_ai.ai_agent.forced_tools"}}
|
||||||
@format="large"
|
@format="large"
|
||||||
as |field|
|
as |field|
|
||||||
>
|
>
|
||||||
@ -493,7 +493,7 @@ export default class PersonaEditor extends Component {
|
|||||||
{{#if (gt data.forcedTools.length 0)}}
|
{{#if (gt data.forcedTools.length 0)}}
|
||||||
<form.Field
|
<form.Field
|
||||||
@name="forced_tool_count"
|
@name="forced_tool_count"
|
||||||
@title={{i18n "discourse_ai.ai_persona.forced_tool_strategy"}}
|
@title={{i18n "discourse_ai.ai_agent.forced_tool_strategy"}}
|
||||||
@format="large"
|
@format="large"
|
||||||
as |field|
|
as |field|
|
||||||
>
|
>
|
||||||
@ -508,19 +508,19 @@ export default class PersonaEditor extends Component {
|
|||||||
{{#if (gt data.tools.length 0)}}
|
{{#if (gt data.tools.length 0)}}
|
||||||
<form.Field
|
<form.Field
|
||||||
@name="tool_details"
|
@name="tool_details"
|
||||||
@title={{i18n "discourse_ai.ai_persona.tool_details"}}
|
@title={{i18n "discourse_ai.ai_agent.tool_details"}}
|
||||||
@tooltip={{i18n "discourse_ai.ai_persona.tool_details_help"}}
|
@tooltip={{i18n "discourse_ai.ai_agent.tool_details_help"}}
|
||||||
@format="large"
|
@format="large"
|
||||||
as |field|
|
as |field|
|
||||||
>
|
>
|
||||||
<field.Checkbox />
|
<field.Checkbox />
|
||||||
</form.Field>
|
</form.Field>
|
||||||
|
|
||||||
<AiPersonaToolOptions
|
<AiAgentToolOptions
|
||||||
@form={{form}}
|
@form={{form}}
|
||||||
@data={{data}}
|
@data={{data}}
|
||||||
@llms={{@personas.resultSetMeta.llms}}
|
@llms={{@agents.resultSetMeta.llms}}
|
||||||
@allTools={{@personas.resultSetMeta.tools}}
|
@allTools={{@agents.resultSetMeta.tools}}
|
||||||
/>
|
/>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</form.Section>
|
</form.Section>
|
||||||
@ -535,10 +535,10 @@ export default class PersonaEditor extends Component {
|
|||||||
<field.Custom>
|
<field.Custom>
|
||||||
<RagUploader
|
<RagUploader
|
||||||
@target={{data}}
|
@target={{data}}
|
||||||
@targetName="AiPersona"
|
@targetName="AiAgent"
|
||||||
@updateUploads={{fn this.updateUploads form}}
|
@updateUploads={{fn this.updateUploads form}}
|
||||||
@onRemove={{fn this.removeUpload form data field.value}}
|
@onRemove={{fn this.removeUpload form data field.value}}
|
||||||
@allowImages={{@personas.resultSetMeta.settings.rag_images_enabled}}
|
@allowImages={{@agents.resultSetMeta.settings.rag_images_enabled}}
|
||||||
/>
|
/>
|
||||||
</field.Custom>
|
</field.Custom>
|
||||||
</form.Field>
|
</form.Field>
|
||||||
@ -546,16 +546,16 @@ export default class PersonaEditor extends Component {
|
|||||||
<RagOptionsFk
|
<RagOptionsFk
|
||||||
@form={{form}}
|
@form={{form}}
|
||||||
@data={{data}}
|
@data={{data}}
|
||||||
@llms={{@personas.resultSetMeta.llms}}
|
@llms={{@agents.resultSetMeta.llms}}
|
||||||
@allowImages={{@personas.resultSetMeta.settings.rag_images_enabled}}
|
@allowImages={{@agents.resultSetMeta.settings.rag_images_enabled}}
|
||||||
>
|
>
|
||||||
<form.Field
|
<form.Field
|
||||||
@name="rag_conversation_chunks"
|
@name="rag_conversation_chunks"
|
||||||
@title={{i18n
|
@title={{i18n
|
||||||
"discourse_ai.ai_persona.rag_conversation_chunks"
|
"discourse_ai.ai_agent.rag_conversation_chunks"
|
||||||
}}
|
}}
|
||||||
@tooltip={{i18n
|
@tooltip={{i18n
|
||||||
"discourse_ai.ai_persona.rag_conversation_chunks_help"
|
"discourse_ai.ai_agent.rag_conversation_chunks_help"
|
||||||
}}
|
}}
|
||||||
@format="large"
|
@format="large"
|
||||||
as |field|
|
as |field|
|
||||||
@ -566,10 +566,10 @@ export default class PersonaEditor extends Component {
|
|||||||
<form.Field
|
<form.Field
|
||||||
@name="question_consolidator_llm_id"
|
@name="question_consolidator_llm_id"
|
||||||
@title={{i18n
|
@title={{i18n
|
||||||
"discourse_ai.ai_persona.question_consolidator_llm"
|
"discourse_ai.ai_agent.question_consolidator_llm"
|
||||||
}}
|
}}
|
||||||
@tooltip={{i18n
|
@tooltip={{i18n
|
||||||
"discourse_ai.ai_persona.question_consolidator_llm_help"
|
"discourse_ai.ai_agent.question_consolidator_llm_help"
|
||||||
}}
|
}}
|
||||||
@format="large"
|
@format="large"
|
||||||
as |field|
|
as |field|
|
||||||
@ -577,9 +577,9 @@ export default class PersonaEditor extends Component {
|
|||||||
<field.Custom>
|
<field.Custom>
|
||||||
<AiLlmSelector
|
<AiLlmSelector
|
||||||
@value={{field.value}}
|
@value={{field.value}}
|
||||||
@llms={{@personas.resultSetMeta.llms}}
|
@llms={{@agents.resultSetMeta.llms}}
|
||||||
@onChange={{field.set}}
|
@onChange={{field.set}}
|
||||||
@class="ai-persona-editor__llms"
|
@class="ai-agent-editor__llms"
|
||||||
/>
|
/>
|
||||||
</field.Custom>
|
</field.Custom>
|
||||||
</form.Field>
|
</form.Field>
|
||||||
@ -587,10 +587,10 @@ export default class PersonaEditor extends Component {
|
|||||||
</form.Section>
|
</form.Section>
|
||||||
{{/if}}
|
{{/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
|
<form.Field
|
||||||
@name="enabled"
|
@name="enabled"
|
||||||
@title={{i18n "discourse_ai.ai_persona.enabled"}}
|
@title={{i18n "discourse_ai.ai_agent.enabled"}}
|
||||||
@onSet={{fn this.toggleEnabled data}}
|
@onSet={{fn this.toggleEnabled data}}
|
||||||
as |field|
|
as |field|
|
||||||
>
|
>
|
||||||
@ -599,21 +599,21 @@ export default class PersonaEditor extends Component {
|
|||||||
|
|
||||||
<form.Field
|
<form.Field
|
||||||
@name="priority"
|
@name="priority"
|
||||||
@title={{i18n "discourse_ai.ai_persona.priority"}}
|
@title={{i18n "discourse_ai.ai_agent.priority"}}
|
||||||
@onSet={{fn this.togglePriority data}}
|
@onSet={{fn this.togglePriority data}}
|
||||||
@tooltip={{i18n "discourse_ai.ai_persona.priority_help"}}
|
@tooltip={{i18n "discourse_ai.ai_agent.priority_help"}}
|
||||||
as |field|
|
as |field|
|
||||||
>
|
>
|
||||||
<field.Toggle />
|
<field.Toggle />
|
||||||
</form.Field>
|
</form.Field>
|
||||||
|
|
||||||
{{#if @model.isNew}}
|
{{#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}}
|
{{else}}
|
||||||
{{#if data.default_llm_id}}
|
{{#if data.default_llm_id}}
|
||||||
<form.Field
|
<form.Field
|
||||||
@name="force_default_llm"
|
@name="force_default_llm"
|
||||||
@title={{i18n "discourse_ai.ai_persona.force_default_llm"}}
|
@title={{i18n "discourse_ai.ai_agent.force_default_llm"}}
|
||||||
@format="large"
|
@format="large"
|
||||||
as |field|
|
as |field|
|
||||||
>
|
>
|
||||||
@ -622,12 +622,12 @@ export default class PersonaEditor extends Component {
|
|||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
<form.Container
|
<form.Container
|
||||||
@title={{i18n "discourse_ai.ai_persona.user"}}
|
@title={{i18n "discourse_ai.ai_agent.user"}}
|
||||||
@tooltip={{unless
|
@tooltip={{unless
|
||||||
data.user
|
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}}
|
{{#if data.user}}
|
||||||
<a
|
<a
|
||||||
@ -643,20 +643,20 @@ export default class PersonaEditor extends Component {
|
|||||||
{{else}}
|
{{else}}
|
||||||
<form.Button
|
<form.Button
|
||||||
@action={{fn this.createUser form}}
|
@action={{fn this.createUser form}}
|
||||||
@label="discourse_ai.ai_persona.create_user"
|
@label="discourse_ai.ai_agent.create_user"
|
||||||
class="ai-persona-editor__create-user"
|
class="ai-agent-editor__create-user"
|
||||||
/>
|
/>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</form.Container>
|
</form.Container>
|
||||||
|
|
||||||
{{#if data.user}}
|
{{#if data.user}}
|
||||||
<form.Field
|
<form.Field
|
||||||
@name="allow_personal_messages"
|
@name="allow_agentl_messages"
|
||||||
@title={{i18n
|
@title={{i18n
|
||||||
"discourse_ai.ai_persona.allow_personal_messages"
|
"discourse_ai.ai_agent.allow_agentl_messages"
|
||||||
}}
|
}}
|
||||||
@tooltip={{i18n
|
@tooltip={{i18n
|
||||||
"discourse_ai.ai_persona.allow_personal_messages_help"
|
"discourse_ai.ai_agent.allow_agentl_messages_help"
|
||||||
}}
|
}}
|
||||||
@format="large"
|
@format="large"
|
||||||
as |field|
|
as |field|
|
||||||
@ -666,9 +666,9 @@ export default class PersonaEditor extends Component {
|
|||||||
|
|
||||||
<form.Field
|
<form.Field
|
||||||
@name="allow_topic_mentions"
|
@name="allow_topic_mentions"
|
||||||
@title={{i18n "discourse_ai.ai_persona.allow_topic_mentions"}}
|
@title={{i18n "discourse_ai.ai_agent.allow_topic_mentions"}}
|
||||||
@tooltip={{i18n
|
@tooltip={{i18n
|
||||||
"discourse_ai.ai_persona.allow_topic_mentions_help"
|
"discourse_ai.ai_agent.allow_topic_mentions_help"
|
||||||
}}
|
}}
|
||||||
@format="large"
|
@format="large"
|
||||||
as |field|
|
as |field|
|
||||||
@ -680,10 +680,10 @@ export default class PersonaEditor extends Component {
|
|||||||
<form.Field
|
<form.Field
|
||||||
@name="allow_chat_direct_messages"
|
@name="allow_chat_direct_messages"
|
||||||
@title={{i18n
|
@title={{i18n
|
||||||
"discourse_ai.ai_persona.allow_chat_direct_messages"
|
"discourse_ai.ai_agent.allow_chat_direct_messages"
|
||||||
}}
|
}}
|
||||||
@tooltip={{i18n
|
@tooltip={{i18n
|
||||||
"discourse_ai.ai_persona.allow_chat_direct_messages_help"
|
"discourse_ai.ai_agent.allow_chat_direct_messages_help"
|
||||||
}}
|
}}
|
||||||
@format="large"
|
@format="large"
|
||||||
as |field|
|
as |field|
|
||||||
@ -694,10 +694,10 @@ export default class PersonaEditor extends Component {
|
|||||||
<form.Field
|
<form.Field
|
||||||
@name="allow_chat_channel_mentions"
|
@name="allow_chat_channel_mentions"
|
||||||
@title={{i18n
|
@title={{i18n
|
||||||
"discourse_ai.ai_persona.allow_chat_channel_mentions"
|
"discourse_ai.ai_agent.allow_chat_channel_mentions"
|
||||||
}}
|
}}
|
||||||
@tooltip={{i18n
|
@tooltip={{i18n
|
||||||
"discourse_ai.ai_persona.allow_chat_channel_mentions_help"
|
"discourse_ai.ai_agent.allow_chat_channel_mentions_help"
|
||||||
}}
|
}}
|
||||||
@format="large"
|
@format="large"
|
||||||
as |field|
|
as |field|
|
||||||
@ -715,7 +715,7 @@ export default class PersonaEditor extends Component {
|
|||||||
{{#unless (or @model.isNew @model.system)}}
|
{{#unless (or @model.isNew @model.system)}}
|
||||||
<form.Button
|
<form.Button
|
||||||
@action={{this.delete}}
|
@action={{this.delete}}
|
||||||
@label="discourse_ai.ai_persona.delete"
|
@label="discourse_ai.ai_agent.delete"
|
||||||
class="btn-danger"
|
class="btn-danger"
|
||||||
/>
|
/>
|
||||||
{{/unless}}
|
{{/unless}}
|
@ -7,7 +7,7 @@ import { eq } from "truth-helpers";
|
|||||||
import icon from "discourse/helpers/d-icon";
|
import icon from "discourse/helpers/d-icon";
|
||||||
import { i18n } from "discourse-i18n";
|
import { i18n } from "discourse-i18n";
|
||||||
|
|
||||||
export default class AiPersonaCollapsableExample extends Component {
|
export default class AiAgentCollapsableExample extends Component {
|
||||||
@tracked collapsed = true;
|
@tracked collapsed = true;
|
||||||
|
|
||||||
get caretIcon() {
|
get caretIcon() {
|
||||||
@ -26,7 +26,7 @@ export default class AiPersonaCollapsableExample extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get exampleTitle() {
|
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,
|
number: this.args.exampleNumber + 1,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -41,7 +41,7 @@ export default class AiPersonaCollapsableExample extends Component {
|
|||||||
<exPair.Field
|
<exPair.Field
|
||||||
@title={{i18n
|
@title={{i18n
|
||||||
(concat
|
(concat
|
||||||
"discourse_ai.ai_persona.examples."
|
"discourse_ai.ai_agent.examples."
|
||||||
(if (eq pairIdx 0) "user" "model")
|
(if (eq pairIdx 0) "user" "model")
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
@ -57,8 +57,8 @@ export default class AiPersonaCollapsableExample extends Component {
|
|||||||
<@form.Container>
|
<@form.Container>
|
||||||
<@form.Button
|
<@form.Button
|
||||||
@action={{this.deletePair}}
|
@action={{this.deletePair}}
|
||||||
@label="discourse_ai.ai_persona.examples.remove"
|
@label="discourse_ai.ai_agent.examples.remove"
|
||||||
class="ai-persona-editor__delete_example btn-danger"
|
class="ai-agent-editor__delete_example btn-danger"
|
||||||
/>
|
/>
|
||||||
</@form.Container>
|
</@form.Container>
|
||||||
{{/unless}}
|
{{/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 { i18n } from "discourse-i18n";
|
||||||
import DropdownSelectBox from "select-kit/components/dropdown-select-box";
|
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";
|
const LLM_SELECTOR_KEY = "ai_llm_selector_id";
|
||||||
|
|
||||||
export default class AiPersonaLlmSelector extends Component {
|
export default class AiAgentLlmSelector extends Component {
|
||||||
@service currentUser;
|
@service currentUser;
|
||||||
@service keyValueStore;
|
@service keyValueStore;
|
||||||
|
|
||||||
@ -20,7 +20,7 @@ export default class AiPersonaLlmSelector extends Component {
|
|||||||
super(...arguments);
|
super(...arguments);
|
||||||
|
|
||||||
if (this.botOptions?.length) {
|
if (this.botOptions?.length) {
|
||||||
this.#loadStoredPersona();
|
this.#loadStoredAgent();
|
||||||
this.#loadStoredLlm();
|
this.#loadStoredLlm();
|
||||||
|
|
||||||
next(() => {
|
next(() => {
|
||||||
@ -34,25 +34,25 @@ export default class AiPersonaLlmSelector extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get hasLlmSelector() {
|
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() {
|
get botOptions() {
|
||||||
if (!this.currentUser.ai_enabled_personas) {
|
if (!this.currentUser.ai_enabled_agents) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let enabledPersonas = this.currentUser.ai_enabled_personas;
|
let enabledAgents = this.currentUser.ai_enabled_agents;
|
||||||
|
|
||||||
if (!this.hasLlmSelector) {
|
if (!this.hasLlmSelector) {
|
||||||
enabledPersonas = enabledPersonas.filter((persona) => persona.username);
|
enabledAgents = enabledAgents.filter((agent) => agent.username);
|
||||||
}
|
}
|
||||||
|
|
||||||
return enabledPersonas.map((persona) => {
|
return enabledAgents.map((agent) => {
|
||||||
return {
|
return {
|
||||||
id: persona.id,
|
id: agent.id,
|
||||||
name: persona.name,
|
name: agent.name,
|
||||||
description: persona.description,
|
description: agent.description,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -67,8 +67,8 @@ export default class AiPersonaLlmSelector extends Component {
|
|||||||
|
|
||||||
set value(newValue) {
|
set value(newValue) {
|
||||||
this._value = newValue;
|
this._value = newValue;
|
||||||
this.keyValueStore.setItem(PERSONA_SELECTOR_KEY, newValue);
|
this.keyValueStore.setItem(AGENT_SELECTOR_KEY, newValue);
|
||||||
this.args.setPersonaId(newValue);
|
this.args.setAgentId(newValue);
|
||||||
this.setAllowLLMSelector();
|
this.setAllowLLMSelector();
|
||||||
this.resetTargetRecipients();
|
this.resetTargetRecipients();
|
||||||
}
|
}
|
||||||
@ -79,11 +79,11 @@ export default class AiPersonaLlmSelector extends Component {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const persona = this.currentUser.ai_enabled_personas.find(
|
const agent = this.currentUser.ai_enabled_agents.find(
|
||||||
(innerPersona) => innerPersona.id === this._value
|
(innerAgent) => innerAgent.id === this._value
|
||||||
);
|
);
|
||||||
|
|
||||||
this.allowLLMSelector = !persona?.force_default_llm;
|
this.allowLLMSelector = !agent?.force_default_llm;
|
||||||
}
|
}
|
||||||
|
|
||||||
get currentLlm() {
|
get currentLlm() {
|
||||||
@ -104,16 +104,16 @@ export default class AiPersonaLlmSelector extends Component {
|
|||||||
).username;
|
).username;
|
||||||
this.args.setTargetRecipient(botUsername);
|
this.args.setTargetRecipient(botUsername);
|
||||||
} else {
|
} else {
|
||||||
const persona = this.currentUser.ai_enabled_personas.find(
|
const agent = this.currentUser.ai_enabled_agents.find(
|
||||||
(innerPersona) => innerPersona.id === this._value
|
(innerAgent) => innerAgent.id === this._value
|
||||||
);
|
);
|
||||||
this.args.setTargetRecipient(persona.username || "");
|
this.args.setTargetRecipient(agent.username || "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
get llmOptions() {
|
get llmOptions() {
|
||||||
const availableBots = this.currentUser.ai_enabled_chat_bots
|
const availableBots = this.currentUser.ai_enabled_chat_bots
|
||||||
.filter((bot) => !bot.is_persona)
|
.filter((bot) => !bot.is_agent)
|
||||||
.filter(Boolean);
|
.filter(Boolean);
|
||||||
|
|
||||||
return availableBots
|
return availableBots
|
||||||
@ -130,18 +130,18 @@ export default class AiPersonaLlmSelector extends Component {
|
|||||||
return this.allowLLMSelector && this.llmOptions.length > 1;
|
return this.allowLLMSelector && this.llmOptions.length > 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#loadStoredPersona() {
|
#loadStoredAgent() {
|
||||||
let personaId = this.keyValueStore.getItem(PERSONA_SELECTOR_KEY);
|
let agentId = this.keyValueStore.getItem(AGENT_SELECTOR_KEY);
|
||||||
|
|
||||||
this._value = this.botOptions[0].id;
|
this._value = this.botOptions[0].id;
|
||||||
if (personaId) {
|
if (agentId) {
|
||||||
personaId = parseInt(personaId, 10);
|
agentId = parseInt(agentId, 10);
|
||||||
if (this.botOptions.any((bot) => bot.id === personaId)) {
|
if (this.botOptions.any((bot) => bot.id === agentId)) {
|
||||||
this._value = personaId;
|
this._value = agentId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.args.setPersonaId(this._value);
|
this.args.setAgentId(this._value);
|
||||||
}
|
}
|
||||||
|
|
||||||
#loadStoredLlm() {
|
#loadStoredLlm() {
|
||||||
@ -172,13 +172,13 @@ export default class AiPersonaLlmSelector extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="persona-llm-selector">
|
<div class="agent-llm-selector">
|
||||||
<div class="persona-llm-selector__selection-wrapper gpt-persona">
|
<div class="agent-llm-selector__selection-wrapper gpt-agent">
|
||||||
{{#if @showLabels}}
|
{{#if @showLabels}}
|
||||||
<label>{{i18n "discourse_ai.ai_bot.persona"}}</label>
|
<label>{{i18n "discourse_ai.ai_bot.agent"}}</label>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<DropdownSelectBox
|
<DropdownSelectBox
|
||||||
class="persona-llm-selector__persona-dropdown"
|
class="agent-llm-selector__agent-dropdown"
|
||||||
@value={{this.value}}
|
@value={{this.value}}
|
||||||
@content={{this.botOptions}}
|
@content={{this.botOptions}}
|
||||||
@options={{hash
|
@options={{hash
|
||||||
@ -188,12 +188,12 @@ export default class AiPersonaLlmSelector extends Component {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
{{#if this.showLLMSelector}}
|
{{#if this.showLLMSelector}}
|
||||||
<div class="persona-llm-selector__selection-wrapper llm-selector">
|
<div class="agent-llm-selector__selection-wrapper llm-selector">
|
||||||
{{#if @showLabels}}
|
{{#if @showLabels}}
|
||||||
<label>{{i18n "discourse_ai.ai_bot.llm"}}</label>
|
<label>{{i18n "discourse_ai.ai_bot.llm"}}</label>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<DropdownSelectBox
|
<DropdownSelectBox
|
||||||
class="persona-llm-selector__llm-dropdown"
|
class="agent-llm-selector__llm-dropdown"
|
||||||
@value={{this.currentLlm}}
|
@value={{this.currentLlm}}
|
||||||
@content={{this.llmOptions}}
|
@content={{this.llmOptions}}
|
||||||
@options={{hash icon=(if @showLabels "angle-down" "globe")}}
|
@options={{hash icon=(if @showLabels "angle-down" "globe")}}
|
@ -4,7 +4,7 @@ import { eq } from "truth-helpers";
|
|||||||
import { i18n } from "discourse-i18n";
|
import { i18n } from "discourse-i18n";
|
||||||
import AiLlmSelector from "./ai-llm-selector";
|
import AiLlmSelector from "./ai-llm-selector";
|
||||||
|
|
||||||
export default class AiPersonaToolOptions extends Component {
|
export default class AiAgentToolOptions extends Component {
|
||||||
get showToolOptions() {
|
get showToolOptions() {
|
||||||
const allTools = this.args.allTools;
|
const allTools = this.args.allTools;
|
||||||
if (!allTools || !this.args.data.tools) {
|
if (!allTools || !this.args.data.tools) {
|
||||||
@ -36,19 +36,19 @@ export default class AiPersonaToolOptions extends Component {
|
|||||||
<template>
|
<template>
|
||||||
{{#if this.showToolOptions}}
|
{{#if this.showToolOptions}}
|
||||||
<@form.Container
|
<@form.Container
|
||||||
@title={{i18n "discourse_ai.ai_persona.tool_options"}}
|
@title={{i18n "discourse_ai.ai_agent.tool_options"}}
|
||||||
@direction="column"
|
@direction="column"
|
||||||
@format="full"
|
@format="full"
|
||||||
>
|
>
|
||||||
<@form.Object
|
<@form.Object
|
||||||
@name="toolOptions"
|
@name="toolOptions"
|
||||||
@title={{i18n "discourse_ai.ai_persona.tool_options"}}
|
@title={{i18n "discourse_ai.ai_agent.tool_options"}}
|
||||||
as |toolObj optsPerTool|
|
as |toolObj optsPerTool|
|
||||||
>
|
>
|
||||||
{{#each (this.formObjectKeys optsPerTool) as |toolId|}}
|
{{#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|}}
|
{{#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}}
|
{{toolMeta.name}}
|
||||||
</div>
|
</div>
|
||||||
<toolObj.Object @name={{toolId}} as |optionsObj optionData|>
|
<toolObj.Object @name={{toolId}} as |optionsObj optionData|>
|
||||||
@ -73,7 +73,7 @@ export default class AiPersonaToolOptions extends Component {
|
|||||||
@value={{field.value}}
|
@value={{field.value}}
|
||||||
@llms={{@llms}}
|
@llms={{@llms}}
|
||||||
@onChange={{field.set}}
|
@onChange={{field.set}}
|
||||||
@class="ai-persona-tool-option-editor__llms"
|
@class="ai-agent-tool-option-editor__llms"
|
||||||
/>
|
/>
|
||||||
</field.Custom>
|
</field.Custom>
|
||||||
{{else if (eq optionMeta.type "boolean")}}
|
{{else if (eq optionMeta.type "boolean")}}
|
@ -23,7 +23,7 @@ import {
|
|||||||
} from "discourse/lib/user-status-on-autocomplete";
|
} from "discourse/lib/user-status-on-autocomplete";
|
||||||
import { clipboardHelpers } from "discourse/lib/utilities";
|
import { clipboardHelpers } from "discourse/lib/utilities";
|
||||||
import { i18n } from "discourse-i18n";
|
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 {
|
export default class AiBotConversations extends Component {
|
||||||
@service aiBotConversationsHiddenSubmit;
|
@service aiBotConversationsHiddenSubmit;
|
||||||
@ -133,8 +133,8 @@ export default class AiBotConversations extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@action
|
@action
|
||||||
setPersonaId(id) {
|
setAgentId(id) {
|
||||||
this.aiBotConversationsHiddenSubmit.personaId = id;
|
this.aiBotConversationsHiddenSubmit.agentId = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@action
|
@action
|
||||||
@ -279,9 +279,9 @@ export default class AiBotConversations extends Component {
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="ai-bot-conversations">
|
<div class="ai-bot-conversations">
|
||||||
<AiPersonaLlmSelector
|
<AiAgentLlmSelector
|
||||||
@showLabels={{true}}
|
@showLabels={{true}}
|
||||||
@setPersonaId={{this.setPersonaId}}
|
@setAgentId={{this.setAgentId}}
|
||||||
@setTargetRecipient={{this.setTargetRecipient}}
|
@setTargetRecipient={{this.setTargetRecipient}}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
@ -116,7 +116,7 @@ export default class AiLlmEditorForm extends Component {
|
|||||||
|
|
||||||
const localized = usedBy.map((m) => {
|
const localized = usedBy.map((m) => {
|
||||||
return i18n(`discourse_ai.llms.usage.${m.type}`, {
|
return i18n(`discourse_ai.llms.usage.${m.type}`, {
|
||||||
persona: m.name,
|
agent: m.name,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ const AiLlmSelector = <template>
|
|||||||
@onChange={{@onChange}}
|
@onChange={{@onChange}}
|
||||||
@options={{hash
|
@options={{hash
|
||||||
filterable=true
|
filterable=true
|
||||||
none="discourse_ai.ai_persona.no_llm_selected"
|
none="discourse_ai.ai_agent.no_llm_selected"
|
||||||
}}
|
}}
|
||||||
class={{@class}}
|
class={{@class}}
|
||||||
/>
|
/>
|
||||||
|
@ -112,9 +112,9 @@ export default class AiLlmsListEditor extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
localizeUsage(usage) {
|
localizeUsage(usage) {
|
||||||
if (usage.type === "ai_persona") {
|
if (usage.type === "ai_agent") {
|
||||||
return i18n("discourse_ai.llms.usage.ai_persona", {
|
return i18n("discourse_ai.llms.usage.ai_agent", {
|
||||||
persona: usage.name,
|
agent: usage.name,
|
||||||
});
|
});
|
||||||
} else if (usage.type === "automation") {
|
} else if (usage.type === "automation") {
|
||||||
return i18n("discourse_ai.llms.usage.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() {
|
get canContinueConversation() {
|
||||||
const personas = this.currentUser?.ai_enabled_personas;
|
const agents = this.currentUser?.ai_enabled_agents;
|
||||||
if (!personas) {
|
if (!agents) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -163,16 +163,16 @@ export default class AiSearchDiscoveries extends Component {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const discoverPersona = personas.find(
|
const discoverAgent = agents.find(
|
||||||
(persona) =>
|
(agent) =>
|
||||||
persona.id === parseInt(this.siteSettings?.ai_bot_discover_persona, 10)
|
agent.id === parseInt(this.siteSettings?.ai_bot_discover_agent, 10)
|
||||||
);
|
);
|
||||||
const discoverPersonaHasBot = discoverPersona?.username;
|
const discoverAgentHasBot = discoverAgent?.username;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
this.discobotDiscoveries.discovery?.length > 0 &&
|
this.discobotDiscoveries.discovery?.length > 0 &&
|
||||||
!this.smoothStreamer.isStreaming &&
|
!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 { prettyJSON } from "discourse/lib/formatter";
|
||||||
import { i18n } from "discourse-i18n";
|
import { i18n } from "discourse-i18n";
|
||||||
|
|
||||||
export default class AiPersonaResponseFormatEditor extends Component {
|
export default class AiAgentResponseFormatEditor extends Component {
|
||||||
@tracked showJsonEditorModal = false;
|
@tracked showJsonEditorModal = false;
|
||||||
|
|
||||||
jsonSchema = {
|
jsonSchema = {
|
||||||
type: "array",
|
type: "array",
|
||||||
uniqueItems: true,
|
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: {
|
items: {
|
||||||
type: "object",
|
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: {
|
properties: {
|
||||||
key: {
|
key: {
|
||||||
type: "string",
|
type: "string",
|
||||||
@ -30,7 +30,7 @@ export default class AiPersonaResponseFormatEditor extends Component {
|
|||||||
};
|
};
|
||||||
|
|
||||||
get editorTitle() {
|
get editorTitle() {
|
||||||
return i18n("discourse_ai.ai_persona.response_format.title");
|
return i18n("discourse_ai.ai_agent.response_format.title");
|
||||||
}
|
}
|
||||||
|
|
||||||
get responseFormatAsJSON() {
|
get responseFormatAsJSON() {
|
||||||
@ -64,21 +64,21 @@ export default class AiPersonaResponseFormatEditor extends Component {
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<@form.Container @title={{this.editorTitle}} @format="large">
|
<@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)}}
|
{{#if (gt @data.response_format.length 0)}}
|
||||||
<pre class="ai-persona-editor__response-format-pre">
|
<pre class="ai-agent-editor__response-format-pre">
|
||||||
<code
|
<code
|
||||||
>{{this.displayJSON}}</code>
|
>{{this.displayJSON}}</code>
|
||||||
</pre>
|
</pre>
|
||||||
{{else}}
|
{{else}}
|
||||||
<div class="ai-persona-editor__response-format-none">
|
<div class="ai-agent-editor__response-format-none">
|
||||||
{{i18n "discourse_ai.ai_persona.response_format.no_format"}}
|
{{i18n "discourse_ai.ai_agent.response_format.no_format"}}
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
<@form.Button
|
<@form.Button
|
||||||
@action={{this.openModal}}
|
@action={{this.openModal}}
|
||||||
@label="discourse_ai.ai_persona.response_format.open_modal"
|
@label="discourse_ai.ai_agent.response_format.open_modal"
|
||||||
@disabled={{@data.system}}
|
@disabled={{@data.system}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
@ -1,14 +1,14 @@
|
|||||||
import Component from "@glimmer/component";
|
import Component from "@glimmer/component";
|
||||||
import { isGPTBot } from "../../lib/ai-bot-helper";
|
import { isGPTBot } from "../../lib/ai-bot-helper";
|
||||||
|
|
||||||
export default class AiPersonaFlair extends Component {
|
export default class AiAgentFlair extends Component {
|
||||||
static shouldRender(args) {
|
static shouldRender(args) {
|
||||||
return isGPTBot(args.post.user);
|
return isGPTBot(args.post.user);
|
||||||
}
|
}
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<span class="persona-flair">
|
<span class="agent-flair">
|
||||||
{{@outletArgs.post.topic.ai_persona_name}}
|
{{@outletArgs.post.topic.ai_agent_name}}
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
}
|
}
|
@ -70,7 +70,7 @@ export default class RagOptionsFk extends Component {
|
|||||||
@value={{field.value}}
|
@value={{field.value}}
|
||||||
@llms={{this.visionLlms}}
|
@llms={{this.visionLlms}}
|
||||||
@onChange={{field.set}}
|
@onChange={{field.set}}
|
||||||
@class="ai-persona-editor__llms"
|
@class="ai-agent-editor__llms"
|
||||||
/>
|
/>
|
||||||
</field.Custom>
|
</field.Custom>
|
||||||
</@form.Field>
|
</@form.Field>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import Component from "@glimmer/component";
|
import Component from "@glimmer/component";
|
||||||
import { action } from "@ember/object";
|
import { action } from "@ember/object";
|
||||||
import { service } from "@ember/service";
|
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) {
|
function isBotMessage(composer, currentUser) {
|
||||||
if (
|
if (
|
||||||
@ -21,7 +21,7 @@ function isBotMessage(composer, currentUser) {
|
|||||||
export default class BotSelector extends Component {
|
export default class BotSelector extends Component {
|
||||||
static shouldRender(args, container) {
|
static shouldRender(args, container) {
|
||||||
return (
|
return (
|
||||||
container?.currentUser?.ai_enabled_personas &&
|
container?.currentUser?.ai_enabled_agents &&
|
||||||
isBotMessage(args.model, container.currentUser)
|
isBotMessage(args.model, container.currentUser)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -29,8 +29,8 @@ export default class BotSelector extends Component {
|
|||||||
@service currentUser;
|
@service currentUser;
|
||||||
|
|
||||||
@action
|
@action
|
||||||
setPersonaIdOnComposer(id) {
|
setAgentIdOnComposer(id) {
|
||||||
this.args.outletArgs.model.metaData = { ai_persona_id: id };
|
this.args.outletArgs.model.metaData = { ai_agent_id: id };
|
||||||
}
|
}
|
||||||
|
|
||||||
@action
|
@action
|
||||||
@ -39,8 +39,8 @@ export default class BotSelector extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<AiPersonaLlmSelector
|
<AiAgentLlmSelector
|
||||||
@setPersonaId={{this.setPersonaIdOnComposer}}
|
@setAgentId={{this.setAgentIdOnComposer}}
|
||||||
@setTargetRecipient={{this.setTargetRecipientsOnComposer}}
|
@setTargetRecipient={{this.setTargetRecipientsOnComposer}}
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
@ -9,8 +9,8 @@ import AiSearchDiscoveriesTooltip from "../../components/ai-search-discoveries-t
|
|||||||
export default class AiFullPageDiscobotDiscoveries extends Component {
|
export default class AiFullPageDiscobotDiscoveries extends Component {
|
||||||
static shouldRender(_args, { siteSettings, currentUser }) {
|
static shouldRender(_args, { siteSettings, currentUser }) {
|
||||||
return (
|
return (
|
||||||
siteSettings.ai_bot_discover_persona &&
|
siteSettings.ai_bot_discover_agent &&
|
||||||
currentUser?.can_use_ai_bot_discover_persona &&
|
currentUser?.can_use_ai_bot_discover_agent &&
|
||||||
currentUser?.user_option?.ai_search_discoveries
|
currentUser?.user_option?.ai_search_discoveries
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -8,8 +8,8 @@ import AiSearchDiscoveriesTooltip from "../../components/ai-search-discoveries-t
|
|||||||
export default class AiDiscobotDiscoveries extends Component {
|
export default class AiDiscobotDiscoveries extends Component {
|
||||||
static shouldRender(args, { siteSettings, currentUser }) {
|
static shouldRender(args, { siteSettings, currentUser }) {
|
||||||
return (
|
return (
|
||||||
siteSettings.ai_bot_discover_persona &&
|
siteSettings.ai_bot_discover_agent &&
|
||||||
currentUser?.can_use_ai_bot_discover_persona &&
|
currentUser?.can_use_ai_bot_discover_agent &&
|
||||||
currentUser?.user_option?.ai_search_discoveries
|
currentUser?.user_option?.ai_search_discoveries
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -35,8 +35,8 @@ export default class PreferencesAiController extends Controller {
|
|||||||
checked: this.model.user_option.ai_search_discoveries,
|
checked: this.model.user_option.ai_search_discoveries,
|
||||||
isIncluded: (() => {
|
isIncluded: (() => {
|
||||||
return (
|
return (
|
||||||
this.siteSettings.ai_bot_discover_persona &&
|
this.siteSettings.ai_bot_discover_agent &&
|
||||||
this.model?.can_use_ai_bot_discover_persona &&
|
this.model?.can_use_ai_bot_discover_agent &&
|
||||||
this.siteSettings.ai_bot_enabled
|
this.siteSettings.ai_bot_enabled
|
||||||
);
|
);
|
||||||
})(),
|
})(),
|
||||||
|
@ -5,7 +5,7 @@ import Composer from "discourse/models/composer";
|
|||||||
import { i18n } from "discourse-i18n";
|
import { i18n } from "discourse-i18n";
|
||||||
import ShareFullTopicModal from "../components/modal/share-full-topic-modal";
|
import ShareFullTopicModal from "../components/modal/share-full-topic-modal";
|
||||||
|
|
||||||
const MAX_PERSONA_USER_ID = -1200;
|
const MAX_AGENT_USER_ID = -1200;
|
||||||
|
|
||||||
let enabledChatBotMap = null;
|
let enabledChatBotMap = null;
|
||||||
|
|
||||||
@ -40,12 +40,12 @@ export function getBotType(user) {
|
|||||||
if (!bot) {
|
if (!bot) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
return bot.is_persona ? "persona" : "llm";
|
return bot.is_agent ? "agent" : "llm";
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isPostFromAiBot(post, currentUser) {
|
export function isPostFromAiBot(post, currentUser) {
|
||||||
return (
|
return (
|
||||||
post.user_id <= MAX_PERSONA_USER_ID ||
|
post.user_id <= MAX_AGENT_USER_ID ||
|
||||||
!!currentUser?.ai_enabled_chat_bots?.any(
|
!!currentUser?.ai_enabled_chat_bots?.any(
|
||||||
(bot) => post.username === bot.username
|
(bot) => post.username === bot.username
|
||||||
)
|
)
|
||||||
@ -66,7 +66,7 @@ export async function composeAiBotMessage(
|
|||||||
options = {
|
options = {
|
||||||
skipFocus: false,
|
skipFocus: false,
|
||||||
topicBody: "",
|
topicBody: "",
|
||||||
personaUsername: null,
|
agentUsername: null,
|
||||||
}
|
}
|
||||||
) {
|
) {
|
||||||
const currentUser = composer.currentUser;
|
const currentUser = composer.currentUser;
|
||||||
@ -77,8 +77,8 @@ export async function composeAiBotMessage(
|
|||||||
botUsername = currentUser.ai_enabled_chat_bots.find(
|
botUsername = currentUser.ai_enabled_chat_bots.find(
|
||||||
(bot) => bot.model_name === targetBot
|
(bot) => bot.model_name === targetBot
|
||||||
)?.username;
|
)?.username;
|
||||||
} else if (options.personaUsername) {
|
} else if (options.agentUsername) {
|
||||||
botUsername = options.personaUsername;
|
botUsername = options.agentUsername;
|
||||||
} else {
|
} else {
|
||||||
botUsername = currentUser.ai_enabled_chat_bots[0].username;
|
botUsername = currentUser.ai_enabled_chat_bots[0].username;
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ export default class AiBotConversationsHiddenSubmit extends Service {
|
|||||||
|
|
||||||
@tracked loading = false;
|
@tracked loading = false;
|
||||||
|
|
||||||
personaId;
|
agentId;
|
||||||
targetUsername;
|
targetUsername;
|
||||||
uploads = [];
|
uploads = [];
|
||||||
|
|
||||||
@ -35,12 +35,12 @@ export default class AiBotConversationsHiddenSubmit extends Service {
|
|||||||
async submitToBot() {
|
async submitToBot() {
|
||||||
if (
|
if (
|
||||||
this.inputValue.length <
|
this.inputValue.length <
|
||||||
this.siteSettings.min_personal_message_post_length
|
this.siteSettings.min_agentl_message_post_length
|
||||||
) {
|
) {
|
||||||
return this.dialog.alert({
|
return this.dialog.alert({
|
||||||
message: i18n(
|
message: i18n(
|
||||||
"discourse_ai.ai_bot.conversations.min_input_length_message",
|
"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(),
|
didConfirm: () => this.focusInput(),
|
||||||
didCancel: () => this.focusInput(),
|
didCancel: () => this.focusInput(),
|
||||||
@ -78,7 +78,7 @@ export default class AiBotConversationsHiddenSubmit extends Service {
|
|||||||
title,
|
title,
|
||||||
archetype: "private_message",
|
archetype: "private_message",
|
||||||
target_recipients: this.targetUsername,
|
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",
|
description: "discourse_ai.llms.preconfigured.description",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "discourse_ai.ai_persona.short_title",
|
label: "discourse_ai.ai_agent.short_title",
|
||||||
route: "adminPlugins.show.discourse-ai-personas",
|
route: "adminPlugins.show.discourse-ai-agents",
|
||||||
description: "discourse_ai.ai_persona.persona_description",
|
description: "discourse_ai.ai_agent.agent_description",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "discourse_ai.embeddings.short_title",
|
label: "discourse_ai.embeddings.short_title",
|
||||||
|
@ -3,7 +3,7 @@ import { withSilencedDeprecations } from "discourse/lib/deprecated";
|
|||||||
import { withPluginApi } from "discourse/lib/plugin-api";
|
import { withPluginApi } from "discourse/lib/plugin-api";
|
||||||
import { registerWidgetShim } from "discourse/widgets/render-glimmer";
|
import { registerWidgetShim } from "discourse/widgets/render-glimmer";
|
||||||
import AiBotHeaderIcon from "../discourse/components/ai-bot-header-icon";
|
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 AiCancelStreamingButton from "../discourse/components/post-menu/ai-cancel-streaming-button";
|
||||||
import AiDebugButton from "../discourse/components/post-menu/ai-debug-button";
|
import AiDebugButton from "../discourse/components/post-menu/ai-debug-button";
|
||||||
import AiShareButton from "../discourse/components/post-menu/ai-share-button";
|
import AiShareButton from "../discourse/components/post-menu/ai-share-button";
|
||||||
@ -53,35 +53,35 @@ function initializeAIBotReplies(api) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function initializePersonaDecorator(api) {
|
function initializeAgentDecorator(api) {
|
||||||
api.renderAfterWrapperOutlet("post-meta-data-poster-name", AiPersonaFlair);
|
api.renderAfterWrapperOutlet("post-meta-data-poster-name", AiAgentFlair);
|
||||||
|
|
||||||
withSilencedDeprecations("discourse.post-stream-widget-overrides", () =>
|
withSilencedDeprecations("discourse.post-stream-widget-overrides", () =>
|
||||||
initializeWidgetPersonaDecorator(api)
|
initializeWidgetAgentDecorator(api)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function initializeWidgetPersonaDecorator(api) {
|
function initializeWidgetAgentDecorator(api) {
|
||||||
api.decorateWidget(`poster-name:after`, (dec) => {
|
api.decorateWidget(`poster-name:after`, (dec) => {
|
||||||
const botType = getBotType(dec.attrs.user);
|
const botType = getBotType(dec.attrs.user);
|
||||||
// we have 2 ways of decorating
|
// we have 2 ways of decorating
|
||||||
// 1. if a bot is a LLM we decorate with persona name
|
// 1. if a bot is a LLM we decorate with agent name
|
||||||
// 2. if bot is a persona we decorate with LLM name
|
// 2. if bot is a agent we decorate with LLM name
|
||||||
if (botType === "llm") {
|
if (botType === "llm") {
|
||||||
return dec.widget.attach("persona-flair", {
|
return dec.widget.attach("agent-flair", {
|
||||||
personaName: dec.model?.topic?.ai_persona_name,
|
agentName: dec.model?.topic?.ai_agent_name,
|
||||||
});
|
});
|
||||||
} else if (botType === "persona") {
|
} else if (botType === "agent") {
|
||||||
return dec.widget.attach("persona-flair", {
|
return dec.widget.attach("agent-flair", {
|
||||||
personaName: dec.model?.llm_name,
|
agentName: dec.model?.llm_name,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
registerWidgetShim(
|
registerWidgetShim(
|
||||||
"persona-flair",
|
"agent-flair",
|
||||||
"span.persona-flair",
|
"span.agent-flair",
|
||||||
hbs`{{@data.personaName}}`
|
hbs`{{@data.agentName}}`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,11 +149,11 @@ function initializeShareTopicButton(api) {
|
|||||||
showShareConversationModal(modal, this.topic.id);
|
showShareConversationModal(modal, this.topic.id);
|
||||||
},
|
},
|
||||||
classNames: ["share-ai-conversation-button"],
|
classNames: ["share-ai-conversation-button"],
|
||||||
dependentKeys: ["topic.ai_persona_name"],
|
dependentKeys: ["topic.ai_agent_name"],
|
||||||
displayed() {
|
displayed() {
|
||||||
return (
|
return (
|
||||||
currentUser?.can_share_ai_bot_conversations &&
|
currentUser?.can_share_ai_bot_conversations &&
|
||||||
this.topic.ai_persona_name
|
this.topic.ai_agent_name
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
@ -171,7 +171,7 @@ export default {
|
|||||||
withPluginApi((api) => {
|
withPluginApi((api) => {
|
||||||
attachHeaderIcon(api);
|
attachHeaderIcon(api);
|
||||||
initializeAIBotReplies(api);
|
initializeAIBotReplies(api);
|
||||||
initializePersonaDecorator(api);
|
initializeAgentDecorator(api);
|
||||||
initializeDebugButton(api, container);
|
initializeDebugButton(api, container);
|
||||||
initializeShareButton(api, container);
|
initializeShareButton(api, container);
|
||||||
initializeShareTopicButton(api, container);
|
initializeShareTopicButton(api, container);
|
||||||
|
@ -6,7 +6,7 @@ export default apiInitializer((api) => {
|
|||||||
|
|
||||||
if (
|
if (
|
||||||
!settings.ai_bot_enabled ||
|
!settings.ai_bot_enabled ||
|
||||||
!currentUser?.can_use_ai_bot_discover_persona
|
!currentUser?.can_use_ai_bot_discover_agent
|
||||||
) {
|
) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__row-item-persona {
|
&__row-item-agent {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
|
|
||||||
|
@ -157,7 +157,7 @@ body.has-ai-conversations-sidebar {
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
height: calc(100dvh - var(--header-offset) - 5em);
|
height: calc(100dvh - var(--header-offset) - 5em);
|
||||||
|
|
||||||
.persona-llm-selector {
|
.agent-llm-selector {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 0.5em;
|
gap: 0.5em;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
.admin-contents .ai-persona-list-editor {
|
.admin-contents .ai-agent-list-editor {
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ai-persona-list-editor {
|
.ai-agent-list-editor {
|
||||||
&__header {
|
&__header {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
@ -23,7 +23,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.ai-persona-tool-option-editor {
|
.ai-agent-tool-option-editor {
|
||||||
&__instructions {
|
&__instructions {
|
||||||
color: var(--primary-medium);
|
color: var(--primary-medium);
|
||||||
font-size: var(--font-down-1);
|
font-size: var(--font-down-1);
|
||||||
@ -31,7 +31,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.ai-personas__container {
|
.ai-agents__container {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@ -39,7 +39,7 @@
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ai-persona-editor {
|
.ai-agent-editor {
|
||||||
padding-left: 0.5em;
|
padding-left: 0.5em;
|
||||||
|
|
||||||
&__tool-options {
|
&__tool-options {
|
@ -11,7 +11,7 @@ nav.post-controls .actions button.cancel-streaming {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.persona-llm-selector {
|
.agent-llm-selector {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@ -24,7 +24,7 @@ nav.post-controls .actions button.cancel-streaming {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.ai-bot-pm {
|
.ai-bot-pm {
|
||||||
.gpt-persona {
|
.gpt-agent {
|
||||||
margin-bottom: 5px;
|
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;
|
order: 2;
|
||||||
font-size: var(--font-down-1);
|
font-size: var(--font-down-1);
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.ai-persona-editor {
|
.ai-agent-editor {
|
||||||
&__system_prompt,
|
&__system_prompt,
|
||||||
&__description,
|
&__description,
|
||||||
.select-kit.multi-select {
|
.select-kit.multi-select {
|
@ -45,7 +45,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.ai-tool-list-editor__current,
|
.ai-tool-list-editor__current,
|
||||||
.ai-persona-list-editor__current,
|
.ai-agent-list-editor__current,
|
||||||
.ai-llms-list-editor__configured {
|
.ai-llms-list-editor__configured {
|
||||||
.d-admin-table {
|
.d-admin-table {
|
||||||
tr:hover {
|
tr:hover {
|
||||||
|
@ -128,7 +128,7 @@ ar:
|
|||||||
flag_post:
|
flag_post:
|
||||||
label: "الإبلاغ عن المنشور"
|
label: "الإبلاغ عن المنشور"
|
||||||
description: "يبلغ عن المنشور (سواءً كان عشوائيًا أو للمراجعة)"
|
description: "يبلغ عن المنشور (سواءً كان عشوائيًا أو للمراجعة)"
|
||||||
include_personal_messages:
|
include_agentl_messages:
|
||||||
label: "تضمين الرسائل الشخصية"
|
label: "تضمين الرسائل الشخصية"
|
||||||
description: "افحص الرسائل الشخصية وافرزها أيضًا"
|
description: "افحص الرسائل الشخصية وافرزها أيضًا"
|
||||||
model:
|
model:
|
||||||
@ -219,7 +219,7 @@ ar:
|
|||||||
last_week: "الأسبوع الماضي"
|
last_week: "الأسبوع الماضي"
|
||||||
last_month: "الشهر الماضي"
|
last_month: "الشهر الماضي"
|
||||||
custom: "مُخصَّص..."
|
custom: "مُخصَّص..."
|
||||||
ai_persona:
|
ai_agent:
|
||||||
ai_tools: "الأدوات"
|
ai_tools: "الأدوات"
|
||||||
tool_strategies:
|
tool_strategies:
|
||||||
all: "التطبيق على كل الردود"
|
all: "التطبيق على كل الردود"
|
||||||
@ -261,8 +261,8 @@ ar:
|
|||||||
allow_chat_direct_messages_help: "إذا تم التفعيل، يمكن للمستخدمين في المجموعات المسموح بها إرسال رسالة مباشرة إلى هذه الشخصية."
|
allow_chat_direct_messages_help: "إذا تم التفعيل، يمكن للمستخدمين في المجموعات المسموح بها إرسال رسالة مباشرة إلى هذه الشخصية."
|
||||||
allow_chat_channel_mentions: "السماح بالإشارات في قناة الدردشة"
|
allow_chat_channel_mentions: "السماح بالإشارات في قناة الدردشة"
|
||||||
allow_chat_channel_mentions_help: "إذا تم التفعيل، يمكن للمستخدمين في المجموعات المسموح بها الإشارة إلى هذه الشخصية في قنوات الدردشة."
|
allow_chat_channel_mentions_help: "إذا تم التفعيل، يمكن للمستخدمين في المجموعات المسموح بها الإشارة إلى هذه الشخصية في قنوات الدردشة."
|
||||||
allow_personal_messages: "السماح بالرسائل الشخصية"
|
allow_agentl_messages: "السماح بالرسائل الشخصية"
|
||||||
allow_personal_messages_help: "إذا تم التفعيل، يمكن للمستخدمين في المجموعات المسموح بها إرسال رسائل شخصية إلى هذه الشخصية."
|
allow_agentl_messages_help: "إذا تم التفعيل، يمكن للمستخدمين في المجموعات المسموح بها إرسال رسائل شخصية إلى هذه الشخصية."
|
||||||
allow_topic_mentions: "السماح بالإشارات في الموضوعات"
|
allow_topic_mentions: "السماح بالإشارات في الموضوعات"
|
||||||
allow_topic_mentions_help: "إذا تم التفعيل، يمكن للمستخدمين في المجموعات المسموح بها الإشارة إلى هذه الشخصية في الموضوعات."
|
allow_topic_mentions_help: "إذا تم التفعيل، يمكن للمستخدمين في المجموعات المسموح بها الإشارة إلى هذه الشخصية في الموضوعات."
|
||||||
force_default_llm: "استخدام نموذج اللغة الافتراضي دائمًا"
|
force_default_llm: "استخدام نموذج اللغة الافتراضي دائمًا"
|
||||||
@ -274,7 +274,7 @@ ar:
|
|||||||
allowed_groups: "المجموعات المسموح بها"
|
allowed_groups: "المجموعات المسموح بها"
|
||||||
confirm_delete: "هل تريد بالتأكيد حذف هذه الشخصية؟"
|
confirm_delete: "هل تريد بالتأكيد حذف هذه الشخصية؟"
|
||||||
new: "شخصية جديدة"
|
new: "شخصية جديدة"
|
||||||
no_personas: "لم تُنشئ أي شخصيات بعد"
|
no_agents: "لم تُنشئ أي شخصيات بعد"
|
||||||
title: "الشخصيات"
|
title: "الشخصيات"
|
||||||
short_title: "الشخصيات"
|
short_title: "الشخصيات"
|
||||||
delete: "حذف"
|
delete: "حذف"
|
||||||
@ -287,7 +287,7 @@ ar:
|
|||||||
tool_options: "خيارات الأداة"
|
tool_options: "خيارات الأداة"
|
||||||
rag_conversation_chunks: "البحث في أجزاء المحادثة"
|
rag_conversation_chunks: "البحث في أجزاء المحادثة"
|
||||||
rag_conversation_chunks_help: "عدد الأجزاء التي سيتم استخدامها لإي عمليات البحث ضمن نموذج RAG. يزداد مقدار السياق الذي يمكن للذكاء الاصطناعي استخدامه بزيادة القيمة."
|
rag_conversation_chunks_help: "عدد الأجزاء التي سيتم استخدامها لإي عمليات البحث ضمن نموذج RAG. يزداد مقدار السياق الذي يمكن للذكاء الاصطناعي استخدامه بزيادة القيمة."
|
||||||
persona_description: "تُعد الشخصيات ميزة قوية تتيح لك تخصيص سلوك محرك الذكاء الاصطناعي في منتدى Discourse الخاص بك. إنها تعمل بمثابة \"رسالة نظام\" توجِّه ردود الذكاء الاصطناعي وتفاعلاته، مما يساعد في إنشاء تجربة مستخدم أكثر تخصيصًا وتفاعليةً."
|
agent_description: "تُعد الشخصيات ميزة قوية تتيح لك تخصيص سلوك محرك الذكاء الاصطناعي في منتدى Discourse الخاص بك. إنها تعمل بمثابة \"رسالة نظام\" توجِّه ردود الذكاء الاصطناعي وتفاعلاته، مما يساعد في إنشاء تجربة مستخدم أكثر تخصيصًا وتفاعليةً."
|
||||||
response_format:
|
response_format:
|
||||||
open_modal: "تعديل"
|
open_modal: "تعديل"
|
||||||
modal:
|
modal:
|
||||||
@ -380,7 +380,7 @@ ar:
|
|||||||
usage:
|
usage:
|
||||||
ai_bot: "روبوت الذكاء الاصطناعي"
|
ai_bot: "روبوت الذكاء الاصطناعي"
|
||||||
ai_helper: "المساعد"
|
ai_helper: "المساعد"
|
||||||
ai_persona: "الشخصية (%{persona})"
|
ai_agent: "الشخصية (%{agent})"
|
||||||
ai_summarization: "تلخيص"
|
ai_summarization: "تلخيص"
|
||||||
ai_embeddings_semantic_search: "البحث باستخدام الذكاء الاصطناعي"
|
ai_embeddings_semantic_search: "البحث باستخدام الذكاء الاصطناعي"
|
||||||
ai_spam: "عشوائي"
|
ai_spam: "عشوائي"
|
||||||
|
@ -50,7 +50,7 @@ be:
|
|||||||
summary: "вынік"
|
summary: "вынік"
|
||||||
username: "Імя карыстальніка"
|
username: "Імя карыстальніка"
|
||||||
total_requests: "Усяго запытаў"
|
total_requests: "Усяго запытаў"
|
||||||
ai_persona:
|
ai_agent:
|
||||||
back: "Назад"
|
back: "Назад"
|
||||||
name: "імя"
|
name: "імя"
|
||||||
edit: "рэдагаваць"
|
edit: "рэдагаваць"
|
||||||
|
@ -56,7 +56,7 @@ bg:
|
|||||||
periods:
|
periods:
|
||||||
last_day: "Последните 24 часа"
|
last_day: "Последните 24 часа"
|
||||||
custom: "Ръчно задаване..."
|
custom: "Ръчно задаване..."
|
||||||
ai_persona:
|
ai_agent:
|
||||||
back: "Назад"
|
back: "Назад"
|
||||||
name: "Име"
|
name: "Име"
|
||||||
edit: "Редактирай"
|
edit: "Редактирай"
|
||||||
|
@ -51,7 +51,7 @@ bs_BA:
|
|||||||
usage:
|
usage:
|
||||||
summary: "Sažetak"
|
summary: "Sažetak"
|
||||||
username: "Nadimak"
|
username: "Nadimak"
|
||||||
ai_persona:
|
ai_agent:
|
||||||
back: "Prethodno"
|
back: "Prethodno"
|
||||||
name: "Ime"
|
name: "Ime"
|
||||||
edit: "Edit"
|
edit: "Edit"
|
||||||
|
@ -55,7 +55,7 @@ ca:
|
|||||||
total_requests: "Total de peticions"
|
total_requests: "Total de peticions"
|
||||||
periods:
|
periods:
|
||||||
last_day: "Últimes 24 hores"
|
last_day: "Últimes 24 hores"
|
||||||
ai_persona:
|
ai_agent:
|
||||||
back: "Enrere"
|
back: "Enrere"
|
||||||
name: "Nom"
|
name: "Nom"
|
||||||
edit: "Edita"
|
edit: "Edita"
|
||||||
@ -100,7 +100,7 @@ ca:
|
|||||||
success: "Èxit!"
|
success: "Èxit!"
|
||||||
providers:
|
providers:
|
||||||
google: "Google"
|
google: "Google"
|
||||||
fake: "Personalitzat"
|
fake: "Agentlitzat"
|
||||||
ai_helper:
|
ai_helper:
|
||||||
context_menu:
|
context_menu:
|
||||||
cancel: "Cancel·la"
|
cancel: "Cancel·la"
|
||||||
@ -126,7 +126,7 @@ ca:
|
|||||||
display_name: "Nom"
|
display_name: "Nom"
|
||||||
providers:
|
providers:
|
||||||
google: "Google"
|
google: "Google"
|
||||||
fake: "Personalitzat"
|
fake: "Agentlitzat"
|
||||||
ai_bot:
|
ai_bot:
|
||||||
debug_ai_modal:
|
debug_ai_modal:
|
||||||
request: "Sol·licita"
|
request: "Sol·licita"
|
||||||
|
@ -58,7 +58,7 @@ cs:
|
|||||||
periods:
|
periods:
|
||||||
last_day: "Posledních 24 hodin"
|
last_day: "Posledních 24 hodin"
|
||||||
custom: "Vlastní…"
|
custom: "Vlastní…"
|
||||||
ai_persona:
|
ai_agent:
|
||||||
back: "Zpět"
|
back: "Zpět"
|
||||||
name: "Jméno"
|
name: "Jméno"
|
||||||
edit: "Upravit"
|
edit: "Upravit"
|
||||||
|
@ -59,7 +59,7 @@ da:
|
|||||||
periods:
|
periods:
|
||||||
last_day: "Seneste 24 timer"
|
last_day: "Seneste 24 timer"
|
||||||
custom: "Tilpasset..."
|
custom: "Tilpasset..."
|
||||||
ai_persona:
|
ai_agent:
|
||||||
back: "Tilbage"
|
back: "Tilbage"
|
||||||
name: "Navn"
|
name: "Navn"
|
||||||
edit: "Rediger"
|
edit: "Rediger"
|
||||||
|
@ -12,8 +12,8 @@ de:
|
|||||||
descriptions:
|
descriptions:
|
||||||
discourse_ai:
|
discourse_ai:
|
||||||
search: "Ermöglicht KI-Suche"
|
search: "Ermöglicht KI-Suche"
|
||||||
stream_completion: "Ermöglicht das Streamen von KI-Persona-Vervollständigungen"
|
stream_completion: "Ermöglicht das Streamen von KI-Agent-Vervollständigungen"
|
||||||
update_personas: "Ermöglicht die Aktualisierung von KI-Personas"
|
update_agents: "Ermöglicht die Aktualisierung von KI-Agents"
|
||||||
site_settings:
|
site_settings:
|
||||||
categories:
|
categories:
|
||||||
discourse_ai: "Discourse-KI"
|
discourse_ai: "Discourse-KI"
|
||||||
@ -102,17 +102,17 @@ de:
|
|||||||
tool:
|
tool:
|
||||||
label: "Werkzeug"
|
label: "Werkzeug"
|
||||||
description: "Werkzeug für die Triage (das Werkzeug darf keine Parameter definiert haben)"
|
description: "Werkzeug für die Triage (das Werkzeug darf keine Parameter definiert haben)"
|
||||||
llm_persona_triage:
|
llm_agent_triage:
|
||||||
fields:
|
fields:
|
||||||
persona:
|
agent:
|
||||||
label: "Persona"
|
label: "Agent"
|
||||||
description: "KI-Persona, die für die Triage verwendet werden soll (Standard-LLM und -Benutzer müssen eingestellt sein)"
|
description: "KI-Agent, die für die Triage verwendet werden soll (Standard-LLM und -Benutzer müssen eingestellt sein)"
|
||||||
whisper:
|
whisper:
|
||||||
label: "Als Flüstern antworten"
|
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:
|
silent_mode:
|
||||||
label: "Stiller Modus"
|
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:
|
llm_triage:
|
||||||
fields:
|
fields:
|
||||||
system_prompt:
|
system_prompt:
|
||||||
@ -148,15 +148,15 @@ de:
|
|||||||
flag_post:
|
flag_post:
|
||||||
label: "Beitrag melden"
|
label: "Beitrag melden"
|
||||||
description: "Meldet den Beitrag (entweder als Spam oder zur Überprüfung)"
|
description: "Meldet den Beitrag (entweder als Spam oder zur Überprüfung)"
|
||||||
include_personal_messages:
|
include_agentl_messages:
|
||||||
label: "Persönliche Nachrichten einbeziehen"
|
label: "Persönliche Nachrichten einbeziehen"
|
||||||
description: "Auch persönliche Nachrichten scannen und sortieren"
|
description: "Auch persönliche Nachrichten scannen und sortieren"
|
||||||
whisper:
|
whisper:
|
||||||
label: "Als Flüstern antworten"
|
label: "Als Flüstern antworten"
|
||||||
description: "Ob die Antwort der KI ein Flüstern sein soll"
|
description: "Ob die Antwort der KI ein Flüstern sein soll"
|
||||||
reply_persona:
|
reply_agent:
|
||||||
label: "Antwort Persona"
|
label: "Antwort Agent"
|
||||||
description: "KI-Persona, die für Antworten verwendet werden soll (muss Standard-LLM haben), wird gegenüber vorgefertigten Antworten bevorzugt"
|
description: "KI-Agent, die für Antworten verwendet werden soll (muss Standard-LLM haben), wird gegenüber vorgefertigten Antworten bevorzugt"
|
||||||
model:
|
model:
|
||||||
label: "Modell"
|
label: "Modell"
|
||||||
description: "Für die Triage verwendetes Sprachmodell"
|
description: "Für die Triage verwendetes Sprachmodell"
|
||||||
@ -167,12 +167,12 @@ de:
|
|||||||
title: "KI"
|
title: "KI"
|
||||||
features:
|
features:
|
||||||
short_title: "Funktionen"
|
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"
|
back: "Zurück"
|
||||||
list:
|
list:
|
||||||
header:
|
header:
|
||||||
name: "Name"
|
name: "Name"
|
||||||
persona: "Persona"
|
agent: "Agent"
|
||||||
groups: "Gruppen"
|
groups: "Gruppen"
|
||||||
edit: "Bearbeiten"
|
edit: "Bearbeiten"
|
||||||
set_up: "Einrichten"
|
set_up: "Einrichten"
|
||||||
@ -253,7 +253,7 @@ de:
|
|||||||
last_week: "Letzte Woche"
|
last_week: "Letzte Woche"
|
||||||
last_month: "Letzter Monat"
|
last_month: "Letzter Monat"
|
||||||
custom: "Benutzerdefiniert …"
|
custom: "Benutzerdefiniert …"
|
||||||
ai_persona:
|
ai_agent:
|
||||||
ai_tools: "Tools"
|
ai_tools: "Tools"
|
||||||
tool_strategies:
|
tool_strategies:
|
||||||
all: "Auf alle Antworten anwenden"
|
all: "Auf alle Antworten anwenden"
|
||||||
@ -265,7 +265,7 @@ de:
|
|||||||
edit: "Bearbeiten"
|
edit: "Bearbeiten"
|
||||||
description: "Beschreibung"
|
description: "Beschreibung"
|
||||||
no_llm_selected: "Kein Sprachmodell ausgewählt"
|
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: "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)."
|
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
|
vision_enabled: Sehen aktiviert
|
||||||
@ -278,12 +278,12 @@ de:
|
|||||||
tool_details: Tool-Details anzeigen
|
tool_details: Tool-Details anzeigen
|
||||||
tool_details_help: Zeigt den Endnutzern Details darüber, welche Tools das Sprachmodell ausgelöst hat.
|
tool_details_help: Zeigt den Endnutzern Details darüber, welche Tools das Sprachmodell ausgelöst hat.
|
||||||
mentionable: Erwähnungen zulassen
|
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
|
user: Nutzer
|
||||||
create_user: Benutzer erstellen
|
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: 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: 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.
|
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
|
system_prompt: System-Eingabeaufforderung
|
||||||
@ -291,34 +291,34 @@ de:
|
|||||||
allow_chat_direct_messages: "Chat-Direktnachrichten zulassen"
|
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_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: "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_chat_channel_mentions_help: "Wenn aktiviert, können Benutzer in zulässigen Gruppen diese Agent in Chatkanälen erwähnen."
|
||||||
allow_personal_messages: "Persönliche Nachrichten zulassen"
|
allow_agentl_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_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: "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"
|
force_default_llm: "Immer das Standard-Sprachmodell verwenden"
|
||||||
save: "Speichern"
|
save: "Speichern"
|
||||||
saved: "Persona gespeichert"
|
saved: "Agent gespeichert"
|
||||||
enabled: "Aktiviert?"
|
enabled: "Aktiviert?"
|
||||||
tools: "Aktivierte Tools"
|
tools: "Aktivierte Tools"
|
||||||
forced_tools: "Erzwungene Tools"
|
forced_tools: "Erzwungene Tools"
|
||||||
allowed_groups: "Zulässige Gruppen"
|
allowed_groups: "Zulässige Gruppen"
|
||||||
confirm_delete: "Bist du sicher, dass du diese Persona löschen willst?"
|
confirm_delete: "Bist du sicher, dass du diese Agent löschen willst?"
|
||||||
new: "Neue Persona"
|
new: "Neue Agent"
|
||||||
no_personas: "Du hast noch keine Personas erstellt"
|
no_agents: "Du hast noch keine Agents erstellt"
|
||||||
title: "Personas"
|
title: "Agents"
|
||||||
short_title: "Personas"
|
short_title: "Agents"
|
||||||
delete: "Löschen"
|
delete: "Löschen"
|
||||||
temperature: "Temperatur"
|
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)"
|
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: "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)"
|
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: "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"
|
tool_options: "Tool-Optionen"
|
||||||
rag_conversation_chunks: "Unterhaltungs-Chunks durchsuchen"
|
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."
|
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:
|
response_format:
|
||||||
title: "JSON-Antwortformat"
|
title: "JSON-Antwortformat"
|
||||||
no_format: "Kein JSON-Format angegeben"
|
no_format: "Kein JSON-Format angegeben"
|
||||||
@ -338,7 +338,7 @@ de:
|
|||||||
enabled: "KI-Bot?"
|
enabled: "KI-Bot?"
|
||||||
ai_bot:
|
ai_bot:
|
||||||
title: "KI-Bot-Optionen"
|
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:
|
rag:
|
||||||
title: "RAG"
|
title: "RAG"
|
||||||
options:
|
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)."
|
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"
|
new: "Neues Tool"
|
||||||
tool_name: "Werkzeugname"
|
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: "Beschreibung"
|
||||||
description_help: "Eine klare Beschreibung des Zwecks des Tools für das Sprachmodell"
|
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."
|
subheader_description: "Tools erweitern die Fähigkeiten von KI-Bots mit benutzerdefinierten JavaScript-Funktionen."
|
||||||
@ -445,7 +445,7 @@ de:
|
|||||||
ai_bot: "KI-Bot"
|
ai_bot: "KI-Bot"
|
||||||
ai_helper: "Helfer"
|
ai_helper: "Helfer"
|
||||||
ai_helper_image_caption: "Bildbeschriftungen"
|
ai_helper_image_caption: "Bildbeschriftungen"
|
||||||
ai_persona: "Persona (%{persona})"
|
ai_agent: "Agent (%{agent})"
|
||||||
ai_summarization: "Zusammenfassen"
|
ai_summarization: "Zusammenfassen"
|
||||||
ai_embeddings_semantic_search: "KI-Suche"
|
ai_embeddings_semantic_search: "KI-Suche"
|
||||||
ai_spam: "Spam"
|
ai_spam: "Spam"
|
||||||
@ -658,7 +658,7 @@ de:
|
|||||||
collapse_view_label: "Vollbild verlassen (ESC- oder Zurück-Taste)"
|
collapse_view_label: "Vollbild verlassen (ESC- oder Zurück-Taste)"
|
||||||
click_to_run_label: "Artefakt ausführen"
|
click_to_run_label: "Artefakt ausführen"
|
||||||
ai_bot:
|
ai_bot:
|
||||||
persona: "Persona"
|
agent: "Agent"
|
||||||
llm: "Modell"
|
llm: "Modell"
|
||||||
pm_warning: "KI-Chatbot-Nachrichten werden regelmäßig von Moderatoren überwacht."
|
pm_warning: "KI-Chatbot-Nachrichten werden regelmäßig von Moderatoren überwacht."
|
||||||
cancel_streaming: "Antwort abbrechen"
|
cancel_streaming: "Antwort abbrechen"
|
||||||
|
@ -57,7 +57,7 @@ el:
|
|||||||
periods:
|
periods:
|
||||||
last_day: "Τελευταίες 24 ώρες"
|
last_day: "Τελευταίες 24 ώρες"
|
||||||
custom: "Προσαρμοσμένο..."
|
custom: "Προσαρμοσμένο..."
|
||||||
ai_persona:
|
ai_agent:
|
||||||
back: "Πίσω"
|
back: "Πίσω"
|
||||||
name: "Όνομα"
|
name: "Όνομα"
|
||||||
edit: "Επεξεργασία"
|
edit: "Επεξεργασία"
|
||||||
|
@ -6,8 +6,8 @@ en:
|
|||||||
descriptions:
|
descriptions:
|
||||||
discourse_ai:
|
discourse_ai:
|
||||||
search: "Allows AI search"
|
search: "Allows AI search"
|
||||||
stream_completion: "Allows streaming AI persona completions"
|
stream_completion: "Allows streaming AI agent completions"
|
||||||
update_personas: "Allows updating AI personas"
|
update_agents: "Allows updating AI agents"
|
||||||
|
|
||||||
site_settings:
|
site_settings:
|
||||||
categories:
|
categories:
|
||||||
@ -100,17 +100,17 @@ en:
|
|||||||
label: "Tool"
|
label: "Tool"
|
||||||
description: "Tool to use for triage (tool must have no parameters defined)"
|
description: "Tool to use for triage (tool must have no parameters defined)"
|
||||||
|
|
||||||
llm_persona_triage:
|
llm_agent_triage:
|
||||||
fields:
|
fields:
|
||||||
persona:
|
agent:
|
||||||
label: "Persona"
|
label: "Agent"
|
||||||
description: "AI Persona to use for triage (must have default LLM and User set)"
|
description: "AI Agent to use for triage (must have default LLM and User set)"
|
||||||
whisper:
|
whisper:
|
||||||
label: "Reply as 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:
|
silent_mode:
|
||||||
label: "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:
|
llm_triage:
|
||||||
fields:
|
fields:
|
||||||
system_prompt:
|
system_prompt:
|
||||||
@ -146,15 +146,15 @@ en:
|
|||||||
flag_post:
|
flag_post:
|
||||||
label: "Flag post"
|
label: "Flag post"
|
||||||
description: "Flags post (either as spam or for review)"
|
description: "Flags post (either as spam or for review)"
|
||||||
include_personal_messages:
|
include_agentl_messages:
|
||||||
label: "Include personal messages"
|
label: "Include agentl messages"
|
||||||
description: "Also scan and triage personal messages"
|
description: "Also scan and triage agentl messages"
|
||||||
whisper:
|
whisper:
|
||||||
label: "Reply as Whisper"
|
label: "Reply as Whisper"
|
||||||
description: "Whether the AI's response should be a whisper"
|
description: "Whether the AI's response should be a whisper"
|
||||||
reply_persona:
|
reply_agent:
|
||||||
label: "Reply Persona"
|
label: "Reply Agent"
|
||||||
description: "AI Persona to use for replies (must have default LLM), will be prioritized over canned reply"
|
description: "AI Agent to use for replies (must have default LLM), will be prioritized over canned reply"
|
||||||
model:
|
model:
|
||||||
label: "Model"
|
label: "Model"
|
||||||
description: "Language model used for triage"
|
description: "Language model used for triage"
|
||||||
@ -167,12 +167,12 @@ en:
|
|||||||
|
|
||||||
features:
|
features:
|
||||||
short_title: "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"
|
back: "Back"
|
||||||
list:
|
list:
|
||||||
header:
|
header:
|
||||||
name: "Name"
|
name: "Name"
|
||||||
persona: "Persona"
|
agent: "Agent"
|
||||||
groups: "Groups"
|
groups: "Groups"
|
||||||
edit: "Edit"
|
edit: "Edit"
|
||||||
set_up: "Set up"
|
set_up: "Set up"
|
||||||
@ -257,7 +257,7 @@ en:
|
|||||||
last_month: "Last month"
|
last_month: "Last month"
|
||||||
custom: "Custom..."
|
custom: "Custom..."
|
||||||
|
|
||||||
ai_persona:
|
ai_agent:
|
||||||
ai_tools: "Tools"
|
ai_tools: "Tools"
|
||||||
tool_strategies:
|
tool_strategies:
|
||||||
all: "Apply to all replies"
|
all: "Apply to all replies"
|
||||||
@ -269,7 +269,7 @@ en:
|
|||||||
edit: "Edit"
|
edit: "Edit"
|
||||||
description: "Description"
|
description: "Description"
|
||||||
no_llm_selected: "No language model selected"
|
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: "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)"
|
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
|
vision_enabled: Vision enabled
|
||||||
@ -282,47 +282,47 @@ en:
|
|||||||
tool_details: Show tool details
|
tool_details: Show tool details
|
||||||
tool_details_help: Will show end users details on which tools the language model has triggered.
|
tool_details_help: Will show end users details on which tools the language model has triggered.
|
||||||
mentionable: Allow mentions
|
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
|
user: User
|
||||||
create_user: Create 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: 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: 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.
|
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
|
system_prompt: System prompt
|
||||||
forced_tool_strategy: Forced tool strategy
|
forced_tool_strategy: Forced tool strategy
|
||||||
allow_chat_direct_messages: "Allow chat direct messages"
|
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: "Allow chat channel mentions"
|
||||||
allow_chat_channel_mentions_help: "If enabled, users in allowed groups can mention this persona in chat channels."
|
allow_chat_channel_mentions_help: "If enabled, users in allowed groups can mention this agent in chat channels."
|
||||||
allow_personal_messages: "Allow personal messages"
|
allow_agentl_messages: "Allow agentl messages"
|
||||||
allow_personal_messages_help: "If enabled, users in allowed groups can send personal messages to this persona."
|
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: "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"
|
force_default_llm: "Always use default language model"
|
||||||
save: "Save"
|
save: "Save"
|
||||||
saved: "Persona saved"
|
saved: "Agent saved"
|
||||||
enabled: "Enabled?"
|
enabled: "Enabled?"
|
||||||
tools: "Enabled tools"
|
tools: "Enabled tools"
|
||||||
forced_tools: "Forced tools"
|
forced_tools: "Forced tools"
|
||||||
allowed_groups: "Allowed groups"
|
allowed_groups: "Allowed groups"
|
||||||
confirm_delete: "Are you sure you want to delete this persona?"
|
confirm_delete: "Are you sure you want to delete this agent?"
|
||||||
new: "New persona"
|
new: "New agent"
|
||||||
no_personas: "You have not created any personas yet"
|
no_agents: "You have not created any agents yet"
|
||||||
title: "Personas"
|
title: "Agents"
|
||||||
short_title: "Personas"
|
short_title: "Agents"
|
||||||
delete: "Delete"
|
delete: "Delete"
|
||||||
temperature: "Temperature"
|
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)"
|
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: "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)"
|
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: "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"
|
tool_options: "Tool options"
|
||||||
rag_conversation_chunks: "Search conversation chunks"
|
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."
|
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:
|
response_format:
|
||||||
title: "JSON response format"
|
title: "JSON response format"
|
||||||
no_format: "No JSON format specified"
|
no_format: "No JSON format specified"
|
||||||
@ -344,7 +344,7 @@ en:
|
|||||||
|
|
||||||
ai_bot:
|
ai_bot:
|
||||||
title: "AI bot options"
|
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:
|
rag:
|
||||||
title: "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)"
|
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"
|
new: "New tool"
|
||||||
tool_name: "Tool Name"
|
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: "Description"
|
||||||
description_help: "A clear description of the tool's purpose for the language model"
|
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."
|
subheader_description: "Tools extend the capabilities of AI bots with user-defined JavaScript functions."
|
||||||
@ -455,7 +455,7 @@ en:
|
|||||||
ai_bot: "AI bot"
|
ai_bot: "AI bot"
|
||||||
ai_helper: "Helper"
|
ai_helper: "Helper"
|
||||||
ai_helper_image_caption: "Image caption"
|
ai_helper_image_caption: "Image caption"
|
||||||
ai_persona: "Persona (%{persona})"
|
ai_agent: "Agent (%{agent})"
|
||||||
ai_summarization: "Summarize"
|
ai_summarization: "Summarize"
|
||||||
ai_embeddings_semantic_search: "AI search"
|
ai_embeddings_semantic_search: "AI search"
|
||||||
ai_spam: "Spam"
|
ai_spam: "Spam"
|
||||||
@ -681,7 +681,7 @@ en:
|
|||||||
click_to_run_label: "Run Artifact"
|
click_to_run_label: "Run Artifact"
|
||||||
|
|
||||||
ai_bot:
|
ai_bot:
|
||||||
persona: "Persona"
|
agent: "Agent"
|
||||||
llm: "Model"
|
llm: "Model"
|
||||||
pm_warning: "AI chatbot messages are monitored regularly by moderators."
|
pm_warning: "AI chatbot messages are monitored regularly by moderators."
|
||||||
cancel_streaming: "Stop reply"
|
cancel_streaming: "Stop reply"
|
||||||
|
@ -15,7 +15,7 @@ en_GB:
|
|||||||
discourse_ai:
|
discourse_ai:
|
||||||
usage:
|
usage:
|
||||||
summary: "Summary"
|
summary: "Summary"
|
||||||
ai_persona:
|
ai_agent:
|
||||||
description: "Description"
|
description: "Description"
|
||||||
tools:
|
tools:
|
||||||
description: "Description"
|
description: "Description"
|
||||||
|
@ -12,7 +12,7 @@ es:
|
|||||||
descriptions:
|
descriptions:
|
||||||
discourse_ai:
|
discourse_ai:
|
||||||
search: "Permite la búsqueda de IA"
|
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:
|
site_settings:
|
||||||
categories:
|
categories:
|
||||||
discourse_ai: "Discourse AI"
|
discourse_ai: "Discourse AI"
|
||||||
@ -128,9 +128,9 @@ es:
|
|||||||
flag_post:
|
flag_post:
|
||||||
label: "Denunciar publicación"
|
label: "Denunciar publicación"
|
||||||
description: "Denuncia la publicación (como spam o para revisión)"
|
description: "Denuncia la publicación (como spam o para revisión)"
|
||||||
include_personal_messages:
|
include_agentl_messages:
|
||||||
label: "Incluir mensajes personales"
|
label: "Incluir mensajes agentles"
|
||||||
description: "También escanea y clasifica los mensajes personales"
|
description: "También escanea y clasifica los mensajes agentles"
|
||||||
model:
|
model:
|
||||||
label: "Modelo"
|
label: "Modelo"
|
||||||
description: "Modelo lingüístico utilizado para el triaje"
|
description: "Modelo lingüístico utilizado para el triaje"
|
||||||
@ -152,8 +152,8 @@ es:
|
|||||||
short_title: "Spam"
|
short_title: "Spam"
|
||||||
title: "Configurar el manejo de correo no deseado"
|
title: "Configurar el manejo de correo no deseado"
|
||||||
select_llm: "Seleccionar LLM"
|
select_llm: "Seleccionar LLM"
|
||||||
custom_instructions: "Instrucciones personalizadas"
|
custom_instructions: "Instrucciones agentlizadas"
|
||||||
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_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"
|
last_seven_days: "Últimos 7 días"
|
||||||
scanned_count: "Publicaciones escaneadas"
|
scanned_count: "Publicaciones escaneadas"
|
||||||
false_positives: "Denunciado incorrectamente"
|
false_positives: "Denunciado incorrectamente"
|
||||||
@ -218,8 +218,8 @@ es:
|
|||||||
last_day: "Últimas 24 horas"
|
last_day: "Últimas 24 horas"
|
||||||
last_week: "Última semana"
|
last_week: "Última semana"
|
||||||
last_month: "Último mes"
|
last_month: "Último mes"
|
||||||
custom: "Personalizado..."
|
custom: "Agentlizado..."
|
||||||
ai_persona:
|
ai_agent:
|
||||||
ai_tools: "Herramientas"
|
ai_tools: "Herramientas"
|
||||||
tool_strategies:
|
tool_strategies:
|
||||||
all: "Aplicar a todas las respuestas"
|
all: "Aplicar a todas las respuestas"
|
||||||
@ -243,47 +243,47 @@ es:
|
|||||||
tool_details: Mostrar detalles de la herramienta
|
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.
|
tool_details_help: Mostrará a los usuarios finales detalles sobre qué herramientas ha activado el modelo de lenguaje.
|
||||||
mentionable: Permitir menciones
|
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
|
user: Usuario
|
||||||
create_user: Crear 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: 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: 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.
|
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
|
system_prompt: Aviso del sistema
|
||||||
forced_tool_strategy: Estrategia de herramienta forzada
|
forced_tool_strategy: Estrategia de herramienta forzada
|
||||||
allow_chat_direct_messages: "Permitir mensajes directos de chat"
|
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: "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_chat_channel_mentions_help: "Si se activa, los usuarios de los grupos permitidos pueden mencionar a esta agent en los canales de chat."
|
||||||
allow_personal_messages: "Permitir mensajes personales"
|
allow_agentl_messages: "Permitir mensajes agentles"
|
||||||
allow_personal_messages_help: "Si se activa, los usuarios de los grupos permitidos pueden enviar mensajes personales a esta persona."
|
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: "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"
|
force_default_llm: "Utilizar siempre el modelo de idioma por defecto"
|
||||||
save: "Guardar"
|
save: "Guardar"
|
||||||
saved: "Persona guardada"
|
saved: "Agent guardada"
|
||||||
enabled: "¿Activado?"
|
enabled: "¿Activado?"
|
||||||
tools: "Herramientas habilitadas"
|
tools: "Herramientas habilitadas"
|
||||||
forced_tools: "Herramientas forzadas"
|
forced_tools: "Herramientas forzadas"
|
||||||
allowed_groups: "Grupos permitidos"
|
allowed_groups: "Grupos permitidos"
|
||||||
confirm_delete: "¿Seguro que quieres eliminar esta persona?"
|
confirm_delete: "¿Seguro que quieres eliminar esta agent?"
|
||||||
new: "Nueva persona"
|
new: "Nueva agent"
|
||||||
no_personas: "Aún no has creado ninguna persona"
|
no_agents: "Aún no has creado ninguna agent"
|
||||||
title: "Personas"
|
title: "Agents"
|
||||||
short_title: "Personas"
|
short_title: "Agents"
|
||||||
delete: "Eliminar"
|
delete: "Eliminar"
|
||||||
temperature: "Temperatura"
|
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)"
|
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: "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)"
|
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: "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"
|
tool_options: "Opciones de herramientas"
|
||||||
rag_conversation_chunks: "Buscar fragmentos de conversación"
|
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."
|
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:
|
response_format:
|
||||||
open_modal: "Editar"
|
open_modal: "Editar"
|
||||||
modal:
|
modal:
|
||||||
@ -369,14 +369,14 @@ es:
|
|||||||
six_hours: "6 horas"
|
six_hours: "6 horas"
|
||||||
day: "24 horas"
|
day: "24 horas"
|
||||||
week: "7 días"
|
week: "7 días"
|
||||||
custom: "Personalizado..."
|
custom: "Agentlizado..."
|
||||||
hours: "horas"
|
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_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."
|
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:
|
usage:
|
||||||
ai_bot: "Bot de IA"
|
ai_bot: "Bot de IA"
|
||||||
ai_helper: "Ayudante"
|
ai_helper: "Ayudante"
|
||||||
ai_persona: "Persona (%{persona})"
|
ai_agent: "Agent (%{agent})"
|
||||||
ai_summarization: "Resumir"
|
ai_summarization: "Resumir"
|
||||||
ai_embeddings_semantic_search: "Búsqueda de IA"
|
ai_embeddings_semantic_search: "Búsqueda de IA"
|
||||||
ai_spam: "Spam"
|
ai_spam: "Spam"
|
||||||
@ -429,7 +429,7 @@ es:
|
|||||||
samba_nova: "SambaNova"
|
samba_nova: "SambaNova"
|
||||||
mistral: "Mistral"
|
mistral: "Mistral"
|
||||||
open_router: "OpenRouter"
|
open_router: "OpenRouter"
|
||||||
fake: "Personalizado"
|
fake: "Agentlizado"
|
||||||
provider_fields:
|
provider_fields:
|
||||||
access_key_id: "ID de la clave de acceso a AWS Bedrock"
|
access_key_id: "ID de la clave de acceso a AWS Bedrock"
|
||||||
region: "Región de AWS Bedrock"
|
region: "Región de AWS Bedrock"
|
||||||
@ -463,8 +463,8 @@ es:
|
|||||||
discard: "Descartar"
|
discard: "Descartar"
|
||||||
changes: "Ediciones sugeridas"
|
changes: "Ediciones sugeridas"
|
||||||
custom_prompt:
|
custom_prompt:
|
||||||
title: "Instruccón personalizada"
|
title: "Instruccón agentlizada"
|
||||||
placeholder: "Introduzca un aviso personalizado..."
|
placeholder: "Introduzca un aviso agentlizado..."
|
||||||
submit: "Enviar instrucción"
|
submit: "Enviar instrucción"
|
||||||
translate_prompt: "Traducir a %{language}"
|
translate_prompt: "Traducir a %{language}"
|
||||||
post_options_menu:
|
post_options_menu:
|
||||||
@ -542,7 +542,7 @@ es:
|
|||||||
google: "Google"
|
google: "Google"
|
||||||
cloudflare: "Cloudflare"
|
cloudflare: "Cloudflare"
|
||||||
CDCK: "CDCK"
|
CDCK: "CDCK"
|
||||||
fake: "Personalizado"
|
fake: "Agentlizado"
|
||||||
provider_fields:
|
provider_fields:
|
||||||
model_name: "Nombre del modelo"
|
model_name: "Nombre del modelo"
|
||||||
semantic_search: "Temas (semánticos)"
|
semantic_search: "Temas (semánticos)"
|
||||||
|
@ -52,7 +52,7 @@ et:
|
|||||||
summary: "Kokkuvõte"
|
summary: "Kokkuvõte"
|
||||||
username: "Kasutajanimi"
|
username: "Kasutajanimi"
|
||||||
total_requests: "Kokku päringuid"
|
total_requests: "Kokku päringuid"
|
||||||
ai_persona:
|
ai_agent:
|
||||||
back: "Tagasi"
|
back: "Tagasi"
|
||||||
name: "Nimi"
|
name: "Nimi"
|
||||||
edit: "Muuda"
|
edit: "Muuda"
|
||||||
|
@ -83,7 +83,7 @@ fa_IR:
|
|||||||
periods:
|
periods:
|
||||||
last_day: "۲۴ ساعت گذشته"
|
last_day: "۲۴ ساعت گذشته"
|
||||||
custom: "سفارشی..."
|
custom: "سفارشی..."
|
||||||
ai_persona:
|
ai_agent:
|
||||||
back: "بازگشت"
|
back: "بازگشت"
|
||||||
name: "نام"
|
name: "نام"
|
||||||
edit: "ویرایش"
|
edit: "ویرایش"
|
||||||
|
@ -128,7 +128,7 @@ fi:
|
|||||||
flag_post:
|
flag_post:
|
||||||
label: "Liputa viesti"
|
label: "Liputa viesti"
|
||||||
description: "Liputtaa viestin (joko roskapostiksi tai käsiteltäväksi)"
|
description: "Liputtaa viestin (joko roskapostiksi tai käsiteltäväksi)"
|
||||||
include_personal_messages:
|
include_agentl_messages:
|
||||||
label: "Sisällytä yksityisviestit"
|
label: "Sisällytä yksityisviestit"
|
||||||
description: "Skannaa ja luokittele myös yksityisviestit"
|
description: "Skannaa ja luokittele myös yksityisviestit"
|
||||||
model:
|
model:
|
||||||
@ -219,7 +219,7 @@ fi:
|
|||||||
last_week: "Viime viikko"
|
last_week: "Viime viikko"
|
||||||
last_month: "Viime kuukausi"
|
last_month: "Viime kuukausi"
|
||||||
custom: "Mukautettu..."
|
custom: "Mukautettu..."
|
||||||
ai_persona:
|
ai_agent:
|
||||||
ai_tools: "Työkalut"
|
ai_tools: "Työkalut"
|
||||||
tool_strategies:
|
tool_strategies:
|
||||||
all: "Käytä kaikkiin vastauksiin"
|
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_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: "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_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_agentl_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_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: "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."
|
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"
|
force_default_llm: "Käytä aina oletuskielimallia"
|
||||||
@ -270,7 +270,7 @@ fi:
|
|||||||
allowed_groups: "Sallitut ryhmät"
|
allowed_groups: "Sallitut ryhmät"
|
||||||
confirm_delete: "Oletko varma, että haluat poistaa tämän persoonan?"
|
confirm_delete: "Oletko varma, että haluat poistaa tämän persoonan?"
|
||||||
new: "Uusi persoona"
|
new: "Uusi persoona"
|
||||||
no_personas: "Et ole vielä luonut persoonia"
|
no_agents: "Et ole vielä luonut persoonia"
|
||||||
title: "Persoonat"
|
title: "Persoonat"
|
||||||
short_title: "Persoonat"
|
short_title: "Persoonat"
|
||||||
delete: "Poista"
|
delete: "Poista"
|
||||||
@ -283,7 +283,7 @@ fi:
|
|||||||
tool_options: "Työkaluasetukset"
|
tool_options: "Työkaluasetukset"
|
||||||
rag_conversation_chunks: "Hakukeskustelulohkot"
|
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."
|
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:
|
response_format:
|
||||||
open_modal: "Muokkaa"
|
open_modal: "Muokkaa"
|
||||||
modal:
|
modal:
|
||||||
@ -376,7 +376,7 @@ fi:
|
|||||||
usage:
|
usage:
|
||||||
ai_bot: "Tekoälyrobotti"
|
ai_bot: "Tekoälyrobotti"
|
||||||
ai_helper: "Apuri"
|
ai_helper: "Apuri"
|
||||||
ai_persona: "Persoona (%{persona})"
|
ai_agent: "Persoona (%{agent})"
|
||||||
ai_summarization: "Tee yhteenveto"
|
ai_summarization: "Tee yhteenveto"
|
||||||
ai_embeddings_semantic_search: "Tekoälyhaku"
|
ai_embeddings_semantic_search: "Tekoälyhaku"
|
||||||
ai_spam: "Roskaposti"
|
ai_spam: "Roskaposti"
|
||||||
|
@ -128,7 +128,7 @@ fr:
|
|||||||
flag_post:
|
flag_post:
|
||||||
label: "Signaler cette publication"
|
label: "Signaler cette publication"
|
||||||
description: "Signale la publication (soit comme spam ou pour examen)"
|
description: "Signale la publication (soit comme spam ou pour examen)"
|
||||||
include_personal_messages:
|
include_agentl_messages:
|
||||||
label: "Inclure les messages personnels"
|
label: "Inclure les messages personnels"
|
||||||
description: "Analysez et triez également les messages personnels"
|
description: "Analysez et triez également les messages personnels"
|
||||||
model:
|
model:
|
||||||
@ -219,7 +219,7 @@ fr:
|
|||||||
last_week: "La semaine dernière"
|
last_week: "La semaine dernière"
|
||||||
last_month: "Le mois dernier"
|
last_month: "Le mois dernier"
|
||||||
custom: "Personnalisé…"
|
custom: "Personnalisé…"
|
||||||
ai_persona:
|
ai_agent:
|
||||||
ai_tools: "Outils"
|
ai_tools: "Outils"
|
||||||
tool_strategies:
|
tool_strategies:
|
||||||
all: "Appliquer à toutes les réponses"
|
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_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: "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_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_agentl_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_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: "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."
|
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"
|
force_default_llm: "Toujours utiliser le modèle linguistique par défaut"
|
||||||
@ -270,7 +270,7 @@ fr:
|
|||||||
allowed_groups: "Groupes autorisés"
|
allowed_groups: "Groupes autorisés"
|
||||||
confirm_delete: "Voulez-vous vraiment supprimer ce personnage ?"
|
confirm_delete: "Voulez-vous vraiment supprimer ce personnage ?"
|
||||||
new: "Nouveau 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"
|
title: "Personnages"
|
||||||
short_title: "Personnages"
|
short_title: "Personnages"
|
||||||
delete: "Supprimer"
|
delete: "Supprimer"
|
||||||
@ -283,7 +283,7 @@ fr:
|
|||||||
tool_options: "Options de l'outil"
|
tool_options: "Options de l'outil"
|
||||||
rag_conversation_chunks: "Rechercher des morceaux de conversation"
|
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."
|
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:
|
response_format:
|
||||||
open_modal: "Modifier"
|
open_modal: "Modifier"
|
||||||
modal:
|
modal:
|
||||||
@ -376,7 +376,7 @@ fr:
|
|||||||
usage:
|
usage:
|
||||||
ai_bot: "Robot IA"
|
ai_bot: "Robot IA"
|
||||||
ai_helper: "Assistant"
|
ai_helper: "Assistant"
|
||||||
ai_persona: "Personnage (%{persona})"
|
ai_agent: "Personnage (%{agent})"
|
||||||
ai_summarization: "Résumer"
|
ai_summarization: "Résumer"
|
||||||
ai_embeddings_semantic_search: "Recherche IA"
|
ai_embeddings_semantic_search: "Recherche IA"
|
||||||
ai_spam: "Spam"
|
ai_spam: "Spam"
|
||||||
|
@ -55,8 +55,8 @@ gl:
|
|||||||
username: "Nome de usuario"
|
username: "Nome de usuario"
|
||||||
total_requests: "Solicitudes totais"
|
total_requests: "Solicitudes totais"
|
||||||
periods:
|
periods:
|
||||||
custom: "Personalizar..."
|
custom: "Agentlizar..."
|
||||||
ai_persona:
|
ai_agent:
|
||||||
back: "Volver"
|
back: "Volver"
|
||||||
name: "Nome"
|
name: "Nome"
|
||||||
edit: "Editar"
|
edit: "Editar"
|
||||||
@ -97,7 +97,7 @@ gl:
|
|||||||
hour: "1 hora"
|
hour: "1 hora"
|
||||||
six_hours: "6 horas"
|
six_hours: "6 horas"
|
||||||
day: "24 horas"
|
day: "24 horas"
|
||||||
custom: "Personalizar..."
|
custom: "Agentlizar..."
|
||||||
hours: "horas"
|
hours: "horas"
|
||||||
usage:
|
usage:
|
||||||
ai_spam: "Lixo"
|
ai_spam: "Lixo"
|
||||||
@ -107,7 +107,7 @@ gl:
|
|||||||
success: "Feito!"
|
success: "Feito!"
|
||||||
providers:
|
providers:
|
||||||
google: "Google"
|
google: "Google"
|
||||||
fake: "Personalizado"
|
fake: "Agentlizado"
|
||||||
ai_helper:
|
ai_helper:
|
||||||
context_menu:
|
context_menu:
|
||||||
cancel: "Cancelar"
|
cancel: "Cancelar"
|
||||||
@ -133,7 +133,7 @@ gl:
|
|||||||
display_name: "Nome"
|
display_name: "Nome"
|
||||||
providers:
|
providers:
|
||||||
google: "Google"
|
google: "Google"
|
||||||
fake: "Personalizado"
|
fake: "Agentlizado"
|
||||||
ai_bot:
|
ai_bot:
|
||||||
debug_ai_modal:
|
debug_ai_modal:
|
||||||
request: "Petición"
|
request: "Petición"
|
||||||
|
@ -13,7 +13,7 @@ he:
|
|||||||
discourse_ai:
|
discourse_ai:
|
||||||
search: "מאפשר חיפוש בינה מלאכותית"
|
search: "מאפשר חיפוש בינה מלאכותית"
|
||||||
stream_completion: "מאפשר הזרמת השלמות דמות בינה מלאכותית"
|
stream_completion: "מאפשר הזרמת השלמות דמות בינה מלאכותית"
|
||||||
update_personas: "מאפשר לעדכן דמויות בינה מלאכותית"
|
update_agents: "מאפשר לעדכן דמויות בינה מלאכותית"
|
||||||
site_settings:
|
site_settings:
|
||||||
categories:
|
categories:
|
||||||
discourse_ai: "בינה מלאכותית ב־Discourse"
|
discourse_ai: "בינה מלאכותית ב־Discourse"
|
||||||
@ -100,9 +100,9 @@ he:
|
|||||||
label: "מודל"
|
label: "מודל"
|
||||||
tool:
|
tool:
|
||||||
label: "כלי"
|
label: "כלי"
|
||||||
llm_persona_triage:
|
llm_agent_triage:
|
||||||
fields:
|
fields:
|
||||||
persona:
|
agent:
|
||||||
label: "דמות"
|
label: "דמות"
|
||||||
silent_mode:
|
silent_mode:
|
||||||
label: "מצב שקט"
|
label: "מצב שקט"
|
||||||
@ -141,10 +141,10 @@ he:
|
|||||||
flag_post:
|
flag_post:
|
||||||
label: "סימון פוסט"
|
label: "סימון פוסט"
|
||||||
description: "סימון פוסט (או כספאם או לסקירה)"
|
description: "סימון פוסט (או כספאם או לסקירה)"
|
||||||
include_personal_messages:
|
include_agentl_messages:
|
||||||
label: "כולל הודעות פרטיות"
|
label: "כולל הודעות פרטיות"
|
||||||
description: "לסרוק ולאמת הודעות אישיות"
|
description: "לסרוק ולאמת הודעות אישיות"
|
||||||
reply_persona:
|
reply_agent:
|
||||||
label: "דמות לתגובה"
|
label: "דמות לתגובה"
|
||||||
model:
|
model:
|
||||||
label: "מודל"
|
label: "מודל"
|
||||||
@ -161,7 +161,7 @@ he:
|
|||||||
list:
|
list:
|
||||||
header:
|
header:
|
||||||
name: "שם"
|
name: "שם"
|
||||||
persona: "דמות"
|
agent: "דמות"
|
||||||
groups: "קבוצות"
|
groups: "קבוצות"
|
||||||
edit: "עריכה"
|
edit: "עריכה"
|
||||||
set_up: "הגדרה"
|
set_up: "הגדרה"
|
||||||
@ -234,7 +234,7 @@ he:
|
|||||||
last_week: "בשבוע שעבר"
|
last_week: "בשבוע שעבר"
|
||||||
last_month: "בחודש שעבר"
|
last_month: "בחודש שעבר"
|
||||||
custom: "התאמה אישית…"
|
custom: "התאמה אישית…"
|
||||||
ai_persona:
|
ai_agent:
|
||||||
ai_tools: "כלים"
|
ai_tools: "כלים"
|
||||||
tool_strategies:
|
tool_strategies:
|
||||||
all: "החלה על כל התגובות"
|
all: "החלה על כל התגובות"
|
||||||
@ -275,8 +275,8 @@ he:
|
|||||||
allow_chat_direct_messages_help: "אם האפשרות פעילה, משתמשים בקבוצות המורשות יכולים לשלוח הודעות ישירות לדמות הזאת."
|
allow_chat_direct_messages_help: "אם האפשרות פעילה, משתמשים בקבוצות המורשות יכולים לשלוח הודעות ישירות לדמות הזאת."
|
||||||
allow_chat_channel_mentions: "לאפשר אזכורים בערוצי צ׳אט"
|
allow_chat_channel_mentions: "לאפשר אזכורים בערוצי צ׳אט"
|
||||||
allow_chat_channel_mentions_help: "אם האפשרות פעילה, משתמשים בקבוצות המורשות יכולים לאזכר את הדמות הזאת בערוצי צ׳אט."
|
allow_chat_channel_mentions_help: "אם האפשרות פעילה, משתמשים בקבוצות המורשות יכולים לאזכר את הדמות הזאת בערוצי צ׳אט."
|
||||||
allow_personal_messages: "לאפשר הודעות פרטיות"
|
allow_agentl_messages: "לאפשר הודעות פרטיות"
|
||||||
allow_personal_messages_help: "אם האפשרות פעילה, משתמשים בקבוצות המורשות יכולים לשלוח הודעות פרטיות לדמות הזאת."
|
allow_agentl_messages_help: "אם האפשרות פעילה, משתמשים בקבוצות המורשות יכולים לשלוח הודעות פרטיות לדמות הזאת."
|
||||||
allow_topic_mentions: "לאפשר אזכורים בנושאים"
|
allow_topic_mentions: "לאפשר אזכורים בנושאים"
|
||||||
allow_topic_mentions_help: "אם האפשרות פעילה, משתמשים בקבוצות המורשות יכולים לאזכר את הדמות הזאת בנושאים."
|
allow_topic_mentions_help: "אם האפשרות פעילה, משתמשים בקבוצות המורשות יכולים לאזכר את הדמות הזאת בנושאים."
|
||||||
force_default_llm: "תמיד להשתמש במודל השפה כברירת מחדל"
|
force_default_llm: "תמיד להשתמש במודל השפה כברירת מחדל"
|
||||||
@ -288,7 +288,7 @@ he:
|
|||||||
allowed_groups: "קבוצות מורשות"
|
allowed_groups: "קבוצות מורשות"
|
||||||
confirm_delete: "למחוק את הדמות?"
|
confirm_delete: "למחוק את הדמות?"
|
||||||
new: "דמות חדשה"
|
new: "דמות חדשה"
|
||||||
no_personas: "לא יצרת דמויות עדיין"
|
no_agents: "לא יצרת דמויות עדיין"
|
||||||
title: "דמויות"
|
title: "דמויות"
|
||||||
short_title: "דמויות"
|
short_title: "דמויות"
|
||||||
delete: "מחיקה"
|
delete: "מחיקה"
|
||||||
@ -301,7 +301,7 @@ he:
|
|||||||
tool_options: "אפשרויות כלי"
|
tool_options: "אפשרויות כלי"
|
||||||
rag_conversation_chunks: "חיפוש בחלקי הדיון"
|
rag_conversation_chunks: "חיפוש בחלקי הדיון"
|
||||||
rag_conversation_chunks_help: "מספר הנתחים לשימוש לחיפושים עם מודל ה־RAG. הגדלה תגדיל את כמות ההקשר בו יכולה להשתמש הבינה המלאכותית."
|
rag_conversation_chunks_help: "מספר הנתחים לשימוש לחיפושים עם מודל ה־RAG. הגדלה תגדיל את כמות ההקשר בו יכולה להשתמש הבינה המלאכותית."
|
||||||
persona_description: "דמויות הן יכולות רבות עוצמה שמאפשר להתאים את התנהגות מנוע הבינה המלאכותית בפורום הדיסקורס שלך. הן מתנהגות כמו ‚הודעות מערכת’ שמנחות את תגובות והתנהלות הבינה המלאכותית, כדי לסייע ליצור חוויית משתמש מותאמת ומקרבת יותר."
|
agent_description: "דמויות הן יכולות רבות עוצמה שמאפשר להתאים את התנהגות מנוע הבינה המלאכותית בפורום הדיסקורס שלך. הן מתנהגות כמו ‚הודעות מערכת’ שמנחות את תגובות והתנהלות הבינה המלאכותית, כדי לסייע ליצור חוויית משתמש מותאמת ומקרבת יותר."
|
||||||
response_format:
|
response_format:
|
||||||
title: "תבנית תגובת JSON"
|
title: "תבנית תגובת JSON"
|
||||||
no_format: "לא צוינה תבנית JSON"
|
no_format: "לא צוינה תבנית JSON"
|
||||||
@ -422,7 +422,7 @@ he:
|
|||||||
ai_bot: "בוט בינה מלאכותית"
|
ai_bot: "בוט בינה מלאכותית"
|
||||||
ai_helper: "מסייע"
|
ai_helper: "מסייע"
|
||||||
ai_helper_image_caption: "כותרת תמונה"
|
ai_helper_image_caption: "כותרת תמונה"
|
||||||
ai_persona: "דמות (%{persona})"
|
ai_agent: "דמות (%{agent})"
|
||||||
ai_summarization: "סיכום"
|
ai_summarization: "סיכום"
|
||||||
ai_embeddings_semantic_search: "חיפוש בינה מלאכותית"
|
ai_embeddings_semantic_search: "חיפוש בינה מלאכותית"
|
||||||
ai_spam: "ספאם"
|
ai_spam: "ספאם"
|
||||||
@ -623,7 +623,7 @@ he:
|
|||||||
collapse_view_label: "יציאה ממסך מלא (כפתורי ESC או Back)"
|
collapse_view_label: "יציאה ממסך מלא (כפתורי ESC או Back)"
|
||||||
click_to_run_label: "הרצת תוצר"
|
click_to_run_label: "הרצת תוצר"
|
||||||
ai_bot:
|
ai_bot:
|
||||||
persona: "דמות"
|
agent: "דמות"
|
||||||
llm: "מודל"
|
llm: "מודל"
|
||||||
pm_warning: "הודעות בוט שיח בינה מלאכותית לא נאכפות דרך קבע על ידי המפקחים."
|
pm_warning: "הודעות בוט שיח בינה מלאכותית לא נאכפות דרך קבע על ידי המפקחים."
|
||||||
cancel_streaming: "עצירת התגובה"
|
cancel_streaming: "עצירת התגובה"
|
||||||
|
@ -58,7 +58,7 @@ hr:
|
|||||||
periods:
|
periods:
|
||||||
last_day: "Posljednja 24 sata"
|
last_day: "Posljednja 24 sata"
|
||||||
custom: "Prilagođeno..."
|
custom: "Prilagođeno..."
|
||||||
ai_persona:
|
ai_agent:
|
||||||
back: "Natrag"
|
back: "Natrag"
|
||||||
name: "Ime"
|
name: "Ime"
|
||||||
edit: "Uredi"
|
edit: "Uredi"
|
||||||
|
@ -59,7 +59,7 @@ hu:
|
|||||||
periods:
|
periods:
|
||||||
last_day: "Elmúlt 24 óra"
|
last_day: "Elmúlt 24 óra"
|
||||||
custom: "Egyéni…"
|
custom: "Egyéni…"
|
||||||
ai_persona:
|
ai_agent:
|
||||||
back: "Vissza"
|
back: "Vissza"
|
||||||
name: "Név"
|
name: "Név"
|
||||||
edit: "Szerkesztés"
|
edit: "Szerkesztés"
|
||||||
|
@ -52,7 +52,7 @@ hy:
|
|||||||
summary: "Ամփոփումը"
|
summary: "Ամփոփումը"
|
||||||
username: "Օգտանուն"
|
username: "Օգտանուն"
|
||||||
total_requests: "Ընդհանուր հարցումներ"
|
total_requests: "Ընդհանուր հարցումներ"
|
||||||
ai_persona:
|
ai_agent:
|
||||||
back: "Ետ"
|
back: "Ետ"
|
||||||
name: "Անուն"
|
name: "Անուն"
|
||||||
edit: "Խմբագրել"
|
edit: "Խմբագրել"
|
||||||
|
@ -116,12 +116,12 @@ id:
|
|||||||
username: "Nama Pengguna"
|
username: "Nama Pengguna"
|
||||||
periods:
|
periods:
|
||||||
last_day: "24 jam terakhir"
|
last_day: "24 jam terakhir"
|
||||||
ai_persona:
|
ai_agent:
|
||||||
back: "Kembali"
|
back: "Kembali"
|
||||||
name: "Nama"
|
name: "Nama"
|
||||||
edit: "Ubah"
|
edit: "Ubah"
|
||||||
description: "Deskripsi"
|
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
|
user: Pengguna
|
||||||
question_consolidator_llm: Model Bahasa untuk Konsolidator Pertanyaan
|
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.
|
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:
|
descriptions:
|
||||||
discourse_ai:
|
discourse_ai:
|
||||||
search: "Consente la ricerca IA"
|
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:
|
site_settings:
|
||||||
categories:
|
categories:
|
||||||
discourse_ai: "Discourse AI"
|
discourse_ai: "Discourse AI"
|
||||||
@ -128,9 +128,9 @@ it:
|
|||||||
flag_post:
|
flag_post:
|
||||||
label: "Segnala messaggio"
|
label: "Segnala messaggio"
|
||||||
description: "Segnala il post (come spam o per la revisione)"
|
description: "Segnala il post (come spam o per la revisione)"
|
||||||
include_personal_messages:
|
include_agentl_messages:
|
||||||
label: "Includi messaggi personali"
|
label: "Includi messaggi agentli"
|
||||||
description: "Esegui anche la scansione e la selezione dei messaggi personali"
|
description: "Esegui anche la scansione e la selezione dei messaggi agentli"
|
||||||
model:
|
model:
|
||||||
label: "Modello"
|
label: "Modello"
|
||||||
description: "Modello linguistico utilizzato per il triage"
|
description: "Modello linguistico utilizzato per il triage"
|
||||||
@ -152,8 +152,8 @@ it:
|
|||||||
short_title: "Spam"
|
short_title: "Spam"
|
||||||
title: "Configura la gestione dello spam"
|
title: "Configura la gestione dello spam"
|
||||||
select_llm: "Seleziona LLM"
|
select_llm: "Seleziona LLM"
|
||||||
custom_instructions: "Istruzioni personalizzate"
|
custom_instructions: "Istruzioni agentlizzate"
|
||||||
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_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"
|
last_seven_days: "Ultimi 7 giorni"
|
||||||
scanned_count: "Messaggi scansionati"
|
scanned_count: "Messaggi scansionati"
|
||||||
false_positives: "Segnalato in modo errato"
|
false_positives: "Segnalato in modo errato"
|
||||||
@ -218,8 +218,8 @@ it:
|
|||||||
last_day: "Ultime 24 ore"
|
last_day: "Ultime 24 ore"
|
||||||
last_week: "Ultima settimana"
|
last_week: "Ultima settimana"
|
||||||
last_month: "Ultimo mese"
|
last_month: "Ultimo mese"
|
||||||
custom: "Personalizza..."
|
custom: "Agentlizza..."
|
||||||
ai_persona:
|
ai_agent:
|
||||||
ai_tools: "Strumenti"
|
ai_tools: "Strumenti"
|
||||||
tool_strategies:
|
tool_strategies:
|
||||||
all: "Applica a tutte le risposte"
|
all: "Applica a tutte le risposte"
|
||||||
@ -243,47 +243,47 @@ it:
|
|||||||
tool_details: Mostra i dettagli dello strumento
|
tool_details: Mostra i dettagli dello strumento
|
||||||
tool_details_help: Mostrerà agli utenti finali i dettagli su quali strumenti ha attivato il modello linguistico.
|
tool_details_help: Mostrerà agli utenti finali i dettagli su quali strumenti ha attivato il modello linguistico.
|
||||||
mentionable: Consenti menzioni
|
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
|
user: Utente
|
||||||
create_user: Crea 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: 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: 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.
|
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
|
system_prompt: Comando di sistema
|
||||||
forced_tool_strategy: Strategia degli strumenti forzati
|
forced_tool_strategy: Strategia degli strumenti forzati
|
||||||
allow_chat_direct_messages: "Consenti messaggi diretti in chat"
|
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: "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_chat_channel_mentions_help: "Se abilitato, gli utenti nei gruppi consentiti possono menzionare questo agentggio nei canali di chat."
|
||||||
allow_personal_messages: "Consenti messaggi personali"
|
allow_agentl_messages: "Consenti messaggi agentli"
|
||||||
allow_personal_messages_help: "Se l'opzione è abilitata, gli utenti nei gruppi consentiti possono inviare messaggi personali a questo personaggio."
|
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: "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"
|
force_default_llm: "Usa sempre il modello linguistico predefinito"
|
||||||
save: "Salva"
|
save: "Salva"
|
||||||
saved: "Persona salvata"
|
saved: "Agent salvata"
|
||||||
enabled: "Abilitato?"
|
enabled: "Abilitato?"
|
||||||
tools: "Strumenti abilitati"
|
tools: "Strumenti abilitati"
|
||||||
forced_tools: "Strumenti forzati"
|
forced_tools: "Strumenti forzati"
|
||||||
allowed_groups: "Gruppi ammessi"
|
allowed_groups: "Gruppi ammessi"
|
||||||
confirm_delete: "Vuoi davvero eliminare questo personaggio?"
|
confirm_delete: "Vuoi davvero eliminare questo agentggio?"
|
||||||
new: "Nuovo personaggio"
|
new: "Nuovo agentggio"
|
||||||
no_personas: "Non hai ancora creato nessun personaggio"
|
no_agents: "Non hai ancora creato nessun agentggio"
|
||||||
title: "Personaggi"
|
title: "Agentggi"
|
||||||
short_title: "Personaggi"
|
short_title: "Agentggi"
|
||||||
delete: "Elimina"
|
delete: "Elimina"
|
||||||
temperature: "Temperatura"
|
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)"
|
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: "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)"
|
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: "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"
|
tool_options: "Opzioni dello strumento"
|
||||||
rag_conversation_chunks: "Cerca blocchi di conversazione"
|
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."
|
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:
|
response_format:
|
||||||
open_modal: "Modifica"
|
open_modal: "Modifica"
|
||||||
modal:
|
modal:
|
||||||
@ -369,14 +369,14 @@ it:
|
|||||||
six_hours: "6 ore"
|
six_hours: "6 ore"
|
||||||
day: "24 ore"
|
day: "24 ore"
|
||||||
week: "7 giorni"
|
week: "7 giorni"
|
||||||
custom: "Personalizza..."
|
custom: "Agentlizza..."
|
||||||
hours: "ore"
|
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_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."
|
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:
|
usage:
|
||||||
ai_bot: "Bot IA"
|
ai_bot: "Bot IA"
|
||||||
ai_helper: "Assistente"
|
ai_helper: "Assistente"
|
||||||
ai_persona: "Personaggio (%{persona})"
|
ai_agent: "Agentggio (%{agent})"
|
||||||
ai_summarization: "Riassumi"
|
ai_summarization: "Riassumi"
|
||||||
ai_embeddings_semantic_search: "Ricerca IA"
|
ai_embeddings_semantic_search: "Ricerca IA"
|
||||||
ai_spam: "Spam"
|
ai_spam: "Spam"
|
||||||
@ -429,7 +429,7 @@ it:
|
|||||||
samba_nova: "SambaNova"
|
samba_nova: "SambaNova"
|
||||||
mistral: "Mistral"
|
mistral: "Mistral"
|
||||||
open_router: "OpenRouter"
|
open_router: "OpenRouter"
|
||||||
fake: "Personalizzato"
|
fake: "Agentlizzato"
|
||||||
provider_fields:
|
provider_fields:
|
||||||
access_key_id: "ID chiave di accesso AWS Bedrock"
|
access_key_id: "ID chiave di accesso AWS Bedrock"
|
||||||
region: "Regione AWS Bedrock"
|
region: "Regione AWS Bedrock"
|
||||||
@ -463,8 +463,8 @@ it:
|
|||||||
discard: "Elimina"
|
discard: "Elimina"
|
||||||
changes: "Modifiche suggerite"
|
changes: "Modifiche suggerite"
|
||||||
custom_prompt:
|
custom_prompt:
|
||||||
title: "Comando personalizzato"
|
title: "Comando agentlizzato"
|
||||||
placeholder: "Inserisci un comando personalizzato..."
|
placeholder: "Inserisci un comando agentlizzato..."
|
||||||
submit: "Invia comando"
|
submit: "Invia comando"
|
||||||
translate_prompt: "Traduci in %{language}"
|
translate_prompt: "Traduci in %{language}"
|
||||||
post_options_menu:
|
post_options_menu:
|
||||||
@ -542,7 +542,7 @@ it:
|
|||||||
google: "Google"
|
google: "Google"
|
||||||
cloudflare: "Cloudflare"
|
cloudflare: "Cloudflare"
|
||||||
CDCK: "CDCK"
|
CDCK: "CDCK"
|
||||||
fake: "Personalizzato"
|
fake: "Agentlizzato"
|
||||||
provider_fields:
|
provider_fields:
|
||||||
model_name: "Nome del modello"
|
model_name: "Nome del modello"
|
||||||
semantic_search: "Argomenti (semantici)"
|
semantic_search: "Argomenti (semantici)"
|
||||||
|
@ -128,7 +128,7 @@ ja:
|
|||||||
flag_post:
|
flag_post:
|
||||||
label: "投稿を通報"
|
label: "投稿を通報"
|
||||||
description: "投稿を通報 (迷惑またはレビュー対象)"
|
description: "投稿を通報 (迷惑またはレビュー対象)"
|
||||||
include_personal_messages:
|
include_agentl_messages:
|
||||||
label: "個人メッセージを含める"
|
label: "個人メッセージを含める"
|
||||||
description: "個人メッセージのスキャンとトリアージも行う"
|
description: "個人メッセージのスキャンとトリアージも行う"
|
||||||
model:
|
model:
|
||||||
@ -218,7 +218,7 @@ ja:
|
|||||||
last_week: "先週"
|
last_week: "先週"
|
||||||
last_month: "先月"
|
last_month: "先月"
|
||||||
custom: "カスタム..."
|
custom: "カスタム..."
|
||||||
ai_persona:
|
ai_agent:
|
||||||
ai_tools: "ツール"
|
ai_tools: "ツール"
|
||||||
tool_strategies:
|
tool_strategies:
|
||||||
all: "すべての返信に適用"
|
all: "すべての返信に適用"
|
||||||
@ -255,8 +255,8 @@ ja:
|
|||||||
allow_chat_direct_messages_help: "有効にすると、許可されているグループのユーザーはこのペルソナにダイレクトメッセージを送信できます。"
|
allow_chat_direct_messages_help: "有効にすると、許可されているグループのユーザーはこのペルソナにダイレクトメッセージを送信できます。"
|
||||||
allow_chat_channel_mentions: "チャットチャンネルのメンションを許可"
|
allow_chat_channel_mentions: "チャットチャンネルのメンションを許可"
|
||||||
allow_chat_channel_mentions_help: "有効にすると、許可されたグループ内のユーザーはチャットチャンネルでこのペルソナをメンションできます。"
|
allow_chat_channel_mentions_help: "有効にすると、許可されたグループ内のユーザーはチャットチャンネルでこのペルソナをメンションできます。"
|
||||||
allow_personal_messages: "個人メッセージを許可"
|
allow_agentl_messages: "個人メッセージを許可"
|
||||||
allow_personal_messages_help: "有効にすると、許可されているグループのユーザーはこのペルソナに個人メッセージを送信できます。"
|
allow_agentl_messages_help: "有効にすると、許可されているグループのユーザーはこのペルソナに個人メッセージを送信できます。"
|
||||||
allow_topic_mentions: "トピックのメンションを許可"
|
allow_topic_mentions: "トピックのメンションを許可"
|
||||||
allow_topic_mentions_help: "有効にすると、許可されたグループ内のユーザーはトピックでこのペルソナをメンションできます。"
|
allow_topic_mentions_help: "有効にすると、許可されたグループ内のユーザーはトピックでこのペルソナをメンションできます。"
|
||||||
force_default_llm: "常にデフォルトの言語モデルを使用する"
|
force_default_llm: "常にデフォルトの言語モデルを使用する"
|
||||||
@ -268,7 +268,7 @@ ja:
|
|||||||
allowed_groups: "許可されたグループ"
|
allowed_groups: "許可されたグループ"
|
||||||
confirm_delete: "このペルソナを削除してもよろしいですか?"
|
confirm_delete: "このペルソナを削除してもよろしいですか?"
|
||||||
new: "新しいペルソナ"
|
new: "新しいペルソナ"
|
||||||
no_personas: "ペルソナをまだ作成していません"
|
no_agents: "ペルソナをまだ作成していません"
|
||||||
title: "ペルソナ"
|
title: "ペルソナ"
|
||||||
short_title: "ペルソナ"
|
short_title: "ペルソナ"
|
||||||
delete: "削除"
|
delete: "削除"
|
||||||
@ -281,7 +281,7 @@ ja:
|
|||||||
tool_options: "ツールのオプション"
|
tool_options: "ツールのオプション"
|
||||||
rag_conversation_chunks: "会話チャンクを検索"
|
rag_conversation_chunks: "会話チャンクを検索"
|
||||||
rag_conversation_chunks_help: "RAG モデル検索に使用するチャンクの数。値を増やすと、AI が使用できるコンテキストの量が増えます。"
|
rag_conversation_chunks_help: "RAG モデル検索に使用するチャンクの数。値を増やすと、AI が使用できるコンテキストの量が増えます。"
|
||||||
persona_description: "ペルソナは、Discourse フォーラムの AI エンジンの動作をカスタマイズできる強力な機能です。AI の応答と対話を誘導する「システムメッセージ」として機能し、よりパーソナライズされた魅力的なユーザーエクスペリエンスの作成に役立ちます。"
|
agent_description: "ペルソナは、Discourse フォーラムの AI エンジンの動作をカスタマイズできる強力な機能です。AI の応答と対話を誘導する「システムメッセージ」として機能し、よりパーソナライズされた魅力的なユーザーエクスペリエンスの作成に役立ちます。"
|
||||||
response_format:
|
response_format:
|
||||||
open_modal: "編集"
|
open_modal: "編集"
|
||||||
modal:
|
modal:
|
||||||
@ -374,7 +374,7 @@ ja:
|
|||||||
usage:
|
usage:
|
||||||
ai_bot: "AI ボット"
|
ai_bot: "AI ボット"
|
||||||
ai_helper: "ヘルパー"
|
ai_helper: "ヘルパー"
|
||||||
ai_persona: "ペルソナ (%{persona})"
|
ai_agent: "ペルソナ (%{agent})"
|
||||||
ai_summarization: "要約"
|
ai_summarization: "要約"
|
||||||
ai_embeddings_semantic_search: "AI 検索"
|
ai_embeddings_semantic_search: "AI 検索"
|
||||||
ai_spam: "迷惑"
|
ai_spam: "迷惑"
|
||||||
|
@ -60,7 +60,7 @@ ko:
|
|||||||
periods:
|
periods:
|
||||||
last_day: "지난 24시간"
|
last_day: "지난 24시간"
|
||||||
custom: "사용자 지정..."
|
custom: "사용자 지정..."
|
||||||
ai_persona:
|
ai_agent:
|
||||||
back: "뒤로"
|
back: "뒤로"
|
||||||
name: "그룹명"
|
name: "그룹명"
|
||||||
edit: "편집"
|
edit: "편집"
|
||||||
|
@ -95,7 +95,7 @@ lt:
|
|||||||
periods:
|
periods:
|
||||||
last_day: "Paskutinės 24 valandos"
|
last_day: "Paskutinės 24 valandos"
|
||||||
custom: "Pasirinktinis..."
|
custom: "Pasirinktinis..."
|
||||||
ai_persona:
|
ai_agent:
|
||||||
back: "Atgal"
|
back: "Atgal"
|
||||||
name: "Vardas"
|
name: "Vardas"
|
||||||
edit: "Redaguoti"
|
edit: "Redaguoti"
|
||||||
|
@ -54,7 +54,7 @@ lv:
|
|||||||
username: "Lietotājvārds"
|
username: "Lietotājvārds"
|
||||||
periods:
|
periods:
|
||||||
last_day: "Pēdējās 24 stundas"
|
last_day: "Pēdējās 24 stundas"
|
||||||
ai_persona:
|
ai_agent:
|
||||||
back: "Atpakaļ"
|
back: "Atpakaļ"
|
||||||
name: "Vārds"
|
name: "Vārds"
|
||||||
edit: "Rediģēt"
|
edit: "Rediģēt"
|
||||||
|
@ -55,7 +55,7 @@ nb_NO:
|
|||||||
total_requests: "Totalt forespørsler"
|
total_requests: "Totalt forespørsler"
|
||||||
periods:
|
periods:
|
||||||
last_day: "Siste 24 timer"
|
last_day: "Siste 24 timer"
|
||||||
ai_persona:
|
ai_agent:
|
||||||
back: "Forrige"
|
back: "Forrige"
|
||||||
name: "Navn"
|
name: "Navn"
|
||||||
edit: "Endre"
|
edit: "Endre"
|
||||||
|
@ -12,7 +12,7 @@ nl:
|
|||||||
descriptions:
|
descriptions:
|
||||||
discourse_ai:
|
discourse_ai:
|
||||||
search: "Staat AI zoeken toe"
|
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:
|
site_settings:
|
||||||
categories:
|
categories:
|
||||||
discourse_ai: "Discourse AI"
|
discourse_ai: "Discourse AI"
|
||||||
@ -128,7 +128,7 @@ nl:
|
|||||||
flag_post:
|
flag_post:
|
||||||
label: "Bericht markeren"
|
label: "Bericht markeren"
|
||||||
description: "Markeert berichten (als spam of ter beoordeling)"
|
description: "Markeert berichten (als spam of ter beoordeling)"
|
||||||
include_personal_messages:
|
include_agentl_messages:
|
||||||
label: "Persoonlijke berichten opnemen"
|
label: "Persoonlijke berichten opnemen"
|
||||||
description: "Scan en triageer ook persoonlijke berichten"
|
description: "Scan en triageer ook persoonlijke berichten"
|
||||||
model:
|
model:
|
||||||
@ -219,7 +219,7 @@ nl:
|
|||||||
last_week: "Vorige week"
|
last_week: "Vorige week"
|
||||||
last_month: "Vorige maand"
|
last_month: "Vorige maand"
|
||||||
custom: "Aangepast..."
|
custom: "Aangepast..."
|
||||||
ai_persona:
|
ai_agent:
|
||||||
ai_tools: "Tools"
|
ai_tools: "Tools"
|
||||||
tool_strategies:
|
tool_strategies:
|
||||||
all: "Toepassen op alle antwoorden"
|
all: "Toepassen op alle antwoorden"
|
||||||
@ -243,47 +243,47 @@ nl:
|
|||||||
tool_details: Tooldetails weergeven
|
tool_details: Tooldetails weergeven
|
||||||
tool_details_help: Toont eindgebruikers informatie over welke tools het taalmodel heeft geactiveerd.
|
tool_details_help: Toont eindgebruikers informatie over welke tools het taalmodel heeft geactiveerd.
|
||||||
mentionable: Vermeldingen toestaan
|
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
|
user: Gebruiker
|
||||||
create_user: Gebruiker maken
|
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: 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: 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.
|
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
|
system_prompt: Systeemprompt
|
||||||
forced_tool_strategy: Gedwongen toolstrategie
|
forced_tool_strategy: Gedwongen toolstrategie
|
||||||
allow_chat_direct_messages: "Directe chatberichten toestaan"
|
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: "Vermelding in chatkanalen toestaan"
|
||||||
allow_chat_channel_mentions_help: "Indien ingeschakeld, kunnen gebruikers in toegestane groepen deze persona vermelden in chatkanalen."
|
allow_chat_channel_mentions_help: "Indien ingeschakeld, kunnen gebruikers in toegestane groepen deze agent vermelden in chatkanalen."
|
||||||
allow_personal_messages: "Persoonlijke berichten toestaan"
|
allow_agentl_messages: "Persoonlijke berichten toestaan"
|
||||||
allow_personal_messages_help: "Indien ingeschakeld, kunnen gebruikers in toegestane groepen persoonlijke berichten naar deze persona sturen."
|
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: "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"
|
force_default_llm: "Altijd standaard taalmodel gebruiken"
|
||||||
save: "Opslaan"
|
save: "Opslaan"
|
||||||
saved: "Persona opgeslagen"
|
saved: "Agent opgeslagen"
|
||||||
enabled: "Ingeschakeld?"
|
enabled: "Ingeschakeld?"
|
||||||
tools: "Ingeschakelde tools"
|
tools: "Ingeschakelde tools"
|
||||||
forced_tools: "Geforceerde tools"
|
forced_tools: "Geforceerde tools"
|
||||||
allowed_groups: "Toegestane groepen"
|
allowed_groups: "Toegestane groepen"
|
||||||
confirm_delete: "Weet je zeker dat je deze persona wilt verwijderen?"
|
confirm_delete: "Weet je zeker dat je deze agent wilt verwijderen?"
|
||||||
new: "Nieuwe persona"
|
new: "Nieuwe agent"
|
||||||
no_personas: "Je hebt nog geen persona's gemaakt"
|
no_agents: "Je hebt nog geen agent's gemaakt"
|
||||||
title: "Persona's"
|
title: "Agent's"
|
||||||
short_title: "Persona's"
|
short_title: "Agent's"
|
||||||
delete: "Verwijderen"
|
delete: "Verwijderen"
|
||||||
temperature: "Temperatuur"
|
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)"
|
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: "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)"
|
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: "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"
|
tool_options: "Toolopties"
|
||||||
rag_conversation_chunks: "Conversatiechunks zoeken"
|
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."
|
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:
|
response_format:
|
||||||
open_modal: "Bewerken"
|
open_modal: "Bewerken"
|
||||||
modal:
|
modal:
|
||||||
@ -376,7 +376,7 @@ nl:
|
|||||||
usage:
|
usage:
|
||||||
ai_bot: "AI-bot"
|
ai_bot: "AI-bot"
|
||||||
ai_helper: "Helper"
|
ai_helper: "Helper"
|
||||||
ai_persona: "Persona (%{persona})"
|
ai_agent: "Agent (%{agent})"
|
||||||
ai_summarization: "Samenvatten"
|
ai_summarization: "Samenvatten"
|
||||||
ai_embeddings_semantic_search: "AI zoeken"
|
ai_embeddings_semantic_search: "AI zoeken"
|
||||||
ai_spam: "Spam"
|
ai_spam: "Spam"
|
||||||
|
@ -95,13 +95,13 @@ pl_PL:
|
|||||||
description: "Domyślny model językowy używany do selekcji"
|
description: "Domyślny model językowy używany do selekcji"
|
||||||
tool:
|
tool:
|
||||||
label: "Narzędzie"
|
label: "Narzędzie"
|
||||||
llm_persona_triage:
|
llm_agent_triage:
|
||||||
fields:
|
fields:
|
||||||
persona:
|
agent:
|
||||||
label: "Osobowość"
|
label: "Osobowość"
|
||||||
silent_mode:
|
silent_mode:
|
||||||
label: "Tryb cichy"
|
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:
|
llm_triage:
|
||||||
fields:
|
fields:
|
||||||
system_prompt:
|
system_prompt:
|
||||||
@ -136,12 +136,12 @@ pl_PL:
|
|||||||
flag_post:
|
flag_post:
|
||||||
label: "Oflaguj post"
|
label: "Oflaguj post"
|
||||||
description: "Oflaguj post (jako spam lub do sprawdzenia)"
|
description: "Oflaguj post (jako spam lub do sprawdzenia)"
|
||||||
include_personal_messages:
|
include_agentl_messages:
|
||||||
label: "Dołącz osobiste wiadomości"
|
label: "Dołącz osobiste wiadomości"
|
||||||
description: "Skanuj i sortuj również wiadomości prywatne"
|
description: "Skanuj i sortuj również wiadomości prywatne"
|
||||||
reply_persona:
|
reply_agent:
|
||||||
label: "Persona odpowiedzi"
|
label: "Agent odpowiedzi"
|
||||||
description: "AI Persona użyta do odpowiedzi (musi mieć domyślną wartość LLM), będzie traktowana priorytetowo nad gotową odpowiedzią"
|
description: "AI Agent użyta do odpowiedzi (musi mieć domyślną wartość LLM), będzie traktowana priorytetowo nad gotową odpowiedzią"
|
||||||
model:
|
model:
|
||||||
label: "Model"
|
label: "Model"
|
||||||
description: "Model językowy używany do selekcji"
|
description: "Model językowy używany do selekcji"
|
||||||
@ -155,7 +155,7 @@ pl_PL:
|
|||||||
list:
|
list:
|
||||||
header:
|
header:
|
||||||
name: "Nazwa"
|
name: "Nazwa"
|
||||||
persona: "Osobowość"
|
agent: "Osobowość"
|
||||||
groups: "Grupy"
|
groups: "Grupy"
|
||||||
edit: "Edytuj"
|
edit: "Edytuj"
|
||||||
set_up: "Skonfiguruj"
|
set_up: "Skonfiguruj"
|
||||||
@ -227,7 +227,7 @@ pl_PL:
|
|||||||
last_week: "Ostatni tydzień"
|
last_week: "Ostatni tydzień"
|
||||||
last_month: "Ostatni miesiąc"
|
last_month: "Ostatni miesiąc"
|
||||||
custom: "Niestandardowy..."
|
custom: "Niestandardowy..."
|
||||||
ai_persona:
|
ai_agent:
|
||||||
ai_tools: "Narzędzia"
|
ai_tools: "Narzędzia"
|
||||||
tool_strategies:
|
tool_strategies:
|
||||||
all: "Zastosuj do wszystkich odpowiedzi"
|
all: "Zastosuj do wszystkich odpowiedzi"
|
||||||
@ -254,20 +254,20 @@ pl_PL:
|
|||||||
default_llm: Domyślny model językowy
|
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.
|
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
|
system_prompt: Prompt systemowy
|
||||||
allow_personal_messages: "Zezwalaj na wiadomości osobiste"
|
allow_agentl_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_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: "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."
|
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"
|
force_default_llm: "Zawsze używaj domyślnego modelu języka"
|
||||||
save: "Zapisz"
|
save: "Zapisz"
|
||||||
saved: "Persona zapisana"
|
saved: "Agent zapisana"
|
||||||
enabled: "Włączona?"
|
enabled: "Włączona?"
|
||||||
tools: "Włączone narzędzia"
|
tools: "Włączone narzędzia"
|
||||||
forced_tools: "Narzędzia wymuszone"
|
forced_tools: "Narzędzia wymuszone"
|
||||||
allowed_groups: "Dozwolone grupy"
|
allowed_groups: "Dozwolone grupy"
|
||||||
confirm_delete: "Czy na pewno chcesz usunąć tę personę?"
|
confirm_delete: "Czy na pewno chcesz usunąć tę personę?"
|
||||||
new: "Nowa persona"
|
new: "Nowa agent"
|
||||||
no_personas: "Nie utworzyłeś jeszcze żadnych person"
|
no_agents: "Nie utworzyłeś jeszcze żadnych person"
|
||||||
title: "Persony"
|
title: "Persony"
|
||||||
short_title: "Persony"
|
short_title: "Persony"
|
||||||
delete: "Usuń"
|
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)"
|
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"
|
new: "Nowe narzędzie"
|
||||||
tool_name: "Nazwa narzędzia"
|
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: "Opis"
|
||||||
description_help: "Jasny opis celu narzędzia dla modelu językowego"
|
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."
|
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:
|
usage:
|
||||||
ai_bot: "Bot AI"
|
ai_bot: "Bot AI"
|
||||||
ai_helper: "Pomocnik"
|
ai_helper: "Pomocnik"
|
||||||
ai_persona: "Persona (%{persona})"
|
ai_agent: "Agent (%{agent})"
|
||||||
ai_summarization: "Podsumuj"
|
ai_summarization: "Podsumuj"
|
||||||
ai_embeddings_semantic_search: "Wyszukiwanie AI"
|
ai_embeddings_semantic_search: "Wyszukiwanie AI"
|
||||||
ai_spam: "Spam"
|
ai_spam: "Spam"
|
||||||
@ -505,7 +505,7 @@ pl_PL:
|
|||||||
expand_view_label: "Rozszerz widok"
|
expand_view_label: "Rozszerz widok"
|
||||||
collapse_view_label: "Wyjdź z trybu pełnoekranowego (przycisk ESC lub Wstecz)"
|
collapse_view_label: "Wyjdź z trybu pełnoekranowego (przycisk ESC lub Wstecz)"
|
||||||
ai_bot:
|
ai_bot:
|
||||||
persona: "Osobowość"
|
agent: "Osobowość"
|
||||||
llm: "Model"
|
llm: "Model"
|
||||||
pm_warning: "Wiadomości wysyłane przez chatboty AI są regularnie monitorowane przez moderatorów."
|
pm_warning: "Wiadomości wysyłane przez chatboty AI są regularnie monitorowane przez moderatorów."
|
||||||
cancel_streaming: "Zatrzymaj odpowiedź"
|
cancel_streaming: "Zatrzymaj odpowiedź"
|
||||||
|
@ -55,8 +55,8 @@ pt:
|
|||||||
total_requests: "Total de pedidos"
|
total_requests: "Total de pedidos"
|
||||||
periods:
|
periods:
|
||||||
last_day: "Últimas 24 horas"
|
last_day: "Últimas 24 horas"
|
||||||
custom: "Personalizar..."
|
custom: "Agentlizar..."
|
||||||
ai_persona:
|
ai_agent:
|
||||||
back: "Retroceder"
|
back: "Retroceder"
|
||||||
name: "Nome"
|
name: "Nome"
|
||||||
edit: "Editar"
|
edit: "Editar"
|
||||||
@ -99,7 +99,7 @@ pt:
|
|||||||
six_hours: "6 horas"
|
six_hours: "6 horas"
|
||||||
day: "24 horas"
|
day: "24 horas"
|
||||||
week: "7 dias"
|
week: "7 dias"
|
||||||
custom: "Personalizar..."
|
custom: "Agentlizar..."
|
||||||
hours: "horas"
|
hours: "horas"
|
||||||
usage:
|
usage:
|
||||||
ai_summarization: "Resumir"
|
ai_summarization: "Resumir"
|
||||||
@ -108,7 +108,7 @@ pt:
|
|||||||
title: "Próximo"
|
title: "Próximo"
|
||||||
providers:
|
providers:
|
||||||
google: "Google"
|
google: "Google"
|
||||||
fake: "Personalizar"
|
fake: "Agentlizar"
|
||||||
ai_helper:
|
ai_helper:
|
||||||
context_menu:
|
context_menu:
|
||||||
cancel: "Cancelar"
|
cancel: "Cancelar"
|
||||||
@ -133,7 +133,7 @@ pt:
|
|||||||
display_name: "Nome"
|
display_name: "Nome"
|
||||||
providers:
|
providers:
|
||||||
google: "Google"
|
google: "Google"
|
||||||
fake: "Personalizar"
|
fake: "Agentlizar"
|
||||||
ai_bot:
|
ai_bot:
|
||||||
debug_ai_modal:
|
debug_ai_modal:
|
||||||
request: "Pedido"
|
request: "Pedido"
|
||||||
|
@ -12,7 +12,7 @@ pt_BR:
|
|||||||
descriptions:
|
descriptions:
|
||||||
discourse_ai:
|
discourse_ai:
|
||||||
search: "Permite pesquisa com IA"
|
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:
|
site_settings:
|
||||||
categories:
|
categories:
|
||||||
discourse_ai: "Discourse IA"
|
discourse_ai: "Discourse IA"
|
||||||
@ -128,7 +128,7 @@ pt_BR:
|
|||||||
flag_post:
|
flag_post:
|
||||||
label: "Sinalizar postagem"
|
label: "Sinalizar postagem"
|
||||||
description: "Sinaliza a postagem (como spam ou para revisão)"
|
description: "Sinaliza a postagem (como spam ou para revisão)"
|
||||||
include_personal_messages:
|
include_agentl_messages:
|
||||||
label: "Incluir mensagens pessoais"
|
label: "Incluir mensagens pessoais"
|
||||||
description: "Também verificar e fazer triagem de mensagens pessoais"
|
description: "Também verificar e fazer triagem de mensagens pessoais"
|
||||||
model:
|
model:
|
||||||
@ -152,7 +152,7 @@ pt_BR:
|
|||||||
short_title: "Spam"
|
short_title: "Spam"
|
||||||
title: "Configurar tratamento de spam"
|
title: "Configurar tratamento de spam"
|
||||||
select_llm: "Selecionar LLM"
|
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\"."
|
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"
|
last_seven_days: "Últimos sete dias"
|
||||||
scanned_count: "Postagens verificadas"
|
scanned_count: "Postagens verificadas"
|
||||||
@ -218,8 +218,8 @@ pt_BR:
|
|||||||
last_day: "Últimas 24 horas"
|
last_day: "Últimas 24 horas"
|
||||||
last_week: "Semana passada"
|
last_week: "Semana passada"
|
||||||
last_month: "Mês passado"
|
last_month: "Mês passado"
|
||||||
custom: "Personalizado..."
|
custom: "Agentlizado..."
|
||||||
ai_persona:
|
ai_agent:
|
||||||
ai_tools: "Ferramentas"
|
ai_tools: "Ferramentas"
|
||||||
tool_strategies:
|
tool_strategies:
|
||||||
all: "Aplicar a todas as respostas"
|
all: "Aplicar a todas as respostas"
|
||||||
@ -243,47 +243,47 @@ pt_BR:
|
|||||||
tool_details: Exibir detalhes da ferramenta
|
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.
|
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: 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)
|
user: Usuário(a)
|
||||||
create_user: Criar 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: 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: 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.
|
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
|
system_prompt: Prompt do sistema
|
||||||
forced_tool_strategy: Estratégia de ferramenta forçada
|
forced_tool_strategy: Estratégia de ferramenta forçada
|
||||||
allow_chat_direct_messages: "Permitir mensagens diretas do chat"
|
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: "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_chat_channel_mentions_help: "Ative para os(as) usuários(as) nos grupos permitidos poderem mencionar esta agent nos canais de chat"
|
||||||
allow_personal_messages: "Permitir mensagens pessoais"
|
allow_agentl_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_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: "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"
|
force_default_llm: "Usar sempre o modelo de linguagem padrão"
|
||||||
save: "Salvar"
|
save: "Salvar"
|
||||||
saved: "Persona salva"
|
saved: "Agent salva"
|
||||||
enabled: "Ativado(a)?"
|
enabled: "Ativado(a)?"
|
||||||
tools: "Ferramentas ativadas"
|
tools: "Ferramentas ativadas"
|
||||||
forced_tools: "Ferramentas forçadas"
|
forced_tools: "Ferramentas forçadas"
|
||||||
allowed_groups: "Grupos permitidos"
|
allowed_groups: "Grupos permitidos"
|
||||||
confirm_delete: "Você tem certeza de que deseja excluir esta persona?"
|
confirm_delete: "Você tem certeza de que deseja excluir esta agent?"
|
||||||
new: "Nova persona"
|
new: "Nova agent"
|
||||||
no_personas: "Você ainda não criou nenhuma persona"
|
no_agents: "Você ainda não criou nenhuma agent"
|
||||||
title: "Personas"
|
title: "Agents"
|
||||||
short_title: "Personas"
|
short_title: "Agents"
|
||||||
delete: "Excluir"
|
delete: "Excluir"
|
||||||
temperature: "Temperatura"
|
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)"
|
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: "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)"
|
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: "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"
|
tool_options: "Opções de ferramenta"
|
||||||
rag_conversation_chunks: "Pesquisar pedaços de conversa"
|
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."
|
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:
|
response_format:
|
||||||
open_modal: "Editar"
|
open_modal: "Editar"
|
||||||
modal:
|
modal:
|
||||||
@ -369,14 +369,14 @@ pt_BR:
|
|||||||
six_hours: "6 horas"
|
six_hours: "6 horas"
|
||||||
day: "24 horas"
|
day: "24 horas"
|
||||||
week: "Sete dias"
|
week: "Sete dias"
|
||||||
custom: "Personalizado..."
|
custom: "Agentlizado..."
|
||||||
hours: "horas"
|
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_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."
|
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:
|
usage:
|
||||||
ai_bot: "Bot de IA"
|
ai_bot: "Bot de IA"
|
||||||
ai_helper: "Ajudante"
|
ai_helper: "Ajudante"
|
||||||
ai_persona: "Persona (%{persona})"
|
ai_agent: "Agent (%{agent})"
|
||||||
ai_summarization: "Resumir"
|
ai_summarization: "Resumir"
|
||||||
ai_embeddings_semantic_search: "Pesquisa com IA"
|
ai_embeddings_semantic_search: "Pesquisa com IA"
|
||||||
ai_spam: "Spam"
|
ai_spam: "Spam"
|
||||||
@ -429,7 +429,7 @@ pt_BR:
|
|||||||
samba_nova: "SambaNova"
|
samba_nova: "SambaNova"
|
||||||
mistral: "Mistral"
|
mistral: "Mistral"
|
||||||
open_router: "OpenRouter"
|
open_router: "OpenRouter"
|
||||||
fake: "Personalizados(as)"
|
fake: "Agentlizados(as)"
|
||||||
provider_fields:
|
provider_fields:
|
||||||
access_key_id: "ID da chave de acesso do AWS Bedrock"
|
access_key_id: "ID da chave de acesso do AWS Bedrock"
|
||||||
region: "Região do AWS Bedrock"
|
region: "Região do AWS Bedrock"
|
||||||
@ -463,8 +463,8 @@ pt_BR:
|
|||||||
discard: "Descartar"
|
discard: "Descartar"
|
||||||
changes: "Edições sugeridas"
|
changes: "Edições sugeridas"
|
||||||
custom_prompt:
|
custom_prompt:
|
||||||
title: "Prompt personalizado"
|
title: "Prompt agentlizado"
|
||||||
placeholder: "Insira um prompt personalizado..."
|
placeholder: "Insira um prompt agentlizado..."
|
||||||
submit: "Enviar prompt"
|
submit: "Enviar prompt"
|
||||||
translate_prompt: "Traduzir para %{language}"
|
translate_prompt: "Traduzir para %{language}"
|
||||||
post_options_menu:
|
post_options_menu:
|
||||||
@ -542,7 +542,7 @@ pt_BR:
|
|||||||
google: "Google"
|
google: "Google"
|
||||||
cloudflare: "Cloudflare"
|
cloudflare: "Cloudflare"
|
||||||
CDCK: "CDCK"
|
CDCK: "CDCK"
|
||||||
fake: "Personalizados(as)"
|
fake: "Agentlizados(as)"
|
||||||
provider_fields:
|
provider_fields:
|
||||||
model_name: "Nome do modelo"
|
model_name: "Nome do modelo"
|
||||||
semantic_search: "Tópicos (semântica)"
|
semantic_search: "Tópicos (semântica)"
|
||||||
|
@ -57,8 +57,8 @@ ro:
|
|||||||
total_requests: "Total cereri"
|
total_requests: "Total cereri"
|
||||||
periods:
|
periods:
|
||||||
last_day: "Ultimele 24 de ore"
|
last_day: "Ultimele 24 de ore"
|
||||||
custom: "Personalizat..."
|
custom: "Agentlizat..."
|
||||||
ai_persona:
|
ai_agent:
|
||||||
back: "Înapoi"
|
back: "Înapoi"
|
||||||
name: "Nume"
|
name: "Nume"
|
||||||
edit: "Modifică"
|
edit: "Modifică"
|
||||||
@ -96,7 +96,7 @@ ro:
|
|||||||
hour: "o oră"
|
hour: "o oră"
|
||||||
six_hours: "6 de ore"
|
six_hours: "6 de ore"
|
||||||
day: "24 de ore"
|
day: "24 de ore"
|
||||||
custom: "Personalizat..."
|
custom: "Agentlizat..."
|
||||||
hours: "de ore"
|
hours: "de ore"
|
||||||
usage:
|
usage:
|
||||||
ai_summarization: "Rezumat"
|
ai_summarization: "Rezumat"
|
||||||
@ -107,7 +107,7 @@ ro:
|
|||||||
success: "Succes!"
|
success: "Succes!"
|
||||||
providers:
|
providers:
|
||||||
google: "Google"
|
google: "Google"
|
||||||
fake: "Personalizat"
|
fake: "Agentlizat"
|
||||||
ai_helper:
|
ai_helper:
|
||||||
context_menu:
|
context_menu:
|
||||||
cancel: "Anulare"
|
cancel: "Anulare"
|
||||||
@ -133,7 +133,7 @@ ro:
|
|||||||
display_name: "Nume"
|
display_name: "Nume"
|
||||||
providers:
|
providers:
|
||||||
google: "Google"
|
google: "Google"
|
||||||
fake: "Personalizat"
|
fake: "Agentlizat"
|
||||||
ai_bot:
|
ai_bot:
|
||||||
debug_ai_modal:
|
debug_ai_modal:
|
||||||
request: "Cere"
|
request: "Cere"
|
||||||
|
@ -128,7 +128,7 @@ ru:
|
|||||||
flag_post:
|
flag_post:
|
||||||
label: "Пометить публикацию"
|
label: "Пометить публикацию"
|
||||||
description: "Пометить публикацию (как спам или для отправки на проверку)"
|
description: "Пометить публикацию (как спам или для отправки на проверку)"
|
||||||
include_personal_messages:
|
include_agentl_messages:
|
||||||
label: "Включать личные сообщения"
|
label: "Включать личные сообщения"
|
||||||
description: "Также сканировать и выполнять триаж личных сообщений"
|
description: "Также сканировать и выполнять триаж личных сообщений"
|
||||||
model:
|
model:
|
||||||
@ -219,7 +219,7 @@ ru:
|
|||||||
last_week: "На прошлой неделе"
|
last_week: "На прошлой неделе"
|
||||||
last_month: "В прошлом месяце"
|
last_month: "В прошлом месяце"
|
||||||
custom: "Другое…"
|
custom: "Другое…"
|
||||||
ai_persona:
|
ai_agent:
|
||||||
ai_tools: "Инструменты"
|
ai_tools: "Инструменты"
|
||||||
tool_strategies:
|
tool_strategies:
|
||||||
all: "Применить ко всем ответам"
|
all: "Применить ко всем ответам"
|
||||||
@ -259,8 +259,8 @@ ru:
|
|||||||
allow_chat_direct_messages_help: "Если параметр включен, пользователи в разрешенных группах смогут отправлять прямые сообщения этой персоне."
|
allow_chat_direct_messages_help: "Если параметр включен, пользователи в разрешенных группах смогут отправлять прямые сообщения этой персоне."
|
||||||
allow_chat_channel_mentions: "Разрешить упоминания в каналах чата"
|
allow_chat_channel_mentions: "Разрешить упоминания в каналах чата"
|
||||||
allow_chat_channel_mentions_help: "Если параметр включен, пользователи в разрешенных группах смогут упоминать эту персону в каналах чата."
|
allow_chat_channel_mentions_help: "Если параметр включен, пользователи в разрешенных группах смогут упоминать эту персону в каналах чата."
|
||||||
allow_personal_messages: "Разрешить личные сообщения"
|
allow_agentl_messages: "Разрешить личные сообщения"
|
||||||
allow_personal_messages_help: "Если параметр включен, пользователи в разрешенных группах смогут отправлять личные сообщения этой персоне."
|
allow_agentl_messages_help: "Если параметр включен, пользователи в разрешенных группах смогут отправлять личные сообщения этой персоне."
|
||||||
allow_topic_mentions: "Разрешить упоминания в темах"
|
allow_topic_mentions: "Разрешить упоминания в темах"
|
||||||
allow_topic_mentions_help: "Если параметр включен, пользователи в разрешенных группах смогут упоминать эту персону в темах."
|
allow_topic_mentions_help: "Если параметр включен, пользователи в разрешенных группах смогут упоминать эту персону в темах."
|
||||||
force_default_llm: "Всегда использовать языковую модель по умолчанию"
|
force_default_llm: "Всегда использовать языковую модель по умолчанию"
|
||||||
@ -272,7 +272,7 @@ ru:
|
|||||||
allowed_groups: "Разрешённые группы"
|
allowed_groups: "Разрешённые группы"
|
||||||
confirm_delete: "Точно удалить эту персону?"
|
confirm_delete: "Точно удалить эту персону?"
|
||||||
new: "Новая персона"
|
new: "Новая персона"
|
||||||
no_personas: "Вы еще не создали ни одной персоны"
|
no_agents: "Вы еще не создали ни одной персоны"
|
||||||
title: "Персоны"
|
title: "Персоны"
|
||||||
short_title: "Персоны"
|
short_title: "Персоны"
|
||||||
delete: "Удалить"
|
delete: "Удалить"
|
||||||
@ -285,7 +285,7 @@ ru:
|
|||||||
tool_options: "Параметры инструмента"
|
tool_options: "Параметры инструмента"
|
||||||
rag_conversation_chunks: "Фрагменты разговора для поиска"
|
rag_conversation_chunks: "Фрагменты разговора для поиска"
|
||||||
rag_conversation_chunks_help: "Количество фрагментов для поиска в модели RAG. Увеличьте это значение, чтобы увеличить объем контекста, который может использовать AI."
|
rag_conversation_chunks_help: "Количество фрагментов для поиска в модели RAG. Увеличьте это значение, чтобы увеличить объем контекста, который может использовать AI."
|
||||||
persona_description: "Персоны — полезная функция, с помощью которой вы можете настроить поведение движка AI на вашем форуме Discourse. Они действуют как «системное сообщение», задающее направление для ответов AI и обеспечивающее более персонализированное взаимодействие с пользователями."
|
agent_description: "Персоны — полезная функция, с помощью которой вы можете настроить поведение движка AI на вашем форуме Discourse. Они действуют как «системное сообщение», задающее направление для ответов AI и обеспечивающее более персонализированное взаимодействие с пользователями."
|
||||||
response_format:
|
response_format:
|
||||||
open_modal: "Изменить"
|
open_modal: "Изменить"
|
||||||
modal:
|
modal:
|
||||||
@ -378,7 +378,7 @@ ru:
|
|||||||
usage:
|
usage:
|
||||||
ai_bot: "AI-бот"
|
ai_bot: "AI-бот"
|
||||||
ai_helper: "Помощник"
|
ai_helper: "Помощник"
|
||||||
ai_persona: "Персона (%{persona})"
|
ai_agent: "Персона (%{agent})"
|
||||||
ai_summarization: "Сводка"
|
ai_summarization: "Сводка"
|
||||||
ai_embeddings_semantic_search: "AI-поиск"
|
ai_embeddings_semantic_search: "AI-поиск"
|
||||||
ai_spam: "Спам"
|
ai_spam: "Спам"
|
||||||
|
@ -61,7 +61,7 @@ sk:
|
|||||||
periods:
|
periods:
|
||||||
last_day: "Posledných 24 hodín"
|
last_day: "Posledných 24 hodín"
|
||||||
custom: "Vlastné..."
|
custom: "Vlastné..."
|
||||||
ai_persona:
|
ai_agent:
|
||||||
back: "Späť"
|
back: "Späť"
|
||||||
name: "Meno"
|
name: "Meno"
|
||||||
edit: "Upraviť"
|
edit: "Upraviť"
|
||||||
|
@ -55,7 +55,7 @@ sl:
|
|||||||
periods:
|
periods:
|
||||||
last_day: "Zadnjih 24 ur"
|
last_day: "Zadnjih 24 ur"
|
||||||
custom: "Po meri..."
|
custom: "Po meri..."
|
||||||
ai_persona:
|
ai_agent:
|
||||||
back: "Nazaj"
|
back: "Nazaj"
|
||||||
name: "Ime"
|
name: "Ime"
|
||||||
edit: "Uredi"
|
edit: "Uredi"
|
||||||
|
@ -52,7 +52,7 @@ sq:
|
|||||||
summary: "Përmbledhja"
|
summary: "Përmbledhja"
|
||||||
username: "Emri i përdoruesit"
|
username: "Emri i përdoruesit"
|
||||||
total_requests: "Total requests"
|
total_requests: "Total requests"
|
||||||
ai_persona:
|
ai_agent:
|
||||||
back: "Kthehu mbrapa"
|
back: "Kthehu mbrapa"
|
||||||
name: "Emri"
|
name: "Emri"
|
||||||
edit: "Redakto"
|
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