"""Interactive command‑line client for the RAG agent. Commands: /add – add a new document to the knowledge base. /search – perform a semantic search. /quit – exit the program. Any other input is treated as a user message and is processed by the agent. """ from typing import List from .agent import run_agent from .tools import search_knowledge_base, add_to_knowledge_base def main() -> None: print("Welcome to the RAG agent CLI. Type /help for commands.") history: List[dict] = [] while True: try: user_input = input(">>> ") except EOFError: break if not user_input: continue if user_input.startswith("/"): cmd, *args = user_input.split(maxsplit=1) if cmd == "/quit": print("Goodbye!") break elif cmd == "/help": print("Commands: /add, /search, /quit") continue elif cmd == "/add": title = input("Title: ") print("Enter content (end with a single line containing only 'END'):\n") lines = [] while True: line = input() if line.strip() == "END": break lines.append(line) content = "\n".join(lines) response = add_to_knowledge_base(content, title) print(response) continue elif cmd == "/search": query = input("Query: ") results = search_knowledge_base(query, max_results=5) if not results: print("No results found.") else: for i, res in enumerate(results, 1): print(f"{i}. Title: {res['title']}, Score: {res['score']:.4f}") print(f" {res['content'][:200]}...\n") continue else: print("Unknown command. Type /help for list of commands.") continue # Normal user message history.append({"role": "user", "content": user_input}) reply = run_agent(history) print(f"Assistant: {reply}") history.append({"role": "assistant", "content": reply}) if __name__ == "__main__": main()