mirror of
https://github.com/discourse/discourse-ai.git
synced 2025-02-18 01:14:53 +00:00
This is a rather huge refactor with 1 new feature (tool details can be suppressed) Previously we use the name "Command" to describe "Tools", this unifies all the internal language and simplifies the code. We also amended the persona UI to use less DToggles which aligns with our design guidelines. Co-authored-by: Martin Brennan <martin@discourse.org>
41 lines
1.2 KiB
Ruby
41 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
DiscourseAi::AiBot::Personas::Persona.system_personas.each do |persona_class, id|
|
|
persona = AiPersona.find_by(id: id)
|
|
if !persona
|
|
persona = AiPersona.new
|
|
persona.id = id
|
|
persona.allowed_group_ids = [Group::AUTO_GROUPS[:trust_level_0]]
|
|
persona.enabled = true
|
|
persona.priority = true if persona_class == DiscourseAi::AiBot::Personas::General
|
|
end
|
|
|
|
names = [
|
|
persona_class.name,
|
|
persona_class.name + " 1",
|
|
persona_class.name + " 2",
|
|
persona_class.name + SecureRandom.hex,
|
|
]
|
|
persona.name = DB.query_single(<<~SQL, names, id).first
|
|
SELECT guess_name
|
|
FROM (
|
|
SELECT unnest(Array[?]) AS guess_name
|
|
FROM (SELECT 1) as t
|
|
) x
|
|
LEFT JOIN ai_personas ON ai_personas.name = x.guess_name AND ai_personas.id <> ?
|
|
WHERE ai_personas.id IS NULL
|
|
ORDER BY x.guess_name ASC
|
|
LIMIT 1
|
|
SQL
|
|
|
|
persona.description = persona_class.description
|
|
|
|
persona.system = true
|
|
instance = persona_class.new
|
|
persona.tools = instance.tools.map { |tool| tool.to_s.split("::").last }
|
|
persona.system_prompt = instance.system_prompt
|
|
persona.top_p = instance.top_p
|
|
persona.temperature = instance.temperature
|
|
persona.save!(validate: false)
|
|
end
|