feat: add streaming learning assistant and knowledge base scaffolding
This commit is contained in:
@@ -116,6 +116,26 @@ class Settings(BaseModel):
|
||||
auth_user_me_url: str = Field(default_factory=lambda: os.getenv("AUTH_USER_ME_URL", ""))
|
||||
auth_timeout_seconds: int = Field(default_factory=lambda: int(os.getenv("AUTH_TIMEOUT_SECONDS", "5")))
|
||||
auth_cache_ttl_seconds: int = Field(default_factory=lambda: int(os.getenv("AUTH_CACHE_TTL_SECONDS", "300")))
|
||||
milvus_uri: str = Field(default_factory=lambda: os.getenv("MILVUS_URI", "http://milvus-standalone:19530"))
|
||||
milvus_collection_prefix: str = Field(default_factory=lambda: os.getenv("MILVUS_COLLECTION_PREFIX", "kb_inst"))
|
||||
milvus_default_db: str = Field(default_factory=lambda: os.getenv("MILVUS_DEFAULT_DB", "default"))
|
||||
celery_broker_url: str = Field(default_factory=lambda: os.getenv("CELERY_BROKER_URL", "redis://redis:6379/1"))
|
||||
celery_result_backend: str = Field(default_factory=lambda: os.getenv("CELERY_RESULT_BACKEND", "redis://redis:6379/2"))
|
||||
knowledge_ingestion_sync: bool = Field(default_factory=lambda: _env_bool("KNOWLEDGE_INGESTION_SYNC", False))
|
||||
knowledge_storage_dir: str = Field(default_factory=lambda: os.getenv("KNOWLEDGE_STORAGE_DIR", "./storage/knowledge"))
|
||||
knowledge_max_upload_mb: int = Field(default_factory=lambda: int(os.getenv("KNOWLEDGE_MAX_UPLOAD_MB", "50")))
|
||||
embedding_provider: str = Field(default_factory=lambda: os.getenv("EMBEDDING_PROVIDER", "openai_compatible"))
|
||||
embedding_base_url: str = Field(default_factory=lambda: _env_first("EMBEDDING_BASE_URL", "LLM_BASE_URL", default=""))
|
||||
embedding_api_key: str = Field(default_factory=lambda: _env_first("EMBEDDING_API_KEY", "LLM_API_KEY", default=""))
|
||||
embedding_model: str = Field(default_factory=lambda: os.getenv("EMBEDDING_MODEL", "text-embedding-v4"))
|
||||
embedding_dim: int = Field(default_factory=lambda: int(os.getenv("EMBEDDING_DIM", "1024")))
|
||||
embedding_batch_size: int = Field(default_factory=lambda: int(os.getenv("EMBEDDING_BATCH_SIZE", "16")))
|
||||
embedding_timeout_seconds: int = Field(default_factory=lambda: int(os.getenv("EMBEDDING_TIMEOUT_SECONDS", "30")))
|
||||
rag_top_n: int = Field(default_factory=lambda: int(os.getenv("RAG_TOP_N", "20")))
|
||||
rag_top_k: int = Field(default_factory=lambda: int(os.getenv("RAG_TOP_K", "5")))
|
||||
rag_score_threshold: float = Field(default_factory=lambda: float(os.getenv("RAG_SCORE_THRESHOLD", "0.35")))
|
||||
rag_query_rewrite_enabled: bool = Field(default_factory=lambda: _env_bool("RAG_QUERY_REWRITE_ENABLED", False))
|
||||
rag_rerank_enabled: bool = Field(default_factory=lambda: _env_bool("RAG_RERANK_ENABLED", False))
|
||||
|
||||
@property
|
||||
def is_production(self) -> bool:
|
||||
@@ -137,6 +157,8 @@ class Settings(BaseModel):
|
||||
errors.append("AUTH_USER_ME_URL is required")
|
||||
if self.llm_api_key in {"", "CHANGE_ME"} and not self.llm_mock_enabled:
|
||||
errors.append("LLM_API_KEY is required when mock mode is disabled")
|
||||
if self.embedding_api_key in {"", "CHANGE_ME"} and not self.llm_mock_enabled:
|
||||
errors.append("EMBEDDING_API_KEY is required when mock mode is disabled")
|
||||
return errors
|
||||
|
||||
def as_public_dict(self) -> dict[str, Any]:
|
||||
@@ -157,6 +179,10 @@ class Settings(BaseModel):
|
||||
"llm_reasoning_effort": self.llm_reasoning_effort,
|
||||
"llm_fast_max_tokens": self.llm_fast_max_tokens,
|
||||
"runtime_memory_backend": self.runtime_memory_backend,
|
||||
"learning_assistant": True,
|
||||
"knowledge_admin": True,
|
||||
"milvus_enabled": bool(self.milvus_uri),
|
||||
"embedding_model": self.embedding_model,
|
||||
"auth_validate_enabled": True,
|
||||
"auth_source": "django_user_center",
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user