@@ -48,7 +48,12 @@ def __init__(self, framework: BubFramework) -> None:
4848 from bub .builtin import tools # noqa: F401
4949
5050 self .framework = framework
51- self .agent = Agent (framework )
51+ self ._agent : Agent | None = None
52+
53+ def _get_agent (self ) -> Agent :
54+ if self ._agent is None :
55+ self ._agent = Agent (self .framework )
56+ return self ._agent
5257
5358 @hookimpl
5459 def resolve_session (self , message : ChannelMessage ) -> str :
@@ -64,7 +69,7 @@ async def load_state(self, message: ChannelMessage, session_id: str) -> State:
6469 lifespan = field_of (message , "lifespan" )
6570 if lifespan is not None :
6671 await lifespan .__aenter__ ()
67- state = {"session_id" : session_id , "_runtime_agent" : self .agent }
72+ state = {"session_id" : session_id , "_runtime_agent" : self ._get_agent () }
6873 if context := field_of (message , "context_str" ):
6974 state ["context" ] = context
7075 return state
@@ -107,11 +112,11 @@ async def build_prompt(self, message: ChannelMessage, session_id: str, state: St
107112
108113 @hookimpl
109114 async def run_model (self , prompt : str | list [dict ], session_id : str , state : State ) -> str :
110- return await self .agent .run (session_id = session_id , prompt = prompt , state = state )
115+ return await self ._get_agent () .run (session_id = session_id , prompt = prompt , state = state )
111116
112117 @hookimpl
113118 async def run_model_stream (self , prompt : str | list [dict ], session_id : str , state : State ) -> AsyncStreamEvents :
114- return await self .agent .run_stream (session_id = session_id , prompt = prompt , state = state )
119+ return await self ._get_agent () .run_stream (session_id = session_id , prompt = prompt , state = state )
115120
116121 @hookimpl
117122 def register_cli_commands (self , app : typer .Typer ) -> None :
@@ -148,7 +153,7 @@ def provide_channels(self, message_handler: MessageHandler) -> list[Channel]:
148153
149154 return [
150155 TelegramChannel (on_receive = message_handler ),
151- CliChannel (on_receive = message_handler , agent = self .agent ),
156+ CliChannel (on_receive = message_handler , agent = self ._get_agent () ),
152157 ]
153158
154159 @hookimpl
@@ -191,9 +196,10 @@ def render_outbound(
191196
192197 @hookimpl
193198 def provide_tape_store (self ) -> TapeStore :
199+ import bub
194200 from bub .builtin .store import FileTapeStore
195201
196- return FileTapeStore (directory = self . agent . settings .home / "tapes" )
202+ return FileTapeStore (directory = bub .home / "tapes" )
197203
198204 @hookimpl
199205 def build_tape_context (self ) -> TapeContext :
0 commit comments