using System.ComponentModel.DataAnnotations; namespace ChatRAG.Settings { /// /// Configurações para verificação de confiança por estratégia /// public class ConfidenceSettings { public bool StrictModeByDefault { get; set; } = true; [Required] public Dictionary Thresholds { get; set; } = new() { ["overview"] = new ConfidenceThresholds { MinDocuments = 5, MinRelevantDocuments = 3, MinHighQualityDocuments = 1, MinContextLength = 1000, MinOverallScore = 0.3, MinMaxScore = 0.4, MinAverageScore = 0.3 }, ["specific"] = new ConfidenceThresholds { MinDocuments = 2, MinRelevantDocuments = 2, MinHighQualityDocuments = 1, MinContextLength = 500, MinOverallScore = 0.4, MinMaxScore = 0.5, MinAverageScore = 0.4 }, ["detailed"] = new ConfidenceThresholds { MinDocuments = 3, MinRelevantDocuments = 2, MinHighQualityDocuments = 2, MinContextLength = 800, MinOverallScore = 0.5, MinMaxScore = 0.6, MinAverageScore = 0.5 } }; /// /// Mensagens de fallback por idioma /// public Dictionary FallbackMessages { get; set; } = new() { ["pt"] = new ConfidenceFallbackMessages { NoDocuments = "Não encontrei informações sobre isso no projeto atual. Você poderia reformular a pergunta ou ser mais específico?", NoRelevantDocuments = "Encontrei alguns documentos, mas nenhum parece diretamente relacionado à sua pergunta. Pode tentar ser mais específico ou usar outras palavras-chave?", InsufficientOverview = "Não tenho informações suficientes para fornecer uma visão geral completa do projeto. Talvez você possa fazer uma pergunta mais específica?", InsufficientSpecific = "Não encontrei documentação suficiente sobre esse tópico específico. Você pode tentar reformular a pergunta?", InsufficientDetailed = "Preciso de mais contexto técnico para responder adequadamente. Você pode ser mais específico sobre o que está procurando?", Generic = "Não tenho informações suficientes para responder com segurança. Pode tentar reformular a pergunta?" }, ["en"] = new ConfidenceFallbackMessages { NoDocuments = "I couldn't find information about this in the current project. Could you rephrase the question or be more specific?", NoRelevantDocuments = "I found some documents, but none seem directly related to your question. Could you try being more specific or use different keywords?", InsufficientOverview = "I don't have enough information to provide a complete project overview. Perhaps you could ask a more specific question?", InsufficientSpecific = "I didn't find sufficient documentation about this specific topic. Could you try rephrasing the question?", InsufficientDetailed = "I need more technical context to respond adequately. Could you be more specific about what you're looking for?", Generic = "I don't have enough information to respond safely. Could you try rephrasing the question?" } }; } /// /// Thresholds de confiança para uma estratégia específica /// public class ConfidenceThresholds { /// /// Número mínimo de documentos encontrados /// public int MinDocuments { get; set; } /// /// Número mínimo de documentos relevantes (score >= 0.3) /// public int MinRelevantDocuments { get; set; } /// /// Número mínimo de documentos de alta qualidade (score >= 0.6) /// public int MinHighQualityDocuments { get; set; } /// /// Tamanho mínimo do contexto combinado (caracteres) /// public int MinContextLength { get; set; } /// /// Score geral mínimo (0.0 a 1.0) /// public double MinOverallScore { get; set; } /// /// Score máximo mínimo entre os documentos encontrados /// public double MinMaxScore { get; set; } /// /// Score médio mínimo entre os documentos encontrados /// public double MinAverageScore { get; set; } } /// /// Mensagens de fallback quando não há confiança suficiente /// public class ConfidenceFallbackMessages { public string NoDocuments { get; set; } = ""; public string NoRelevantDocuments { get; set; } = ""; public string InsufficientOverview { get; set; } = ""; public string InsufficientSpecific { get; set; } = ""; public string InsufficientDetailed { get; set; } = ""; public string Generic { get; set; } = ""; } }