debashis2007's picture
Upload folder using huggingface_hub
75bea1c verified
#!/usr/bin/env python3
"""Main entry point for Ask-the-Web Agent."""
import argparse
import sys
def main() -> None:
"""Main entry point with subcommand support."""
parser = argparse.ArgumentParser(
description="Ask-the-Web Agent - AI-powered answers with web search",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
Examples:
%(prog)s cli Start interactive CLI
%(prog)s api Start API server
%(prog)s ui Start Streamlit UI
%(prog)s query "What is AI?" Single query mode
""",
)
subparsers = parser.add_subparsers(dest="command", help="Available commands")
# CLI subcommand
cli_parser = subparsers.add_parser("cli", help="Start interactive CLI")
# API subcommand
api_parser = subparsers.add_parser("api", help="Start API server")
api_parser.add_argument("--host", default="0.0.0.0", help="Host to bind to")
api_parser.add_argument("--port", type=int, default=8000, help="Port to bind to")
api_parser.add_argument("--reload", action="store_true", help="Enable auto-reload")
# UI subcommand
ui_parser = subparsers.add_parser("ui", help="Start Streamlit UI")
ui_parser.add_argument("--port", type=int, default=8501, help="Port for Streamlit")
# Query subcommand
query_parser = subparsers.add_parser("query", help="Execute a single query")
query_parser.add_argument("question", help="Question to ask")
query_parser.add_argument("--no-search", action="store_true", help="Disable web search")
query_parser.add_argument("--json", action="store_true", help="Output as JSON")
args = parser.parse_args()
if args.command == "cli":
from src.cli.main import main as cli_main
cli_main()
elif args.command == "api":
import uvicorn
uvicorn.run(
"src.api.app:app",
host=args.host,
port=args.port,
reload=args.reload,
)
elif args.command == "ui":
import subprocess
subprocess.run([
sys.executable, "-m", "streamlit", "run",
"src/ui/streamlit_app.py",
"--server.port", str(args.port),
])
elif args.command == "query":
import asyncio
import json as json_module
from src.agent.agent import AskTheWebAgent
async def run_query():
agent = AskTheWebAgent()
response = await agent.query(
question=args.question,
enable_search=not args.no_search,
)
if args.json:
output = {
"answer": response.answer,
"sources": response.sources,
"confidence": response.confidence,
"follow_up_questions": response.follow_up_questions,
}
print(json_module.dumps(output, indent=2))
else:
print(f"\n{response.answer}\n")
if response.sources:
print("\nSources:")
for i, s in enumerate(response.sources, 1):
print(f" {i}. {s.get('title', 'Unknown')}: {s.get('url', '')}")
print(f"\nConfidence: {response.confidence:.0%}")
asyncio.run(run_query())
else:
parser.print_help()
sys.exit(1)
if __name__ == "__main__":
main()