Skip to content

Commit 4083cda

Browse files
committed
extract shared vector field creation fn
1 parent f7282c5 commit 4083cda

File tree

3 files changed

+15
-16
lines changed

3 files changed

+15
-16
lines changed

src/tools/mongodb/create/createVectorIndex.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
22
import {
3+
buildVectorFields,
34
DbOperationArgs,
45
MongoDBToolBase,
5-
VectorFieldType,
66
VectorIndexArgs,
77
} from "../mongodbTool.js";
88
import { OperationType, ToolArgs } from "../../tool.js";
@@ -29,17 +29,11 @@ export class CreateVectorIndexTool extends MongoDBToolBase {
2929
}: ToolArgs<typeof this.argsShape>): Promise<CallToolResult> {
3030
const provider = await this.ensureConnected();
3131

32-
const typedVectorField = { ...vectorDefinition, type: VectorFieldType.VECTOR };
33-
const typedFilterFields =
34-
filterFields?.map((v) => ({
35-
...v,
36-
type: VectorFieldType.FILTER,
37-
})) || [];
3832
const indexes = await provider.createSearchIndexes(database, collection, [
3933
{
4034
name,
4135
type: VECTOR_INDEX_TYPE,
42-
definition: { fields: [typedVectorField, ...typedFilterFields] },
36+
definition: { fields: buildVectorFields(vectorDefinition, filterFields) },
4337
},
4438
]);
4539

src/tools/mongodb/mongodbTool.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,17 @@ export const VectorIndexArgs = {
5555
.describe("Additional indexed fields that pre-filter data."),
5656
};
5757

58+
type VectorDefinitionType = z.infer<typeof VectorIndexArgs.vectorDefinition>;
59+
type FilterFieldsType = z.infer<typeof VectorIndexArgs.filterFields>;
60+
export function buildVectorFields(vectorDefinition: VectorDefinitionType, filterFields: FilterFieldsType): object[] {
61+
const typedVectorField = { ...vectorDefinition, type: VectorFieldType.VECTOR };
62+
const typedFilterFields = (filterFields ?? []).map((f) => ({
63+
...f,
64+
type: VectorFieldType.FILTER,
65+
}));
66+
return [typedVectorField, ...typedFilterFields];
67+
}
68+
5869
export abstract class MongoDBToolBase extends ToolBase {
5970
protected category: ToolCategory = "mongodb";
6071

src/tools/mongodb/update/updateVectorIndex.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
22
import {
3+
buildVectorFields,
34
DbOperationArgs,
45
MongoDBToolBase,
5-
VectorFieldType,
66
VectorIndexArgs,
77
} from "../mongodbTool.js";
88
import { OperationType, ToolArgs } from "../../tool.js";
@@ -28,16 +28,10 @@ export class UpdateVectorIndexTool extends MongoDBToolBase {
2828
}: ToolArgs<typeof this.argsShape>): Promise<CallToolResult> {
2929
const provider = await this.ensureConnected();
3030

31-
const typedVectorField = { ...vectorDefinition, type: VectorFieldType.VECTOR };
32-
const typedFilterFields =
33-
filterFields?.map((v) => ({
34-
...v,
35-
type: VectorFieldType.FILTER,
36-
})) || [];
3731
// @ts-expect-error: Interface expects a SearchIndexDefinition {definition: {fields}}. However,
3832
// passing fields at the root level is necessary for the call to succeed.
3933
await provider.updateSearchIndex(database, collection, name, {
40-
fields: [typedVectorField, ...typedFilterFields],
34+
fields: buildVectorFields(vectorDefinition, filterFields),
4135
});
4236

4337
return {

0 commit comments

Comments
 (0)