diff --git a/entrypoint.py b/entrypoint.py index dca64d2..d97c17a 100644 --- a/entrypoint.py +++ b/entrypoint.py @@ -1,47 +1,47 @@ import os -import langchain -import langchain_community -from langchain_community.agents import tool -from langchain_community.tools import searxng, qdrant, llma_server +from fastapi import FastAPI +from langchain_community.utilities import SearxSearchWrapper +from langchain_community.vectorstores import Qdrant +from langchain_community.embeddings import HuggingFaceEmbeddings +from langchain_community.llms import LLaMAServer +from langchain.schema import Document # Environment variables -SEARXNG_URL = os.environ['SEARXNG_URL'] -QDRANT_URL = os.environ['QDRANT_URL'] -LLAMA_SERVER_URL = os.environ['LLAMA_SERVER_URL'] +SEARXNG_URL = os.environ["SEARXNG_URL"] +QDRANT_URL = os.environ["QDRANT_URL"] +LLAMA_SERVER_URL = os.environ["LLAMA_SERVER_URL"] -# Define the LangChain agent -class SearchAgent(langchain.Agent): - def __init__(self): - super().__init__() - self.searxng_tool = searxng.SearXNGTool(SEARXNG_URL=SEARXNG_URL) - self.qdrant_tool = qdrant.QDrantTool(QDRANT_URL=QDRANT_URL) - self.llma_server_tool = llma_server.LLaMAServerTool(LLAMA_SERVER_URL=LLAMA_SERVER_URL) - - async def search(self, query): - # Send query to SearXNG API - results = await self.searxng_tool.search(query) - # Embed results with QDrant - await self.qdrant_tool.embed(results) - return results - - async def query(self, query): - # Use LLaMA-Server to process query - response = await self.llma_server_tool.query(query) - return response - -# Create the LangChain agent -agent = SearchAgent() - -# Define the API endpoints -from fastapi import FastAPI +# Initialize FastAPI app = FastAPI() -@app.post("/search") -async def search(query: str): - results = await agent.search(query) - return results +# Initialize components +searx = SearxSearchWrapper(searx_host=SEARXNG_URL) +embedding_model = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2") +qdrant = Qdrant( + url=QDRANT_URL, + collection_name="search_vectors", + embeddings=embedding_model +) +llm = LLaMAServer(endpoint_url=LLAMA_SERVER_URL) -@app.post("/query") -async def query(query: str): - response = await agent.query(query) - return response \ No newline at end of file +@app.post("/process") +async def process(query: str): + # Step 1: Search with SearXNG + raw_results = searx.run(query) + + # Step 2: Convert to LangChain Documents + docs = [Document(page_content=result) for result in raw_results.split("\n") if result.strip()] + + # Step 3: Embed and store in Qdrant + qdrant.add_documents(docs) + + # Step 4: Query Qdrant for similar vectors + matches = qdrant.similarity_search(query, k=3) + + # Step 5: Combine raw + vector results + combined = "\n".join([doc.page_content for doc in docs + matches]) + + # Step 6: Send to LLaMA-Server + response = llm.invoke(combined) + + return {"response": response}