fix: support AI commands in media captions
This commit is contained in:
@@ -437,8 +437,14 @@ async def run_agent_turn(
|
||||
context["base_dir"] = config.base_dir
|
||||
existing.session.context.clear()
|
||||
existing.session.context.update(context)
|
||||
media = await _download_message_media(
|
||||
client,
|
||||
command_message,
|
||||
Path(existing.workspace.name),
|
||||
config.max_media_bytes,
|
||||
)
|
||||
return AgentTurnResult(
|
||||
answer=await _run_session(existing.session, invocation.prompt),
|
||||
answer=await _run_session(existing.session, invocation.prompt, media=media),
|
||||
handle=existing,
|
||||
)
|
||||
|
||||
@@ -463,6 +469,12 @@ async def run_agent_turn(
|
||||
user_template=templates.user,
|
||||
template_context=context,
|
||||
)
|
||||
media = await _download_message_media(
|
||||
client,
|
||||
command_message,
|
||||
temp_path,
|
||||
config.max_media_bytes,
|
||||
)
|
||||
tools = [
|
||||
*WebPageTools(
|
||||
timeout_seconds=config.web_page_timeout_seconds,
|
||||
@@ -501,7 +513,7 @@ async def run_agent_turn(
|
||||
session_name=f"telegram:{chat_id}",
|
||||
messages=messages,
|
||||
)
|
||||
answer = await _run_session(session, invocation.prompt)
|
||||
answer = await _run_session(session, invocation.prompt, media=media)
|
||||
return AgentTurnResult(
|
||||
answer=answer,
|
||||
handle=AgentSessionHandle(session, workspace, set()),
|
||||
@@ -511,8 +523,11 @@ async def run_agent_turn(
|
||||
raise
|
||||
|
||||
|
||||
async def _run_session(session: Any, prompt: str) -> str:
|
||||
result = await session.run(prompt)
|
||||
async def _run_session(session: Any, prompt: str, *, media: list[Media] | None = None) -> str:
|
||||
if media:
|
||||
result = await session.run(prompt, media=media)
|
||||
else:
|
||||
result = await session.run(prompt)
|
||||
if not result.succeeded or result.final_message is None:
|
||||
raise AgentError("Agent loop failed") from result.error
|
||||
answer = result.final_message.message().strip()
|
||||
|
||||
@@ -59,10 +59,12 @@ class CommandDispatcher:
|
||||
account: "AccountState",
|
||||
) -> bool:
|
||||
text = getattr(message, "text", None)
|
||||
if not isinstance(text, str):
|
||||
caption = getattr(message, "caption", None)
|
||||
command_text = text if isinstance(text, str) else caption
|
||||
if not isinstance(command_text, str):
|
||||
return False
|
||||
|
||||
parsed = parse_command(text)
|
||||
parsed = parse_command(command_text)
|
||||
if parsed is None:
|
||||
return False
|
||||
|
||||
@@ -85,7 +87,7 @@ class CommandDispatcher:
|
||||
message=message,
|
||||
command=definition,
|
||||
prefix=parsed.prefix,
|
||||
raw_text=text,
|
||||
raw_text=command_text,
|
||||
args=parsed.args,
|
||||
alias=parsed.alias,
|
||||
)
|
||||
|
||||
@@ -18,4 +18,4 @@ def register_common_handlers(client: "Client", manager: "AccountManager", accoun
|
||||
async def command_handler(client_: "Client", message) -> None:
|
||||
await dispatcher.dispatch(client_, message, manager, account)
|
||||
|
||||
client.add_handler(MessageHandler(command_handler, filters.text))
|
||||
client.add_handler(MessageHandler(command_handler, filters.text | filters.caption))
|
||||
|
||||
Reference in New Issue
Block a user