11import logging
22from abc import ABC
3- from typing import Type
3+ from typing import List , Type
44
55import requests
66from pydantic import Field
77
8- from steamship .agents .context .context import AgentContext
8+ from steamship import Block
9+ from steamship .agents .context .context import AgentContext , EmitFunc , Metadata
910from steamship .experimental .package_starters .web_agent import SteamshipWidgetAgentService
1011from steamship .experimental .package_starters .web_bot import response_for_exception
1112from steamship .experimental .transports import TelegramTransport
@@ -36,6 +37,14 @@ def instance_init(self):
3637 webhook_url = self .context .invocable_url + "respond"
3738 self .telegram_transport .instance_init (webhook_url = webhook_url )
3839
40+ def build_emit_func (self , chat_id : str ) -> EmitFunc :
41+ def new_emit_func (blocks : List [Block ], metadata : Metadata ):
42+ for block in blocks :
43+ block .set_chat_id (chat_id )
44+ return self .telegram_transport .send (blocks , metadata )
45+
46+ return new_emit_func
47+
3948 @post ("respond" , public = True )
4049 def respond (self , ** kwargs ) -> InvocableResponse [str ]:
4150 """Endpoint implementing the Telegram WebHook contract. This is a PUBLIC endpoint since Telegram cannot pass a Bearer token."""
@@ -49,11 +58,11 @@ def respond(self, **kwargs) -> InvocableResponse[str]:
4958 context = AgentContext .get_or_create (self .client , context_keys = {"chat_id" : chat_id })
5059 context .chat_history .append_user_message (text = incoming_message .text )
5160 if len (context .emit_funcs ) == 0 :
52- context .emit_funcs .append (self .telegram_transport . send )
61+ context .emit_funcs .append (self .build_emit_func ( chat_id = chat_id ) )
5362
5463 response = self .run_agent (context )
5564 if response is not None :
56- self .telegram_transport .send (response )
65+ self .telegram_transport .send (response , metadata = {} )
5766 else :
5867 # Do nothing here; this could be a message we intentionally don't want to respond to (ex. an image or file upload)
5968 pass
@@ -64,7 +73,7 @@ def respond(self, **kwargs) -> InvocableResponse[str]:
6473 response = response_for_exception (e , chat_id = chat_id )
6574
6675 if chat_id is not None :
67- self .telegram_transport .send ([response ])
76+ self .telegram_transport .send ([response ], metadata = {} )
6877 # Even if we do nothing, make sure we return ok
6978 return InvocableResponse (string = "OK" )
7079
0 commit comments