rebuild(stage-10): deliver mentor and unified llm streaming
This commit is contained in:
@@ -19,8 +19,14 @@ from backend.features.accounts.service import (
|
||||
from backend.features.market import MarketService
|
||||
from backend.features.market.insights import MarketInsightService
|
||||
from backend.features.market.sync import MarketSnapshotService
|
||||
from backend.features.mentor.context import MentorContextBuilder
|
||||
from backend.features.mentor.repository import MentorRepository
|
||||
from backend.features.mentor.service import MentorService
|
||||
from backend.features.mentor.skills import MentorSkillRegistry
|
||||
from backend.features.screener.repository import ScreenerRepository
|
||||
from backend.features.screener.service import ScreenerService
|
||||
from backend.llm import LLMGateway
|
||||
from backend.llm.repository import LLMRepository
|
||||
from backend.security import PasswordHasher, load_or_create_cipher
|
||||
|
||||
|
||||
@@ -35,6 +41,8 @@ class ApplicationContainer:
|
||||
model_pool: ModelPoolService
|
||||
market: MarketService
|
||||
screener: ScreenerService
|
||||
llm: LLMGateway
|
||||
mentor: MentorService
|
||||
|
||||
|
||||
def build_container(settings: Settings) -> ApplicationContainer:
|
||||
@@ -42,6 +50,7 @@ def build_container(settings: Settings) -> ApplicationContainer:
|
||||
account_repository = AccountRepository()
|
||||
credential_repository = SystemCredentialRepository()
|
||||
model_pool_repository = ModelPoolRepository()
|
||||
screener_repository = ScreenerRepository()
|
||||
cipher = load_or_create_cipher(settings)
|
||||
credentials = SystemCredentialService(database, credential_repository, cipher)
|
||||
tushare = TushareProvider(lambda: credentials.get("tushare_token"))
|
||||
@@ -64,14 +73,32 @@ def build_container(settings: Settings) -> ApplicationContainer:
|
||||
MarketSnapshotService(database, market_repository, gateway),
|
||||
MarketInsightService(database, market_repository, gateway),
|
||||
)
|
||||
accounts = AccountService(database, account_repository, PasswordHasher(), cipher)
|
||||
memberships = MembershipService(database, account_repository)
|
||||
model_pool = ModelPoolService(database, model_pool_repository, cipher)
|
||||
screener = ScreenerService(database, screener_repository, market_repository, gateway)
|
||||
llm = LLMGateway(database, LLMRepository(), memberships, model_pool)
|
||||
mentor = MentorService(
|
||||
database,
|
||||
MentorRepository(),
|
||||
MentorSkillRegistry(
|
||||
settings.mentor_skills_directory,
|
||||
settings.private_mentor_skills_directory,
|
||||
),
|
||||
MentorContextBuilder(database, market_repository, screener_repository, gateway),
|
||||
gateway,
|
||||
llm,
|
||||
)
|
||||
return ApplicationContainer(
|
||||
settings=settings,
|
||||
database=database,
|
||||
database_status=DatabaseStatusRepository(database),
|
||||
accounts=AccountService(database, account_repository, PasswordHasher(), cipher),
|
||||
memberships=MembershipService(database, account_repository),
|
||||
accounts=accounts,
|
||||
memberships=memberships,
|
||||
system_credentials=credentials,
|
||||
model_pool=ModelPoolService(database, model_pool_repository, cipher),
|
||||
model_pool=model_pool,
|
||||
market=market,
|
||||
screener=ScreenerService(database, ScreenerRepository(), market_repository, gateway),
|
||||
screener=screener,
|
||||
llm=llm,
|
||||
mentor=mentor,
|
||||
)
|
||||
|
||||
@@ -34,6 +34,8 @@ class Settings:
|
||||
debug: bool
|
||||
data_directory: Path
|
||||
database_path: Path
|
||||
mentor_skills_directory: Path
|
||||
private_mentor_skills_directory: Path
|
||||
log_file: Path | None
|
||||
log_level: str
|
||||
host: str
|
||||
@@ -54,6 +56,13 @@ class Settings:
|
||||
database_path = _resolve_path(
|
||||
os.getenv("APP_DATABASE_PATH", ""), data_directory / "xiaobai.db"
|
||||
)
|
||||
mentor_skills_directory = _resolve_path(
|
||||
os.getenv("APP_MENTOR_SKILLS_DIR", ""), PROJECT_ROOT / "config" / "mentor-skills"
|
||||
)
|
||||
private_mentor_skills_directory = _resolve_path(
|
||||
os.getenv("APP_PRIVATE_MENTOR_SKILLS_DIR", ""),
|
||||
data_directory / "private-mentor-skills",
|
||||
)
|
||||
log_file = _resolve_path(
|
||||
os.getenv("APP_LOG_FILE", ""),
|
||||
data_directory / "logs" / "application.log",
|
||||
@@ -69,6 +78,8 @@ class Settings:
|
||||
debug=environment == "development",
|
||||
data_directory=data_directory,
|
||||
database_path=database_path,
|
||||
mentor_skills_directory=mentor_skills_directory,
|
||||
private_mentor_skills_directory=private_mentor_skills_directory,
|
||||
log_file=log_file,
|
||||
log_level=log_level,
|
||||
host=os.getenv("APP_HOST", "127.0.0.1").strip() or "127.0.0.1",
|
||||
@@ -85,6 +96,8 @@ class Settings:
|
||||
debug=False,
|
||||
data_directory=root,
|
||||
database_path=root / "xiaobai-test.db",
|
||||
mentor_skills_directory=PROJECT_ROOT / "config" / "mentor-skills",
|
||||
private_mentor_skills_directory=root / "private-mentor-skills",
|
||||
log_file=None,
|
||||
log_level="CRITICAL",
|
||||
host="127.0.0.1",
|
||||
|
||||
Reference in New Issue
Block a user