- **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.**
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
from collections import defaultdict
|
||||
from typing import Callable
|
||||
|
||||
|
||||
class EventBus:
|
||||
"""Observer 패턴 기반 이벤트 버스."""
|
||||
|
||||
def __init__(self):
|
||||
self._handlers: dict[str, list[Callable]] = defaultdict(list)
|
||||
|
||||
def subscribe(self, event: str, handler: Callable) -> None:
|
||||
self._handlers[event].append(handler)
|
||||
|
||||
def unsubscribe(self, event: str, handler: Callable) -> None:
|
||||
self._handlers[event].remove(handler)
|
||||
|
||||
def publish(self, event: str, *args, **kwargs) -> None:
|
||||
for handler in self._handlers[event]:
|
||||
handler(*args, **kwargs)
|
||||
@@ -0,0 +1,15 @@
|
||||
import sys
|
||||
|
||||
|
||||
class StreamTokenHandler:
|
||||
"""스트림 토큰을 stdout에 실시간 출력하는 핸들러."""
|
||||
|
||||
def __call__(self, token: str) -> None:
|
||||
print(token, end="", flush=True)
|
||||
|
||||
|
||||
class StreamEndHandler:
|
||||
"""스트림 종료 시 개행을 출력하는 핸들러."""
|
||||
|
||||
def __call__(self) -> None:
|
||||
print("\n")
|
||||
Reference in New Issue
Block a user