Merge pull request #529 from CREDO23/feat/add-jotai-tanstack

[Feat] Documents | Add Jotai & Tanstack
This commit is contained in:
Rohan Verma 2025-12-10 14:38:00 -08:00 committed by GitHub
commit 194292a641
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
21 changed files with 948 additions and 688 deletions

View file

@ -0,0 +1,183 @@
import { z } from "zod";
import { paginationQueryParams } from ".";
export const documentTypeEnum = z.enum([
"EXTENSION",
"CRAWLED_URL",
"FILE",
"SLACK_CONNECTOR",
"NOTION_CONNECTOR",
"YOUTUBE_VIDEO",
"GITHUB_CONNECTOR",
"DISCORD_CONNECTOR",
"JIRA_CONNECTOR",
"CONFLUENCE_CONNECTOR",
"CLICKUP_CONNECTOR",
"GOOGLE_CALENDAR_CONNECTOR",
"GOOGLE_GMAIL_CONNECTOR",
"AIRTABLE_CONNECTOR",
"LUMA_CONNECTOR",
"ELASTICSEARCH_CONNECTOR",
"LINEAR_CONNECTOR",
]);
export const document = z.object({
id: z.number(),
title: z.string(),
document_type: documentTypeEnum,
document_metadata: z.record(z.string(), z.any()),
content: z.string(),
created_at: z.string(),
search_space_id: z.number(),
});
export const extensionDocumentContent = z.object({
metadata: z.object({
BrowsingSessionId: z.string(),
VisitedWebPageURL: z.string(),
VisitedWebPageTitle: z.string(),
VisitedWebPageDateWithTimeInISOString: z.string(),
VisitedWebPageReffererURL: z.string(),
VisitedWebPageVisitDurationInMilliseconds: z.string(),
}),
pageContent: z.string(),
});
export const documentWithChunks = document.extend({
chunks: z.array(
z.object({
id: z.number(),
content: z.string(),
created_at: z.string(),
})
),
});
/**
* Get documents
*/
export const getDocumentsRequest = z.object({
queryParams: paginationQueryParams
.extend({
search_space_id: z.number().or(z.string()).optional(),
document_types: z.array(documentTypeEnum).optional(),
})
.nullish(),
});
export const getDocumentsResponse = z.object({
items: z.array(document),
total: z.number(),
});
/**
* Get document
*/
export const getDocumentRequest = document.pick({ id: true });
export const getDocumentResponse = document;
/**
* Create documents
*/
export const createDocumentRequest = document
.pick({ document_type: true, search_space_id: true })
.extend({
content: z.string().or(z.array(z.string())).or(z.array(extensionDocumentContent)),
});
export const createDocumentResponse = z.object({
message: z.literal("Documents created successfully"),
});
/**
* Upload documents
*/
export const uploadDocumentRequest = z.object({
files: z.array(z.instanceof(File)),
search_space_id: z.number(),
});
export const uploadDocumentResponse = z.object({
message: z.literal("Files uploaded for processing"),
});
/**
* Search documents
*/
export const searchDocumentsRequest = z.object({
queryParams: paginationQueryParams
.extend({
search_space_id: z.number().or(z.string()).optional(),
document_types: z.array(documentTypeEnum).optional(),
title: z.string().optional(),
})
.nullish(),
});
export const searchDocumentsResponse = z.object({
items: z.array(document),
total: z.number(),
});
/**
* Get document type counts
*/
export const getDocumentTypeCountsRequest = z.object({
queryParams: z
.object({
search_space_id: z.number().or(z.string()).optional(),
})
.nullish(),
});
export const getDocumentTypeCountsResponse = z.record(z.string(), z.number());
/**
* Get document by chunk
*/
export const getDocumentByChunkRequest = z.object({
chunk_id: z.number(),
});
export const getDocumentByChunkResponse = documentWithChunks;
/**
* Update document
*/
export const updateDocumentRequest = z.object({
id: z.number(),
data: document.pick({ search_space_id: true, document_type: true, content: true }),
});
export const updateDocumentResponse = document;
/**
* Delete document
*/
export const deleteDocumentRequest = document.pick({ id: true });
export const deleteDocumentResponse = z.object({
message: z.literal("Document deleted successfully"),
});
export type Document = z.infer<typeof document>
export type GetDocumentsRequest = z.infer<typeof getDocumentsRequest>;
export type GetDocumentsResponse = z.infer<typeof getDocumentsResponse>;
export type GetDocumentRequest = z.infer<typeof getDocumentRequest>;
export type GetDocumentResponse = z.infer<typeof getDocumentResponse>;
export type CreateDocumentRequest = z.infer<typeof createDocumentRequest>;
export type CreateDocumentResponse = z.infer<typeof createDocumentResponse>;
export type UploadDocumentRequest = z.infer<typeof uploadDocumentRequest>;
export type UploadDocumentResponse = z.infer<typeof uploadDocumentResponse>;
export type SearchDocumentsRequest = z.infer<typeof searchDocumentsRequest>;
export type SearchDocumentsResponse = z.infer<typeof searchDocumentsResponse>;
export type GetDocumentTypeCountsRequest = z.infer<typeof getDocumentTypeCountsRequest>;
export type GetDocumentTypeCountsResponse = z.infer<typeof getDocumentTypeCountsResponse>;
export type GetDocumentByChunkRequest = z.infer<typeof getDocumentByChunkRequest>;
export type GetDocumentByChunkResponse = z.infer<typeof getDocumentByChunkResponse>;
export type UpdateDocumentRequest = z.infer<typeof updateDocumentRequest>;
export type UpdateDocumentResponse = z.infer<typeof updateDocumentResponse>;
export type DeleteDocumentRequest = z.infer<typeof deleteDocumentRequest>;
export type DeleteDocumentResponse = z.infer<typeof deleteDocumentResponse>;
export type DocumentTypeEnum = z.infer<typeof documentTypeEnum>

View file

@ -3,6 +3,10 @@ import { z } from "zod";
export const paginationQueryParams = z.object({
limit: z.number().optional(),
skip: z.number().optional(),
// OR
page: z.number().optional(),
page_size: z.number().optional(),
// TODO: Normalize to page/page_size or limit/skip in backend
});
export type PaginationQueryParams = z.infer<typeof paginationQueryParams>;