Spaces:
Sleeping
Sleeping
| #!/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() | |