2.3 KiB
2.3 KiB
session-store: persistence クレートの再構成
背景
llm-worker-persistence は名前・構造ともに llm-worker のサブクレートに見えるが、
実態はセッション管理という上位層の関心を持っている。
現状の Session は Worker を wrap して run()/resume() をインターセプトするが、
永続化のためにレイヤーとして呼び出しパスに噛む必要はない。
Worker からセッション状態を抜き出して保存する/復元するだけで十分。
方針
- クレート名を
llm-worker-persistence→session-storeに変更 Sessionの Worker wrap を廃止し、save/restore の関数群にする- Pod が Worker を直接保持し、run 後に session-store の関数を呼ぶ
llm-workerへの型依存(Item,RequestConfig)はそのまま残す(構造的に層にならなければ問題ない)
現状の構造
Controller → Pod → Session (wraps Worker) → Worker
↑ run()/resume() をインターセプト
pod.session_mut().worker_mut() と2段潜る必要がある。
変更後の構造
Controller → Pod → Worker (直接保持)
│
└─ run 後に session_store::save_delta(store, ...) を呼ぶ
restore 時に session_store::restore(store, id) → state を返す
変更内容
session-store クレート(旧 llm-worker-persistence)
Sessionstruct を廃止- save 系関数を提供: history delta の記録、turn end、outcome 等
- restore 関数: ログ再生 →
RestoredStateを返す(Worker は作らない) Storetrait,FsStore,LogEntry, ハッシュチェーンはそのまま維持- fork / fork_at も関数として残す
pod クレート
PodがWorkerを直接フィールドに持つPod::run()内で Worker を呼び、その後 session-store の save 関数を呼ぶPod::restore()は session-store からRestoredStateを受け取り、Worker に適用- Controller は
pod.worker()/pod.worker_mut()で直接アクセス
影響範囲
Sessionを使っている箇所:pod.rs,controller.rs, テストSessionErrorが消えるので、PodErrorからSessionErrorvariant を除去し、StoreErrorに置換