Update entrypoint.py

This commit is contained in:
cmdrunematti 2025-10-20 17:57:01 +00:00
parent f4ae4ef668
commit 5fa1f21aab
1 changed files with 40 additions and 40 deletions

View File

@ -1,47 +1,47 @@
import os import os
import langchain from fastapi import FastAPI
import langchain_community from langchain_community.utilities import SearxSearchWrapper
from langchain_community.agents import tool from langchain_community.vectorstores import Qdrant
from langchain_community.tools import searxng, qdrant, llma_server from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_community.llms import LLaMAServer
from langchain.schema import Document
# Environment variables # Environment variables
SEARXNG_URL = os.environ['SEARXNG_URL'] SEARXNG_URL = os.environ["SEARXNG_URL"]
QDRANT_URL = os.environ['QDRANT_URL'] QDRANT_URL = os.environ["QDRANT_URL"]
LLAMA_SERVER_URL = os.environ['LLAMA_SERVER_URL'] LLAMA_SERVER_URL = os.environ["LLAMA_SERVER_URL"]
# Define the LangChain agent # Initialize FastAPI
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
app = FastAPI() app = FastAPI()
@app.post("/search") # Initialize components
async def search(query: str): searx = SearxSearchWrapper(searx_host=SEARXNG_URL)
results = await agent.search(query) embedding_model = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
return results qdrant = Qdrant(
url=QDRANT_URL,
collection_name="search_vectors",
embeddings=embedding_model
)
llm = LLaMAServer(endpoint_url=LLAMA_SERVER_URL)
@app.post("/query") @app.post("/process")
async def query(query: str): async def process(query: str):
response = await agent.query(query) # Step 1: Search with SearXNG
return response 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}