cd41e9e33e
- **Implement `MlxModelService` for local LLM backend.** - **Introduce `DatabaseService` for MySQL integration.** - **Add `HistoryService` to manage conversation context.** - **Set up CLI interface via `CliUiService`.** - **Establish EventBus for token streaming.** - **Include conversation repository for data persistence.** - **Add environment-based configuration management.** - **Draft IoC architectural plan.**
65 lines
2.2 KiB
Python
65 lines
2.2 KiB
Python
from dependency_injector import containers, providers
|
|
|
|
from config import Config
|
|
from services.model.mlx_model import MlxModelService
|
|
from services.chat.history_service import HistoryService
|
|
from services.chat.chat_service import ChatService
|
|
from services.chat.compact_service import CompactService
|
|
from services.db.mysql_service import DatabaseService
|
|
from services.db.conversation_repository import ConversationRepository
|
|
from services.ui.cli_service import CliUiService
|
|
from services.events.event_bus import EventBus
|
|
from services.events.handlers import StreamTokenHandler, StreamEndHandler
|
|
|
|
|
|
class Container(containers.DeclarativeContainer):
|
|
config = providers.Singleton(Config)
|
|
|
|
event_bus = providers.Singleton(EventBus)
|
|
|
|
model_service = providers.Singleton(
|
|
MlxModelService,
|
|
model_id=providers.Callable(lambda c: c.model_id, config),
|
|
)
|
|
|
|
compact_service = providers.Singleton(
|
|
CompactService,
|
|
model=model_service,
|
|
)
|
|
|
|
db_service = providers.Singleton(
|
|
DatabaseService,
|
|
host=providers.Callable(lambda c: c.db_host, config),
|
|
port=providers.Callable(lambda c: c.db_port, config),
|
|
db=providers.Callable(lambda c: c.db_name, config),
|
|
user=providers.Callable(lambda c: c.db_user, config),
|
|
password=providers.Callable(lambda c: c.db_password, config),
|
|
)
|
|
|
|
conversation_repository = providers.Singleton(
|
|
ConversationRepository,
|
|
db=db_service,
|
|
)
|
|
|
|
history_service = providers.Factory(
|
|
HistoryService,
|
|
system_prompt=providers.Callable(lambda c: c.system_prompt, config),
|
|
max_turns=providers.Callable(lambda c: c.max_history_turns, config),
|
|
compact_threshold=providers.Callable(lambda c: c.compact_threshold, config),
|
|
repository=conversation_repository,
|
|
compact_service=compact_service,
|
|
)
|
|
|
|
chat_service = providers.Factory(
|
|
ChatService,
|
|
model=model_service,
|
|
history=history_service,
|
|
event_bus=event_bus,
|
|
max_tokens=providers.Callable(lambda c: c.max_tokens, config),
|
|
)
|
|
|
|
ui_service = providers.Singleton(CliUiService)
|
|
|
|
stream_token_handler = providers.Singleton(StreamTokenHandler)
|
|
stream_end_handler = providers.Singleton(StreamEndHandler)
|