add tools.py
This commit is contained in:
@@ -0,0 +1,30 @@
|
|||||||
|
import os
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
from langchain.tools import tool
|
||||||
|
from langchain_ollama import OllamaEmbeddings
|
||||||
|
from langchain_chroma import Chroma
|
||||||
|
from langchain_tavily import TavilySearchResults
|
||||||
|
|
||||||
|
from vectorstore import create_vectorstore
|
||||||
|
|
||||||
|
# Global vector store instance
|
||||||
|
VECTORSTORE = create_vectorstore()
|
||||||
|
|
||||||
|
@tool
|
||||||
|
def search_local_kb(query: str, top_k: int = 3) -> str:
|
||||||
|
"""Semantic search in the local ChromaDB knowledge base."""
|
||||||
|
retriever = VECTORSTORE.as_retriever(search_kwargs={"k": top_k})
|
||||||
|
docs = retriever.get_relevant_documents(query)
|
||||||
|
if not docs:
|
||||||
|
return "No relevant local knowledge found."
|
||||||
|
return "\n\n".join(doc.page_content for doc in docs)
|
||||||
|
|
||||||
|
@tool
|
||||||
|
def web_search(query: str) -> str:
|
||||||
|
"""Web search using Tavily."""
|
||||||
|
tavily = TavilySearchResults(api_key=os.getenv("TAVILY_API_KEY"))
|
||||||
|
results = tavily.run(query)
|
||||||
|
if not results:
|
||||||
|
return "No web results found."
|
||||||
|
return "\n\n".join(f"{r['title']}\n{r['content']}" for r in results)
|
||||||
Reference in New Issue
Block a user