facemelter's picture
Initial commit to hf space for hackathon
ff0e97f verified
"""
Main entry point for LangGraph bird classification agents.
"""
import asyncio
import sys
from typing import Optional
from .config import AgentConfig
from .agents import AgentFactory
async def run_classifier_demo(image_url: Optional[str] = None):
"""Run basic classifier demo"""
AgentConfig.print_config()
# Create agent
agent = await AgentFactory.create_classifier_agent()
# Default test URL if none provided
if not image_url:
image_url = "https://images.unsplash.com/photo-1445820200644-69f87d946277?w=400"
print("="*70)
print("Testing bird classification...")
print(f"[IMAGE URL]: {image_url}\n")
# Invoke agent
result = await agent.ainvoke({
"messages": [{
"role": "user",
"content": f"What bird species is this? {image_url}"
}]
})
# Print result
print("\n[AGENT RESPONSE]:")
print(result["messages"][-1].content)
print("\n[DEMO COMPLETE!]\n")
async def run_interactive_chat():
"""Run interactive chat with agent."""
print("\n"+"="*70)
print("Bird Classification Agent - Interactive Mode")
print("="*70)
print("Commands:")
print(". - Type 'quit' or 'exit' to end session")
print(" - Paste image URLs to classify birds")
print(". - Ask about bird locations, sightings, hotspots")
print("="*70+"\n")
# Create multi-server agent with memory
agent = await AgentFactory.create_multi_server_agent(with_memory=True)
# Thread ID for conversation memory
config = {"configurable": {"thread_id": "interactive_session"}}
while True:
try:
user_input = input("\nYou: ").strip()
if user_input.lower() in ['quit', 'exit', 'q']:
print("\nGoodbye! Happy birding!\n")
break
if not user_input:
continue
# Invoke agent
result = await agent.ainvoke(
{"messages": [{"role": "user", "content": user_input}]},
config
)
# Print response
print(f"\nAgent: {result['messages'][-1].content}")
except KeyboardInterrupt:
print("\nGoodbye! Happy birding!\n")
break
except Exception as e:
print(f"\n[ERROR]: {e}")
def main():
"""Main entry point"""
if len(sys.argv) > 1:
command = sys.argv[1]
if command == "interactive":
asyncio.run(run_interactive_chat())
elif command == "demo":
url = sys.argv[2] if len(sys.argv) > 2 else None
asyncio.run(run_classifier_demo(url))
else:
print(f"Unknown command: {command}")
print("Usage:")
print(" python -m langgraph_agent demo [url]")
print(" python -m langgraph_agent interactive")
else:
# Default: run demo
asyncio.run(run_classifier_demo())
if __name__ == "__main__":
main()