ThomasLe/code-grader-agent
0
1from dotenv import load_dotenv2 3load_dotenv()4 5from agent.graph_flow import agent_graph6 7path_files = [8 "web-dev-tech-assessment/src/pages/Home.tsx",9 "web-dev-tech-assessment/src/types/index.ts",10 "web-dev-tech-assessment/src/components/search/SearchBar.tsx",11 "web-dev-tech-assessment/src/components/search/SearchContainer.tsx",12]13criterias_list = [14 "Code Quality & Best Practices:\n* Clean & Readable Code: Proper indentation, formatting, and structure. Meaningful variable and function names.\n* Component Structure: Uses functional components and hooks (avoids unnecessary class components).Components are reusable, modular, and follow SRP. Proper use of props and state (minimizes prop drilling, uses context/state management).\n* State Management: Uses useState, useEffect, useReducer, or context effectively. Avoids unnecessary re-renders (e.g., useMemo, useCallback).\n* Error Handling: Handles API errors properly (try/catch, error boundaries).Prevents app crashes with proper error messages and fallback UI.\n* Code Consistency: Follows a consistent coding style (Prettier, ESLint). Uses a defined naming convention (camelCase for variables/functions, PascalCase for components).\n* No Unnecessary Code: No console.logs, unused imports, or commented-out code. Cleans up side effects (useEffect cleanup functions).",15 "API Integration & Performance\n * Efficient API Calls: Uses fetch, axios, or other methods properly. Avoids unnecessary API calls (debounces search, optimizes re-fetching).\n* Loading & Error States: Shows loaders while fetching data. Displays proper error messages if API fails.",16]17initial_input = {18 "selected_files": path_files,19 "criterias_list": criterias_list,20 "project_description": "",21}22 23 24async def main():25 26 async for event in agent_graph.astream(27 input=initial_input,28 subgraphs=True,29 ):30 _, sub_event = event31 main_key: str = list(sub_event.keys())[0]32 print(main_key)33 sub_event: dict = sub_event[main_key]34 criteria = sub_event.get("criteria_index", None)35 if not criteria:36 37 continue38 main_key_processed = main_key.replace("_", " ")39 print(f"Processing step '{main_key_processed}' of criteria index {criteria}")40 41 42if __name__ == "__main__":43 import asyncio44 45 asyncio.run(main())46 