Merge branch 'main' into pr-900

This commit is contained in:
Re-bin
2026-02-20 15:23:22 +00:00
5 changed files with 27 additions and 10 deletions

View File

@@ -105,8 +105,9 @@ class BaseChannel(ABC):
""" """
if not self.is_allowed(sender_id): if not self.is_allowed(sender_id):
logger.warning( logger.warning(
f"Access denied for sender {sender_id} on channel {self.name}. " "Access denied for sender {} on channel {}. "
f"Add them to allowFrom list in config to grant access." "Add them to allowFrom list in config to grant access.",
sender_id, self.name,
) )
return return

View File

@@ -58,7 +58,8 @@ class NanobotDingTalkHandler(CallbackHandler):
if not content: if not content:
logger.warning( logger.warning(
f"Received empty or unsupported message type: {chatbot_msg.message_type}" "Received empty or unsupported message type: {}",
chatbot_msg.message_type,
) )
return AckMessage.STATUS_OK, "OK" return AckMessage.STATUS_OK, "OK"
@@ -126,7 +127,8 @@ class DingTalkChannel(BaseChannel):
self._http = httpx.AsyncClient() self._http = httpx.AsyncClient()
logger.info( logger.info(
f"Initializing DingTalk Stream Client with Client ID: {self.config.client_id}..." "Initializing DingTalk Stream Client with Client ID: {}...",
self.config.client_id,
) )
credential = Credential(self.config.client_id, self.config.client_secret) credential = Credential(self.config.client_id, self.config.client_secret)
self._client = DingTalkStreamClient(credential) self._client = DingTalkStreamClient(credential)

View File

@@ -84,11 +84,24 @@ class SlackChannel(BaseChannel):
channel_type = slack_meta.get("channel_type") channel_type = slack_meta.get("channel_type")
# Only reply in thread for channel/group messages; DMs don't use threads # Only reply in thread for channel/group messages; DMs don't use threads
use_thread = thread_ts and channel_type != "im" use_thread = thread_ts and channel_type != "im"
await self._web_client.chat_postMessage( thread_ts_param = thread_ts if use_thread else None
channel=msg.chat_id,
text=self._to_mrkdwn(msg.content), if msg.content:
thread_ts=thread_ts if use_thread else None, await self._web_client.chat_postMessage(
) channel=msg.chat_id,
text=self._to_mrkdwn(msg.content),
thread_ts=thread_ts_param,
)
for media_path in msg.media or []:
try:
await self._web_client.files_upload_v2(
channel=msg.chat_id,
file=media_path,
thread_ts=thread_ts_param,
)
except Exception as e:
logger.error("Failed to upload file {}: {}", media_path, e)
except Exception as e: except Exception as e:
logger.error("Error sending Slack message: {}", e) logger.error("Error sending Slack message: {}", e)

View File

@@ -111,7 +111,7 @@ class LiteLLMProvider(LLMProvider):
def _supports_cache_control(self, model: str) -> bool: def _supports_cache_control(self, model: str) -> bool:
"""Return True when the provider supports cache_control on content blocks.""" """Return True when the provider supports cache_control on content blocks."""
if self._gateway is not None: if self._gateway is not None:
return False return self._gateway.supports_prompt_caching
spec = find_by_model(model) spec = find_by_model(model)
return spec is not None and spec.supports_prompt_caching return spec is not None and spec.supports_prompt_caching

View File

@@ -100,6 +100,7 @@ PROVIDERS: tuple[ProviderSpec, ...] = (
default_api_base="https://openrouter.ai/api/v1", default_api_base="https://openrouter.ai/api/v1",
strip_model_prefix=False, strip_model_prefix=False,
model_overrides=(), model_overrides=(),
supports_prompt_caching=True,
), ),
# AiHubMix: global gateway, OpenAI-compatible interface. # AiHubMix: global gateway, OpenAI-compatible interface.