feat: import agents_and_robots platform as unibots (Matrix-out, unibus transport)
Reemplaza el scaffold del echobot por la plataforma completa de bots traida desde ~/DataProyects/Github/agents_and_robots tras la operacion Matrix-out: los bots ya no hablan por Matrix sino por el bus unibus (modelo todo-rooms + E2E via shell/transportunibus sobre github.com/enmanuel/unibus/pkg/client). - go.mod: replace de unibus -> ../unibus y de fn-registry -> ../../../.. (paths relativos reajustados a la nueva ubicacion dentro de fn_registry). - app.md: bump a 0.2.0, descripcion + arquitectura + comandos + gotchas reales. - modulo Go conservado como github.com/enmanuel/agents (sin reescribir imports). agents_and_robots queda archivado como museo de la era Matrix.
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
package personality
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// BuildPersonalityPrompt genera un bloque de system prompt a partir de la personalidad.
|
||||
// Esta funcion es pura: recibe datos, devuelve string, sin side effects.
|
||||
func BuildPersonalityPrompt(p Personality) string {
|
||||
if isEmpty(p) {
|
||||
return ""
|
||||
}
|
||||
|
||||
var sb strings.Builder
|
||||
sb.WriteString("## Tu personalidad\n\n")
|
||||
|
||||
// Role y backstory
|
||||
if p.Role != "" || p.Backstory != "" {
|
||||
if p.Backstory != "" {
|
||||
sb.WriteString(p.Backstory)
|
||||
sb.WriteString("\n\n")
|
||||
}
|
||||
if p.Role != "" {
|
||||
sb.WriteString(fmt.Sprintf("**Rol**: %s.\n", p.Role))
|
||||
}
|
||||
}
|
||||
|
||||
// Expertise
|
||||
if len(p.Expertise) > 0 {
|
||||
sb.WriteString(fmt.Sprintf("**Expertise**: %s.\n", strings.Join(p.Expertise, ", ")))
|
||||
}
|
||||
|
||||
// Limitations
|
||||
if len(p.Limitations) > 0 {
|
||||
sb.WriteString(fmt.Sprintf("**Limitaciones**: %s.\n", strings.Join(p.Limitations, ", ")))
|
||||
}
|
||||
|
||||
// Communication style
|
||||
if !isEmptyCommunication(p.Communication) {
|
||||
sb.WriteString("\n**Como te comunicas**:\n")
|
||||
|
||||
if p.Communication.Formality != "" {
|
||||
sb.WriteString(fmt.Sprintf("- Formalidad: %s\n", p.Communication.Formality))
|
||||
}
|
||||
|
||||
if p.Tone != "" {
|
||||
sb.WriteString(fmt.Sprintf("- Tono: %s\n", p.Tone))
|
||||
}
|
||||
|
||||
if p.Communication.Humor != "" {
|
||||
sb.WriteString(fmt.Sprintf("- Humor: %s\n", p.Communication.Humor))
|
||||
}
|
||||
|
||||
if p.Communication.Personality != "" {
|
||||
sb.WriteString(fmt.Sprintf("- Personalidad: %s\n", p.Communication.Personality))
|
||||
}
|
||||
|
||||
if p.Communication.ResponseStyle != "" {
|
||||
sb.WriteString(fmt.Sprintf("- Estilo de respuesta: %s\n", p.Communication.ResponseStyle))
|
||||
}
|
||||
|
||||
if p.Verbosity != "" {
|
||||
sb.WriteString(fmt.Sprintf("- Verbosidad: %s\n", p.Verbosity))
|
||||
}
|
||||
|
||||
if len(p.Communication.Quirks) > 0 {
|
||||
sb.WriteString(fmt.Sprintf("- Rasgos unicos: %s\n", strings.Join(p.Communication.Quirks, "; ")))
|
||||
}
|
||||
|
||||
if len(p.Communication.AvoidTopics) > 0 {
|
||||
sb.WriteString(fmt.Sprintf("- Evitas hablar de: %s\n", strings.Join(p.Communication.AvoidTopics, ", ")))
|
||||
}
|
||||
|
||||
if len(p.Communication.Catchphrases) > 0 {
|
||||
sb.WriteString(fmt.Sprintf("- Frases tipicas: %s\n", strings.Join(p.Communication.Catchphrases, "; ")))
|
||||
}
|
||||
}
|
||||
|
||||
// Custom directives
|
||||
if len(p.CustomDirectives) > 0 {
|
||||
sb.WriteString("\n**Directivas especiales**:\n")
|
||||
for _, directive := range p.CustomDirectives {
|
||||
sb.WriteString(fmt.Sprintf("- %s\n", directive))
|
||||
}
|
||||
}
|
||||
|
||||
return sb.String()
|
||||
}
|
||||
|
||||
// isEmpty verifica si la personalidad esta vacia o solo tiene valores por defecto.
|
||||
func isEmpty(p Personality) bool {
|
||||
return p.Role == "" &&
|
||||
p.Backstory == "" &&
|
||||
len(p.Expertise) == 0 &&
|
||||
len(p.Limitations) == 0 &&
|
||||
isEmptyCommunication(p.Communication) &&
|
||||
len(p.CustomDirectives) == 0
|
||||
}
|
||||
|
||||
// isEmptyCommunication verifica si la seccion de comunicacion esta vacia.
|
||||
func isEmptyCommunication(c Communication) bool {
|
||||
return c.Formality == "" &&
|
||||
c.Humor == "" &&
|
||||
c.Personality == "" &&
|
||||
c.ResponseStyle == "" &&
|
||||
len(c.Quirks) == 0 &&
|
||||
len(c.AvoidTopics) == 0 &&
|
||||
len(c.Catchphrases) == 0
|
||||
}
|
||||
Reference in New Issue
Block a user