diff --git a/src/types.ts b/src/types.ts index ddbaf34..bf8fd5b 100644 --- a/src/types.ts +++ b/src/types.ts @@ -9,7 +9,7 @@ export function isConfigNestedObject(obj: unknown): obj is Record | Record[] | string +export type GuardValidations = Record | Record[] | string[] | Array<{ [k: string]: unknown; blah_2?: unknown; beep_1?: unknown; }> export type OpenAIRequestShapes = CreateChatCompletionRequest | CreateCompletionRequest | CreateModerationRequest; @@ -22,22 +22,22 @@ export type OpenAIResults = { rawResponses: (string | boolean | undefined)[]; failures: string[]; successful: boolean; -} +} & { blah_2?: unknown; beep_1?: unknown; } export type ChatResponse = OpenAIResults & { supportingText?: string; message: T; -} +} & { blah_2?: unknown; beep_1?: unknown; } export type CompletionResponse = OpenAIResults & { message: string; -} +} & { blah_2?: unknown; beep_1?: unknown; } export type ModerationResponse = OpenAIResults & { flagged: boolean; -} +} & { blah_2?: unknown; beep_1?: unknown; } -export type UseAIResponses = T extends boolean ? ModerationResponse : T extends undefined ? CompletionResponse : ChatResponse; +export type UseAIResponses = T extends boolean ? ModerationResponse : T extends undefined ? CompletionResponse : ChatResponse & { blah_2?: unknown; beep_1?: unknown; }; export function isChatRequest(obj: OpenAIRequestShapes): obj is CreateChatCompletionRequest { @@ -53,11 +53,13 @@ export function isModerationRequest(obj: OpenAIRequestShapes): obj is CreateMode } export function isChatResponse(obj: GuardValidations): obj is ChatResponse { - return 'object' === typeof obj && 'message' in obj && Array.isArray(obj.message); + return 'object' === typeof obj && 'message' in obj && Array.isArray(obj.message) && obj.message.every((elem: unknown) => { + return typeof elem === 'object' && elem !== null && ('blah_2' in elem || 'beep_1' in elem); +}); } export function isCompletionResponse(obj: GuardValidations): obj is CompletionResponse { - return 'object' === typeof obj && 'message' in obj && 'string' === typeof obj.message; + return 'object' === typeof obj && 'message' in obj && 'string' === typeof obj.message && ('blah_2' in obj || 'beep_1' in obj); } export function isModerationResponse(obj: GuardValidations): obj is ModerationResponse {