Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions langchain/chains/combine_documents/map_reduce.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from __future__ import annotations

from typing import Any, Dict, List, Tuple
from typing import Any, Dict, List, Optional, Tuple

from pydantic import Extra, root_validator

Expand Down Expand Up @@ -198,7 +198,7 @@ def combine_document_chain(self) -> BaseCombineDocumentsChain:
def combine_docs(
self,
docs: List[Document],
token_max: int = 3000,
token_max: Optional[int] = None,
callbacks: Callbacks = None,
**kwargs: Any,
) -> Tuple[str, dict]:
Expand Down Expand Up @@ -229,7 +229,7 @@ def combine_docs(
async def acombine_docs(
self,
docs: List[Document],
token_max: int = 3000,
token_max: Optional[int] = None,
callbacks: Callbacks = None,
**kwargs: Any,
) -> Tuple[str, dict]:
Expand Down
22 changes: 14 additions & 8 deletions langchain/chains/combine_documents/reduce.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,10 @@ class ReduceDocumentsChain(BaseCombineDocumentsChain):
"""Chain to use to collapse documents if needed until they can all fit.
If None, will use the combine_documents_chain.
This is typically a StuffDocumentsChain."""
token_max: int = 3000
"""The maximum number of tokens to group documents into. For example, if
set to 3000 then documents will be grouped into chunks of no greater than
3000 tokens before trying to combine them into a smaller chunk."""

class Config:
"""Configuration for this pydantic object."""
Expand All @@ -169,7 +173,7 @@ def _collapse_chain(self) -> BaseCombineDocumentsChain:
def combine_docs(
self,
docs: List[Document],
token_max: int = 3000,
token_max: Optional[int] = None,
callbacks: Callbacks = None,
**kwargs: Any,
) -> Tuple[str, dict]:
Expand Down Expand Up @@ -198,7 +202,7 @@ def combine_docs(
async def acombine_docs(
self,
docs: List[Document],
token_max: int = 3000,
token_max: Optional[int] = None,
callbacks: Callbacks = None,
**kwargs: Any,
) -> Tuple[str, dict]:
Expand Down Expand Up @@ -227,7 +231,7 @@ async def acombine_docs(
def _collapse(
self,
docs: List[Document],
token_max: int = 3000,
token_max: Optional[int] = None,
callbacks: Callbacks = None,
**kwargs: Any,
) -> Tuple[List[Document], dict]:
Expand All @@ -240,9 +244,10 @@ def _collapse_docs_func(docs: List[Document], **kwargs: Any) -> str:
input_documents=docs, callbacks=callbacks, **kwargs
)

while num_tokens is not None and num_tokens > token_max:
_token_max = token_max or self.token_max
while num_tokens is not None and num_tokens > _token_max:
new_result_doc_list = _split_list_of_docs(
result_docs, length_func, token_max, **kwargs
result_docs, length_func, _token_max, **kwargs
)
result_docs = []
for docs in new_result_doc_list:
Expand All @@ -254,7 +259,7 @@ def _collapse_docs_func(docs: List[Document], **kwargs: Any) -> str:
async def _acollapse(
self,
docs: List[Document],
token_max: int = 3000,
token_max: Optional[int] = None,
callbacks: Callbacks = None,
**kwargs: Any,
) -> Tuple[List[Document], dict]:
Expand All @@ -267,9 +272,10 @@ async def _collapse_docs_func(docs: List[Document], **kwargs: Any) -> str:
input_documents=docs, callbacks=callbacks, **kwargs
)

while num_tokens is not None and num_tokens > token_max:
_token_max = token_max or self.token_max
while num_tokens is not None and num_tokens > _token_max:
new_result_doc_list = _split_list_of_docs(
result_docs, length_func, token_max, **kwargs
result_docs, length_func, _token_max, **kwargs
)
result_docs = []
for docs in new_result_doc_list:
Expand Down
3 changes: 3 additions & 0 deletions langchain/chains/qa_with_sources/loading.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ def _load_map_reduce_chain(
reduce_llm: Optional[BaseLanguageModel] = None,
collapse_llm: Optional[BaseLanguageModel] = None,
verbose: Optional[bool] = None,
token_max: int = 3000,
**kwargs: Any,
) -> MapReduceDocumentsChain:
map_chain = LLMChain(llm=llm, prompt=question_prompt, verbose=verbose)
Expand Down Expand Up @@ -111,6 +112,8 @@ def _load_map_reduce_chain(
reduce_documents_chain = ReduceDocumentsChain(
combine_documents_chain=combine_documents_chain,
collapse_documents_chain=collapse_chain,
token_max=token_max,
verbose=verbose,
)
return MapReduceDocumentsChain(
llm_chain=map_chain,
Expand Down
3 changes: 3 additions & 0 deletions langchain/chains/question_answering/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ def _load_map_reduce_chain(
verbose: Optional[bool] = None,
callback_manager: Optional[BaseCallbackManager] = None,
callbacks: Callbacks = None,
token_max: int = 3000,
**kwargs: Any,
) -> MapReduceDocumentsChain:
_question_prompt = (
Expand Down Expand Up @@ -154,6 +155,8 @@ def _load_map_reduce_chain(
reduce_documents_chain = ReduceDocumentsChain(
combine_documents_chain=combine_documents_chain,
collapse_documents_chain=collapse_chain,
token_max=token_max,
verbose=verbose,
)
return MapReduceDocumentsChain(
llm_chain=map_chain,
Expand Down
3 changes: 3 additions & 0 deletions langchain/chains/summarize/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ def _load_map_reduce_chain(
reduce_llm: Optional[BaseLanguageModel] = None,
collapse_llm: Optional[BaseLanguageModel] = None,
verbose: Optional[bool] = None,
token_max: int = 3000,
**kwargs: Any,
) -> MapReduceDocumentsChain:
map_chain = LLMChain(llm=llm, prompt=map_prompt, verbose=verbose)
Expand Down Expand Up @@ -79,6 +80,8 @@ def _load_map_reduce_chain(
reduce_documents_chain = ReduceDocumentsChain(
combine_documents_chain=combine_documents_chain,
collapse_documents_chain=collapse_chain,
token_max=token_max,
verbose=verbose,
)
return MapReduceDocumentsChain(
llm_chain=map_chain,
Expand Down