diff --git a/src/openapi/schema.ts b/src/openapi/schema.ts index d6f3bbb4..598ea51b 100644 --- a/src/openapi/schema.ts +++ b/src/openapi/schema.ts @@ -231,7 +231,7 @@ export interface paths { } export interface definitions { - UserInfo: { + UserOwnInfo: { /** @description The groups associated to the user */ groups?: string[]; roles?: definitions['Role'][]; @@ -1615,7 +1615,7 @@ export interface operations { responses: { /** Info about the user */ 200: { - schema: definitions['UserInfo']; + schema: definitions['UserOwnInfo']; }; /** Unauthorized or invalid credentials. */ 401: unknown; diff --git a/src/openapi/types.ts b/src/openapi/types.ts index 304dd1d5..054ab10d 100644 --- a/src/openapi/types.ts +++ b/src/openapi/types.ts @@ -54,7 +54,7 @@ export type WeaviateMultiTenancyConfig = WeaviateClass['multiTenancyConfig']; export type WeaviateReplicationConfig = WeaviateClass['replicationConfig']; export type WeaviateShardingConfig = WeaviateClass['shardingConfig']; export type WeaviateShardStatus = definitions['ShardStatusGetResponse']; -export type WeaviateUser = definitions['UserInfo']; +export type WeaviateUser = definitions['UserOwnInfo']; export type WeaviateVectorIndexConfig = WeaviateClass['vectorIndexConfig']; export type WeaviateVectorsConfig = WeaviateClass['vectorConfig']; export type WeaviateVectorConfig = definitions['VectorConfig']; diff --git a/src/proto/v1/generative.ts b/src/proto/v1/generative.ts index 12b1619f..2abae4ba 100644 --- a/src/proto/v1/generative.ts +++ b/src/proto/v1/generative.ts @@ -51,6 +51,7 @@ export interface GenerativeProvider { google?: GenerativeGoogle | undefined; databricks?: GenerativeDatabricks | undefined; friendliai?: GenerativeFriendliAI | undefined; + nvidia?: GenerativeNvidia | undefined; } export interface GenerativeAnthropic { @@ -61,6 +62,8 @@ export interface GenerativeAnthropic { topK?: number | undefined; topP?: number | undefined; stopSequences?: TextArray | undefined; + images?: TextArray | undefined; + imageProperties?: TextArray | undefined; } export interface GenerativeAnyscale { @@ -77,6 +80,8 @@ export interface GenerativeAWS { endpoint?: string | undefined; targetModel?: string | undefined; targetVariant?: string | undefined; + images?: TextArray | undefined; + imageProperties?: TextArray | undefined; } export interface GenerativeCohere { @@ -106,6 +111,8 @@ export interface GenerativeOllama { apiEndpoint?: string | undefined; model?: string | undefined; temperature?: number | undefined; + images?: TextArray | undefined; + imageProperties?: TextArray | undefined; } export interface GenerativeOpenAI { @@ -122,6 +129,8 @@ export interface GenerativeOpenAI { resourceName?: string | undefined; deploymentId?: string | undefined; isAzure?: boolean | undefined; + images?: TextArray | undefined; + imageProperties?: TextArray | undefined; } export interface GenerativeGoogle { @@ -137,6 +146,8 @@ export interface GenerativeGoogle { projectId?: string | undefined; endpointId?: string | undefined; region?: string | undefined; + images?: TextArray | undefined; + imageProperties?: TextArray | undefined; } export interface GenerativeDatabricks { @@ -162,6 +173,14 @@ export interface GenerativeFriendliAI { topP?: number | undefined; } +export interface GenerativeNvidia { + baseUrl?: string | undefined; + model?: string | undefined; + temperature?: number | undefined; + topP?: number | undefined; + maxTokens?: number | undefined; +} + export interface GenerativeAnthropicMetadata { usage: GenerativeAnthropicMetadata_Usage | undefined; } @@ -273,6 +292,16 @@ export interface GenerativeFriendliAIMetadata_Usage { totalTokens?: number | undefined; } +export interface GenerativeNvidiaMetadata { + usage?: GenerativeNvidiaMetadata_Usage | undefined; +} + +export interface GenerativeNvidiaMetadata_Usage { + promptTokens?: number | undefined; + completionTokens?: number | undefined; + totalTokens?: number | undefined; +} + export interface GenerativeMetadata { anthropic?: GenerativeAnthropicMetadata | undefined; anyscale?: GenerativeAnyscaleMetadata | undefined; @@ -285,6 +314,7 @@ export interface GenerativeMetadata { google?: GenerativeGoogleMetadata | undefined; databricks?: GenerativeDatabricksMetadata | undefined; friendliai?: GenerativeFriendliAIMetadata | undefined; + nvidia?: GenerativeNvidiaMetadata | undefined; } export interface GenerativeReply { @@ -630,6 +660,7 @@ function createBaseGenerativeProvider(): GenerativeProvider { google: undefined, databricks: undefined, friendliai: undefined, + nvidia: undefined, }; } @@ -671,6 +702,9 @@ export const GenerativeProvider = { if (message.friendliai !== undefined) { GenerativeFriendliAI.encode(message.friendliai, writer.uint32(98).fork()).ldelim(); } + if (message.nvidia !== undefined) { + GenerativeNvidia.encode(message.nvidia, writer.uint32(106).fork()).ldelim(); + } return writer; }, @@ -765,6 +799,13 @@ export const GenerativeProvider = { message.friendliai = GenerativeFriendliAI.decode(reader, reader.uint32()); continue; + case 13: + if (tag !== 106) { + break; + } + + message.nvidia = GenerativeNvidia.decode(reader, reader.uint32()); + continue; } if ((tag & 7) === 4 || tag === 0) { break; @@ -788,6 +829,7 @@ export const GenerativeProvider = { google: isSet(object.google) ? GenerativeGoogle.fromJSON(object.google) : undefined, databricks: isSet(object.databricks) ? GenerativeDatabricks.fromJSON(object.databricks) : undefined, friendliai: isSet(object.friendliai) ? GenerativeFriendliAI.fromJSON(object.friendliai) : undefined, + nvidia: isSet(object.nvidia) ? GenerativeNvidia.fromJSON(object.nvidia) : undefined, }; }, @@ -829,6 +871,9 @@ export const GenerativeProvider = { if (message.friendliai !== undefined) { obj.friendliai = GenerativeFriendliAI.toJSON(message.friendliai); } + if (message.nvidia !== undefined) { + obj.nvidia = GenerativeNvidia.toJSON(message.nvidia); + } return obj; }, @@ -869,6 +914,9 @@ export const GenerativeProvider = { message.friendliai = (object.friendliai !== undefined && object.friendliai !== null) ? GenerativeFriendliAI.fromPartial(object.friendliai) : undefined; + message.nvidia = (object.nvidia !== undefined && object.nvidia !== null) + ? GenerativeNvidia.fromPartial(object.nvidia) + : undefined; return message; }, }; @@ -882,6 +930,8 @@ function createBaseGenerativeAnthropic(): GenerativeAnthropic { topK: undefined, topP: undefined, stopSequences: undefined, + images: undefined, + imageProperties: undefined, }; } @@ -908,6 +958,12 @@ export const GenerativeAnthropic = { if (message.stopSequences !== undefined) { TextArray.encode(message.stopSequences, writer.uint32(58).fork()).ldelim(); } + if (message.images !== undefined) { + TextArray.encode(message.images, writer.uint32(66).fork()).ldelim(); + } + if (message.imageProperties !== undefined) { + TextArray.encode(message.imageProperties, writer.uint32(74).fork()).ldelim(); + } return writer; }, @@ -967,6 +1023,20 @@ export const GenerativeAnthropic = { message.stopSequences = TextArray.decode(reader, reader.uint32()); continue; + case 8: + if (tag !== 66) { + break; + } + + message.images = TextArray.decode(reader, reader.uint32()); + continue; + case 9: + if (tag !== 74) { + break; + } + + message.imageProperties = TextArray.decode(reader, reader.uint32()); + continue; } if ((tag & 7) === 4 || tag === 0) { break; @@ -985,6 +1055,8 @@ export const GenerativeAnthropic = { topK: isSet(object.topK) ? globalThis.Number(object.topK) : undefined, topP: isSet(object.topP) ? globalThis.Number(object.topP) : undefined, stopSequences: isSet(object.stopSequences) ? TextArray.fromJSON(object.stopSequences) : undefined, + images: isSet(object.images) ? TextArray.fromJSON(object.images) : undefined, + imageProperties: isSet(object.imageProperties) ? TextArray.fromJSON(object.imageProperties) : undefined, }; }, @@ -1011,6 +1083,12 @@ export const GenerativeAnthropic = { if (message.stopSequences !== undefined) { obj.stopSequences = TextArray.toJSON(message.stopSequences); } + if (message.images !== undefined) { + obj.images = TextArray.toJSON(message.images); + } + if (message.imageProperties !== undefined) { + obj.imageProperties = TextArray.toJSON(message.imageProperties); + } return obj; }, @@ -1028,6 +1106,12 @@ export const GenerativeAnthropic = { message.stopSequences = (object.stopSequences !== undefined && object.stopSequences !== null) ? TextArray.fromPartial(object.stopSequences) : undefined; + message.images = (object.images !== undefined && object.images !== null) + ? TextArray.fromPartial(object.images) + : undefined; + message.imageProperties = (object.imageProperties !== undefined && object.imageProperties !== null) + ? TextArray.fromPartial(object.imageProperties) + : undefined; return message; }, }; @@ -1130,6 +1214,8 @@ function createBaseGenerativeAWS(): GenerativeAWS { endpoint: undefined, targetModel: undefined, targetVariant: undefined, + images: undefined, + imageProperties: undefined, }; } @@ -1156,6 +1242,12 @@ export const GenerativeAWS = { if (message.targetVariant !== undefined) { writer.uint32(106).string(message.targetVariant); } + if (message.images !== undefined) { + TextArray.encode(message.images, writer.uint32(114).fork()).ldelim(); + } + if (message.imageProperties !== undefined) { + TextArray.encode(message.imageProperties, writer.uint32(122).fork()).ldelim(); + } return writer; }, @@ -1215,6 +1307,20 @@ export const GenerativeAWS = { message.targetVariant = reader.string(); continue; + case 14: + if (tag !== 114) { + break; + } + + message.images = TextArray.decode(reader, reader.uint32()); + continue; + case 15: + if (tag !== 122) { + break; + } + + message.imageProperties = TextArray.decode(reader, reader.uint32()); + continue; } if ((tag & 7) === 4 || tag === 0) { break; @@ -1233,6 +1339,8 @@ export const GenerativeAWS = { endpoint: isSet(object.endpoint) ? globalThis.String(object.endpoint) : undefined, targetModel: isSet(object.targetModel) ? globalThis.String(object.targetModel) : undefined, targetVariant: isSet(object.targetVariant) ? globalThis.String(object.targetVariant) : undefined, + images: isSet(object.images) ? TextArray.fromJSON(object.images) : undefined, + imageProperties: isSet(object.imageProperties) ? TextArray.fromJSON(object.imageProperties) : undefined, }; }, @@ -1259,6 +1367,12 @@ export const GenerativeAWS = { if (message.targetVariant !== undefined) { obj.targetVariant = message.targetVariant; } + if (message.images !== undefined) { + obj.images = TextArray.toJSON(message.images); + } + if (message.imageProperties !== undefined) { + obj.imageProperties = TextArray.toJSON(message.imageProperties); + } return obj; }, @@ -1274,6 +1388,12 @@ export const GenerativeAWS = { message.endpoint = object.endpoint ?? undefined; message.targetModel = object.targetModel ?? undefined; message.targetVariant = object.targetVariant ?? undefined; + message.images = (object.images !== undefined && object.images !== null) + ? TextArray.fromPartial(object.images) + : undefined; + message.imageProperties = (object.imageProperties !== undefined && object.imageProperties !== null) + ? TextArray.fromPartial(object.imageProperties) + : undefined; return message; }, }; @@ -1632,7 +1752,13 @@ export const GenerativeMistral = { }; function createBaseGenerativeOllama(): GenerativeOllama { - return { apiEndpoint: undefined, model: undefined, temperature: undefined }; + return { + apiEndpoint: undefined, + model: undefined, + temperature: undefined, + images: undefined, + imageProperties: undefined, + }; } export const GenerativeOllama = { @@ -1646,6 +1772,12 @@ export const GenerativeOllama = { if (message.temperature !== undefined) { writer.uint32(25).double(message.temperature); } + if (message.images !== undefined) { + TextArray.encode(message.images, writer.uint32(34).fork()).ldelim(); + } + if (message.imageProperties !== undefined) { + TextArray.encode(message.imageProperties, writer.uint32(42).fork()).ldelim(); + } return writer; }, @@ -1677,6 +1809,20 @@ export const GenerativeOllama = { message.temperature = reader.double(); continue; + case 4: + if (tag !== 34) { + break; + } + + message.images = TextArray.decode(reader, reader.uint32()); + continue; + case 5: + if (tag !== 42) { + break; + } + + message.imageProperties = TextArray.decode(reader, reader.uint32()); + continue; } if ((tag & 7) === 4 || tag === 0) { break; @@ -1691,6 +1837,8 @@ export const GenerativeOllama = { apiEndpoint: isSet(object.apiEndpoint) ? globalThis.String(object.apiEndpoint) : undefined, model: isSet(object.model) ? globalThis.String(object.model) : undefined, temperature: isSet(object.temperature) ? globalThis.Number(object.temperature) : undefined, + images: isSet(object.images) ? TextArray.fromJSON(object.images) : undefined, + imageProperties: isSet(object.imageProperties) ? TextArray.fromJSON(object.imageProperties) : undefined, }; }, @@ -1705,6 +1853,12 @@ export const GenerativeOllama = { if (message.temperature !== undefined) { obj.temperature = message.temperature; } + if (message.images !== undefined) { + obj.images = TextArray.toJSON(message.images); + } + if (message.imageProperties !== undefined) { + obj.imageProperties = TextArray.toJSON(message.imageProperties); + } return obj; }, @@ -1716,6 +1870,12 @@ export const GenerativeOllama = { message.apiEndpoint = object.apiEndpoint ?? undefined; message.model = object.model ?? undefined; message.temperature = object.temperature ?? undefined; + message.images = (object.images !== undefined && object.images !== null) + ? TextArray.fromPartial(object.images) + : undefined; + message.imageProperties = (object.imageProperties !== undefined && object.imageProperties !== null) + ? TextArray.fromPartial(object.imageProperties) + : undefined; return message; }, }; @@ -1735,6 +1895,8 @@ function createBaseGenerativeOpenAI(): GenerativeOpenAI { resourceName: undefined, deploymentId: undefined, isAzure: undefined, + images: undefined, + imageProperties: undefined, }; } @@ -1779,6 +1941,12 @@ export const GenerativeOpenAI = { if (message.isAzure !== undefined) { writer.uint32(104).bool(message.isAzure); } + if (message.images !== undefined) { + TextArray.encode(message.images, writer.uint32(114).fork()).ldelim(); + } + if (message.imageProperties !== undefined) { + TextArray.encode(message.imageProperties, writer.uint32(122).fork()).ldelim(); + } return writer; }, @@ -1880,6 +2048,20 @@ export const GenerativeOpenAI = { message.isAzure = reader.bool(); continue; + case 14: + if (tag !== 114) { + break; + } + + message.images = TextArray.decode(reader, reader.uint32()); + continue; + case 15: + if (tag !== 122) { + break; + } + + message.imageProperties = TextArray.decode(reader, reader.uint32()); + continue; } if ((tag & 7) === 4 || tag === 0) { break; @@ -1904,6 +2086,8 @@ export const GenerativeOpenAI = { resourceName: isSet(object.resourceName) ? globalThis.String(object.resourceName) : undefined, deploymentId: isSet(object.deploymentId) ? globalThis.String(object.deploymentId) : undefined, isAzure: isSet(object.isAzure) ? globalThis.Boolean(object.isAzure) : undefined, + images: isSet(object.images) ? TextArray.fromJSON(object.images) : undefined, + imageProperties: isSet(object.imageProperties) ? TextArray.fromJSON(object.imageProperties) : undefined, }; }, @@ -1948,6 +2132,12 @@ export const GenerativeOpenAI = { if (message.isAzure !== undefined) { obj.isAzure = message.isAzure; } + if (message.images !== undefined) { + obj.images = TextArray.toJSON(message.images); + } + if (message.imageProperties !== undefined) { + obj.imageProperties = TextArray.toJSON(message.imageProperties); + } return obj; }, @@ -1969,6 +2159,12 @@ export const GenerativeOpenAI = { message.resourceName = object.resourceName ?? undefined; message.deploymentId = object.deploymentId ?? undefined; message.isAzure = object.isAzure ?? undefined; + message.images = (object.images !== undefined && object.images !== null) + ? TextArray.fromPartial(object.images) + : undefined; + message.imageProperties = (object.imageProperties !== undefined && object.imageProperties !== null) + ? TextArray.fromPartial(object.imageProperties) + : undefined; return message; }, }; @@ -1987,6 +2183,8 @@ function createBaseGenerativeGoogle(): GenerativeGoogle { projectId: undefined, endpointId: undefined, region: undefined, + images: undefined, + imageProperties: undefined, }; } @@ -2028,6 +2226,12 @@ export const GenerativeGoogle = { if (message.region !== undefined) { writer.uint32(98).string(message.region); } + if (message.images !== undefined) { + TextArray.encode(message.images, writer.uint32(106).fork()).ldelim(); + } + if (message.imageProperties !== undefined) { + TextArray.encode(message.imageProperties, writer.uint32(114).fork()).ldelim(); + } return writer; }, @@ -2122,6 +2326,20 @@ export const GenerativeGoogle = { message.region = reader.string(); continue; + case 13: + if (tag !== 106) { + break; + } + + message.images = TextArray.decode(reader, reader.uint32()); + continue; + case 14: + if (tag !== 114) { + break; + } + + message.imageProperties = TextArray.decode(reader, reader.uint32()); + continue; } if ((tag & 7) === 4 || tag === 0) { break; @@ -2145,6 +2363,8 @@ export const GenerativeGoogle = { projectId: isSet(object.projectId) ? globalThis.String(object.projectId) : undefined, endpointId: isSet(object.endpointId) ? globalThis.String(object.endpointId) : undefined, region: isSet(object.region) ? globalThis.String(object.region) : undefined, + images: isSet(object.images) ? TextArray.fromJSON(object.images) : undefined, + imageProperties: isSet(object.imageProperties) ? TextArray.fromJSON(object.imageProperties) : undefined, }; }, @@ -2186,6 +2406,12 @@ export const GenerativeGoogle = { if (message.region !== undefined) { obj.region = message.region; } + if (message.images !== undefined) { + obj.images = TextArray.toJSON(message.images); + } + if (message.imageProperties !== undefined) { + obj.imageProperties = TextArray.toJSON(message.imageProperties); + } return obj; }, @@ -2208,6 +2434,12 @@ export const GenerativeGoogle = { message.projectId = object.projectId ?? undefined; message.endpointId = object.endpointId ?? undefined; message.region = object.region ?? undefined; + message.images = (object.images !== undefined && object.images !== null) + ? TextArray.fromPartial(object.images) + : undefined; + message.imageProperties = (object.imageProperties !== undefined && object.imageProperties !== null) + ? TextArray.fromPartial(object.imageProperties) + : undefined; return message; }, }; @@ -2574,6 +2806,125 @@ export const GenerativeFriendliAI = { }, }; +function createBaseGenerativeNvidia(): GenerativeNvidia { + return { baseUrl: undefined, model: undefined, temperature: undefined, topP: undefined, maxTokens: undefined }; +} + +export const GenerativeNvidia = { + encode(message: GenerativeNvidia, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.baseUrl !== undefined) { + writer.uint32(10).string(message.baseUrl); + } + if (message.model !== undefined) { + writer.uint32(18).string(message.model); + } + if (message.temperature !== undefined) { + writer.uint32(25).double(message.temperature); + } + if (message.topP !== undefined) { + writer.uint32(33).double(message.topP); + } + if (message.maxTokens !== undefined) { + writer.uint32(40).int64(message.maxTokens); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): GenerativeNvidia { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseGenerativeNvidia(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.baseUrl = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.model = reader.string(); + continue; + case 3: + if (tag !== 25) { + break; + } + + message.temperature = reader.double(); + continue; + case 4: + if (tag !== 33) { + break; + } + + message.topP = reader.double(); + continue; + case 5: + if (tag !== 40) { + break; + } + + message.maxTokens = longToNumber(reader.int64() as Long); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): GenerativeNvidia { + return { + baseUrl: isSet(object.baseUrl) ? globalThis.String(object.baseUrl) : undefined, + model: isSet(object.model) ? globalThis.String(object.model) : undefined, + temperature: isSet(object.temperature) ? globalThis.Number(object.temperature) : undefined, + topP: isSet(object.topP) ? globalThis.Number(object.topP) : undefined, + maxTokens: isSet(object.maxTokens) ? globalThis.Number(object.maxTokens) : undefined, + }; + }, + + toJSON(message: GenerativeNvidia): unknown { + const obj: any = {}; + if (message.baseUrl !== undefined) { + obj.baseUrl = message.baseUrl; + } + if (message.model !== undefined) { + obj.model = message.model; + } + if (message.temperature !== undefined) { + obj.temperature = message.temperature; + } + if (message.topP !== undefined) { + obj.topP = message.topP; + } + if (message.maxTokens !== undefined) { + obj.maxTokens = Math.round(message.maxTokens); + } + return obj; + }, + + create(base?: DeepPartial): GenerativeNvidia { + return GenerativeNvidia.fromPartial(base ?? {}); + }, + fromPartial(object: DeepPartial): GenerativeNvidia { + const message = createBaseGenerativeNvidia(); + message.baseUrl = object.baseUrl ?? undefined; + message.model = object.model ?? undefined; + message.temperature = object.temperature ?? undefined; + message.topP = object.topP ?? undefined; + message.maxTokens = object.maxTokens ?? undefined; + return message; + }, +}; + function createBaseGenerativeAnthropicMetadata(): GenerativeAnthropicMetadata { return { usage: undefined }; } @@ -4246,6 +4597,154 @@ export const GenerativeFriendliAIMetadata_Usage = { }, }; +function createBaseGenerativeNvidiaMetadata(): GenerativeNvidiaMetadata { + return { usage: undefined }; +} + +export const GenerativeNvidiaMetadata = { + encode(message: GenerativeNvidiaMetadata, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.usage !== undefined) { + GenerativeNvidiaMetadata_Usage.encode(message.usage, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): GenerativeNvidiaMetadata { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseGenerativeNvidiaMetadata(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.usage = GenerativeNvidiaMetadata_Usage.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): GenerativeNvidiaMetadata { + return { usage: isSet(object.usage) ? GenerativeNvidiaMetadata_Usage.fromJSON(object.usage) : undefined }; + }, + + toJSON(message: GenerativeNvidiaMetadata): unknown { + const obj: any = {}; + if (message.usage !== undefined) { + obj.usage = GenerativeNvidiaMetadata_Usage.toJSON(message.usage); + } + return obj; + }, + + create(base?: DeepPartial): GenerativeNvidiaMetadata { + return GenerativeNvidiaMetadata.fromPartial(base ?? {}); + }, + fromPartial(object: DeepPartial): GenerativeNvidiaMetadata { + const message = createBaseGenerativeNvidiaMetadata(); + message.usage = (object.usage !== undefined && object.usage !== null) + ? GenerativeNvidiaMetadata_Usage.fromPartial(object.usage) + : undefined; + return message; + }, +}; + +function createBaseGenerativeNvidiaMetadata_Usage(): GenerativeNvidiaMetadata_Usage { + return { promptTokens: undefined, completionTokens: undefined, totalTokens: undefined }; +} + +export const GenerativeNvidiaMetadata_Usage = { + encode(message: GenerativeNvidiaMetadata_Usage, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.promptTokens !== undefined) { + writer.uint32(8).int64(message.promptTokens); + } + if (message.completionTokens !== undefined) { + writer.uint32(16).int64(message.completionTokens); + } + if (message.totalTokens !== undefined) { + writer.uint32(24).int64(message.totalTokens); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): GenerativeNvidiaMetadata_Usage { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseGenerativeNvidiaMetadata_Usage(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 8) { + break; + } + + message.promptTokens = longToNumber(reader.int64() as Long); + continue; + case 2: + if (tag !== 16) { + break; + } + + message.completionTokens = longToNumber(reader.int64() as Long); + continue; + case 3: + if (tag !== 24) { + break; + } + + message.totalTokens = longToNumber(reader.int64() as Long); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): GenerativeNvidiaMetadata_Usage { + return { + promptTokens: isSet(object.promptTokens) ? globalThis.Number(object.promptTokens) : undefined, + completionTokens: isSet(object.completionTokens) ? globalThis.Number(object.completionTokens) : undefined, + totalTokens: isSet(object.totalTokens) ? globalThis.Number(object.totalTokens) : undefined, + }; + }, + + toJSON(message: GenerativeNvidiaMetadata_Usage): unknown { + const obj: any = {}; + if (message.promptTokens !== undefined) { + obj.promptTokens = Math.round(message.promptTokens); + } + if (message.completionTokens !== undefined) { + obj.completionTokens = Math.round(message.completionTokens); + } + if (message.totalTokens !== undefined) { + obj.totalTokens = Math.round(message.totalTokens); + } + return obj; + }, + + create(base?: DeepPartial): GenerativeNvidiaMetadata_Usage { + return GenerativeNvidiaMetadata_Usage.fromPartial(base ?? {}); + }, + fromPartial(object: DeepPartial): GenerativeNvidiaMetadata_Usage { + const message = createBaseGenerativeNvidiaMetadata_Usage(); + message.promptTokens = object.promptTokens ?? undefined; + message.completionTokens = object.completionTokens ?? undefined; + message.totalTokens = object.totalTokens ?? undefined; + return message; + }, +}; + function createBaseGenerativeMetadata(): GenerativeMetadata { return { anthropic: undefined, @@ -4259,6 +4758,7 @@ function createBaseGenerativeMetadata(): GenerativeMetadata { google: undefined, databricks: undefined, friendliai: undefined, + nvidia: undefined, }; } @@ -4297,6 +4797,9 @@ export const GenerativeMetadata = { if (message.friendliai !== undefined) { GenerativeFriendliAIMetadata.encode(message.friendliai, writer.uint32(90).fork()).ldelim(); } + if (message.nvidia !== undefined) { + GenerativeNvidiaMetadata.encode(message.nvidia, writer.uint32(98).fork()).ldelim(); + } return writer; }, @@ -4384,6 +4887,13 @@ export const GenerativeMetadata = { message.friendliai = GenerativeFriendliAIMetadata.decode(reader, reader.uint32()); continue; + case 12: + if (tag !== 98) { + break; + } + + message.nvidia = GenerativeNvidiaMetadata.decode(reader, reader.uint32()); + continue; } if ((tag & 7) === 4 || tag === 0) { break; @@ -4406,6 +4916,7 @@ export const GenerativeMetadata = { google: isSet(object.google) ? GenerativeGoogleMetadata.fromJSON(object.google) : undefined, databricks: isSet(object.databricks) ? GenerativeDatabricksMetadata.fromJSON(object.databricks) : undefined, friendliai: isSet(object.friendliai) ? GenerativeFriendliAIMetadata.fromJSON(object.friendliai) : undefined, + nvidia: isSet(object.nvidia) ? GenerativeNvidiaMetadata.fromJSON(object.nvidia) : undefined, }; }, @@ -4444,6 +4955,9 @@ export const GenerativeMetadata = { if (message.friendliai !== undefined) { obj.friendliai = GenerativeFriendliAIMetadata.toJSON(message.friendliai); } + if (message.nvidia !== undefined) { + obj.nvidia = GenerativeNvidiaMetadata.toJSON(message.nvidia); + } return obj; }, @@ -4485,6 +4999,9 @@ export const GenerativeMetadata = { message.friendliai = (object.friendliai !== undefined && object.friendliai !== null) ? GenerativeFriendliAIMetadata.fromPartial(object.friendliai) : undefined; + message.nvidia = (object.nvidia !== undefined && object.nvidia !== null) + ? GenerativeNvidiaMetadata.fromPartial(object.nvidia) + : undefined; return message; }, }; diff --git a/src/roles/index.ts b/src/roles/index.ts index 98ec8194..2fbe723b 100644 --- a/src/roles/index.ts +++ b/src/roles/index.ts @@ -10,6 +10,7 @@ import { PermissionsInput, Role, RolesPermission, + TenantsPermission, UsersPermission, } from './types.js'; import { Map } from './util.js'; @@ -207,6 +208,23 @@ export const permissions = { return out; }); }, + tenants: (args: { + collection: string | string[]; + create?: boolean; + read?: boolean; + update?: boolean; + delete?: boolean; + }): TenantsPermission[] => { + const collections = Array.isArray(args.collection) ? args.collection : [args.collection]; + return collections.flatMap((collection) => { + const out: TenantsPermission = { collection, actions: [] }; + if (args.create) out.actions.push('create_tenants'); + if (args.read) out.actions.push('read_tenants'); + if (args.update) out.actions.push('update_tenants'); + if (args.delete) out.actions.push('delete_tenants'); + return out; + }); + }, users: (args: { user: string | string[]; assign_and_revoke?: boolean; diff --git a/src/roles/integration.test.ts b/src/roles/integration.test.ts index 1b346818..7d083209 100644 --- a/src/roles/integration.test.ts +++ b/src/roles/integration.test.ts @@ -58,6 +58,7 @@ only('Integration testing of the roles namespace', () => { dataPermissions: [], nodesPermissions: [], rolesPermissions: [], + tenantsPermissions: [], usersPermissions: [], }, }, @@ -72,6 +73,7 @@ only('Integration testing of the roles namespace', () => { dataPermissions: [], nodesPermissions: [], rolesPermissions: [], + tenantsPermissions: [], usersPermissions: [], }, }, @@ -97,6 +99,7 @@ only('Integration testing of the roles namespace', () => { dataPermissions: [], nodesPermissions: [], rolesPermissions: [], + tenantsPermissions: [], usersPermissions: [], }, }, @@ -122,6 +125,7 @@ only('Integration testing of the roles namespace', () => { ], nodesPermissions: [], rolesPermissions: [], + tenantsPermissions: [], usersPermissions: [], }, }, @@ -141,6 +145,7 @@ only('Integration testing of the roles namespace', () => { { collection: 'Some-collection', verbosity: 'verbose', actions: ['read_nodes'] }, ], rolesPermissions: [], + tenantsPermissions: [], usersPermissions: [], }, }, @@ -157,6 +162,7 @@ only('Integration testing of the roles namespace', () => { dataPermissions: [], nodesPermissions: [{ collection: '*', verbosity: 'minimal', actions: ['read_nodes'] }], rolesPermissions: [], + tenantsPermissions: [], usersPermissions: [], }, }, @@ -179,6 +185,33 @@ only('Integration testing of the roles namespace', () => { rolesPermissions: [ { role: 'some-role', actions: ['create_roles', 'read_roles', 'update_roles', 'delete_roles'] }, ], + tenantsPermissions: [], + usersPermissions: [], + }, + }, + { + roleName: 'tenants', + permissions: weaviate.permissions.tenants({ + collection: 'some-collection', + create: true, + read: true, + update: true, + delete: true, + }), + expected: { + name: 'tenants', + backupsPermissions: [], + clusterPermissions: [], + collectionsPermissions: [], + dataPermissions: [], + nodesPermissions: [], + rolesPermissions: [], + tenantsPermissions: [ + { + collection: 'Some-collection', + actions: ['create_tenants', 'read_tenants', 'update_tenants', 'delete_tenants'], + }, + ], usersPermissions: [], }, }, @@ -197,6 +230,7 @@ only('Integration testing of the roles namespace', () => { dataPermissions: [], nodesPermissions: [], rolesPermissions: [], + tenantsPermissions: [], usersPermissions: [{ users: 'some-user', actions: ['assign_and_revoke_users', 'read_users'] }], }, }, @@ -218,9 +252,17 @@ only('Integration testing of the roles namespace', () => { afterAll(() => Promise.all( - ['backups', 'cluster', 'collections', 'data', 'nodes-verbose', 'nodes-minimal', 'roles', 'users'].map( - (n) => client.roles.delete(n) - ) + [ + 'backups', + 'cluster', + 'collections', + 'data', + 'nodes-verbose', + 'nodes-minimal', + 'roles', + 'tenants', + 'users', + ].map((n) => client.roles.delete(n)) ) ); }); diff --git a/src/roles/types.ts b/src/roles/types.ts index 86af2743..6f314245 100644 --- a/src/roles/types.ts +++ b/src/roles/types.ts @@ -16,6 +16,10 @@ export type DataAction = Extract< >; export type NodesAction = Extract; export type RolesAction = Extract; +export type TenantsAction = Extract< + Action, + 'create_tenants' | 'delete_tenants' | 'read_tenants' | 'update_tenants' +>; export type UsersAction = Extract; export type BackupsPermission = { @@ -48,6 +52,11 @@ export type RolesPermission = { actions: RolesAction[]; }; +export type TenantsPermission = { + collection: string; + actions: TenantsAction[]; +}; + export type UsersPermission = { users: string; actions: UsersAction[]; @@ -61,6 +70,7 @@ export type Role = { dataPermissions: DataPermission[]; nodesPermissions: NodesPermission[]; rolesPermissions: RolesPermission[]; + tenantsPermissions: TenantsPermission[]; usersPermissions: UsersPermission[]; }; @@ -71,6 +81,7 @@ export type Permission = | DataPermission | NodesPermission | RolesPermission + | TenantsPermission | UsersPermission; export type PermissionsInput = Permission | Permission[] | Permission[][] | (Permission | Permission[])[]; diff --git a/src/roles/util.ts b/src/roles/util.ts index 4452e5a1..b4a8a9bf 100644 --- a/src/roles/util.ts +++ b/src/roles/util.ts @@ -15,6 +15,8 @@ import { Role, RolesAction, RolesPermission, + TenantsAction, + TenantsPermission, UsersAction, UsersPermission, } from './types.js'; @@ -48,6 +50,14 @@ export class PermissionGuards { PermissionGuards.includes(permission, 'read_nodes'); static isRoles = (permission: Permission): permission is RolesPermission => PermissionGuards.includes(permission, 'create_role', 'read_roles', 'update_roles', 'delete_roles'); + static isTenants = (permission: Permission): permission is TenantsPermission => + PermissionGuards.includes( + permission, + 'create_tenants', + 'delete_tenants', + 'read_tenants', + 'update_tenants' + ); static isUsers = (permission: Permission): permission is UsersPermission => PermissionGuards.includes(permission, 'read_users', 'assign_and_revoke_users'); static isPermission = (permissions: PermissionsInput): permissions is Permission => @@ -93,6 +103,11 @@ export class Map { })); } else if (PermissionGuards.isRoles(permission)) { return Array.from(permission.actions).map((action) => ({ roles: { role: permission.role }, action })); + } else if (PermissionGuards.isTenants(permission)) { + return Array.from(permission.actions).map((action) => ({ + tenants: { collection: permission.collection }, + action, + })); } else if (PermissionGuards.isUsers(permission)) { return Array.from(permission.actions).map((action) => ({ users: { users: permission.users }, action })); } else { @@ -100,70 +115,7 @@ export class Map { } }; - static roleFromWeaviate = (role: WeaviateRole): Role => { - const perms = { - backups: {} as Record, - cluster: {} as Record, - collections: {} as Record, - data: {} as Record, - nodes: {} as Record, - roles: {} as Record, - users: {} as Record, - }; - role.permissions.forEach((permission) => { - if (permission.backups !== undefined) { - const key = permission.backups.collection; - if (key === undefined) throw new Error('Backups permission missing collection'); - if (perms.backups[key] === undefined) perms.backups[key] = { collection: key, actions: [] }; - perms.backups[key].actions.push(permission.action as BackupsAction); - } else if (permission.action === 'read_cluster') { - if (perms.cluster[''] === undefined) perms.cluster[''] = { actions: [] }; - perms.cluster[''].actions.push('read_cluster'); - } else if (permission.collections !== undefined) { - const key = permission.collections.collection; - if (key === undefined) throw new Error('Collections permission missing collection'); - if (perms.collections[key] === undefined) perms.collections[key] = { collection: key, actions: [] }; - perms.collections[key].actions.push(permission.action as CollectionsAction); - } else if (permission.data !== undefined) { - const key = permission.data.collection; - if (key === undefined) throw new Error('Data permission missing collection'); - if (perms.data[key] === undefined) perms.data[key] = { collection: key, actions: [] }; - perms.data[key].actions.push(permission.action as DataAction); - } else if (permission.nodes !== undefined) { - let { collection } = permission.nodes; - const { verbosity } = permission.nodes; - if (verbosity === undefined) throw new Error('Nodes permission missing verbosity'); - if (verbosity === 'verbose') { - if (collection === undefined) throw new Error('Nodes permission missing collection'); - } else if (verbosity === 'minimal') collection = '*'; - else throw new Error('Nodes permission missing verbosity'); - - const key = `${collection}#${verbosity}`; - if (perms.nodes[key] === undefined) perms.nodes[key] = { collection, verbosity, actions: [] }; - perms.nodes[key].actions.push(permission.action as NodesAction); - } else if (permission.roles !== undefined) { - const key = permission.roles.role; - if (key === undefined) throw new Error('Roles permission missing role'); - if (perms.roles[key] === undefined) perms.roles[key] = { role: key, actions: [] }; - perms.roles[key].actions.push(permission.action as RolesAction); - } else if (permission.users !== undefined) { - const key = permission.users.users; - if (key === undefined) throw new Error('Users permission missing user'); - if (perms.users[key] === undefined) perms.users[key] = { users: key, actions: [] }; - perms.users[key].actions.push(permission.action as UsersAction); - } - }); - return { - name: role.name, - backupsPermissions: Object.values(perms.backups), - clusterPermissions: Object.values(perms.cluster), - collectionsPermissions: Object.values(perms.collections), - dataPermissions: Object.values(perms.data), - nodesPermissions: Object.values(perms.nodes), - rolesPermissions: Object.values(perms.roles), - usersPermissions: Object.values(perms.users), - }; - }; + static roleFromWeaviate = (role: WeaviateRole): Role => PermissionsMapping.use(role).map(); static roles = (roles: WeaviateRole[]): Record => roles.reduce((acc, role) => { @@ -181,3 +133,141 @@ export class Map { roles: user.roles?.map(Map.roleFromWeaviate), }); } + +class PermissionsMapping { + private mappings: PermissionMappings; + private role: WeaviateRole; + + private constructor(role: WeaviateRole) { + this.mappings = { + backups: {}, + cluster: {}, + collections: {}, + data: {}, + nodes: {}, + roles: {}, + tenants: {}, + users: {}, + }; + this.role = role; + } + + public static use = (role: WeaviateRole) => new PermissionsMapping(role); + + public map = (): Role => { + this.role.permissions.forEach(this.permissionFromWeaviate); + return { + name: this.role.name, + backupsPermissions: Object.values(this.mappings.backups), + clusterPermissions: Object.values(this.mappings.cluster), + collectionsPermissions: Object.values(this.mappings.collections), + dataPermissions: Object.values(this.mappings.data), + nodesPermissions: Object.values(this.mappings.nodes), + rolesPermissions: Object.values(this.mappings.roles), + tenantsPermissions: Object.values(this.mappings.tenants), + usersPermissions: Object.values(this.mappings.users), + }; + }; + + private backups = (permission: WeaviatePermission) => { + if (permission.backups !== undefined) { + const key = permission.backups.collection; + if (key === undefined) throw new Error('Backups permission missing collection'); + if (this.mappings.backups[key] === undefined) + this.mappings.backups[key] = { collection: key, actions: [] }; + this.mappings.backups[key].actions.push(permission.action as BackupsAction); + } + }; + + private cluster = (permission: WeaviatePermission) => { + if (permission.action === 'read_cluster') { + if (this.mappings.cluster[''] === undefined) this.mappings.cluster[''] = { actions: [] }; + this.mappings.cluster[''].actions.push('read_cluster'); + } + }; + + private collections = (permission: WeaviatePermission) => { + if (permission.collections !== undefined) { + const key = permission.collections.collection; + if (key === undefined) throw new Error('Collections permission missing collection'); + if (this.mappings.collections[key] === undefined) + this.mappings.collections[key] = { collection: key, actions: [] }; + this.mappings.collections[key].actions.push(permission.action as CollectionsAction); + } + }; + + private data = (permission: WeaviatePermission) => { + if (permission.data !== undefined) { + const key = permission.data.collection; + if (key === undefined) throw new Error('Data permission missing collection'); + if (this.mappings.data[key] === undefined) this.mappings.data[key] = { collection: key, actions: [] }; + this.mappings.data[key].actions.push(permission.action as DataAction); + } + }; + + private nodes = (permission: WeaviatePermission) => { + if (permission.nodes !== undefined) { + let { collection } = permission.nodes; + const { verbosity } = permission.nodes; + if (verbosity === undefined) throw new Error('Nodes permission missing verbosity'); + if (verbosity === 'verbose') { + if (collection === undefined) throw new Error('Nodes permission missing collection'); + } else if (verbosity === 'minimal') collection = '*'; + else throw new Error('Nodes permission missing verbosity'); + const key = `${collection}#${verbosity}`; + if (this.mappings.nodes[key] === undefined) + this.mappings.nodes[key] = { collection, verbosity, actions: [] }; + this.mappings.nodes[key].actions.push(permission.action as NodesAction); + } + }; + + private roles = (permission: WeaviatePermission) => { + if (permission.roles !== undefined) { + const key = permission.roles.role; + if (key === undefined) throw new Error('Roles permission missing role'); + if (this.mappings.roles[key] === undefined) this.mappings.roles[key] = { role: key, actions: [] }; + this.mappings.roles[key].actions.push(permission.action as RolesAction); + } + }; + + private tenants = (permission: WeaviatePermission) => { + if (permission.tenants !== undefined) { + const key = permission.tenants.collection; + if (key === undefined) throw new Error('Tenants permission missing collection'); + if (this.mappings.tenants[key] === undefined) + this.mappings.tenants[key] = { collection: key, actions: [] }; + this.mappings.tenants[key].actions.push(permission.action as TenantsAction); + } + }; + + private users = (permission: WeaviatePermission) => { + if (permission.users !== undefined) { + const key = permission.users.users; + if (key === undefined) throw new Error('Users permission missing user'); + if (this.mappings.users[key] === undefined) this.mappings.users[key] = { users: key, actions: [] }; + this.mappings.users[key].actions.push(permission.action as UsersAction); + } + }; + + private permissionFromWeaviate = (permission: WeaviatePermission) => { + this.backups(permission); + this.cluster(permission); + this.collections(permission); + this.data(permission); + this.nodes(permission); + this.roles(permission); + this.tenants(permission); + this.users(permission); + }; +} + +type PermissionMappings = { + backups: Record; + cluster: Record; + collections: Record; + data: Record; + nodes: Record; + roles: Record; + tenants: Record; + users: Record; +};