Skip to content

Commit

Permalink
Ensure first message is user message for anthropic
Browse files Browse the repository at this point in the history
  • Loading branch information
wch committed Jul 15, 2024
1 parent 6611277 commit e19153c
Showing 1 changed file with 8 additions and 2 deletions.
10 changes: 8 additions & 2 deletions shiny/ui/_chat.py
Original file line number Diff line number Diff line change
Expand Up @@ -466,7 +466,7 @@ def messages(

messages = self._messages()
if token_limits is not None:
messages = self._trim_messages(messages, token_limits)
messages = self._trim_messages(messages, token_limits, format)

res: list[ChatMessage | ProviderMessage] = []
for i, m in enumerate(messages):
Expand Down Expand Up @@ -827,7 +827,8 @@ def _store_message(
@staticmethod
def _trim_messages(
messages: tuple[StoredMessage, ...],
token_limits: tuple[int, int] = (4096, 1000),
token_limits: tuple[int, int],
format: MISSING_TYPE | ProviderMessageFormat,
) -> tuple[StoredMessage, ...]:

n_total, n_reserve = token_limits
Expand Down Expand Up @@ -872,6 +873,11 @@ def _trim_messages(
if remaining_non_system_tokens >= 0:
messages2.append(m)

if format == "anthropic":
# For anthropic, the first message must be a user message.
while messages2[-1]["role"] != "user":
messages2.pop()

messages2.reverse()

if len(messages2) == n_system_messages and n_other_messages > 0:
Expand Down

0 comments on commit e19153c

Please sign in to comment.