Spaces:
Sleeping
Sleeping
Download rag/compressor.py from hello674/sivfastapi: direct link, hf CLI and curl.
- Browser
- Download file 2.2 kB
-
https://huggingface.co/spaces/hello674/sivfastapi/resolve/main/rag/compressor.py
- Command line
-
hf download hf://spaces/hello674/sivfastapi/rag/compressor.py
-
curl -L -o compressor.py https://huggingface.co/spaces/hello674/sivfastapi/resolve/main/rag/compressor.py
2.2 kB
| from langchain.retrievers.document_compressors import LLMChainExtractor | |
| from langchain_openai import ChatOpenAI | |
| from langchain_core.documents import Document | |
| from fastapi.utils.encrypt import Decryptor | |
| decryptor = Decryptor() | |
| class Compressor: | |
| def __init__(self, api: dict): | |
| self.llm = ChatOpenAI( | |
| model=api["model_name"], | |
| temperature=api.get("temperature", 0), | |
| openai_api_key=decryptor.decrypt_api_key(api["apikey"]), | |
| openai_api_base=api["provider_url"], | |
| ) | |
| self.compressor = LLMChainExtractor.from_llm(self.llm) | |
| def compress_documents(self, query: str, documents: list): | |
| """ | |
| Compress retrieved documents based on the user query. | |
| Args: | |
| query (str): User query | |
| documents (list): List of document strings OR Document objects | |
| Returns: | |
| list: Compressed document results | |
| """ | |
| langchain_docs = [] | |
| for idx, doc in enumerate(documents): | |
| # If already a LangChain Document | |
| if isinstance(doc, Document): | |
| langchain_docs.append(doc) | |
| # If plain string | |
| elif isinstance(doc, str): | |
| langchain_docs.append( | |
| Document( | |
| page_content=doc, | |
| metadata={ | |
| "chunk_id": idx | |
| } | |
| ) | |
| ) | |
| # If dict format | |
| elif isinstance(doc, dict): | |
| langchain_docs.append( | |
| Document( | |
| page_content=doc.get("page_content", ""), | |
| metadata=doc.get("metadata", {}) | |
| ) | |
| ) | |
| compressed_docs = self.compressor.compress_documents( | |
| documents=langchain_docs, | |
| query=query | |
| ) | |
| results = [] | |
| for doc in compressed_docs: | |
| results.append({ | |
| "page_content": doc.page_content, | |
| "metadata": doc.metadata | |
| }) | |
| return results |