Files
shinalok cd41e9e33e - **Bootstrap IoC-based architecture with modular services.**
- **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.**
2026-04-25 01:14:37 +09:00

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)