agentic-defensor / replicate.py
vichudo's picture
add first approach
b840b29
Raw
History Blame Contribute Delete
2.86 kB
import os
import sys
from typing import Dict, Any
import cog
from dotenv import load_dotenv
# Add the current directory to the path so we can import from src
sys.path.append(".")
# Load environment variables
load_dotenv()
# Import after path setup
from src.agents.agent_director import AgentDirector
from src.utils.config import CHAT_MODEL
class Predictor(cog.Predictor):
def setup(self):
"""Setup the model and load resources."""
# Check environment variables
if not os.environ.get("OPENAI_API_KEY"):
raise ValueError("OPENAI_API_KEY environment variable is required")
# Check data files exist
required_files = [
"embeddings/faiss_index.index",
"data/doc_chunks.pkl",
"embeddings/embeddings.pkl"
]
for file_path in required_files:
if not os.path.exists(file_path):
raise FileNotFoundError(f"Required file not found: {file_path}")
# Initialize the agent director
self.director = AgentDirector(model=CHAT_MODEL, top_k=50)
print("Agentic Defensor initialized successfully")
@cog.input("query", type=str, help="The legal query to process")
@cog.input("top_k", type=int, default=50, help="Number of chunks to retrieve")
@cog.input("model", type=str, default=CHAT_MODEL, help="OpenAI model to use")
@cog.input("debug", type=bool, default=False, help="Show agent reasoning steps")
def predict(self, query: str, top_k: int = 50, model: str = CHAT_MODEL, debug: bool = False) -> Dict[str, Any]:
"""
Process a query using the Agentic Defensor system.
Args:
query: The legal query to process
top_k: Number of chunks to retrieve
model: OpenAI model to use
debug: Whether to show agent reasoning steps
Returns:
Dictionary containing the answer and metadata
"""
# Re-initialize with custom parameters if needed
if model != self.director.model or top_k != self.director.top_k or debug != self.director.debug:
self.director = AgentDirector(model=model, top_k=top_k, debug=debug)
# Process the query
result = self.director.process_query(query)
# Format the response
response = {
"query": query,
"answer": result["answer"],
"model_used": result["model_used"]
}
# Add debug information if available
if debug and "reasoning_steps" in result:
response["reasoning_steps"] = result["reasoning_steps"]
# Add metadata
if "num_chunks_retrieved" in result:
response["num_chunks_retrieved"] = result["num_chunks_retrieved"]
return response