Skip to content

Commit

Permalink
add vector support for graphQL
Browse files Browse the repository at this point in the history
  • Loading branch information
shivaji-kharse committed Apr 16, 2024
1 parent 3a8de31 commit be1bae6
Show file tree
Hide file tree
Showing 114 changed files with 3,260 additions and 2,185 deletions.
72 changes: 61 additions & 11 deletions graphql/admin/admin.go
Original file line number Diff line number Diff line change
Expand Up @@ -508,11 +508,15 @@ var (
"getGQLSchema": stdAdminQryMWs,
// for queries and mutations related to User/Group, dgraph handles Guardian auth,
// so no need to apply GuardianAuth Middleware
"queryUser": minimalAdminQryMWs,
"queryGroup": minimalAdminQryMWs,
"getUser": minimalAdminQryMWs,
"getCurrentUser": minimalAdminQryMWs,
"getGroup": minimalAdminQryMWs,
"queryUser": minimalAdminQryMWs,
"queryGroup": minimalAdminQryMWs,
"queryEmbeddingSpec": minimalAdminQryMWs,
"queryModelSpec": minimalAdminQryMWs,
"getUser": minimalAdminQryMWs,
"getCurrentUser": minimalAdminQryMWs,
"getGroup": minimalAdminQryMWs,
"getEmbeddingSpec": minimalAdminQryMWs,
"getModelSpec": minimalAdminQryMWs,
}
adminMutationMWConfig = map[string]resolve.MutationMiddlewares{
"backup": gogMutMWs,
Expand All @@ -532,12 +536,18 @@ var (
"resetPassword": gogAclMutMWs,
// for queries and mutations related to User/Group, dgraph handles Guardian auth,
// so no need to apply GuardianAuth Middleware
"addUser": minimalAdminMutMWs,
"addGroup": minimalAdminMutMWs,
"updateUser": minimalAdminMutMWs,
"updateGroup": minimalAdminMutMWs,
"deleteUser": minimalAdminMutMWs,
"deleteGroup": minimalAdminMutMWs,
"addUser": minimalAdminMutMWs,
"addGroup": minimalAdminMutMWs,
"addEmbeddingSpec": minimalAdminMutMWs,
"addModelSpec": minimalAdminMutMWs,
"updateUser": minimalAdminMutMWs,
"updateGroup": minimalAdminMutMWs,
"updateEmbeddingSpec": minimalAdminMutMWs,
"updateModelSpec": minimalAdminMutMWs,
"deleteUser": minimalAdminMutMWs,
"deleteGroup": minimalAdminMutMWs,
"deleteEmbeddingSpec": minimalAdminMutMWs,
"deleteModelSpec": minimalAdminMutMWs,
}
// mainHealthStore stores the health of the main GraphQL server.
mainHealthStore = &GraphQLHealthStore{}
Expand Down Expand Up @@ -906,6 +916,14 @@ func (as *adminServer) addConnectedAdminResolvers() {
func(q schema.Query) resolve.QueryResolver {
return resolve.NewQueryResolver(qryRw, dgEx)
}).
WithQueryResolver("queryEmbeddingSpec",
func(q schema.Query) resolve.QueryResolver {
return resolve.NewQueryResolver(qryRw, dgEx)
}).
WithQueryResolver("queryModelSpec",
func(q schema.Query) resolve.QueryResolver {
return resolve.NewQueryResolver(qryRw, dgEx)
}).
WithQueryResolver("getGroup",
func(q schema.Query) resolve.QueryResolver {
return resolve.NewQueryResolver(qryRw, dgEx)
Expand All @@ -918,6 +936,14 @@ func (as *adminServer) addConnectedAdminResolvers() {
func(q schema.Query) resolve.QueryResolver {
return resolve.NewQueryResolver(qryRw, dgEx)
}).
WithQueryResolver("getEmbeddingSpec",
func(q schema.Query) resolve.QueryResolver {
return resolve.NewQueryResolver(qryRw, dgEx)
}).
WithQueryResolver("getModelSpec",
func(q schema.Query) resolve.QueryResolver {
return resolve.NewQueryResolver(qryRw, dgEx)
}).
WithMutationResolver("addUser",
func(m schema.Mutation) resolve.MutationResolver {
return resolve.NewDgraphResolver(resolve.NewAddRewriter(), dgEx)
Expand All @@ -926,6 +952,14 @@ func (as *adminServer) addConnectedAdminResolvers() {
func(m schema.Mutation) resolve.MutationResolver {
return resolve.NewDgraphResolver(NewAddGroupRewriter(), dgEx)
}).
WithMutationResolver("addEmbeddingSpec",
func(m schema.Mutation) resolve.MutationResolver {
return resolve.NewDgraphResolver(resolve.NewAddRewriter(), dgEx)
}).
WithMutationResolver("addModelSpec",
func(m schema.Mutation) resolve.MutationResolver {
return resolve.NewDgraphResolver(resolve.NewAddRewriter(), dgEx)
}).
WithMutationResolver("updateUser",
func(m schema.Mutation) resolve.MutationResolver {
return resolve.NewDgraphResolver(resolve.NewUpdateRewriter(), dgEx)
Expand All @@ -934,11 +968,27 @@ func (as *adminServer) addConnectedAdminResolvers() {
func(m schema.Mutation) resolve.MutationResolver {
return resolve.NewDgraphResolver(NewUpdateGroupRewriter(), dgEx)
}).
WithMutationResolver("updateEmbeddingSpec",
func(m schema.Mutation) resolve.MutationResolver {
return resolve.NewDgraphResolver(resolve.NewUpdateRewriter(), dgEx)
}).
WithMutationResolver("updateModelSpec",
func(m schema.Mutation) resolve.MutationResolver {
return resolve.NewDgraphResolver(resolve.NewUpdateRewriter(), dgEx)
}).
WithMutationResolver("deleteUser",
func(m schema.Mutation) resolve.MutationResolver {
return resolve.NewDgraphResolver(resolve.NewDeleteRewriter(), dgEx)
}).
WithMutationResolver("deleteGroup",
func(m schema.Mutation) resolve.MutationResolver {
return resolve.NewDgraphResolver(resolve.NewDeleteRewriter(), dgEx)
}).
WithMutationResolver("deleteEmbeddingSpec",
func(m schema.Mutation) resolve.MutationResolver {
return resolve.NewDgraphResolver(resolve.NewDeleteRewriter(), dgEx)
}).
WithMutationResolver("deleteModelSpec",
func(m schema.Mutation) resolve.MutationResolver {
return resolve.NewDgraphResolver(resolve.NewDeleteRewriter(), dgEx)
})
Expand Down
151 changes: 149 additions & 2 deletions graphql/admin/endpoints_ee.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@
* may obtain a copy of the License at
*
* https://github.com/dgraph-io/dgraph/blob/main/licenses/DCL.txt
*
* Oct 2023: added Embedding related types and functions
* underlying DQL schema for embeddings is defined in schema.go
* resolvers are declared in admin.go
*/

package admin
Expand Down Expand Up @@ -274,6 +278,47 @@ const adminTypes = `
groups: [Group] @dgraph(pred: "dgraph.user.group")
}
type EmbeddingSpec @dgraph(type: "hypermode.type.EmbeddingSpec") {
"""
unique id of embedding spec based on entityType.predicate, Dgraph ensures uniqueness of id.
"""
id: String! @id @dgraph(pred: "hypermode.embedding.id")
"""
The type of object having this predicate.
"""
entityType: String! @dgraph(pred: "hypermode.embedding.entityType")
"""
The vector predicate computed by this embedding.
"""
predicate: String! @dgraph(pred: "hypermode.embedding.predicate")
"""
The model spec used to compute the embedding
"""
modelSpec: ModelSpec! @dgraph(pred: "hypermode.embedding.modelSpec")
"""
the query used to build the prompt for this embedding
"""
query: String! @dgraph(pred: "hypermode.embedding.query")
"""
the prompt used to build the embedding
"""
prompt: String @dgraph(pred: "hypermode.embedding.prompt")
}
type ModelSpec @dgraph(type: "hypermode.type.ModelSpec") {
"""
unique id of the model, given from hypermode console.
"""
id: String! @id @dgraph(pred: "hypermode.model.id")
"""
Type of the model.
"""
type: String! @dgraph(pred: "hypermode.model.type")
"""
Endpoint of the model.
"""
endpoint: String! @dgraph(pred: "hypermode.model.endpoint")
}
type Group @dgraph(type: "dgraph.type.Group") {
Expand Down Expand Up @@ -330,6 +375,21 @@ const adminTypes = `
groups: [GroupRef]
}
input AddEmbeddingSpecInput {
id: String!
entityType: String!
predicate: String!
query: String!
prompt: String!
modelSpec: ModelSpecRef!
}
input AddModelSpecInput {
id: String!
type: String!
endpoint: String!
}
input AddGroupInput {
name: String!
rules: [RuleRef]
Expand Down Expand Up @@ -376,6 +436,26 @@ const adminTypes = `
not: UserFilter
}
input ModelSpecRef {
id: String!
type: String!
endpoint: String!
}
input EmbeddingSpecFilter {
id: StringHashFilter
and: EmbeddingSpecFilter
or: EmbeddingSpecFilter
not: EmbeddingSpecFilter
}
input ModelSpecFilter {
id: StringHashFilter
and: ModelSpecFilter
or: ModelSpecFilter
not: ModelSpecFilter
}
input UserOrder {
asc: UserOrderable
desc: UserOrderable
Expand All @@ -393,12 +473,33 @@ const adminTypes = `
groups: [GroupRef]
}
input EmbeddingSpecPatch {
query: String
prompt: String
modelSpec: ModelSpecRef
}
input ModelSpecPatch {
type: String
endpoint: String
}
input UpdateUserInput {
filter: UserFilter!
set: UserPatch
remove: UserPatch
}
input UpdateEmbeddingSpecInput {
filter: EmbeddingSpecFilter!
set: EmbeddingSpecPatch
}
input UpdateModelSpecInput {
filter: ModelSpecFilter!
set: ModelSpecPatch
}
input GroupFilter {
name: StringHashFilter
and: UserFilter
Expand All @@ -423,6 +524,14 @@ const adminTypes = `
type AddUserPayload {
user: [User]
}
type AddEmbeddingSpecPayload {
embeddingSpec: [EmbeddingSpec]
}
type AddModelSpecPayload {
modelSpec: [ModelSpec]
}
type AddGroupPayload {
group: [Group]
Expand All @@ -437,6 +546,16 @@ const adminTypes = `
msg: String
numUids: Int
}
type DeleteEmbeddingSpecPayload {
msg: String
numUids: Int
}
type DeleteModelSpecPayload {
msg: String
numUids: Int
}
input AddNamespaceInput {
"""
Expand Down Expand Up @@ -511,6 +630,16 @@ const adminMutations = `
in an error.
"""
addUser(input: [AddUserInput!]!): AddUserPayload
"""
Add an embedding spec. You must pass in a full model spec object, as that isn't a supported resolver
"""
addEmbeddingSpec(input: [AddEmbeddingSpecInput!]!): AddEmbeddingSpecPayload
"""
Add a model spec.
"""
addModelSpec(input: [AddModelSpecInput!]!): AddModelSpecPayload
"""
Add a new group and (optionally) set the rules for the group.
Expand All @@ -530,8 +659,22 @@ const adminMutations = `
"""
updateGroup(input: UpdateGroupInput!): AddGroupPayload
"""
Update embedding specs, their queries, prompts and model specs. If the filter doesn't match
any embedding specs, the mutation has no effect.
"""
updateEmbeddingSpec(input: UpdateEmbeddingSpecInput!): AddEmbeddingSpecPayload
"""
Update model specs, their types and endpoints. If the filter doesn't match
any model specs, the mutation has no effect.
"""
updateModelSpec(input: UpdateModelSpecInput!): AddModelSpecPayload
deleteGroup(filter: GroupFilter!): DeleteGroupPayload
deleteUser(filter: UserFilter!): DeleteUserPayload
deleteEmbeddingSpec(filter: EmbeddingSpecFilter!): DeleteEmbeddingSpecPayload
deleteModelSpec(filter: ModelSpecFilter!): DeleteModelSpecPayload
"""
Add a new namespace.
Expand All @@ -558,15 +701,19 @@ const adminMutations = `
const adminQueries = `
getUser(name: String!): User
getGroup(name: String!): Group
getEmbeddingSpec(id: String!): EmbeddingSpec
getModelSpec(id: String!): ModelSpec
"""
Get the currently logged in user.
"""
getCurrentUser: User
queryUser(filter: UserFilter, order: UserOrder, first: Int, offset: Int): [User]
queryGroup(filter: GroupFilter, order: GroupOrder, first: Int, offset: Int): [Group]
queryEmbeddingSpec(filter: EmbeddingSpecFilter, first: Int, offset: Int): [EmbeddingSpec]
queryModelSpec(filter: ModelSpecFilter, first: Int, offset: Int): [ModelSpec]
"""
Get the information about the backups at a given location.
"""
Expand Down
Loading

0 comments on commit be1bae6

Please sign in to comment.