import sys
import os
import json
from pathlib import Path
from urllib.parse import urlparse
sdk_path = Path(__file__).parent.parent.parent / "sdks" / "python"
sys.path.insert(0, str(sdk_path))
try:
from avocado import AvocadoDB, get_manager
except ImportError:
print("❌ AvocadoDB Python SDK not found. Install with: pip install -e sdks/python", file=sys.stderr)
sys.exit(1)
def main():
import argparse
parser = argparse.ArgumentParser(description="Ask a question using AvocadoDB + TinyLlama")
parser.add_argument("query", help="The question to ask")
parser.add_argument("--url", default="http://localhost:8765", help="AvocadoDB server URL")
parser.add_argument("--budget", type=int, default=8000, help="Token budget for context")
parser.add_argument("--llm", choices=["auto", "local", "none"], default="auto",
help="LLM mode: auto (try local, fallback), local (require), none (just context)")
parser.add_argument("--max-tokens", type=int, default=150, help="Max tokens for answer generation")
parser.add_argument("--json", action="store_true", help="Output as JSON")
args = parser.parse_args()
try:
parsed = urlparse(args.url)
if parsed.hostname in ("localhost", "127.0.0.1"):
os.environ.setdefault("AVOCADODB_URL", args.url)
port = parsed.port or 8765
manager = get_manager(auto_start=True, port=port)
manager.ensure_running()
db = AvocadoDB(url=args.url)
answer = db.ask(
query=args.query,
llm=args.llm,
budget=args.budget,
max_new_tokens=args.max_tokens,
deterministic=True,
)
if args.json:
result = {
"query": args.query,
"answer": answer,
"llm_mode": args.llm,
}
print(json.dumps(result, indent=2))
else:
print(answer)
except Exception as e:
print(f"❌ Error: {e}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()