diff --git a/SqlDatabaseVectorSearch/Components/Pages/Ask.razor b/SqlDatabaseVectorSearch/Components/Pages/Ask.razor index dbc459e..297ed39 100644 --- a/SqlDatabaseVectorSearch/Components/Pages/Ask.razor +++ b/SqlDatabaseVectorSearch/Components/Pages/Ask.razor @@ -314,18 +314,20 @@ return (text ?? string.Empty, citations); } - var pattern = "(.*?)<\\/citation>"; + var pattern = @"[^']*)'\s+chunk-id='(?[^']*)'\s+filename='(?[^']*)'\s+page-number='(?[^']*)'>\s*(?.*?)\s*"; var matches = Regex.Matches(text, pattern, RegexOptions.Singleline); foreach (Match match in matches) { - if (match.Success && match.Groups.Count == 4) + if (match.Success) { citations.Add(new Citation { - FileName = match.Groups[1].Value, - PageNumber = match.Groups[2].Value, - Quote = match.Groups[3].Value + DocumentId = Guid.Parse(match.Groups["documentId"].Value), + ChunkId = Guid.Parse(match.Groups["chunkId"].Value), + FileName = match.Groups["filename"].Value, + PageNumber = match.Groups["pageNumber"].Value, + Quote = match.Groups["quote"].Value }); } } @@ -358,10 +360,14 @@ public class Citation { + public Guid DocumentId { get; set; } + + public Guid ChunkId { get; set; } + public string FileName { get; set; } = null!; public string Quote { get; set; } = null!; - public string PageNumber { get; set; } = null!; + public string? PageNumber { get; set; } } } \ No newline at end of file diff --git a/SqlDatabaseVectorSearch/Services/ChatService.cs b/SqlDatabaseVectorSearch/Services/ChatService.cs index 77686cb..cc19d8a 100644 --- a/SqlDatabaseVectorSearch/Services/ChatService.cs +++ b/SqlDatabaseVectorSearch/Services/ChatService.cs @@ -133,7 +133,7 @@ public class ChatService(IChatCompletionService chatCompletionService, Tokenizer First provide your complete answer, then add a blank line, then list all citations. Use this XML format for citations: - exact quote here + exact quote here STRICT RULES for citations: - Citations MUST NEVER appear inside, before, or between sentences of your answer. They MUST be grouped together ONLY at the end, after a blank line. @@ -162,7 +162,7 @@ public class ChatService(IChatCompletionService chatCompletionService, Tokenizer foreach (var chunk in chunks) { - var text = $"--- {chunk.Document.Name} (Document ID: {chunk.Document.Id} | Chunk ID: {chunk.Id}) {Environment.NewLine}{chunk.Content}{Environment.NewLine}"; + var text = $"--- {chunk.Document.Name} (Document ID: {chunk.Document.Id} | Chunk ID: {chunk.Id} | Page Number: 1) {Environment.NewLine}{chunk.Content}{Environment.NewLine}"; var tokenCount = tokenizerService.CountChatCompletionTokens(text); if (tokenCount > availableTokens)