Skip to content

Commit d371ed8

Browse files
committed
restrict to dandisets in semantic search in chat tools
1 parent 78c82b2 commit d371ed8

File tree

4 files changed

+19
-5
lines changed

4 files changed

+19
-5
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# Changes
22

3+
## June 10, 2025
4+
- Added optional dandisets parameter to DANDI semantic search for filtering results to specific datasets
5+
36
## June 5, 2025
47
- Modernized Python package structure with pyproject.toml configuration. Removed legacy setup.py, setup.cfg, and setup.cfg.j2 files
58
- Added option for using local neurosift server with the CLI

nextjs/neurosift-chat-agent-tools/src/app/api/dandi_semantic_search/route.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ import { dandiSemanticSearch } from '@/lib/tools/dandi_semantic_search';
44
export async function POST(request: NextRequest) {
55
try {
66
const body = await request.json();
7-
const { query, limit } = body;
7+
const { query, limit, dandisets } = body;
88

99
if (!query) {
1010
return NextResponse.json({ error: 'Query is required' }, { status: 400 });
1111
}
1212

13-
const results = await dandiSemanticSearch(query, limit);
13+
const results = await dandiSemanticSearch(query, limit, dandisets);
1414
return NextResponse.json({ results });
1515
} catch (error) {
1616
console.error('Error in DANDI semantic search:', error);

nextjs/neurosift-chat-agent-tools/src/app/api/tools/route.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,13 @@ The output is the same format as dandi_search.
5656
type: "number",
5757
description: "Maximum number of results",
5858
default: 10
59+
},
60+
dandisets: {
61+
type: "array",
62+
items: {
63+
type: "string"
64+
},
65+
description: "Optional list of dandiset IDs to restrict search results to"
5966
}
6067
}
6168
}

nextjs/neurosift-chat-agent-tools/src/lib/tools/dandi_semantic_search.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,12 @@ const doEmbedding = async (text: string, model: string) => {
8383

8484
const findSimilarDandisetIds = (
8585
embeddings: { [dandisetId: string]: number[] },
86-
embedding: number[]
86+
embedding: number[],
87+
restrictToDandisets?: string[]
8788
) => {
8889
const similarities: { dandisetId: string; similarity: number }[] = [];
8990
for (const dandisetId in embeddings) {
91+
if (restrictToDandisets && !restrictToDandisets.includes(dandisetId)) continue;
9092
const embedding2 = embeddings[dandisetId];
9193
if (!embedding2) continue;
9294
const similarity = cosineSimilarity(embedding, embedding2);
@@ -118,7 +120,8 @@ interface DandiSearchResult {
118120

119121
export async function dandiSemanticSearch(
120122
query: string,
121-
limit: number = 10
123+
limit: number = 10,
124+
dandisets?: string[]
122125
): Promise<DandiSearchResult[]> {
123126
const embeddings = await loadEmbeddings();
124127
if (!embeddings) {
@@ -131,7 +134,8 @@ export async function dandiSemanticSearch(
131134
}
132135
let similarDandisetIds = findSimilarDandisetIds(
133136
embeddings,
134-
queryEmbedding.embedding
137+
queryEmbedding.embedding,
138+
dandisets
135139
);
136140
similarDandisetIds = similarDandisetIds.slice(0, limit);
137141

0 commit comments

Comments
 (0)