مخزن اختصاصی برنامهٔ وب؛ محتوای پوشهٔ web در ریشهٔ مخزن قرار گرفت. تاریخچهٔ پروژهٔ ربات (agy-bot) در این مخزن وجود ندارد و هیچ وابستگی runtime به آن نیست.
75 lines
1.8 KiB
Python
75 lines
1.8 KiB
Python
"""Knowledge domain: sources, documents, chunks and retrieval policy.
|
|
|
|
Retrieval is permission-aware: an employee only sees knowledge scoped to its
|
|
organization (and optionally its project).
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass, field
|
|
from datetime import datetime
|
|
from enum import StrEnum
|
|
|
|
from app.domain.base import new_id, utcnow
|
|
|
|
|
|
class SourceKind(StrEnum):
|
|
FILE = "file"
|
|
TEXT = "text"
|
|
URL = "url"
|
|
REPO = "repo"
|
|
|
|
|
|
class EmbeddingJobStatus(StrEnum):
|
|
PENDING = "pending"
|
|
RUNNING = "running"
|
|
DONE = "done"
|
|
FAILED = "failed"
|
|
|
|
|
|
@dataclass(slots=True, kw_only=True)
|
|
class KnowledgeSource:
|
|
organization_id: str
|
|
name: str
|
|
kind: SourceKind = SourceKind.TEXT
|
|
uri: str = ""
|
|
project_id: str | None = None
|
|
id: str = field(default_factory=new_id)
|
|
created_at: datetime = field(default_factory=utcnow)
|
|
|
|
|
|
@dataclass(slots=True, kw_only=True)
|
|
class Document:
|
|
source_id: str
|
|
title: str
|
|
content: str = ""
|
|
id: str = field(default_factory=new_id)
|
|
created_at: datetime = field(default_factory=utcnow)
|
|
|
|
|
|
@dataclass(slots=True, kw_only=True)
|
|
class DocumentChunk:
|
|
document_id: str
|
|
index: int
|
|
content: str
|
|
embedding_json: list[float] = field(default_factory=list)
|
|
id: str = field(default_factory=new_id)
|
|
|
|
|
|
@dataclass(slots=True, kw_only=True)
|
|
class EmbeddingJob:
|
|
source_id: str
|
|
status: EmbeddingJobStatus = EmbeddingJobStatus.PENDING
|
|
error: str | None = None
|
|
id: str = field(default_factory=new_id)
|
|
created_at: datetime = field(default_factory=utcnow)
|
|
|
|
|
|
@dataclass(slots=True, kw_only=True)
|
|
class RetrievalPolicy:
|
|
organization_id: str
|
|
name: str
|
|
scope_json: dict = field(default_factory=dict)
|
|
id: str = field(default_factory=new_id)
|
|
created_at: datetime = field(default_factory=utcnow)
|