AI-Package-Doctor / web_app.py
Yash030's picture
Intial Files
dff68cb
"""
Web Interface Entry Point for ADK Web UI.
Run with: python web_app.py
"""
import os
import nest_asyncio
import uvicorn
from typing import Optional, Any
from google.adk.cli.adk_web_server import (
AdkWebServer, BaseAgentLoader, EvalSetsManager, EvalSetResultsManager,
BaseCredentialService
)
from google.adk.artifacts import FileArtifactService
from src.config import get_session_service, get_memory_service
from src.agents import create_root_agent
from src.utils import logger
# Apply nest_asyncio to handle event loop conflicts
nest_asyncio.apply()
class SingleAgentLoader(BaseAgentLoader):
"""Custom loader that serves our single root agent."""
def __init__(self, agent):
self.agent = agent
self.agent_name = "package_conflict_resolver"
def list_agents(self) -> list[str]:
return [self.agent_name]
def load_agent(self, agent_name: str):
if agent_name == self.agent_name:
return self.agent
raise ValueError(f"Agent {agent_name} not found")
class LocalCredentialService(BaseCredentialService):
"""Simple credential service implementation."""
def __init__(self, base_dir: str):
self.base_dir = base_dir
os.makedirs(base_dir, exist_ok=True)
def load_credential(self, auth_config: Any, callback_context: Any) -> Optional[Any]:
# Dummy implementation: return None or load from file if needed
# For now, we don't persist credentials, so returning None is safe
return None
def save_credential(self, auth_config: Any, callback_context: Any) -> None:
# Dummy implementation: do nothing
pass
if __name__ == "__main__":
logger.info("🌐 Initializing ADK Web Server...")
# 1. Initialize Services
session_service = get_session_service()
memory_service = get_memory_service()
data_dir = os.path.abspath("data")
os.makedirs(data_dir, exist_ok=True)
# Corrected: use root_dir instead of base_dir
artifact_service = FileArtifactService(root_dir=os.path.join(data_dir, "artifacts"))
# Use custom LocalCredentialService with implemented abstract methods
credential_service = LocalCredentialService(base_dir=os.path.join(data_dir, "credentials"))
eval_sets_manager = EvalSetsManager(base_dir=os.path.join(data_dir, "eval_sets"))
eval_set_results_manager = EvalSetResultsManager(base_dir=os.path.join(data_dir, "eval_results"))
# 2. Create Agent
root_agent = create_root_agent()
agent_loader = SingleAgentLoader(root_agent)
# 3. Initialize Web Server
server = AdkWebServer(
agent_loader=agent_loader,
session_service=session_service,
memory_service=memory_service,
artifact_service=artifact_service,
credential_service=credential_service,
eval_sets_manager=eval_sets_manager,
eval_set_results_manager=eval_set_results_manager,
agents_dir=os.path.abspath("src")
)
# 4. Get FastAPI App
app = server.get_fast_api_app()
logger.info("πŸš€ Starting Server...")
logger.info("πŸ‘‰ Open: http://127.0.0.1:8000/dev-ui/")
uvicorn.run(app, host="127.0.0.1", port=8000)