1010
1111namespace SmartRAG . Services ;
1212
13- public class DocumentSearchService (
14- IDocumentRepository documentRepository ,
15- IAIService aiService ,
16- IAIProviderFactory aiProviderFactory ,
17- IConfiguration configuration ,
18- SmartRagOptions options ,
19- ILogger < DocumentSearchService > logger ) : IDocumentSearchService
20- {
21-
22- /// <summary>
23- /// Sanitizes user input for safe logging by removing newlines and carriage returns.
24- /// </summary>
25- private static string SanitizeForLog ( string input )
26- {
27- if ( input == null ) return string . Empty ;
28- return input . Replace ( "\r " , "" ) . Replace ( "\n " , "" ) ;
29- }
13+ public class DocumentSearchService (
14+ IDocumentRepository documentRepository ,
15+ IAIService aiService ,
16+ IAIProviderFactory aiProviderFactory ,
17+ IConfiguration configuration ,
18+ SmartRagOptions options ,
19+ ILogger < DocumentSearchService > logger ) : IDocumentSearchService
20+ {
21+
22+ /// <summary>
23+ /// Sanitizes user input for safe logging by removing newlines and carriage returns.
24+ /// </summary>
25+ private static string SanitizeForLog ( string input )
26+ {
27+ if ( input == null ) return string . Empty ;
28+ return input . Replace ( "\r " , "" ) . Replace ( "\n " , "" ) ;
29+ }
3030 public async Task < List < DocumentChunk > > SearchDocumentsAsync ( string query , int maxResults = 5 )
3131 {
3232 if ( string . IsNullOrWhiteSpace ( query ) )
@@ -37,12 +37,12 @@ public async Task<List<DocumentChunk>> SearchDocumentsAsync(string query, int ma
3737
3838 if ( searchResults . Count > 0 )
3939 {
40- ServiceLogMessages . LogSearchResults ( logger , searchResults . Count , searchResults . Select ( c => c . DocumentId ) . Distinct ( ) . Count ( ) , null ) ;
40+ ServiceLogMessages . LogSearchResults ( logger , searchResults . Count , searchResults . Select ( c => c . DocumentId ) . Distinct ( ) . Count ( ) , null ) ;
4141
42- // Apply diversity selection to ensure chunks from different documents
43- var diverseResults = ApplyDiversityAndSelect ( searchResults , maxResults ) ;
42+ // Apply diversity selection to ensure chunks from different documents
43+ var diverseResults = ApplyDiversityAndSelect ( searchResults , maxResults ) ;
4444
45- ServiceLogMessages . LogDiverseResults ( logger , diverseResults . Count , diverseResults . Select ( c => c . DocumentId ) . Distinct ( ) . Count ( ) , null ) ;
45+ ServiceLogMessages . LogDiverseResults ( logger , diverseResults . Count , diverseResults . Select ( c => c . DocumentId ) . Distinct ( ) . Count ( ) , null ) ;
4646
4747 return diverseResults ;
4848 }
@@ -55,11 +55,11 @@ public async Task<RagResponse> GenerateRagAnswerAsync(string query, int maxResul
5555 if ( string . IsNullOrWhiteSpace ( query ) )
5656 throw new ArgumentException ( "Query cannot be empty" , nameof ( query ) ) ;
5757
58- // Check if this is a general conversation query
59- if ( IsGeneralConversationQuery ( query ) )
60- {
61- ServiceLogMessages . LogGeneralConversationQuery ( logger , null ) ;
62- var chatResponse = await HandleGeneralConversationAsync ( query ) ;
58+ // Check if this is a general conversation query
59+ if ( IsGeneralConversationQuery ( query ) )
60+ {
61+ ServiceLogMessages . LogGeneralConversationQuery ( logger , null ) ;
62+ var chatResponse = await HandleGeneralConversationAsync ( query ) ;
6363 return new RagResponse
6464 {
6565 Answer = chatResponse ,
@@ -75,21 +75,21 @@ public async Task<RagResponse> GenerateRagAnswerAsync(string query, int maxResul
7575
7676 public async Task < List < float > ? > GenerateEmbeddingWithFallbackAsync ( string text )
7777 {
78- try
79- {
80- ServiceLogMessages . LogPrimaryAIServiceAttempt ( logger , null ) ;
81- var result = await aiService . GenerateEmbeddingsAsync ( text ) ;
82- if ( result != null && result . Count > 0 )
83- {
84- ServiceLogMessages . LogPrimaryAIServiceSuccess ( logger , result . Count , null ) ;
85- return result ;
86- }
87- ServiceLogMessages . LogPrimaryAIServiceNull ( logger , null ) ;
88- }
89- catch ( Exception ex )
90- {
91- ServiceLogMessages . LogPrimaryAIServiceFailed ( logger , ex ) ;
92- }
78+ try
79+ {
80+ ServiceLogMessages . LogPrimaryAIServiceAttempt ( logger , null ) ;
81+ var result = await aiService . GenerateEmbeddingsAsync ( text ) ;
82+ if ( result != null && result . Count > 0 )
83+ {
84+ ServiceLogMessages . LogPrimaryAIServiceSuccess ( logger , result . Count , null ) ;
85+ return result ;
86+ }
87+ ServiceLogMessages . LogPrimaryAIServiceNull ( logger , null ) ;
88+ }
89+ catch ( Exception ex )
90+ {
91+ ServiceLogMessages . LogPrimaryAIServiceFailed ( logger , ex ) ;
92+ }
9393
9494 var embeddingProviders = new [ ]
9595 {
@@ -208,7 +208,7 @@ public async Task<RagResponse> GenerateRagAnswerAsync(string query, int maxResul
208208 if ( batchEmbeddings != null && batchEmbeddings . Count == texts . Count )
209209 return batchEmbeddings ;
210210 }
211- catch
211+ catch ( Exception )
212212 {
213213 // Fallback to individual generation if batch fails
214214 }
0 commit comments