Sregmi12334's picture
Upload 8 files
1c642ea verified
Raw
History Blame Contribute Delete
3 kB
"""
Entry point — interactive CLI for the multi-agent RAG research system.
Usage:
python main.py
Or import and use programmatically:
from main import run_query
result = run_query("Summarise arXiv:2310.06825 and generate a minimal training loop")
"""
from __future__ import annotations
import os
from dotenv import load_dotenv
load_dotenv()
from langchain_core.messages import HumanMessage
from supervisor import build_supervisor_graph
def run_query(user_input: str, verbose: bool = True) -> str:
"""
Run a single query through the multi-agent system.
Returns the final AI response as a string.
"""
graph = build_supervisor_graph()
initial_state = {
"messages": [HumanMessage(content=user_input)],
"next_agent": "",
"iteration": 0,
}
if verbose:
print("\n" + "=" * 60)
print("USER:", user_input)
print("=" * 60)
final_state = graph.invoke(initial_state)
# The last message in state is the final answer
from langchain_core.messages import AIMessage
last_ai = next(
(m for m in reversed(final_state["messages"]) if isinstance(m, AIMessage)),
None,
)
answer = last_ai.content if last_ai else "(No response generated)"
if verbose:
print("\nFINAL ANSWER:\n")
print(answer)
return answer
# ---------------------------------------------------------------------------
# Interactive CLI
# ---------------------------------------------------------------------------
EXAMPLES = [
"Summarise the paper https://arxiv.org/abs/2310.06825",
"Summarise https://arxiv.org/abs/1706.03762 (Attention is All You Need)",
"Fetch https://github.com/karpathy/minGPT and generate a minimal GPT training script",
"Summarise arXiv:2310.06825 and then generate Python code that implements the core idea",
]
def main() -> None:
if not os.getenv("OPENAI_API_KEY"):
raise EnvironmentError(
"OPENAI_API_KEY is not set. Copy .env.example to .env and add your key."
)
print("\n" + "=" * 60)
print(" Multi-Agent RAG Research System")
print(" (paper summariser + code generator)")
print("=" * 60)
print("\nExample queries:")
for i, ex in enumerate(EXAMPLES, 1):
print(f" {i}. {ex}")
print("\nType 'quit' to exit.\n")
while True:
try:
user_input = input("You: ").strip()
except (EOFError, KeyboardInterrupt):
print("\nGoodbye!")
break
if not user_input:
continue
if user_input.lower() in {"quit", "exit", "q"}:
print("Goodbye!")
break
# Allow picking an example by number
if user_input.isdigit() and 1 <= int(user_input) <= len(EXAMPLES):
user_input = EXAMPLES[int(user_input) - 1]
print(f"Using example: {user_input}\n")
run_query(user_input, verbose=True)
print()
if __name__ == "__main__":
main()