diff --git a/.well-known/schema.json b/.well-known/schema.json index d15aa4a..db1de63 100644 --- a/.well-known/schema.json +++ b/.well-known/schema.json @@ -2,8 +2,8 @@ "schemaVersion": "2.0.0", "metadata": { "name": "oppo-dify-Phone-Test-Project", - "uuid": "157f58111-aaa9-4636-b476-8639e02OPPO01", - "description": "oppo手机用例集", + "uuid": "157f58111-aaa9-4636-b476-8OPPOPLP11001", + "description": "oppo_dify手机用例集", "remoteUrl": "https://gitea.glrocky.cn/scripts/oppo.git", "branch": "master", "tags": { @@ -48,7 +48,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0102-audio", @@ -74,7 +77,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0103-audio", @@ -100,7 +106,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0104-txt", @@ -126,7 +135,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0105-audio", @@ -152,7 +164,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0106-audio", @@ -178,7 +193,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0107-audio", @@ -204,7 +222,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0108-audio", @@ -230,7 +251,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0109-txt", @@ -256,7 +280,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0110-txt", @@ -282,7 +309,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0110-img", @@ -308,7 +338,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0111-video", @@ -334,7 +367,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0112-doc", @@ -360,7 +396,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0112-img", @@ -386,7 +425,39 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0113-txt", + "description": "社交应用内翻译", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0201-img", @@ -412,7 +483,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0201-audio", @@ -438,7 +512,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0202-audio", @@ -464,7 +541,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0202-video", @@ -490,7 +570,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0203-doc", @@ -516,7 +599,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0204-txt", @@ -542,7 +628,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0204-img", @@ -568,7 +657,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0205-txt", @@ -594,7 +686,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0205-doc", @@ -620,7 +715,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0206-txt", @@ -646,7 +744,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0206-doc", @@ -672,7 +773,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0207-txt", @@ -698,7 +802,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0208-doc", @@ -724,7 +831,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0209-doc", @@ -750,7 +860,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0210-img", @@ -776,7 +889,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0211-img", @@ -802,7 +918,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0212-txt", @@ -828,7 +947,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0213-txt", @@ -854,7 +976,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0214-txt", @@ -880,7 +1005,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0214-doc", @@ -906,7 +1034,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0215-doc", @@ -932,7 +1063,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0216-txt", @@ -958,7 +1092,155 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0217-txt", + "description": "实时翻译", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0218-txt", + "description": "AI帮写邮件", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0219-txt", + "description": "邮件翻译", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0220-txt", + "description": "邮件总结摘要", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0221-txt", + "description": "网页摘要", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0301-txt", @@ -984,7 +1266,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0302-doc", @@ -1010,7 +1295,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0303-txt", @@ -1036,7 +1324,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0304-txt", @@ -1062,7 +1353,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0305-img", @@ -1088,7 +1382,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0305-audio", @@ -1114,7 +1411,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0305-video", @@ -1140,7 +1440,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0306-txt", @@ -1166,7 +1469,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0307-txt", @@ -1192,7 +1498,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0308-doc", @@ -1218,7 +1527,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0309-txt", @@ -1244,7 +1556,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0310-audio", @@ -1270,7 +1585,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0311-img", @@ -1296,7 +1614,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0312-img", @@ -1322,7 +1643,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0313-img", @@ -1348,7 +1672,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0314-img", @@ -1374,7 +1701,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0315-img", @@ -1400,7 +1730,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0316-doc", @@ -1426,7 +1759,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0316-img", @@ -1452,7 +1788,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0401-txt", @@ -1478,7 +1817,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0401-audio", @@ -1504,7 +1846,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0402-img", @@ -1530,7 +1875,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0403-video", @@ -1556,7 +1904,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0404-video", @@ -1582,7 +1933,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0405-img", @@ -1608,7 +1962,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0406-img", @@ -1634,7 +1991,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0407-txt", @@ -1660,7 +2020,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0408-img", @@ -1686,7 +2049,11 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent", + "album" + ] }, { "name": "TC-0409-img", @@ -1712,7 +2079,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0410-img", @@ -1738,7 +2108,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0411-img", @@ -1764,7 +2137,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0412-img", @@ -1790,7 +2166,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0413-img", @@ -1816,7 +2195,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0414-img", @@ -1842,7 +2224,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0415-img", @@ -1868,7 +2253,11 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent", + "album" + ] }, { "name": "TC-0416-img", @@ -1894,7 +2283,11 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent", + "album" + ] }, { "name": "TC-0417-img", @@ -1920,7 +2313,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0418-img", @@ -1946,7 +2342,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0419-img", @@ -1972,7 +2371,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0420-img", @@ -1998,7 +2400,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0421-img", @@ -2024,7 +2429,39 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0422-txt", + "description": "音乐生成", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0501-txt", @@ -2050,7 +2487,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0502-txt", @@ -2076,7 +2516,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0503-txt", @@ -2102,7 +2545,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0504-txt", @@ -2128,7 +2574,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0505-txt", @@ -2154,7 +2603,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0506-txt", @@ -2180,7 +2632,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0507-img", @@ -2206,7 +2661,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0508-audio", @@ -2232,7 +2690,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0509-txt", @@ -2258,7 +2719,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0509-img", @@ -2284,7 +2748,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0510-txt", @@ -2310,7 +2777,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0510-img", @@ -2336,7 +2806,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0511-txt", @@ -2362,7 +2835,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0511-img", @@ -2388,7 +2864,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0512-txt", @@ -2414,7 +2893,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0513-txt", @@ -2440,7 +2922,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0514-txt", @@ -2466,7 +2951,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0515-txt", @@ -2492,7 +2980,648 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0516-txt", + "description": "AI播客生成", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0516-audio", + "description": "AI播客生成", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0517-txt", + "description": "个人信息查询", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0518-img", + "description": "AI壁纸", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0519-txt", + "description": "应用级翻译", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0520-txt", + "description": "智能打开付款码", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0521-txt", + "description": "话费充值", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0522-txt", + "description": "点外卖", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0523-txt", + "description": "生活缴费", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0524-txt", + "description": "餐厅预定", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0525-txt", + "description": "电影预定", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0526-txt", + "description": "演出预定", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0527-txt", + "description": "快递查询", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0528-txt", + "description": "快递提醒", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0529-txt", + "description": "机票/酒店/火车票预定", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0530-txt", + "description": "出行推荐", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0531-txt", + "description": "出行提醒", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0532-txt", + "description": "健康检测", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0533-txt", + "description": "健康风险预警(心律/睡眠)", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0534-txt", + "description": "健身计划生成", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0535-txt", + "description": "声音修复", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] + }, + { + "name": "TC-0536-txt", + "description": "手语翻译", + "supportedMetrics": [], + "materialParams": [ + { + "name": "paramGroupUuid", + "description": "UUID", + "type": "text", + "isArray": true + }, + { + "name": "inputTextList", + "description": "对话列表,支持多轮对话", + "type": "text", + "isArray": true + }, + { + "name": "prompt", + "description": "提示词", + "type": "text", + "isArray": true + } + ], + "parameters": [], + "appNames": [ + "agent" + ] }, { "name": "TC-0601-audio", @@ -2518,7 +3647,10 @@ "isArray": true } ], - "parameters": [] + "parameters": [], + "appNames": [ + "agent" + ] } ], "commands": { diff --git a/glrocky_sdk-0.4.5-py3-none-any.whl b/glrocky_sdk-0.4.5-py3-none-any.whl new file mode 100644 index 0000000..2ad64ca Binary files /dev/null and b/glrocky_sdk-0.4.5-py3-none-any.whl differ diff --git a/pyproject.toml b/pyproject.toml index 6e48957..ab56e8d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,8 @@ reportMissingTypeStubs = false reportUnknownMemberType = false [tool.uv.sources] #glrocky-sdk = { path = "../../packages/glrocky-sdk" } -glrocky-sdk = { path = "./glrocky_sdk-0.4.3-py3-none-any.whl" } +#glrocky-sdk = { path = "./glrocky_sdk-0.4.3-py3-none-any.whl" } +glrocky-sdk = { path = "./glrocky_sdk-0.4.5-py3-none-any.whl" } [[tool.uv.index]] url = "https://mirrors.aliyun.com/pypi/simple/" @@ -31,8 +32,8 @@ default = true [tool.glrocky] remote_url = "https://gitea.glrocky.cn/scripts/oppo.git" -branch = "master" -uuid = "157f58111-aaa9-4636-b476-8639e02OPPO01" +branch = "PLP110" +uuid = "157f58111-aaa9-4636-b476-8OPPOPLP11001" [tool.glrocky.tags] osName="android" #adb -s 274e0b26 shell "getprop ro.build.version.release" diff --git a/scenarios/tc_generator.py b/scenarios/tc_generator.py index f2959f6..cb85cec 100644 --- a/scenarios/tc_generator.py +++ b/scenarios/tc_generator.py @@ -1,10 +1,6 @@ -import os import re import sys import json -import time -import concurrent.futures -from dataclasses import dataclass from pathlib import Path from typing import Callable, Any @@ -16,78 +12,20 @@ from glrocky.framework.marks import Marks as M from glrocky.framework.schemas import Device from glrocky.services.dify.dify import run_workflow from loguru._logger import Logger -from pydantic import BaseModel, ConfigDict, Field, field_serializer, create_model +from pydantic import BaseModel, ConfigDict, Field, field_serializer import socket -PRODUCTION_ENV_NAME = "GLROCKY_PRODUCTION_MODE" -PRODUCTION_EXECUTOR = "192.168.0.139" -YAML_FILE = Path(__file__).parent / "test_cases.yaml" def _get_local_ip() -> str: s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - try: - s.connect(("8.8.8.8", 80)) - ip: str = s.getsockname()[0] - return str(ip) - finally: - s.close() + s.connect(("8.8.8.8", 80)) + ip: str = s.getsockname()[0] + s.close() + return str(ip) -def _is_production_mode() -> bool: - env_val = os.getenv(PRODUCTION_ENV_NAME) - if env_val is not None: - return env_val.lower() in ("true", "yes", "1") - return _get_local_ip() == PRODUCTION_EXECUTOR - - -def pre_process_material(input: list[str]) -> str: - - assert isinstance(input, list) - if not input: - return json.dumps([], ensure_ascii=False) - result = [] - for text in input: - splited = _Q_PATTERN.split(text, maxsplit=50) - for part in splited: - if not part.strip(): - continue - result.append(part.strip()) - return json.dumps(result, ensure_ascii=False) - - -IS_PRODUCTION = _is_production_mode() - -METRIC_FIELD_MAPPING: dict[str, str] = { - "result": "result|结果", - "_dify_result": "_dify_result|业务完成", - "_dify_message": "_dify_message|业务错误信息", - "resultText": "resultText|文本结果", - "recordVideo": "recordVideo|录像", - "recordAudio": "recordAudio|录音", - "screenshotList": "screenshotList|截图", - "firstToken": "firstToken|首字符时长", - "timeSeries": "timeSeries|时间序列", - "fileList": "fileList|文件", -} - -IMAGE_EXTENSIONS = {".jpg", ".png", ".gif", ".bmp"} -VIDEO_EXTENSIONS = {".mp4", ".mkv"} -_Q_PATTERN = re.compile(r"Q\d+\s*[::\.]+\s*", flags=re.MULTILINE) - - -@dataclass -class _TimeoutCtx: - client: Any = None - task_id: str | None = None - - def stop(self): - if self.client and self.task_id: - try: - logger.info(f"Stopping workflow: {self.task_id}") - self.client.stop_workflow(self.task_id) - logger.info(f"Stopped workflow: {self.task_id}") - except Exception as e: - logger.debug(f"Stop workflow failed: {e}") +PRODUCTION_EXECUTOR = "192.168.0.139" +IS_PRODUCTION = _get_local_ip() == PRODUCTION_EXECUTOR class MetricManager: @@ -99,32 +37,54 @@ class MetricManager: def _smart_name_label(self, name: str, label: str | None) -> tuple[str, str]: """retruns: (name,label)""" - if not name or not name.strip(): + if not name: + raise ValueError() + if not name.strip(): raise ValueError("Empty name") if label: return name, label - sep = next((s for s in ("|", ":") if s in name), None) - if sep: - _n, _l = name.split(sep, maxsplit=1) - return (_n, _l) + for sep in ("|", ":"): + if sep in name: + _n, _l = name.split(sep, maxsplit=1) + return (_n, _l) return name, name - def _add_metric(self, name: str, value: Any, m_type: str, label: str | None = None): - _n, _l = self._smart_name_label(name, label) - self.metric.add(name=_n, label=_l, value=value, type=m_type) - def add_text_metric(self, name: str, value: str, label: str | None = None): - self._add_metric(name, value, "text", label) + _n, _l = self._smart_name_label(name, label) + self.metric.add( + name=_n, + label=_l, + value=value, + type="text", + ) def add_number_metric(self, name: str, value: float, label: str | None = None): - self._add_metric(name, value, "number", label) + _n, _l = self._smart_name_label(name, label) + self.metric.add( + name=_n, + label=_l, + value=value, + type="number", + ) def add_image_metric(self, name: str, value: Path | str, label: str | None = None): - self._add_metric(name, str(value), "image", label) + _n, _l = self._smart_name_label(name, label) + self.metric.add( + name=_n, + label=_l, + value=str(value), + type="image", + ) def add_video_metric(self, name: str, value: Path | str, label: str | None = None): - self._add_metric(name, value, "video", label) + _n, _l = self._smart_name_label(name, label) + self.metric.add( + name=_n, + label=_l, + value=value, + type="video", + ) def send(self): self.metric.send_all() @@ -133,26 +93,35 @@ class MetricManager: if not the_dict: raise ValueError("dict is null") for _k, v in the_dict.items(): - k = METRIC_FIELD_MAPPING.get(_k, _k) + k = { + "result": "result|结果", # True ,False + "_dify_result": "_dify_result|业务完成", # True ,False + "_dify_message": "_dify_message|业务错误信息", # string,None + "resultText": "resultText|文本结果", + "recordVideo": "recordVideo|录像", + "recordAudio": "recordAudio|录音", + "screenshotList": "screenshotList|截图", + "firstToken": "firstToken|首字符时长", + "timeSeries":"timeSeries|时间序列", + "fileList":"fileList|文件" + }.get(_k, _k) logger.info(k) - match v: - case None: - self.add_text_metric(name=k, value="") - case int() | float(): - self.add_number_metric(name=k, value=v) - case str(): - self.add_text_metric(name=k, value=v) - case Path(): - match v.suffix.lower(): - case s if s in IMAGE_EXTENSIONS: - self.add_image_metric(name=k, value=str(v.resolve())) - case s if s in VIDEO_EXTENSIONS: - self.add_video_metric(name=k, value=str(v.resolve())) - case _: - self.add_text_metric(name=k, value=str(v.resolve())) - case _: - raise TypeError(f"{type(v)} not supported") + if v is None: + self.add_text_metric(name=k, value="") + elif isinstance(v, (int, float)): + self.add_number_metric(name=k, value=v) + elif isinstance(v, str): + self.add_text_metric(name=k, value=v) + elif isinstance(v, Path): + if v.suffix.lower() in (".jpg", ".png", ".gif", ".bmp"): + self.add_image_metric(name=k, value=str(v.resolve())) + elif v.suffix.lower() in (".mp4", ".mkv"): + self.add_video_metric(name=k, value=str(v.resolve())) + else: + self.add_text_metric(name=k, value=str(v.resolve())) + else: + raise NotImplementedError(f"{type(v)} not supported") class DifySettings(BaseModel): @@ -168,31 +137,40 @@ class DifySettings(BaseModel): class MaterialForDify(BaseModel): - paramGroupUuid: list[str] = Field( - default_factory=list, title="UUID", description="UUID" - ) + paramGroupUuid: list[str] = Field(default=[], title="UUID", description="UUID") inputTextList: list[str] = Field( - default_factory=list, - title="对话列表,支持多轮对话", - description="对话列表,支持多轮对话", - ) - prompt: list[str] = Field( - default_factory=list, title="提示词", description="提示词" + default=[], title="对话列表,支持多轮对话", description="对话列表,支持多轮对话" ) + prompt: list[str] = Field(default=[], title="提示词", description="提示词") model_config = ConfigDict(arbitrary_types_allowed=True) # allows uuid extra... +def pre_process_material(input:list[str])->str: + + assert isinstance(input,list) + if not input: + return json.dumps([],ensure_ascii=False) + result=[] + p=re.compile(r"Q\d+\s*[::\.]+\s*",flags=re.MULTILINE) + for text in input: + splited=re.split(p,text,maxsplit=50) + for part in splited: + if not part.strip(): + continue + result.append(part.strip()) + return json.dumps(result, ensure_ascii=False) + class DifyPayload(BaseModel): inputTextList: list[str] | str prompt: list[str] | str deviceId: str address: str - caseId: str - parameters: dict[str, Any] |str| None = None + caseId:str # 用例名称,当前运行的用例编号 + appName: str | None = None @field_serializer("inputTextList") def serialize_input_text(self, value: list[str] | str) -> str: - if isinstance(value, list): + if isinstance(value, list): return pre_process_material(value) return value @@ -203,97 +181,36 @@ class DifyPayload(BaseModel): return value -def create_dynamic_model(model_name: str, parameters: list[dict]) -> type[BaseModel]: - field_definitions = {} - for idx, param in enumerate(parameters): - name: str = ( - param.get("name", "").strip() if isinstance(param.get("name"), str) else "" - ) - if not name: - raise ValueError(f"参数定义错误: 第 {idx + 1} 个参数缺少 'name' 字段或为空") - - label = ( - param.get("label", "").strip() - if isinstance(param.get("label"), str) - else name - ) - description = ( - param.get("description", label).strip() - if isinstance(param.get("description"), str) - else label - ) - param_type = ( - param.get("type", "string").strip() - if isinstance(param.get("type"), str) - else "string" - ) - - if param_type not in ("string",): - raise ValueError( - f"参数 '{name}' 不支持的类型 '{param_type}',目前仅支持 'string'" - ) - - default = param.get("defaultValue", "") - if default and isinstance(default, str): - default = default.strip() - - field_definitions[name] = ( - str, - Field(default=default, title=label, description=description), - ) - - try: - model = create_model(model_name, __base__=BaseModel, **field_definitions) - model.model_config["extra"] = "ignore" - - model() - return model - except Exception as e: - raise ValueError(f"创建参数模型 '{model_name}' 失败: {e}") - - def call_dify( - case_meta_info: dict[str, str], + case_meta_info:dict[str,str], logger: Logger, device_info: Device, material: list[MaterialForDify], dify_cfg: DifySettings, metric, material_reporter, - parameters: dict[str, Any] | None = None, - timeout_sec: int | None = None, + app_name: str | None = None, ): # logger.info(device_info.device_serial) logger.info(dify_cfg) event_callbacks: dict[str, Callable[..., None]] = {} - def on_node_started(_, __, d: dict[str, Any]): + def on_node_started(c, n, d: dict[str, Any]): logger.info(f"开始执行:{d.get('title', '')}") logger.info(f"输入节点参数:{d.get('inputs')}") - def on_node_finished(_, __, d): + def on_node_finished(c, n, d): logger.info(f"结束执行:{d.get('title', '')}") logger.info(f"节点输出:{d.get('outputs')}") event_callbacks["on_node_started"] = on_node_started event_callbacks["on_node_finished"] = on_node_finished - - if timeout_sec: - ctx = _TimeoutCtx() - - def on_workflow_started(client, event_name, event_data): - logger.info("开始执行dify任务") - ctx.client = client - ctx.task_id = event_data.get("task_id") - - event_callbacks["on_workflow_started"] = on_workflow_started - if not material: + if not material or len(material) < 1: raise RuntimeError("缺少素材") else: logger.info(f"下发素材:{material}") - metric_manager = MetricManager(metric) - local_ip = _get_local_ip() + mm = MetricManager(metric) for material_index, item in enumerate(material, 1): paramGroupUuid = item.paramGroupUuid[0] @@ -303,48 +220,28 @@ def call_dify( dify_final_status = False try: # IMPORTANT: the group uuid for params - payload_data = { + payload = DifyPayload( **item.model_dump(), - "deviceId": device_info.device_serial, - "address": local_ip, - "caseId": case_meta_info.get("id", "Unknown"), - } - if parameters: - payload_data["parameters"] = json.dumps(parameters) - payload = DifyPayload(**payload_data) - logger.info(f"payload send to dify:\n{payload.model_dump_json(indent=2)}\n") - metric_manager.new_span( - "default", f"default-{material_index}", material_index + deviceId=device_info.device_serial, + address=_get_local_ip(), + caseId=case_meta_info.get('id','Unkown'), + appName=app_name, + ) + logger.info(f"payload send to dify:\n{payload.model_dump_json()}\n") + mm.new_span("default", f"default-{material_index}", material_index) + result = run_workflow( + api_key=dify_cfg.difyApiKey, + base_url=dify_cfg.difyUrl, + workflow_id=dify_cfg.difyWorkflowId, + inputs=payload.model_dump(), + event_callbacks=event_callbacks, ) - - def _run_workflow(): - return run_workflow( - api_key=dify_cfg.difyApiKey, - base_url=dify_cfg.difyUrl, - workflow_id=dify_cfg.difyWorkflowId, - inputs=payload.model_dump(exclude_none=True), - event_callbacks=event_callbacks, - ) - - if timeout_sec: - with concurrent.futures.ThreadPoolExecutor(max_workers=1) as executor: - future = executor.submit(_run_workflow) - try: - result = future.result(timeout=timeout_sec) - except concurrent.futures.TimeoutError: - logger.error(f"Workflow timeout after {timeout_sec}s,(yaml config)") - time.sleep(0.1) - logger.info("尝试停止工作流...") - ctx.stop() - raise TimeoutError(f"Workflow timeout after {timeout_sec}s") - else: - result = _run_workflow() logger.info(f"工作流返回结果:{result.outputs}") logger.info(f"工作流最终状态:{result.success}") - if result.outputs: + if result.outputs and len(result.outputs): logger.info("提交结果到执行器") - metric_manager.from_dict(result.outputs) + mm.from_dict(result.outputs) metric.send_all() logger.info("提交结果到执行器完成") else: @@ -361,39 +258,31 @@ def call_dify( def make_dify_test( - meta: dict[str, str], - dify_settings: DifySettings | None = None, - param_model: type[BaseModel] | None = None, - timeout: int | None = None, + case_meta: dict[str, str], + apps_config: dict[str, DifySettings] | None = None, ) -> Callable[..., None]: - if param_model is None: - param_model = create_model("EmptyParams", __base__=BaseModel) - - @pytest.mark.usefixtures("cfg") - def _func_impl( + @M.meta(**case_meta) + def _func( logger: Logger, device_info: Device, material: list[MaterialForDify], metric, material_reporter, - cfg: param_model, + meta, ) -> None: - param_dict = cfg.model_dump() if cfg else {} + dify_settings = apps_config.get(meta.app_name) if apps_config else None call_dify( - meta, + case_meta, logger, device_info, material, dify_cfg=dify_settings, metric=metric, material_reporter=material_reporter, - parameters=param_dict, - timeout_sec=timeout, + app_name=meta.app_name, ) - # always use cfg fixture - # _func_impl = pytest.mark.usefixtures("cfg")(_func_impl) - return M.meta(**meta)(_func_impl) + return _func def make_skip_test(meta: dict[str, str]) -> Callable[..., None]: @@ -403,7 +292,7 @@ def make_skip_test(meta: dict[str, str]) -> Callable[..., None]: logger: Logger, device_info: Device, material: list[MaterialForDify], - metric, + metric, ) -> None: logger.error(f"此用例在手机{device_info.device_serial}上暂未实现") assert False, "not implemented" @@ -416,56 +305,55 @@ def generate_cases_from_yaml(module_name: str, yaml_path: Path): logger.warning(f"Test case definition file not found: {yaml_path}") return - try: - with open(file=yaml_path, mode="r", encoding="utf-8") as f: - all_cases: list[dict[str, Any]] = yaml.safe_load( # pyright: ignore[reportAny] - f - ) - except yaml.YAMLError as e: - logger.error(f"Failed to parse YAML file {yaml_path}: {e}") - pytest.fail(f"YAML解析失败: {yaml_path}") - return + with open(file=yaml_path, mode="r", encoding="utf-8") as f: + all_cases: list[dict[str, Any]] = yaml.safe_load( # pyright: ignore[reportAny] + f + ) if not all_cases: return - for case_info in all_cases.get("cases", []): + for case_info in all_cases["cases"]: if not isinstance(case_info, dict): logger.debug(f"Skipping non-dictionary item in YAML file: {case_info}") continue - case_id: str = case_info.get("id", "") + case_id: str = case_info.get("id",'') if not case_id: logger.warning(f"用例 缺少 case_id 字段。{case_info=}") pytest.fail(f"用例 缺少 case_id 字段。{case_info=}") - description: str = case_info.get("description", "") + description: str = case_info.get("description",'') if not description: logger.warning(f"用例{case_id} 缺少 description 字段。") pytest.fail(f"用例{case_id} 缺少 description 字段。") action: str = case_info.get("action", "skipped") - meta = {"id": case_id, "description": description} + meta = {"id": case_id, "description": description, "appNames": ["agent"]} fn_name = f"test_{case_id.lower().replace('-', '_')}" if action == "dify": - dify_settings: DifySettings | None = None - param_model: type[BaseModel] | None = None - timeout = case_info.get("timeout") - - if parameters_def := case_info.get("parameters"): - model_name = f"{case_id.replace('-', '_')}_Params" - param_model = create_dynamic_model(model_name, parameters_def) - - if dify_config_block := case_info.get("dify_config"): + apps_config: dict[str, DifySettings] = {} + if apps_list := case_info.get("apps"): + app_names = [] + for app_entry in apps_list: + name = app_entry.get("name", "") + app_names.append(name) + if cfg_block := app_entry.get("dify_config"): + env_key = "production" if IS_PRODUCTION else "testing" + if env_cfg := cfg_block.get(env_key): + apps_config[name] = DifySettings( + difyUrl=env_cfg.get("url"), + difyWorkflowId=env_cfg.get("workflow_id"), + difyApiKey=env_cfg.get("api_key"), + ) + meta["appNames"] = app_names + elif cfg_block := case_info.get("dify_config"): env_key = "production" if IS_PRODUCTION else "testing" - if env_config := dify_config_block.get(env_key): - dify_settings = DifySettings( - difyUrl=env_config.get("url"), - difyWorkflowId=env_config.get("workflow_id"), - difyApiKey=env_config.get("api_key"), + if env_cfg := cfg_block.get(env_key): + apps_config["agent"] = DifySettings( + difyUrl=env_cfg.get("url"), + difyWorkflowId=env_cfg.get("workflow_id"), + difyApiKey=env_cfg.get("api_key"), ) - else: - logger.warning( - f"No '{env_key}' config found for {case_id}, will use default." - ) - fn = make_dify_test(meta, dify_settings, param_model, timeout) + meta["appNames"] = ["agent"] + fn = make_dify_test(meta, apps_config or None) elif action == "skipped": fn = make_skip_test(meta) elif action == "custom": @@ -479,5 +367,24 @@ def generate_cases_from_yaml(module_name: str, yaml_path: Path): logger.info(f"Generated {fn_name} for {case_id} with action '{action}'") +# class TC_CUSTOME_CONFIG(BaseModel): +# phoneNumber: str = Field( +# default="15338070617", title="拨号电话", description="待测机的手机号码" +# ) +# @M.meta(id="TC-9991") +# def tc_9991(cfg:TC_CUSTOME_CONFIG): +# ... +# class TC_CUSTOME_CONFIG2(BaseModel): +# phoneNumber: str = Field( +# default="15338070617", title="拨号电话", description="待测机的手机号码" +# ) +# phoneNumber2: str = Field( +# default="15338070617", title="拨号电话", description="待测机的手机号码" +# ) +# def tc_9992(cfg:TC_CUSTOME_CONFIG2): +# ... + +YAML_FILE = Path(__file__).parent / "test_cases.yaml" generate_cases_from_yaml(__name__, YAML_FILE) + diff --git a/scenarios/test_cases.yaml b/scenarios/test_cases.yaml index 46ee884..6217b87 100644 --- a/scenarios/test_cases.yaml +++ b/scenarios/test_cases.yaml @@ -42,12 +42,30 @@ cases: - id: TC-0107-audio description: 对话翻译 category: AI社交.语音交流 - action: skipped + action: dify + dify_config: + production: + url: "http://192.168.0.140:8090/v1" + workflow_id: "4bc0585d-b813-43b6-8005-99b53dee6df5" + api_key: "app-ZdjPDfTOhnzbFaWXOqBOAzwF" + testing: + url: "http://192.168.0.163:8090/v1" + workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" + api_key: "app-w2NVHlHZzlIGnmxmkRUO4FPJ" - id: TC-0108-audio description: 面对面同声传译 category: AI社交.语音交流 - action: skipped + action: dify + dify_config: + production: + url: "http://192.168.0.140:8090/v1" + workflow_id: "4bc0585d-b813-43b6-8005-99b53dee6df5" + api_key: "app-ZdjPDfTOhnzbFaWXOqBOAzwF" + testing: + url: "http://192.168.0.163:8090/v1" + workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" + api_key: "app-w2NVHlHZzlIGnmxmkRUO4FPJ" - id: TC-0109-txt description: AI短信 @@ -82,6 +100,11 @@ cases: category: AI社交.社交应用 action: skipped + - id: TC-0113-txt + description: 社交应用内翻译 + category: AI社交.跨语言沟通 + action: skipped + - id: TC-0201-img description: 日程管理 category: AI办公.日程管理 @@ -89,8 +112,8 @@ cases: dify_config: production: url: "http://192.168.0.140:8090/v1" - workflow_id: "fa6651c7-4820-477c-a17d-950113dbd9d4" - api_key: "app-CCWde8N5Y7t8pGFHUyWca6Nv" + workflow_id: "54393627-4634-46cc-99e3-211151f2c869" + api_key: "app-i8VW4kgRhokjW2HGpmGPqaqe" testing: url: "http://192.168.0.163:8090/v1" workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" @@ -99,7 +122,16 @@ cases: - id: TC-0201-audio description: 日程管理 category: AI办公.日程管理 - action: skipped + action: dify + dify_config: + production: + url: "http://192.168.0.140:8090/v1" + workflow_id: "c2ae994a-3dc5-4d4f-a069-21f0b3923641" + api_key: "app-vH55ADtCdS4flTcLpRi9TN0O" + testing: + url: "http://192.168.0.163:8090/v1" + workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" + api_key: "app-w2NVHlHZzlIGnmxmkRUO4FPJ" - id: TC-0202-audio description: 语音转写 @@ -131,8 +163,8 @@ cases: dify_config: production: url: "http://192.168.0.140:8090/v1" - workflow_id: "fa6651c7-4820-477c-a17d-950113dbd9d4" - api_key: "app-CCWde8N5Y7t8pGFHUyWca6Nv" + workflow_id: "54393627-4634-46cc-99e3-211151f2c869" + api_key: "app-i8VW4kgRhokjW2HGpmGPqaqe" testing: url: "http://192.168.0.163:8090/v1" workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" @@ -226,8 +258,8 @@ cases: dify_config: production: url: "http://192.168.0.140:8090/v1" - workflow_id: "fa6651c7-4820-477c-a17d-950113dbd9d4" - api_key: "app-CCWde8N5Y7t8pGFHUyWca6Nv" + workflow_id: "54393627-4634-46cc-99e3-211151f2c869" + api_key: "app-i8VW4kgRhokjW2HGpmGPqaqe" testing: url: "http://192.168.0.163:8090/v1" workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" @@ -240,8 +272,8 @@ cases: dify_config: production: url: "http://192.168.0.140:8090/v1" - workflow_id: "fa6651c7-4820-477c-a17d-950113dbd9d4" - api_key: "app-CCWde8N5Y7t8pGFHUyWca6Nv" + workflow_id: "54393627-4634-46cc-99e3-211151f2c869" + api_key: "app-i8VW4kgRhokjW2HGpmGPqaqe" testing: url: "http://192.168.0.163:8090/v1" workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" @@ -301,6 +333,31 @@ cases: production: *production_config testing: *testing_config + - id: TC-0217-txt + description: 实时翻译 + category: AI办公.翻译 + action: skipped + + - id: TC-0218-txt + description: AI帮写邮件 + category: AI办公.文稿处理 + action: skipped + + - id: TC-0219-txt + description: 邮件翻译 + category: AI办公.文稿处理 + action: skipped + + - id: TC-0220-txt + description: 邮件总结摘要 + category: AI办公.文稿处理 + action: skipped + + - id: TC-0221-txt + description: 网页摘要 + category: AI办公.文稿处理 + action: skipped + - id: TC-0301-txt description: 用机问答 category: AI学习.学习问答 @@ -346,8 +403,8 @@ cases: dify_config: production: url: "http://192.168.0.140:8090/v1" - workflow_id: "fa6651c7-4820-477c-a17d-950113dbd9d4" - api_key: "app-CCWde8N5Y7t8pGFHUyWca6Nv" + workflow_id: "54393627-4634-46cc-99e3-211151f2c869" + api_key: "app-i8VW4kgRhokjW2HGpmGPqaqe" testing: url: "http://192.168.0.163:8090/v1" workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" @@ -409,8 +466,8 @@ cases: dify_config: production: url: "http://192.168.0.140:8090/v1" - workflow_id: "fa6651c7-4820-477c-a17d-950113dbd9d4" - api_key: "app-CCWde8N5Y7t8pGFHUyWca6Nv" + workflow_id: "54393627-4634-46cc-99e3-211151f2c869" + api_key: "app-i8VW4kgRhokjW2HGpmGPqaqe" testing: url: "http://192.168.0.163:8090/v1" workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" @@ -419,16 +476,7 @@ cases: - id: TC-0312-img description: 拍摄解题 category: AI学习.AI教学 - action: dify - dify_config: - production: - url: "http://192.168.0.140:8090/v1" - workflow_id: "fa6651c7-4820-477c-a17d-950113dbd9d4" - api_key: "app-CCWde8N5Y7t8pGFHUyWca6Nv" - testing: - url: "http://192.168.0.163:8090/v1" - workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" - api_key: "app-w2NVHlHZzlIGnmxmkRUO4FPJ" + action: skipped - id: TC-0313-img description: 试卷还原 @@ -437,8 +485,8 @@ cases: dify_config: production: url: "http://192.168.0.140:8090/v1" - workflow_id: "fa6651c7-4820-477c-a17d-950113dbd9d4" - api_key: "app-CCWde8N5Y7t8pGFHUyWca6Nv" + workflow_id: "54393627-4634-46cc-99e3-211151f2c869" + api_key: "app-i8VW4kgRhokjW2HGpmGPqaqe" testing: url: "http://192.168.0.163:8090/v1" workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" @@ -451,8 +499,8 @@ cases: dify_config: production: url: "http://192.168.0.140:8090/v1" - workflow_id: "fa6651c7-4820-477c-a17d-950113dbd9d4" - api_key: "app-CCWde8N5Y7t8pGFHUyWca6Nv" + workflow_id: "54393627-4634-46cc-99e3-211151f2c869" + api_key: "app-i8VW4kgRhokjW2HGpmGPqaqe" testing: url: "http://192.168.0.163:8090/v1" workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" @@ -465,8 +513,8 @@ cases: dify_config: production: url: "http://192.168.0.140:8090/v1" - workflow_id: "fa6651c7-4820-477c-a17d-950113dbd9d4" - api_key: "app-CCWde8N5Y7t8pGFHUyWca6Nv" + workflow_id: "54393627-4634-46cc-99e3-211151f2c869" + api_key: "app-i8VW4kgRhokjW2HGpmGPqaqe" testing: url: "http://192.168.0.163:8090/v1" workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" @@ -475,12 +523,30 @@ cases: - id: TC-0316-doc description: 屏幕问答 category: AI学习.AI学习 - action: skipped + action: dify + dify_config: + production: + url: "http://192.168.0.140:8090/v1" + workflow_id: "5f1f1339-56a9-40b0-ae9e-2f2b5680e5c3" + api_key: "app-Z3uPzvia8fL8sSxGWAU6Vg4K" + testing: + url: "http://192.168.0.163:8090/v1" + workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" + api_key: "app-w2NVHlHZzlIGnmxmkRUO4FPJ" - id: TC-0316-img description: 屏幕问答 category: AI学习.AI学习 - action: skipped + action: dify + dify_config: + production: + url: "http://192.168.0.140:8090/v1" + workflow_id: "5f1f1339-56a9-40b0-ae9e-2f2b5680e5c3" + api_key: "app-Z3uPzvia8fL8sSxGWAU6Vg4K" + testing: + url: "http://192.168.0.163:8090/v1" + workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" + api_key: "app-w2NVHlHZzlIGnmxmkRUO4FPJ" - id: TC-0401-txt description: 智能体唤醒拍照 @@ -514,8 +580,8 @@ cases: dify_config: production: url: "http://192.168.0.140:8090/v1" - workflow_id: "fa6651c7-4820-477c-a17d-950113dbd9d4" - api_key: "app-CCWde8N5Y7t8pGFHUyWca6Nv" + workflow_id: "54393627-4634-46cc-99e3-211151f2c869" + api_key: "app-i8VW4kgRhokjW2HGpmGPqaqe" testing: url: "http://192.168.0.163:8090/v1" workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" @@ -528,8 +594,8 @@ cases: dify_config: production: url: "http://192.168.0.140:8090/v1" - workflow_id: "fa6651c7-4820-477c-a17d-950113dbd9d4" - api_key: "app-CCWde8N5Y7t8pGFHUyWca6Nv" + workflow_id: "54393627-4634-46cc-99e3-211151f2c869" + api_key: "app-i8VW4kgRhokjW2HGpmGPqaqe" testing: url: "http://192.168.0.163:8090/v1" workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" @@ -553,15 +619,27 @@ cases: description: AI路人消除 category: AI影像.图片生成 action: dify - dify_config: - production: - url: "http://192.168.0.140:8090/v1" - workflow_id: "fa6651c7-4820-477c-a17d-950113dbd9d4" - api_key: "app-CCWde8N5Y7t8pGFHUyWca6Nv" - testing: - url: "http://192.168.0.163:8090/v1" - workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" - api_key: "app-w2NVHlHZzlIGnmxmkRUO4FPJ" + apps: + - name: agent + dify_config: + production: + url: "http://192.168.0.140:8090/v1" + workflow_id: "54393627-4634-46cc-99e3-211151f2c869" + api_key: "app-i8VW4kgRhokjW2HGpmGPqaqe" + testing: + url: "http://192.168.0.163:8090/v1" + workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" + api_key: "app-w2NVHlHZzlIGnmxmkRUO4FPJ" + - name: album + dify_config: + production: + url: "http://192.168.0.140:8090/v1" + workflow_id: "1ea5897f-8317-400f-b44e-e5fd3ac4e638" + api_key: "app-yiYwqkGNdD1so9LkYyXZgihl" + testing: + url: "http://192.168.0.163:8090/v1" + workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" + api_key: "app-w2NVHlHZzlIGnmxmkRUO4FPJ" - id: TC-0409-img description: AI物体消除 @@ -570,8 +648,8 @@ cases: dify_config: production: url: "http://192.168.0.140:8090/v1" - workflow_id: "fa6651c7-4820-477c-a17d-950113dbd9d4" - api_key: "app-CCWde8N5Y7t8pGFHUyWca6Nv" + workflow_id: "54393627-4634-46cc-99e3-211151f2c869" + api_key: "app-i8VW4kgRhokjW2HGpmGPqaqe" testing: url: "http://192.168.0.163:8090/v1" workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" @@ -584,8 +662,8 @@ cases: dify_config: production: url: "http://192.168.0.140:8090/v1" - workflow_id: "fa6651c7-4820-477c-a17d-950113dbd9d4" - api_key: "app-CCWde8N5Y7t8pGFHUyWca6Nv" + workflow_id: "54393627-4634-46cc-99e3-211151f2c869" + api_key: "app-i8VW4kgRhokjW2HGpmGPqaqe" testing: url: "http://192.168.0.163:8090/v1" workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" @@ -608,8 +686,8 @@ cases: dify_config: production: url: "http://192.168.0.140:8090/v1" - workflow_id: "fa6651c7-4820-477c-a17d-950113dbd9d4" - api_key: "app-CCWde8N5Y7t8pGFHUyWca6Nv" + workflow_id: "54393627-4634-46cc-99e3-211151f2c869" + api_key: "app-i8VW4kgRhokjW2HGpmGPqaqe" testing: url: "http://192.168.0.163:8090/v1" workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" @@ -624,29 +702,53 @@ cases: description: AI美颜 category: AI影像.图片处理 action: dify - dify_config: - production: - url: "http://192.168.0.140:8090/v1" - workflow_id: "fa6651c7-4820-477c-a17d-950113dbd9d4" - api_key: "app-CCWde8N5Y7t8pGFHUyWca6Nv" - testing: - url: "http://192.168.0.163:8090/v1" - workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" - api_key: "app-w2NVHlHZzlIGnmxmkRUO4FPJ" + apps: + - name: agent + dify_config: + production: + url: "http://192.168.0.140:8090/v1" + workflow_id: "54393627-4634-46cc-99e3-211151f2c869" + api_key: "app-i8VW4kgRhokjW2HGpmGPqaqe" + testing: + url: "http://192.168.0.163:8090/v1" + workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" + api_key: "app-w2NVHlHZzlIGnmxmkRUO4FPJ" + - name: album + dify_config: + production: + url: "http://192.168.0.140:8090/v1" + workflow_id: "1ea5897f-8317-400f-b44e-e5fd3ac4e638" + api_key: "app-yiYwqkGNdD1so9LkYyXZgihl" + testing: + url: "http://192.168.0.163:8090/v1" + workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" + api_key: "app-w2NVHlHZzlIGnmxmkRUO4FPJ" - id: TC-0416-img description: AI美化 category: AI影像.图片处理 action: dify - dify_config: - production: - url: "http://192.168.0.140:8090/v1" - workflow_id: "fa6651c7-4820-477c-a17d-950113dbd9d4" - api_key: "app-CCWde8N5Y7t8pGFHUyWca6Nv" - testing: - url: "http://192.168.0.163:8090/v1" - workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" - api_key: "app-w2NVHlHZzlIGnmxmkRUO4FPJ" + apps: + - name: agent + dify_config: + production: + url: "http://192.168.0.140:8090/v1" + workflow_id: "54393627-4634-46cc-99e3-211151f2c869" + api_key: "app-i8VW4kgRhokjW2HGpmGPqaqe" + testing: + url: "http://192.168.0.163:8090/v1" + workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" + api_key: "app-w2NVHlHZzlIGnmxmkRUO4FPJ" + - name: album + dify_config: + production: + url: "http://192.168.0.140:8090/v1" + workflow_id: "1ea5897f-8317-400f-b44e-e5fd3ac4e638" + api_key: "app-yiYwqkGNdD1so9LkYyXZgihl" + testing: + url: "http://192.168.0.163:8090/v1" + workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" + api_key: "app-w2NVHlHZzlIGnmxmkRUO4FPJ" - id: TC-0417-img description: 智能抠图 @@ -655,8 +757,8 @@ cases: dify_config: production: url: "http://192.168.0.140:8090/v1" - workflow_id: "fa6651c7-4820-477c-a17d-950113dbd9d4" - api_key: "app-CCWde8N5Y7t8pGFHUyWca6Nv" + workflow_id: "54393627-4634-46cc-99e3-211151f2c869" + api_key: "app-i8VW4kgRhokjW2HGpmGPqaqe" testing: url: "http://192.168.0.163:8090/v1" workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" @@ -669,8 +771,8 @@ cases: dify_config: production: url: "http://192.168.0.140:8090/v1" - workflow_id: "fa6651c7-4820-477c-a17d-950113dbd9d4" - api_key: "app-CCWde8N5Y7t8pGFHUyWca6Nv" + workflow_id: "54393627-4634-46cc-99e3-211151f2c869" + api_key: "app-i8VW4kgRhokjW2HGpmGPqaqe" testing: url: "http://192.168.0.163:8090/v1" workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" @@ -679,7 +781,16 @@ cases: - id: TC-0419-img description: 一键成片 category: AI影像.视频生成 - action: skipped + action: dify + dify_config: + production: + url: "http://192.168.0.140:8090/v1" + workflow_id: "3452a476-3c22-4f0e-83f3-6070fad72cdd" + api_key: "app-bUShsAI6gAOwbkmKQKq6EMRS" + testing: + url: "http://192.168.0.163:8090/v1" + workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" + api_key: "app-w2NVHlHZzlIGnmxmkRUO4FPJ" - id: TC-0420-img description: 视频字幕生成 @@ -691,6 +802,14 @@ cases: category: AI影像.视频处理 action: skipped + - id: TC-0422-txt + description: 音乐生成 + category: AI影像.音乐生成 + action: dify + dify_config: + production: *production_config + testing: *testing_config + - id: TC-0501-txt description: 公共服务查询(天气/交通路线/节假日等) category: AI生活.生活类问答 @@ -774,8 +893,8 @@ cases: dify_config: production: url: "http://192.168.0.140:8090/v1" - workflow_id: "fa6651c7-4820-477c-a17d-950113dbd9d4" - api_key: "app-CCWde8N5Y7t8pGFHUyWca6Nv" + workflow_id: "54393627-4634-46cc-99e3-211151f2c869" + api_key: "app-i8VW4kgRhokjW2HGpmGPqaqe" testing: url: "http://192.168.0.163:8090/v1" workflow_id: "30ecb958-b56d-4b65-8713-f23945a8db91" @@ -833,6 +952,116 @@ cases: category: AI生活.无障碍辅助 action: skipped + - id: TC-0516-txt + description: AI播客生成 + category: AI生活.咨询传播 + action: skipped + + - id: TC-0516-audio + description: AI播客生成 + category: AI生活.咨询传播 + action: skipped + + - id: TC-0517-txt + description: 个人信息查询 + category: AI生活.生活服务 + action: skipped + + - id: TC-0518-img + description: AI壁纸 + category: AI生活.个性化推荐 + action: skipped + + - id: TC-0519-txt + description: 应用级翻译 + category: AI生活.跨语言服务 + action: skipped + + - id: TC-0520-txt + description: 智能打开付款码 + category: AI生活.购物/支付 + action: skipped + + - id: TC-0521-txt + description: 话费充值 + category: AI生活.生活服务 + action: skipped + + - id: TC-0522-txt + description: 点外卖 + category: AI生活.生活服务 + action: skipped + + - id: TC-0523-txt + description: 生活缴费 + category: AI生活.生活服务 + action: skipped + + - id: TC-0524-txt + description: 餐厅预定 + category: AI生活.生活服务 + action: skipped + + - id: TC-0525-txt + description: 电影预定 + category: AI生活.文娱消费服务 + action: skipped + + - id: TC-0526-txt + description: 演出预定 + category: AI生活.文娱消费服务 + action: skipped + + - id: TC-0527-txt + description: 快递查询 + category: AI生活.生活服务 + action: skipped + + - id: TC-0528-txt + description: 快递提醒 + category: AI生活.生活服务 + action: skipped + + - id: TC-0529-txt + description: 机票/酒店/火车票预定 + category: AI生活.智能出行 + action: skipped + + - id: TC-0530-txt + description: 出行推荐 + category: AI生活.智能出行 + action: skipped + + - id: TC-0531-txt + description: 出行提醒 + category: AI生活.日程提醒 + action: skipped + + - id: TC-0532-txt + description: 健康检测 + category: AI生活.运动健康 + action: skipped + + - id: TC-0533-txt + description: 健康风险预警(心律/睡眠) + category: AI生活.运动健康 + action: skipped + + - id: TC-0534-txt + description: 健身计划生成 + category: AI生活.运动健康 + action: skipped + + - id: TC-0535-txt + description: 声音修复 + category: AI生活.音频智能处理 + action: skipped + + - id: TC-0536-txt + description: 手语翻译 + category: AI生活.无障碍服务 + action: skipped + - id: TC-0601-audio description: 语音唤醒 category: 智能体基础测试.语音唤醒 diff --git a/uv.lock b/uv.lock index 22dd1a5..b640934 100644 --- a/uv.lock +++ b/uv.lock @@ -382,8 +382,8 @@ wheels = [ [[package]] name = "glrocky-sdk" -version = "0.4.3" -source = { path = "glrocky_sdk-0.4.3-py3-none-any.whl" } +version = "0.4.5" +source = { path = "glrocky_sdk-0.4.5-py3-none-any.whl" } dependencies = [ { name = "agno" }, { name = "dashscope" }, @@ -401,7 +401,7 @@ dependencies = [ { name = "uvicorn" }, ] wheels = [ - { filename = "glrocky_sdk-0.4.3-py3-none-any.whl", hash = "sha256:604769f87f7550bd1b2ef5c0bae1d48129ff05c255bb5c5156f1b3b684eb6268" }, + { filename = "glrocky_sdk-0.4.5-py3-none-any.whl", hash = "sha256:d3257b3869f2fc1312505164243182ad7e144fde0862a1c6b7f50a11e4da1d53" }, ] [package.metadata] @@ -856,7 +856,7 @@ dev = [ [package.metadata] requires-dist = [ - { name = "glrocky-sdk", path = "glrocky_sdk-0.4.3-py3-none-any.whl" }, + { name = "glrocky-sdk", path = "glrocky_sdk-0.4.5-py3-none-any.whl" }, { name = "uvicorn", specifier = ">=0.34.2" }, ]