You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

95 lines
3.7 KiB

"""
Main application entry point for Islamic Scholar Agent
"""
import sys
import os
# Add project root to Python path when run directly
if __name__ == "__main__" and __package__ is None:
# When running as script, add the parent directory to make 'src' importable
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, project_root)
from agno.os import AgentOS
from src.agents.islamic_scholar_agent import IslamicScholarAgent
from src.models.factory import ModelFactory
from src.knowledge.rag_pipeline import create_knowledge_base
from src.core.logging import logger
from src.knowledge.embedding_factory import EmbeddingFactory
# from langfuse.openai import openai as langfuse_openai
# from langfuse import Langfuse
from src.utils.load_settings import get_active_agent_config
from dotenv import load_dotenv
load_dotenv()
def create_app():
"""Create and configure the FastAPI application"""
# Initialize model
model = ModelFactory()
embed_factory = EmbeddingFactory()
current_embedder = embed_factory.get_embedder()
# Try to initialize knowledge base, but handle connection errors gracefully
try:
knowledge_base = create_knowledge_base(
embedder=current_embedder,
)
logger.info(f"Knowledge base initialized with: {current_embedder.id}")
except Exception as e:
logger.warning(f"Could not initialize knowledge base: {e}")
logger.warning("Application will start without knowledge base. Some features may not work.")
knowledge_base = None
print(f"Could not initialize knowledge base: {e}")
print("Application will start without knowledge base. Some features may not work.")
# Create agent - use fallback if knowledge base is not available
if knowledge_base:
print(f"Knowledge base initialized with: {current_embedder.id}")
agent = IslamicScholarAgent(model.get_model(), knowledge_base)
agent_os = AgentOS(agents=[agent.get_agent()])
else:
# Create a fallback agent without knowledge base
logger.warning("Creating fallback agent without knowledge base")
print(f"****************************************************************")
print(f"Creating fallback agent without knowledge base")
from agno.agent import Agent
fallback_agent = Agent(
name="Fallback Islamic Scholar Agent",
model=model.get_model(),
description="Basic Islamic knowledge agent (knowledge base unavailable)",
instructions=[
"You are a basic Islamic knowledge assistant.",
"The knowledge base is currently unavailable.",
"Please inform the user that the full knowledge base is not accessible at the moment.",
"You can still provide general guidance about Islamic topics."
],
markdown=False,
debug_mode=True,
)
agent_os = AgentOS(agents=[fallback_agent])
# Get FastAPI app
# langfuse_openai.langfuse_public_key = os.getenv("LANGFUSE_PUBLIC_KEY")
# langfuse_openai.langfuse_secret_key = os.getenv("LANGFUSE_SECRET_KEY")
# langfuse_openai.langfuse_host = os.getenv("LANGFUSE_HOST")
app = agent_os.get_app()
logger.info("Islamic Scholar Agent application created successfully")
return app
# Create application instance
app = create_app()
if __name__ == "__main__":
import uvicorn
from core.settings import HOST , PORT , DEBUG_MODE
logger.info(f"Starting server on {HOST}:{PORT} (debug={DEBUG_MODE})")
uvicorn.run(
"src.main:app",
host=HOST,
port=PORT,
reload=DEBUG_MODE,
log_level="debug" if DEBUG_MODE else "info"
)