Visionary_Ai_2 / rag_agent.py
GiantAnalytics's picture
Update rag_agent.py
e8110e4 verified
import os
import json
import pandas as pd
from phi.agent import Agent
from phi.model.openai import OpenAIChat
from phi.embedder.openai import OpenAIEmbedder
from phi.vectordb.lancedb import LanceDb, SearchType
from phi.knowledge.json import JSONKnowledgeBase
from dotenv import load_dotenv
# Load environment variables
load_dotenv()
# Paths
BNI_CSV_FILE = "bni_pearl_chapter.csv"
BNI_JSON_FILE = "bni_pearl_chapter.json"
# Convert CSV to JSON if JSON doesn't exist
def convert_csv_to_json():
if not os.path.exists(BNI_CSV_FILE):
raise FileNotFoundError(f"❌ Error: {BNI_CSV_FILE} is missing.")
df = pd.read_csv(BNI_CSV_FILE)
if df.empty:
raise ValueError(f"❌ Error: {BNI_CSV_FILE} is empty!")
json_data = df.to_dict(orient="records")
with open(BNI_JSON_FILE, "w") as file:
json.dump(json_data, file, indent=4)
print(f"βœ… Converted {BNI_CSV_FILE} to JSON format.")
if not os.path.exists(BNI_JSON_FILE):
convert_csv_to_json()
# Initialize LanceDb (vector DB)
vector_db = LanceDb(
table_name="bni_pearl",
uri="tmp/lancedb",
search_type=SearchType.vector,
embedder=OpenAIEmbedder(model="text-embedding-3-small"),
)
# Initialize JSON Knowledge Base
knowledge_base = JSONKnowledgeBase(
path=BNI_JSON_FILE, # Important: `path` instead of `file_path`
vector_db=vector_db
)
# Load the knowledge base
knowledge_base.load()
# Initialize the RAG Agent
rag_agent = Agent(
model=OpenAIChat(model="gpt-4o"),
knowledge=knowledge_base,
show_tool_calls=True,
markdown=True,
)
# Define Function to Recommend BNI Members
def recommend_bni_connections(company_data: str) -> str:
query = f"""
Given the following business details:
- **Company Information:** {company_data}
Recommend **5-6 members** from the BNI Pearl Chapter who can help this business through referrals, networking, or industry connections. Provide:
1. **Member Name**
2. **Company & Industry**
3. **How They Can Help**
"""
response = rag_agent.run(query)
return response.content