Spaces:
Runtime error
Runtime error
| from states.state import AgentState | |
| import os | |
| # Import the load_dotenv function from the dotenv library | |
| from dotenv import load_dotenv | |
| from langchain_google_genai import ChatGoogleGenerativeAI | |
| from tools.object_detection_tools import detect_objects_in_image as object_detection_tool | |
| from tools.object_detection_tools import select_latest_image_versions as select_latest_image_versions_tool | |
| from tools.object_detection_tools import verify_bounding_boxes as verify_bounding_boxes_tool | |
| from tools.object_detection_tools import adjust_bounding_boxes_in_image as adjust_bounding_boxes_in_image_tool | |
| from tools.drawio_tools import generate_drawio_from_image_and_objects as drawio_tool | |
| from langfuse.callback import CallbackHandler | |
| from langgraph_supervisor import create_supervisor | |
| from langgraph.prebuilt import create_react_agent | |
| from typing import TypedDict, Annotated | |
| load_dotenv() | |
| # Read your API key from the environment variable or set it manually | |
| api_key = os.getenv("GEMINI_API_KEY") | |
| GEMINI_MODEL_NAME = os.getenv("GEMINI_MODEL_NAME", "gemini-2.5-pro-preview-06-05") | |
| GEMINI_THINKING_BUDGET = int(os.getenv("GEMINI_THINKING_BUDGET", "128")) | |
| langfuse_secret_key = os.getenv("LANGFUSE_SECRET_KEY") | |
| langfuse_public_key = os.getenv("LANGFUSE_PUBLIC_KEY") | |
| # Initialize Langfuse CallbackHandler for LangGraph/Langchain (tracing) | |
| langfuse_handler = CallbackHandler( | |
| public_key=langfuse_public_key, | |
| secret_key=langfuse_secret_key, | |
| host="http://localhost:3000" | |
| ) | |
| chat = ChatGoogleGenerativeAI( | |
| model=GEMINI_MODEL_NAME, | |
| temperature=0, | |
| max_retries=2, | |
| google_api_key=api_key, | |
| thinking_budget=GEMINI_THINKING_BUDGET | |
| ) | |
| object_detection_agent = create_react_agent( | |
| model=chat, | |
| tools=[object_detection_tool, select_latest_image_versions_tool, verify_bounding_boxes_tool, adjust_bounding_boxes_in_image_tool], | |
| name="object_detection_agent", | |
| prompt="You are an expert into extracting objects from images." \ | |
| "You need to extract 3rd party custom pics (not present in default drawio library) from the images of the user." \ | |
| "Which pics to extract, is something you need to decide with your tools and will not be provided by the user." \ | |
| "These pics will be then used to build a drawio diagram." \ | |
| "Once you have extracted the bounding boxes, verify if the result is correct with your tools" \ | |
| "You have access to tools for object detection: one for generating the first detection, another for corrections. " \ | |
| "The resulting bounding boxes will be used to generate a drawio diagram. " \ | |
| "You need to return the bounding boxes labels, in case there are spaces insert underscore." \ | |
| "Your labels will be used by another agent to read the images and use them to build a drawio diagram." \ | |
| "After 3 iterations with your tools, stop using the tool and provide the answer, even if partial." \ | |
| "Before returning the result, you need to call the select latest image versions tool and return the list provided by the tool. " \ | |
| ) | |
| drawio_generator_agent = create_react_agent( | |
| model=chat, | |
| tools=[drawio_tool], | |
| name="drawio_generator_agent", | |
| prompt="You are an expert into generating drawio diagrams. Your goal is to generate a drawio based on the image in input.") | |
| # Create supervisor workflow | |
| workflow = create_supervisor( | |
| [object_detection_agent, drawio_generator_agent], | |
| model=chat, | |
| prompt=( | |
| "You are a team supervisor managing a process that involves object detection and diagram generation. " | |
| "Your goal is to generate a drawio file following the steps: " \ | |
| "- Extract objects from the original image that user provides in local path (use object_detection_agent)" \ | |
| "- Generate a drawio using the images extracted at the previous step (use drawio_generator_agent)" \ | |
| ) | |
| ) | |
| # Compile and run | |
| graph = workflow.compile() | |