mirror of
https://github.com/hwchase17/langchain.git
synced 2025-08-07 03:56:39 +00:00
Merge a1c6d0ae2a
into 0e287763cd
This commit is contained in:
commit
34887a8e21
@ -1305,32 +1305,14 @@ def _first_max_tokens(
|
|||||||
if not messages:
|
if not messages:
|
||||||
return messages
|
return messages
|
||||||
|
|
||||||
# Check if all messages already fit within token limit
|
total_tokens = 0
|
||||||
if token_counter(messages) <= max_tokens:
|
idx = 0
|
||||||
# When all messages fit, only apply end_on filtering if needed
|
for i, message in enumerate(messages):
|
||||||
if end_on:
|
message_tokens = token_counter([message])
|
||||||
for _ in range(len(messages)):
|
if total_tokens + message_tokens > max_tokens:
|
||||||
if not _is_message_type(messages[-1], end_on):
|
|
||||||
messages.pop()
|
|
||||||
else:
|
|
||||||
break
|
|
||||||
return messages
|
|
||||||
|
|
||||||
# Use binary search to find the maximum number of messages within token limit
|
|
||||||
left, right = 0, len(messages)
|
|
||||||
max_iterations = len(messages).bit_length()
|
|
||||||
for _ in range(max_iterations):
|
|
||||||
if left >= right:
|
|
||||||
break
|
break
|
||||||
mid = (left + right + 1) // 2
|
total_tokens += message_tokens
|
||||||
if token_counter(messages[:mid]) <= max_tokens:
|
idx = i + 1
|
||||||
left = mid
|
|
||||||
idx = mid
|
|
||||||
else:
|
|
||||||
right = mid - 1
|
|
||||||
|
|
||||||
# idx now contains the maximum number of complete messages we can include
|
|
||||||
idx = left
|
|
||||||
|
|
||||||
if partial_strategy and idx < len(messages):
|
if partial_strategy and idx < len(messages):
|
||||||
included_partial = False
|
included_partial = False
|
||||||
|
Loading…
Reference in New Issue
Block a user