| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- import {
- Column,
- CreateDateColumn,
- Entity,
- PrimaryGeneratedColumn,
- UpdateDateColumn,
- ManyToMany,
- ManyToOne,
- JoinColumn,
- } from 'typeorm';
- import { KnowledgeGroup } from '../knowledge-group/knowledge-group.entity';
- import { Tenant } from '../tenant/tenant.entity';
- export enum FileStatus {
- PENDING = 'pending',
- INDEXING = 'indexing',
- EXTRACTED = 'extracted', // Text extraction completed and saved to database
- VECTORIZED = 'vectorized', // Vectorization completed and indexed to ES
- FAILED = 'failed',
- }
- export enum ProcessingMode {
- FAST = 'fast', // Fast mode - use Tika
- PRECISE = 'precise', // Precise mode - use Vision Pipeline
- }
- @Entity('knowledge_bases')
- export class KnowledgeBase {
- @PrimaryGeneratedColumn('uuid')
- id: string;
- @Column({ name: 'original_name' })
- originalName: string;
- @Column({ nullable: true })
- title: string;
- @Column({ name: 'storage_path' })
- storagePath: string;
- @Column({ type: 'integer', default: 0 })
- size: number;
- @Column({ length: 100, nullable: true })
- mimetype: string;
- @Column({
- type: 'simple-enum',
- enum: FileStatus,
- default: FileStatus.PENDING,
- })
- status: FileStatus;
- @Column({ name: 'user_id', nullable: true }) // Temporarily allowed empty (for debugging), should be required in future
- userId: string;
- @Column({ name: 'tenant_id', nullable: true, type: 'text' })
- tenantId: string;
- @ManyToOne(() => Tenant, { nullable: true, onDelete: 'CASCADE' })
- @JoinColumn({ name: 'tenant_id' })
- tenant: Tenant;
- @Column({ type: 'text', nullable: true })
- content: string; // Stores text content extracted by Tika
- // Index setting parameters
- @Column({ name: 'chunk_size', type: 'integer', default: 1000 })
- chunkSize: number;
- @Column({ name: 'chunk_overlap', type: 'integer', default: 200 })
- chunkOverlap: number;
- @Column({ name: 'embedding_model_id', nullable: true })
- embeddingModelId: string;
- @Column({
- type: 'simple-enum',
- enum: ProcessingMode,
- default: ProcessingMode.FAST,
- name: 'processing_mode',
- })
- processingMode: ProcessingMode;
- @Column({ type: 'json', nullable: true })
- metadata: any; // Stores additional metadata (image descriptions, confidence, etc.)
- @Column({ name: 'pdf_path', nullable: true })
- pdfPath: string; // PDF file path (for preview)
- @ManyToMany(() => KnowledgeGroup, (group) => group.knowledgeBases)
- groups: KnowledgeGroup[];
- @CreateDateColumn({ name: 'created_at' })
- createdAt: Date;
- @UpdateDateColumn({ name: 'updated_at' })
- updatedAt: Date;
- }
|