valueobjects

package
v0.0.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 24, 2026 License: MIT Imports: 2 Imported by: 0

Documentation

Overview

Package valueobjects — IdentityPatch : modification partielle intentionnelle de l'âme.

Contrairement à soul_capture (qui extrait l'identité depuis une conversation), IdentityPatch permet une modification ciblée et intentionnelle de dimensions spécifiques de l'identité — par exemple quand l'utilisateur dit "réponds avec plus d'enthousiasme" ou "fais un rapport à la fin".

Principe d'immuabilité respecté : un patch crée TOUJOURS un nouveau snapshot versionné, dérivé du précédent. L'historique n'est jamais effacé.

Package valueobjects définit les objets de valeur du domaine SOUL Ces objets sont immuables et identifiés par leurs attributs, pas par un ID.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type DimensionDrift

type DimensionDrift struct {
	Dimension     string  `json:"dimension"` // ex: "voice", "personality", "values"
	PreviousValue float64 `json:"previous_value"`
	CurrentValue  float64 `json:"current_value"`
	Change        float64 `json:"change"` // Delta absolu
	IsSignificant bool    `json:"is_significant"`
}

DimensionDrift représente la dérive sur une dimension spécifique

type ExtractedTrait

type ExtractedTrait struct {
	Name       string         `json:"name"`
	Category   string         `json:"category"`
	Intensity  float64        `json:"intensity"`
	Evidence   string         `json:"evidence"` // Texte justificatif
	Confidence float64        `json:"confidence"`
	Source     IdentitySource `json:"source"`
}

ExtractedTrait représente un trait brut extrait d'une source

type IdentityContextPrompt

type IdentityContextPrompt struct {
	Content         string    `json:"content"`        // Le prompt textuel
	TokenEstimate   int       `json:"token_estimate"` // Estimation du nombre de tokens
	Priority        int       `json:"priority"`       // Priorité dans le context window
	GeneratedAt     time.Time `json:"generated_at"`
	SnapshotVersion int       `json:"snapshot_version"`
}

IdentityContextPrompt représente le prompt d'identité généré pour injection

type IdentityDriftReport

type IdentityDriftReport struct {
	Timestamp       time.Time        `json:"timestamp"`
	PreviousVersion int              `json:"previous_version"`
	CurrentVersion  int              `json:"current_version"`
	DriftScore      float64          `json:"drift_score"`      // 0-1, score global de dérive
	DriftDimensions []DimensionDrift `json:"drift_dimensions"` // Dérive par dimension
	IsSignificant   bool             `json:"is_significant"`   // Dérive significative ?
	Recommendations []string         `json:"recommendations"`  // Actions recommandées
}

IdentityDriftReport représente un rapport de dérive identitaire

type IdentityPatch

type IdentityPatch struct {

	// EnthusiasmLevel : niveau d'enthousiasme dans l'expression (0=mesuré, 1=très enthousiaste)
	EnthusiasmLevel *float64 `json:"enthusiasm_level,omitempty"`

	// FormalityLevel : niveau de formalité (0=très informel, 1=très formel)
	FormalityLevel *float64 `json:"formality_level,omitempty"`

	// HumorLevel : niveau d'humour (0=sérieux, 1=très humoristique)
	HumorLevel *float64 `json:"humor_level,omitempty"`

	// EmpathyLevel : niveau d'empathie exprimée (0=neutre, 1=très empathique)
	EmpathyLevel *float64 `json:"empathy_level,omitempty"`

	// TechnicalDepth : profondeur technique (0=vulgarisateur, 1=très technique)
	TechnicalDepth *float64 `json:"technical_depth,omitempty"`

	// DirectnessLevel : directivité (0=indirect/diplomatique, 1=très direct)
	DirectnessLevel *float64 `json:"directness_level,omitempty"`

	// VocabularyRichness : richesse du vocabulaire (0=simple, 1=très riche)
	VocabularyRichness *float64 `json:"vocabulary_richness,omitempty"`

	// MetaphorUsage : fréquence d'utilisation de métaphores (0=rare, 1=fréquent)
	MetaphorUsage *float64 `json:"metaphor_usage,omitempty"`

	// UsesEmojis : active/désactive l'utilisation d'emojis
	UsesEmojis *bool `json:"uses_emojis,omitempty"`

	// UsesMarkdown : active/désactive le formatage Markdown
	UsesMarkdown *bool `json:"uses_markdown,omitempty"`

	// SentenceStructure : structure de phrase préférée
	// Valeurs acceptées : "concise", "elaborate", "balanced", "punchy", "flowing"
	SentenceStructure *string `json:"sentence_structure,omitempty"`

	// ExplanationStyle : style d'explication préféré
	// Valeurs acceptées : "analogy", "step_by_step", "big_picture", "example_driven", "socratic"
	ExplanationStyle *string `json:"explanation_style,omitempty"`

	// AddCatchPhrases : expressions récurrentes à ajouter (ex: "En résumé,")
	AddCatchPhrases []string `json:"add_catch_phrases,omitempty"`

	// AddPreferredClosings : phrases de fermeture à ajouter
	// Ex: "---\n**Résumé :** [résumé des points clés]"
	AddPreferredClosings []string `json:"add_preferred_closings,omitempty"`

	// AddPreferredOpenings : phrases d'ouverture à ajouter
	AddPreferredOpenings []string `json:"add_preferred_openings,omitempty"`

	// RemoveCatchPhrases : expressions récurrentes à supprimer
	RemoveCatchPhrases []string `json:"remove_catch_phrases,omitempty"`

	// RemovePreferredClosings : phrases de fermeture à supprimer
	RemovePreferredClosings []string `json:"remove_preferred_closings,omitempty"`

	// ResponseLength : longueur de réponse préférée
	// Valeurs acceptées : "terse", "concise", "moderate", "detailed", "exhaustive"
	ResponseLength *string `json:"response_length,omitempty"`

	// StructurePreference : préférence de structure des réponses
	// Valeurs acceptées : "freeform", "bulleted", "numbered", "sectioned", "mixed"
	StructurePreference *string `json:"structure_preference,omitempty"`

	// Warmth : chaleur humaine (0=neutre/froid, 1=très chaleureux)
	Warmth *float64 `json:"warmth,omitempty"`

	// EmotionEnthusiasm : enthousiasme dans le ton émotionnel (0=neutre, 1=très enthousiaste)
	EmotionEnthusiasm *float64 `json:"emotion_enthusiasm,omitempty"`

	// Playfulness : esprit ludique (0=sérieux, 1=très ludique)
	Playfulness *float64 `json:"playfulness,omitempty"`

	// Seriousness : sérieux (0=décontracté, 1=très sérieux)
	Seriousness *float64 `json:"seriousness,omitempty"`

	// EncouragementLevel : niveau d'encouragement envers l'utilisateur (0=neutre, 1=très encourageant)
	EncouragementLevel *float64 `json:"encouragement_level,omitempty"`

	// TraitChanges : ajout, modification ou suppression de traits de personnalité
	TraitChanges []TraitChange `json:"trait_changes,omitempty"`

	// Reason : raison de la modification — conservé comme preuve dans l'historique
	Reason string `json:"reason,omitempty"`
}

IdentityPatch représente une modification partielle de l'identité d'un agent. Seuls les champs non-nil / non-vides sont appliqués. Le résultat est toujours un nouveau snapshot versionné.

func (*IdentityPatch) IsEmpty

func (p *IdentityPatch) IsEmpty() bool

IsEmpty retourne true si aucun champ n'est renseigné (patch vide).

type IdentitySource

type IdentitySource struct {
	Type      SourceType `json:"type"`    // Type de source
	Content   string     `json:"content"` // Contenu source
	Timestamp time.Time  `json:"timestamp"`
	Context   string     `json:"context"`    // Contexte de l'interaction
	UserID    string     `json:"user_id"`    // ID de l'utilisateur
	SessionID string     `json:"session_id"` // ID de session
}

IdentitySource représente la source d'une observation identitaire

type IdentityVersion

type IdentityVersion struct {
	Major     int       `json:"major"` // Changement majeur de personnalité
	Minor     int       `json:"minor"` // Ajustement mineur
	Patch     int       `json:"patch"` // Correction micro
	Timestamp time.Time `json:"timestamp"`
}

IdentityVersion représente une version d'identité (immutable)

func NewIdentityVersion

func NewIdentityVersion(major, minor, patch int) IdentityVersion

NewIdentityVersion crée une nouvelle version

func (IdentityVersion) String

func (iv IdentityVersion) String() string

String retourne la version au format semver

type MergeStrategy

type MergeStrategy string

MergeStrategy définit comment fusionner deux identités

const (
	MergePreserveDominant MergeStrategy = "preserve_dominant" // Garde l'identité dominante
	MergeWeightedAverage  MergeStrategy = "weighted_average"  // Moyenne pondérée
	MergeLatestWins       MergeStrategy = "latest_wins"       // La plus récente gagne
	MergeSynthesize       MergeStrategy = "synthesize"        // Synthèse intelligente
)

type ModelSwapContext

type ModelSwapContext struct {
	AgentID              string    `json:"agent_id"`
	PreviousModel        string    `json:"previous_model"`
	NewModel             string    `json:"new_model"`
	Timestamp            time.Time `json:"timestamp"`
	IdentityPreserved    bool      `json:"identity_preserved"`
	IdentityDrift        float64   `json:"identity_drift"`        // Dérive mesurée post-swap
	ReinforcementApplied bool      `json:"reinforcement_applied"` // Renforcement appliqué ?
}

ModelSwapContext représente le contexte lors d'un changement de modèle C'est le moment critique où l'identité risque d'être perdue

type SoulCaptureRequest

type SoulCaptureRequest struct {
	AgentID           string                 `json:"agent_id"`
	Conversation      string                 `json:"conversation"`    // Texte de la conversation
	AgentResponses    []string               `json:"agent_responses"` // Réponses spécifiques de l'agent
	UserFeedback      map[string]string      `json:"user_feedback"`   // Feedback utilisateur (optionnel)
	ModelID           string                 `json:"model_id"`        // Identifiant du modèle
	SessionID         string                 `json:"session_id"`
	Timestamp         time.Time              `json:"timestamp"`
	BehavioralMetrics map[string]interface{} `json:"behavioral_metrics,omitempty"`
}

SoulCaptureRequest représente une demande de capture d'identité

type SoulQuery

type SoulQuery struct {
	AgentID          string   `json:"agent_id"`
	Context          string   `json:"context"`                  // Contexte de la conversation actuelle
	BudgetTokens     int      `json:"budget_tokens"`            // Budget de tokens pour le prompt d'identité
	PrioritizeRecent bool     `json:"prioritize_recent"`        // Prioriser les observations récentes
	IncludeTraits    []string `json:"include_traits,omitempty"` // Traits spécifiques à inclure
	ExcludeTraits    []string `json:"exclude_traits,omitempty"` // Traits à exclure
}

SoulQuery représente une requête pour récupérer l'identité

type SourceType

type SourceType string

SourceType énumère les types de sources possibles

const (
	SourceConversation   SourceType = "conversation"    // Dialogue utilisateur-agent
	SourceFeedback       SourceType = "feedback"        // Feedback explicite de l'utilisateur
	SourceSelfReflection SourceType = "self_reflection" // Auto-réflexion de l'agent
	SourceObservation    SourceType = "observation"     // Observation tierce
	SourceMemoryMira     SourceType = "mira_memory"     // Mémoire factuelle de MIRA
)

type TraitChange

type TraitChange struct {
	// Name : nom du trait (ex: "enthusiastic", "analytical", "humorous")
	Name string `json:"name"`

	// Category : catégorie du trait
	// Valeurs : "cognitive", "emotional", "social", "epistemic", "expressive", "ethical"
	// Si vide, défaut = "expressive"
	Category string `json:"category,omitempty"`

	// Intensity : intensité du trait (0.0 → 1.0)
	Intensity float64 `json:"intensity"`

	// Confidence : confiance dans ce trait (0.0 → 1.0). 0 = utilise la valeur par défaut.
	Confidence float64 `json:"confidence,omitempty"`

	// Action : "add" / "upsert" (ajoute ou met à jour) | "remove" (supprime)
	// Défaut si vide : "upsert"
	Action string `json:"action,omitempty"`
}

TraitChange décrit une modification de trait de personnalité.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL