0.3 增加登录模块

This commit is contained in:
liaibo
2026-01-18 05:13:53 +08:00
parent df2e9f5339
commit 90a38b48cf
86 changed files with 2041 additions and 148 deletions
@@ -36,27 +36,10 @@ class Settings(BaseSettings):
environment: str = Field("development", env="INGEST_ENV")
api_prefix: str = "/api"
# Supabase(通过 Kong: http://127.0.0.1:18000
supabase_url: str = Field("http://127.0.0.1:18000", env="SUPABASE_URL")
supabase_service_role_key: str = Field("", env="SUPABASE_SERVICE_ROLE_KEY")
# LightRAG(独立服务 7777
lightrag_url: str = Field("http://127.0.0.1:7777", env="LIGHTRAG_URL")
lightrag_api_key: str = Field("", env="LIGHTRAG_API_KEY")
# 自动入库(rag_index_sources -> LightRAG
auto_index_enabled: bool = Field(True, env="AUTO_INDEX_ENABLED")
auto_index_interval_seconds: int = Field(5, env="AUTO_INDEX_INTERVAL_SECONDS")
auto_index_batch_size: int = Field(5, env="AUTO_INDEX_BATCH_SIZE")
auto_index_max_attempts: int = Field(6, env="AUTO_INDEX_MAX_ATTEMPTS")
# 删除宽限期(用于“可撤销删除”):例如用户误删后 10 分钟内可恢复,宽限期内不清理 OCR / Storage / LightRAG 资源
delete_grace_seconds: int = Field(600, env="DELETE_GRACE_SECONDS")
# MinerU(用于 OCR / PDF 结构化解析)
mineru_enabled: bool = Field(True, env="MINERU_ENABLED")
mineru_endpoint: str = Field("", env="MINERU_ENDPOINT")
@classmethod
def settings_customise_sources(
cls,
+1 -14
View File
@@ -3,7 +3,7 @@ from fastapi import FastAPI
from app.api.routes import router as api_router
from app.core.config import get_settings
from app.core.logging import setup_logging
from app.services.runtime import auto_indexer, scheduler, worker
from app.services.runtime import worker
settings = get_settings()
@@ -15,22 +15,9 @@ app.include_router(api_router, prefix=settings.api_prefix)
@app.on_event("startup")
async def _startup() -> None:
scheduler.start()
if getattr(settings, "auto_index_enabled", False):
try:
await auto_indexer.startup()
except Exception: # noqa: BLE001
# 启动阶段不阻塞服务:自动入库失败会在后续 tick 中继续重试/记录
pass
scheduler.add_interval_job(
job_id="auto_index_tick",
func=auto_indexer.tick,
seconds=int(getattr(settings, "auto_index_interval_seconds", 5)),
)
await worker.start()
@app.on_event("shutdown")
async def _shutdown() -> None:
scheduler.shutdown()
await worker.stop()
+1 -1
View File
@@ -5,7 +5,7 @@ from typing import Dict, List, Optional
@dataclass
class IngestJob:
"""表示一次 ingest 任务,后续可持久化到 Supabase"""
"""表示一次 ingest 任务,后续可持久化到数据库"""
id: str
notebook_id: Optional[str]
@@ -5,7 +5,7 @@ from app.models.job import IngestJob
class InMemoryJobStore:
"""简单的内存 JobStore,后续可替换为 Supabase 持久化"""
"""简单的内存 JobStore,后续可替换为数据库持久化"""
def __init__(self) -> None:
self._jobs: Dict[str, IngestJob] = {}
@@ -1,21 +1,11 @@
from app.core.config import get_settings
from app.services.auto_indexer import AutoIndexService
from app.services.job_store import InMemoryJobStore
from app.services.mineru_client import MinerUClient
from app.services.scheduler import SchedulerManager
from app.services.supabase_rest import SupabaseRestAsyncClient
from app.services.tasks import IngestWorker
from app.services.webhooks import LightRAGWebhook
settings = get_settings()
job_store = InMemoryJobStore()
scheduler = SchedulerManager()
webhook = LightRAGWebhook()
worker = IngestWorker(job_store=job_store, webhook=webhook)
# 自动入库依赖:Supabase + MinerU + LightRAG
supabase = SupabaseRestAsyncClient()
mineru = MinerUClient()
auto_indexer = AutoIndexService(supabase=supabase, webhook=webhook, mineru=mineru)