129 lines
4.5 KiB
Go
129 lines
4.5 KiB
Go
package persona
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
// PersonaSpec is the top-level container for a fully generated persona.
|
|
// It wraps all DNA, psychology, lifestyle, image matrix, and video specs
|
|
// produced by the personagen pipeline.
|
|
type PersonaSpec struct {
|
|
// ID is the unique identifier for this persona.
|
|
ID string `json:"id" yaml:"id"`
|
|
|
|
// CreatedAt is when the spec was generated.
|
|
CreatedAt time.Time `json:"created_at" yaml:"created_at"`
|
|
|
|
// DNA contains the immutable biological characteristics.
|
|
DNA *DNA `json:"dna" yaml:"dna"`
|
|
|
|
// Name contains the persona's name.
|
|
Name NameSpec `json:"name" yaml:"name"`
|
|
|
|
// Psychology contains the HEXACO personality profile.
|
|
Psychology Psychology `json:"psychology" yaml:"psychology"`
|
|
|
|
// Lifestyle contains interests, fashion contexts, and vacation style.
|
|
Lifestyle Lifestyle `json:"lifestyle" yaml:"lifestyle"`
|
|
|
|
// ImageMatrix is the 20-position image generation spec.
|
|
ImageMatrix []ImageSpec `json:"image_matrix" yaml:"image_matrix"`
|
|
|
|
// Videos is the 4-motion-type video spec set.
|
|
Videos []VideoSpec `json:"videos" yaml:"videos"`
|
|
|
|
// AnchorImage is the PNG bytes for position 1 (the identity anchor).
|
|
// Not persisted inline — stored separately in object storage.
|
|
AnchorImage []byte `json:"-" yaml:"-"`
|
|
|
|
// Attractiveness describes the visual attractiveness tier.
|
|
Attractiveness AttractivenessTier `json:"attractiveness" yaml:"attractiveness"`
|
|
|
|
// GenerationTier describes the content generation tier.
|
|
GenerationTier GenerationTier `json:"generation_tier" yaml:"generation_tier"`
|
|
|
|
// DiversityProfile contains optional diversity metadata.
|
|
DiversityProfile *DiversityProfile `json:"diversity_profile,omitempty" yaml:"diversity_profile,omitempty"`
|
|
}
|
|
|
|
// AttractivenessTier describes the visual attractiveness level of a persona.
|
|
type AttractivenessTier string
|
|
|
|
const (
|
|
AttractivenessTierAverage AttractivenessTier = "average"
|
|
AttractivenessTierAboveAverage AttractivenessTier = "above_average"
|
|
AttractivenessTierAttractive AttractivenessTier = "attractive"
|
|
AttractivenessTierVery AttractivenessTier = "very_attractive"
|
|
AttractivenessTierStunning AttractivenessTier = "stunning"
|
|
)
|
|
|
|
// IsValid returns true if the tier is a recognized value.
|
|
func (t AttractivenessTier) IsValid() bool {
|
|
switch t {
|
|
case AttractivenessTierAverage, AttractivenessTierAboveAverage,
|
|
AttractivenessTierAttractive, AttractivenessTierVery, AttractivenessTierStunning:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
// GenerationTier controls the intended generation quality and persona profile depth.
|
|
type GenerationTier string
|
|
|
|
const (
|
|
GenerationTierEveryday GenerationTier = "everyday"
|
|
GenerationTierInfluencer GenerationTier = "influencer"
|
|
GenerationTierSupermodel GenerationTier = "supermodel"
|
|
)
|
|
|
|
// IsValid returns true if the tier is a recognized value.
|
|
func (t GenerationTier) IsValid() bool {
|
|
switch t {
|
|
case GenerationTierEveryday, GenerationTierInfluencer, GenerationTierSupermodel:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
// DiversityProfile contains optional diversity and representation metadata.
|
|
type DiversityProfile struct {
|
|
// RepresentationNotes describes diversity considerations for this persona.
|
|
RepresentationNotes string `json:"representation_notes,omitempty" yaml:"representation_notes,omitempty"`
|
|
|
|
// CulturalBackground describes cultural heritage highlights.
|
|
CulturalBackground string `json:"cultural_background,omitempty" yaml:"cultural_background,omitempty"`
|
|
}
|
|
|
|
// CoreIdentity contains the essential demographic identity data generated
|
|
// in Stage 1 of the specgen pipeline.
|
|
type CoreIdentity struct {
|
|
// Name is the persona's full name.
|
|
Name NameSpec `json:"name" yaml:"name"`
|
|
|
|
// Age in years.
|
|
Age int `json:"age" yaml:"age"`
|
|
|
|
// Gender is the gender identity.
|
|
Gender GenderIdentity `json:"gender" yaml:"gender"`
|
|
|
|
// Ethnicity is the primary ethnic background.
|
|
Ethnicity EthnicityCode `json:"ethnicity" yaml:"ethnicity"`
|
|
|
|
// Nationality is the country/cultural background.
|
|
Nationality string `json:"nationality" yaml:"nationality"`
|
|
|
|
// Sexuality describes the persona's sexuality (for backstory context only).
|
|
Sexuality string `json:"sexuality,omitempty" yaml:"sexuality,omitempty"`
|
|
|
|
// Occupation is the current job or role.
|
|
Occupation string `json:"occupation,omitempty" yaml:"occupation,omitempty"`
|
|
|
|
// BirthCity is where the persona was born.
|
|
BirthCity string `json:"birth_city,omitempty" yaml:"birth_city,omitempty"`
|
|
|
|
// CurrentCity is where the persona currently lives.
|
|
CurrentCity string `json:"current_city,omitempty" yaml:"current_city,omitempty"`
|
|
}
|