fazeel007 commited on
Commit
b5baf9e
Β·
1 Parent(s): 24425b1
Files changed (1) hide show
  1. server/routes.ts +33 -15
server/routes.ts CHANGED
@@ -397,7 +397,7 @@ function transformWebResultToDocument(result: any, rank: number, query: string):
397
  search_type: result.type,
398
  fetched_at: new Date().toISOString()
399
  },
400
- relevanceScore: Math.max(0.4, 1 - (rank * 0.15)),
401
  rank: rank + 1,
402
  searchQuery: query,
403
  retrievalTime: Math.random() * 0.2 + 0.1,
@@ -544,7 +544,7 @@ function transformGitHubRepoToDocument(repo: GitHubRepo, rank: number, query: st
544
  created_at: repo.created_at,
545
  updated_at: repo.updated_at
546
  },
547
- relevanceScore: Math.max(0.5, 1 - (rank * 0.1)),
548
  rank: rank + 1,
549
  searchQuery: query,
550
  retrievalTime: Math.random() * 0.3 + 0.1,
@@ -856,14 +856,14 @@ Return format: [4, 21, 23, 2, 7]`;
856
  const docIds = JSON.parse(jsonMatch[0]);
857
  console.log(`🎯 AI extracted document IDs: ${JSON.stringify(docIds)}`);
858
 
859
- // Get the relevant documents in order
860
  allDocuments = docIds
861
  .map((id: number) => allDocs.find(doc => doc.id === id))
862
  .filter((doc: any) => doc !== undefined)
863
  .slice(0, searchRequest.limit)
864
  .map((doc: any, index: number) => ({
865
  ...doc,
866
- relevanceScore: 1.0 - (index * 0.1),
867
  rank: index + 1,
868
  snippet: doc.content.substring(0, 200) + '...'
869
  }));
@@ -884,10 +884,25 @@ Return format: [4, 21, 23, 2, 7]`;
884
  const localResults = await storage.searchDocuments(searchRequest);
885
  allDocuments = localResults.results || [];
886
  }
 
 
 
 
 
 
 
 
 
 
 
887
  } else {
888
  // Use regular keyword search for other search types
889
  const localResults = await storage.searchDocuments(searchRequest);
890
- allDocuments = localResults.results || [];
 
 
 
 
891
  }
892
 
893
  // Validate URLs in local storage results as well
@@ -914,10 +929,9 @@ Return format: [4, 21, 23, 2, 7]`;
914
  }
915
  }
916
 
917
- // If local results are insufficient, enhance with external sources
918
- const minResults = 3;
919
- if (allDocuments.length < minResults) {
920
- console.log(`Local search returned ${allDocuments.length} results, fetching external sources...`);
921
 
922
  // Check if we should search GitHub for code-related queries
923
  const isCodeQuery = searchRequest.query.toLowerCase().includes('python') ||
@@ -933,16 +947,16 @@ Return format: [4, 21, 23, 2, 7]`;
933
  searchPromises.push(
934
  searchGitHubRepos(searchRequest.query, Math.min(5, searchRequest.limit))
935
  .then(repos => repos.map((repo, index) =>
936
- transformGitHubRepoToDocument(repo, index + allDocuments.length, searchRequest.query)
937
  ))
938
  );
939
  }
940
 
941
- // Always include web search for broader coverage
942
  searchPromises.push(
943
- searchWeb(searchRequest.query, Math.min(5, searchRequest.limit - allDocuments.length))
944
  .then(webResults => webResults.map((result, index) =>
945
- transformWebResultToDocument(result, index + allDocuments.length, searchRequest.query)
946
  ))
947
  );
948
 
