Update entrypoint.py
This commit is contained in:
parent
f4ae4ef668
commit
5fa1f21aab
|
|
@ -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
|
||||
@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}
|
||||
|
|
|
|||
Loading…
Reference in New Issue