From 1e8339e237901ec09312138c1bf141199fcf66c5 Mon Sep 17 00:00:00 2001 From: admin <572701190@qq.com> Date: Wed, 1 Jul 2026 00:55:48 +0800 Subject: [PATCH] Apply user agent result filtering feedback --- backend/app/agents/evaluation_agent.py | 3 +++ backend/tests/test_agents.py | 1 + frontend/src/main.tsx | 35 +++++++++++++++++++++----- frontend/src/styles.css | 7 +++++- 4 files changed, 39 insertions(+), 7 deletions(-) diff --git a/backend/app/agents/evaluation_agent.py b/backend/app/agents/evaluation_agent.py index ae4e456..f4fec84 100644 --- a/backend/app/agents/evaluation_agent.py +++ b/backend/app/agents/evaluation_agent.py @@ -74,6 +74,8 @@ def evaluate_project() -> dict: and "resultRoleFilter" in frontend_text and "familyOptions" in frontend_text and "roleOptions" in frontend_text + and "resultQuery" in frontend_text + and "Run / Path" in frontend_text and "/api/results?limit=1000" in frontend_text and "setResults(resultsNext)" in frontend_text and "slice(0, 240)" not in frontend_text, @@ -143,6 +145,7 @@ def evaluate_project() -> dict: "agent_panel_ui": "runAgentValidation" in frontend_text and "评价建议" in frontend_text and "Validation Agent" in frontend_text, "user_agent_api": "/api/agents/user" in backend_text and "run_user_agent" in backend_text, "user_agent_ui": "runUserAgent" in frontend_text and "使用者模拟" in frontend_text and "User Agent" in frontend_text, + "user_agent_suggestion_applied": "resultQuery" in frontend_text and "run id, filename, path" in frontend_text, "coverage_api": "/api/coverage" in backend_text and coverage["task_build_passed"], "visual_tools": "visual.yolo11_heatmap_v2" in catalog["task_types"] and "visual.fps" in catalog["task_types"], "yolo_custom_train": "yolo.train_custom" in catalog["task_types"], diff --git a/backend/tests/test_agents.py b/backend/tests/test_agents.py index ba7b38c..d6270f2 100644 --- a/backend/tests/test_agents.py +++ b/backend/tests/test_agents.py @@ -18,6 +18,7 @@ def test_evaluation_agent_returns_checks(): assert checks["dataset_preparation_doc"] is True assert checks["user_agent_api"] is True assert checks["user_agent_ui"] is True + assert checks["user_agent_suggestion_applied"] is True def test_validation_agent_lightweight(monkeypatch): diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx index a87e4a6..84f6785 100644 --- a/frontend/src/main.tsx +++ b/frontend/src/main.tsx @@ -544,6 +544,7 @@ function App() { const [selectedCurvePath, setSelectedCurvePath] = useState(""); const [resultFamilyFilter, setResultFamilyFilter] = useState("all"); const [resultRoleFilter, setResultRoleFilter] = useState("all"); + const [resultQuery, setResultQuery] = useState(""); const [selectedGpuIds, setSelectedGpuIds] = useState([]); const [selectedCondaEnv, setSelectedCondaEnv] = useState("auto"); const [uploadKind, setUploadKind] = useState<"images" | "labels" | "masks">("images"); @@ -616,11 +617,18 @@ function App() { const resultFamilyOptions = useMemo(() => ["all", ...Array.from(new Set(results.map((item) => item.family ?? "artifact"))).sort()], [results]); const resultRoleOptions = useMemo(() => ["all", ...Array.from(new Set(results.map((item) => item.role ?? "artifact"))).sort()], [results]); const filteredResults = useMemo( - () => results.filter((item) => - (resultFamilyFilter === "all" || (item.family ?? "artifact") === resultFamilyFilter) && - (resultRoleFilter === "all" || (item.role ?? "artifact") === resultRoleFilter) - ), - [resultFamilyFilter, resultRoleFilter, results] + () => { + const query = resultQuery.trim().toLowerCase(); + return results.filter((item) => { + const family = item.family ?? "artifact"; + const role = item.role ?? "artifact"; + const text = `${item.name} ${item.relative_path} ${family} ${role}`.toLowerCase(); + return (resultFamilyFilter === "all" || family === resultFamilyFilter) && + (resultRoleFilter === "all" || role === resultRoleFilter) && + (!query || text.includes(query)); + }); + }, + [resultFamilyFilter, resultQuery, resultRoleFilter, results] ); const modelWeightOptions = useMemo(() => { const options = new Map(); @@ -1732,8 +1740,10 @@ function App() { roleOptions={resultRoleOptions} familyFilter={resultFamilyFilter} roleFilter={resultRoleFilter} + query={resultQuery} onFamilyFilter={setResultFamilyFilter} onRoleFilter={setResultRoleFilter} + onQuery={setResultQuery} /> @@ -1910,8 +1920,10 @@ function ResultBrowser({ roleOptions, familyFilter, roleFilter, + query, onFamilyFilter, - onRoleFilter + onRoleFilter, + onQuery }: { results: ResultItem[]; total: number; @@ -1919,12 +1931,23 @@ function ResultBrowser({ roleOptions: string[]; familyFilter: string; roleFilter: string; + query: string; onFamilyFilter: (value: string) => void; onRoleFilter: (value: string) => void; + onQuery: (value: string) => void; }) { return (
+