@@ -950,10 +964,14 @@ Return format: [4, 21, 23, 2, 7]`;
950
  const externalResults = await Promise.all(searchPromises);
951
  const flattenedResults = externalResults.flat();
952
 
953
- // Combine and sort all results by relevance
954
- allDocuments = [...allDocuments, ...flattenedResults]
955
  .sort((a, b) => b.relevanceScore - a.relevanceScore)
956
  .slice(0, searchRequest.limit);
 
 
 
 
957
  }
958
 
959
  const searchTime = (Date.now() - startTime) / 1000;
 
397
  search_type: result.type,
398
  fetched_at: new Date().toISOString()
399
  },
400
+ relevanceScore: Math.max(0.2, 0.6 - (rank * 0.1)), // Lower scores for external results
401
  rank: rank + 1,
402
  searchQuery: query,
403
  retrievalTime: Math.random() * 0.2 + 0.1,
 
544
  created_at: repo.created_at,
545
  updated_at: repo.updated_at
546
  },
547
+ relevanceScore: Math.max(0.3, 0.7 - (rank * 0.1)), // Lower scores for GitHub results
548
  rank: rank + 1,
549
  searchQuery: query,
550
  retrievalTime: Math.random() * 0.3 + 0.1,
 
856
  const docIds = JSON.parse(jsonMatch[0]);
857
  console.log(`🎯 AI extracted document IDs: ${JSON.stringify(docIds)}`);
858
 
859
+ // Get the relevant documents in order with boosted scores
860
  allDocuments = docIds
861
  .map((id: number) => allDocs.find(doc => doc.id === id))
862
  .filter((doc: any) => doc !== undefined)
863
  .slice(0, searchRequest.limit)
864
  .map((doc: any, index: number) => ({
865
  ...doc,
866
+ relevanceScore: Math.min(1.0 - (index * 0.05), 1.0), // Higher scores for knowledge base
867
  rank: index + 1,
868
  snippet: doc.content.substring(0, 200) + '...'
869
  }));
 
884
  const localResults = await storage.searchDocuments(searchRequest);
885
  allDocuments = localResults.results || [];
886
  }
887
+
888
+ // If AI search failed or returned no results, fallback to regular search
889
+ if (allDocuments.length === 0) {
890
+ console.log('πŸ”„ AI search returned no results, falling back to regular keyword search...');
891
+ const localResults = await storage.searchDocuments(searchRequest);
892
+ // Boost relevance scores for knowledge base documents to prioritize them
893
+ allDocuments = (localResults.results || []).map(doc => ({
894
+ ...doc,
895
+ relevanceScore: Math.min(doc.relevanceScore + 0.5, 1.0) // Boost by 0.5
896
+ }));
897
+ }
898
  } else {
899
  // Use regular keyword search for other search types
900
  const localResults = await storage.searchDocuments(searchRequest);
901
+ // Boost relevance scores for knowledge base documents to prioritize them
902
+ allDocuments = (localResults.results || []).map(doc => ({
903
+ ...doc,
904
+ relevanceScore: Math.min(doc.relevanceScore + 0.5, 1.0) // Boost by 0.5
905
+ }));
906
  }
907
 
908
  // Validate URLs in local storage results as well
 
929
  }
930
  }
931
 
932
+ // If we have local results, prioritize them. Only add external sources if no local results found.
933
+ if (allDocuments.length === 0) {
934
+ console.log(`No local results found for "${searchRequest.query}", searching external sources...`);
 
935
 
936
  // Check if we should search GitHub for code-related queries
937
  const isCodeQuery = searchRequest.query.toLowerCase().includes('python') ||
 
947
  searchPromises.push(
948
  searchGitHubRepos(searchRequest.query, Math.min(5, searchRequest.limit))
949
  .then(repos => repos.map((repo, index) =>
950
+ transformGitHubRepoToDocument(repo, index, searchRequest.query)
951
  ))
952
  );
953
  }
954
 
955
+ // Always include web search for broader coverage when no local results
956
  searchPromises.push(
957
+ searchWeb(searchRequest.query, Math.min(5, searchRequest.limit))
958
  .then(webResults => webResults.map((result, index) =>
959
+ transformWebResultToDocument(result, index, searchRequest.query)
960
  ))
961
  );
962
 
 
964
  const externalResults = await Promise.all(searchPromises);
965
  const flattenedResults = externalResults.flat();
966
 
967
+ // Sort external results by relevance (external results have lower base scores)
968
+ allDocuments = flattenedResults
969
  .sort((a, b) => b.relevanceScore - a.relevanceScore)
970
  .slice(0, searchRequest.limit);
971
+ } else {
972
+ console.log(`Found ${allDocuments.length} local documents, prioritizing knowledge base results.`);
973
+ // Limit local results to the requested amount
974
+ allDocuments = allDocuments.slice(0, searchRequest.limit);
975
  }
976
 
977
  const searchTime = (Date.now() - startTime) / 1000;