using System; using Pgvector; namespace ManagerService.Data { /// /// Un morceau de contenu indexé pour la recherche sémantique du guide IA. /// Un contenu produit N lignes : une par morceau et par langue. /// public class ContentEmbedding { /// Dimension du vecteur, imposée par le modèle d'embedding (gemini-embedding-001). public const int Dimensions = 768; public long Id { get; set; } /// Client propriétaire. Filtre strict à la recherche : jamais de résultat d'une autre instance. public string InstanceId { get; set; } /// /// Configuration d'origine, null pour une ressource (Resource n'appartient qu'à une instance). /// Sert à privilégier la visite en cours au classement — jamais à filtrer. /// public string? ConfigurationId { get; set; } /// Id de la Section ou de la Resource dont ce morceau provient. public string ContentId { get; set; } public ContentSourceType ContentType { get; set; } /// Position du morceau dans le contenu source. public int ChunkIndex { get; set; } /// Page du document, null hors contenu paginé. Sert à citer la source. public int? PageNumber { get; set; } /// Langue de ce morceau (FR, NL, EN...). La recherche ne filtre pas dessus. public string Language { get; set; } /// Le texte réellement injecté dans le prompt. L'embedding ne sert qu'à retrouver cette ligne. public string Text { get; set; } public Vector Embedding { get; set; } public DateTime UpdatedAt { get; set; } } public enum ContentSourceType { Section = 0, Resource = 1 } }