feat: 配置加载 config(三 yaml + env 优先级 + 脱敏)
This commit is contained in:
Vendored
+7
@@ -0,0 +1,7 @@
|
||||
server:
|
||||
max_upload_mb: 10
|
||||
session:
|
||||
sqlite_path: "C:/tmp/genesis.db"
|
||||
task_queue:
|
||||
backend: memory
|
||||
timeout_sec: 300
|
||||
Vendored
+8
@@ -0,0 +1,8 @@
|
||||
models:
|
||||
primary:
|
||||
provider: deepseek
|
||||
name: deepseek-chat
|
||||
llm_calls:
|
||||
max_context_tokens: 16000
|
||||
structured_output:
|
||||
max_parse_retry: 3
|
||||
Vendored
+9
@@ -0,0 +1,9 @@
|
||||
embedding:
|
||||
model: BAAI/bge-small-zh-v1.5
|
||||
vector_store:
|
||||
adapter: chroma
|
||||
qdrant:
|
||||
url: http://qdrant:6333
|
||||
api_key: ${QDRANT_API_KEY}
|
||||
retrieval:
|
||||
rrf_k: 42
|
||||
@@ -0,0 +1,51 @@
|
||||
from pathlib import Path
|
||||
|
||||
from genesis.config import Settings
|
||||
|
||||
FIXTURES = Path(__file__).parent / "fixtures"
|
||||
|
||||
|
||||
def test_from_dir_maps_yaml_fields():
|
||||
s = Settings.from_dir(FIXTURES)
|
||||
assert s.app.server.max_upload_mb == 10
|
||||
assert s.app.session["sqlite_path"] == "C:/tmp/genesis.db"
|
||||
assert s.app.task_queue["timeout_sec"] == 300
|
||||
assert s.inference.models.primary.name == "deepseek-chat"
|
||||
assert s.inference.llm_calls.max_context_tokens == 16000
|
||||
assert s.inference.structured_output.max_parse_retry == 3
|
||||
assert s.rag.embedding.model == "BAAI/bge-small-zh-v1.5"
|
||||
assert s.rag.retrieval.rrf_k == 42
|
||||
|
||||
|
||||
def test_defaults_when_dir_empty(tmp_path):
|
||||
s = Settings.from_dir(tmp_path)
|
||||
assert s.app.name == "genesis"
|
||||
assert s.app.server.max_upload_mb == 100
|
||||
assert s.app.task_queue["backend"] == "memory"
|
||||
assert s.inference.models.primary.name == "deepseek-chat"
|
||||
assert s.rag.embedding.model == "BAAI/bge-small-zh-v1.5"
|
||||
assert s.rag.retrieval.rrf_k == 60
|
||||
|
||||
|
||||
def test_env_override_yaml(monkeypatch):
|
||||
monkeypatch.setenv("GENESIS_APP__SERVER__MAX_UPLOAD_MB", "25")
|
||||
s = Settings.from_dir(FIXTURES)
|
||||
assert s.app.server.max_upload_mb == 25
|
||||
|
||||
|
||||
def test_env_create_missing_key(monkeypatch):
|
||||
monkeypatch.setenv("GENESIS_RAG__RETRIEVAL__DEFAULT_TOP_K", "7")
|
||||
s = Settings.from_dir(FIXTURES)
|
||||
assert s.rag.retrieval.default_top_k == 7
|
||||
|
||||
|
||||
def test_env_placeholder_expansion(monkeypatch):
|
||||
monkeypatch.setenv("QDRANT_API_KEY", "sk-test-xyz")
|
||||
s = Settings.from_dir(FIXTURES)
|
||||
assert s.rag.vector_store.qdrant.api_key == "sk-test-xyz"
|
||||
|
||||
|
||||
def test_redacted_hides_secrets():
|
||||
s = Settings.from_dir(FIXTURES)
|
||||
red = s.get_redacted()
|
||||
assert red["rag"]["vector_store"]["qdrant"]["api_key"] == "***"
|
||||
Reference in New Issue
Block a user