@@ -2105,3 +2105,299 @@ func TestCreateEvalTargetParamDTO2DOForTemplate(t *testing.T) {
21052105 assert .Nil (t , result .BotInfoType )
21062106 })
21072107}
2108+
2109+ func TestEvalConfConvert_ConvertToEntity_SetScoreWeight (t * testing.T ) {
2110+ converter := & EvalConfConvert {}
2111+ scoreWeight1 := 0.6
2112+ scoreWeight2 := 0.4
2113+
2114+ t .Run ("设置ScoreWeight到EvaluatorConf" , func (t * testing.T ) {
2115+ cer := & expt.CreateExperimentRequest {
2116+ EvaluatorFieldMapping : []* domain_expt.EvaluatorFieldMapping {
2117+ domain_expt .NewEvaluatorFieldMapping (),
2118+ domain_expt .NewEvaluatorFieldMapping (),
2119+ },
2120+ }
2121+ cer .EvaluatorFieldMapping [0 ].SetEvaluatorVersionID (101 )
2122+ cer .EvaluatorFieldMapping [1 ].SetEvaluatorVersionID (102 )
2123+ cer .EvaluatorScoreWeights = map [int64 ]float64 {
2124+ 101 : scoreWeight1 ,
2125+ 102 : scoreWeight2 ,
2126+ }
2127+
2128+ result , err := converter .ConvertToEntity (cer , nil )
2129+ assert .NoError (t , err )
2130+ assert .NotNil (t , result )
2131+ assert .NotNil (t , result .ConnectorConf .EvaluatorsConf )
2132+ assert .Len (t , result .ConnectorConf .EvaluatorsConf .EvaluatorConf , 2 )
2133+
2134+ // 验证 ScoreWeight 被正确设置
2135+ for _ , conf := range result .ConnectorConf .EvaluatorsConf .EvaluatorConf {
2136+ if conf .EvaluatorVersionID == 101 {
2137+ assert .NotNil (t , conf .ScoreWeight )
2138+ assert .Equal (t , scoreWeight1 , * conf .ScoreWeight )
2139+ } else if conf .EvaluatorVersionID == 102 {
2140+ assert .NotNil (t , conf .ScoreWeight )
2141+ assert .Equal (t , scoreWeight2 , * conf .ScoreWeight )
2142+ }
2143+ }
2144+ })
2145+
2146+ t .Run ("权重为0或负数,不设置ScoreWeight" , func (t * testing.T ) {
2147+ cer := & expt.CreateExperimentRequest {
2148+ EvaluatorFieldMapping : []* domain_expt.EvaluatorFieldMapping {
2149+ domain_expt .NewEvaluatorFieldMapping (),
2150+ },
2151+ }
2152+ cer .EvaluatorFieldMapping [0 ].SetEvaluatorVersionID (101 )
2153+ cer .EvaluatorScoreWeights = map [int64 ]float64 {
2154+ 101 : 0.0 , // 权重为0,不应该设置
2155+ }
2156+
2157+ result , err := converter .ConvertToEntity (cer , nil )
2158+ assert .NoError (t , err )
2159+ assert .NotNil (t , result )
2160+ if result .ConnectorConf .EvaluatorsConf != nil && len (result .ConnectorConf .EvaluatorsConf .EvaluatorConf ) > 0 {
2161+ conf := result .ConnectorConf .EvaluatorsConf .EvaluatorConf [0 ]
2162+ // 权重为0,不应该设置 ScoreWeight
2163+ assert .Nil (t , conf .ScoreWeight )
2164+ }
2165+ })
2166+
2167+ t .Run ("EvaluatorConf为nil,跳过" , func (t * testing.T ) {
2168+ cer := & expt.CreateExperimentRequest {
2169+ EvaluatorFieldMapping : []* domain_expt.EvaluatorFieldMapping {
2170+ nil , // nil项,应该跳过
2171+ },
2172+ EvaluatorScoreWeights : map [int64 ]float64 {
2173+ 101 : scoreWeight1 ,
2174+ },
2175+ }
2176+
2177+ result , err := converter .ConvertToEntity (cer , nil )
2178+ assert .NoError (t , err )
2179+ assert .NotNil (t , result )
2180+ // nil项应该被跳过,不会导致panic
2181+ })
2182+ }
2183+
2184+ func TestToExptDTO_BuildEvaluatorIDVersionItemsFromVersionRef (t * testing.T ) {
2185+ t .Run ("从EvaluatorVersionRef构建EvaluatorIDVersionItems" , func (t * testing.T ) {
2186+ scoreWeight := 0.7
2187+ experiment := & entity.Experiment {
2188+ // 没有 Evaluators,使用 EvaluatorVersionRef
2189+ EvaluatorVersionRef : []* entity.ExptEvaluatorVersionRef {
2190+ {
2191+ EvaluatorID : 1 ,
2192+ EvaluatorVersionID : 101 ,
2193+ },
2194+ {
2195+ EvaluatorID : 2 ,
2196+ EvaluatorVersionID : 102 ,
2197+ },
2198+ {
2199+ EvaluatorID : 0 , // 无效,应该跳过
2200+ EvaluatorVersionID : 103 ,
2201+ },
2202+ {
2203+ EvaluatorID : 3 ,
2204+ EvaluatorVersionID : 0 , // 无效,应该跳过
2205+ },
2206+ },
2207+ EvalConf : & entity.EvaluationConfiguration {
2208+ ConnectorConf : entity.Connector {
2209+ EvaluatorsConf : & entity.EvaluatorsConf {
2210+ EvaluatorConf : []* entity.EvaluatorConf {
2211+ {
2212+ EvaluatorVersionID : 101 ,
2213+ ScoreWeight : & scoreWeight ,
2214+ },
2215+ },
2216+ },
2217+ },
2218+ },
2219+ }
2220+
2221+ result := ToExptDTO (experiment )
2222+ assert .NotNil (t , result )
2223+ // 验证权重配置被正确填充到 ScoreWeightConfig
2224+ if result .ScoreWeightConfig != nil {
2225+ assert .Equal (t , scoreWeight , result .ScoreWeightConfig .EvaluatorScoreWeights [101 ])
2226+ }
2227+ // 验证 EvaluatorIDVersionList 被构建(从 evaluatorVersionIDs 构建)
2228+ assert .NotNil (t , result .EvaluatorIDVersionList )
2229+ })
2230+
2231+ t .Run ("优先使用Evaluators,不使用EvaluatorVersionRef" , func (t * testing.T ) {
2232+ experiment := & entity.Experiment {
2233+ Evaluators : []* entity.Evaluator {
2234+ {
2235+ ID : 1 ,
2236+ PromptEvaluatorVersion : & entity.PromptEvaluatorVersion {
2237+ EvaluatorID : 1 ,
2238+ ID : 101 ,
2239+ },
2240+ EvaluatorType : entity .EvaluatorTypePrompt ,
2241+ },
2242+ },
2243+ EvaluatorVersionRef : []* entity.ExptEvaluatorVersionRef {
2244+ {
2245+ EvaluatorID : 2 ,
2246+ EvaluatorVersionID : 102 ,
2247+ },
2248+ },
2249+ }
2250+
2251+ result := ToExptDTO (experiment )
2252+ assert .NotNil (t , result )
2253+ // 应该优先使用 Evaluators 的信息构建 EvaluatorIDVersionList
2254+ assert .NotNil (t , result .EvaluatorIDVersionList )
2255+ })
2256+ }
2257+
2258+ func TestToExptDTO_FillExptTemplateMeta (t * testing.T ) {
2259+ t .Run ("填充ExptTemplateMeta" , func (t * testing.T ) {
2260+ experiment := & entity.Experiment {
2261+ ExptTemplateMeta : & entity.ExptTemplateMeta {
2262+ ID : 100 ,
2263+ WorkspaceID : 200 ,
2264+ Name : "template_name" ,
2265+ Desc : "template_desc" ,
2266+ ExptType : entity .ExptType_Offline ,
2267+ },
2268+ }
2269+
2270+ result := ToExptDTO (experiment )
2271+ assert .NotNil (t , result )
2272+ assert .NotNil (t , result .ExptTemplateMeta )
2273+ assert .Equal (t , int64 (100 ), gptr .Indirect (result .ExptTemplateMeta .ID ))
2274+ assert .Equal (t , int64 (200 ), gptr .Indirect (result .ExptTemplateMeta .WorkspaceID ))
2275+ assert .Equal (t , "template_name" , gptr .Indirect (result .ExptTemplateMeta .Name ))
2276+ assert .Equal (t , "template_desc" , gptr .Indirect (result .ExptTemplateMeta .Desc ))
2277+ assert .Equal (t , domain_expt .ExptType_Offline , gptr .Indirect (result .ExptTemplateMeta .ExptType ))
2278+ })
2279+
2280+ t .Run ("ExptTemplateMeta为nil,不填充" , func (t * testing.T ) {
2281+ experiment := & entity.Experiment {
2282+ ExptTemplateMeta : nil ,
2283+ }
2284+
2285+ result := ToExptDTO (experiment )
2286+ assert .NotNil (t , result )
2287+ assert .Nil (t , result .ExptTemplateMeta )
2288+ })
2289+ }
2290+
2291+ func TestToTargetFieldMappingDOForTemplate_RuntimeParam (t * testing.T ) {
2292+ t .Run ("设置RuntimeParam到CustomConf" , func (t * testing.T ) {
2293+ rtp := & entity.RuntimeParam {
2294+ JSONValue : gptr .Of (`{"key":"value"}` ),
2295+ }
2296+ mapping := & domain_expt.TargetFieldMapping {
2297+ FromEvalSet : []* domain_expt.FieldMapping {
2298+ {
2299+ FieldName : gptr .Of ("field1" ),
2300+ FromFieldName : gptr .Of ("from1" ),
2301+ },
2302+ },
2303+ }
2304+
2305+ result := toTargetFieldMappingDOForTemplate (mapping , rtp )
2306+ assert .NotNil (t , result )
2307+ assert .NotNil (t , result .CustomConf )
2308+ assert .Len (t , result .CustomConf .FieldConfs , 1 )
2309+ assert .Equal (t , consts .FieldAdapterBuiltinFieldNameRuntimeParam , result .CustomConf .FieldConfs [0 ].FieldName )
2310+ assert .Equal (t , `{"key":"value"}` , result .CustomConf .FieldConfs [0 ].Value )
2311+ })
2312+
2313+ t .Run ("RuntimeParam为nil,不设置CustomConf" , func (t * testing.T ) {
2314+ mapping := & domain_expt.TargetFieldMapping {
2315+ FromEvalSet : []* domain_expt.FieldMapping {
2316+ {
2317+ FieldName : gptr .Of ("field1" ),
2318+ FromFieldName : gptr .Of ("from1" ),
2319+ },
2320+ },
2321+ }
2322+
2323+ result := toTargetFieldMappingDOForTemplate (mapping , nil )
2324+ assert .NotNil (t , result )
2325+ assert .Nil (t , result .CustomConf )
2326+ })
2327+
2328+ t .Run ("RuntimeParam.JSONValue为空,不设置CustomConf" , func (t * testing.T ) {
2329+ rtp := & entity.RuntimeParam {
2330+ JSONValue : nil ,
2331+ }
2332+ mapping := & domain_expt.TargetFieldMapping {}
2333+
2334+ result := toTargetFieldMappingDOForTemplate (mapping , rtp )
2335+ assert .NotNil (t , result )
2336+ assert .Nil (t , result .CustomConf )
2337+ })
2338+
2339+ t .Run ("RuntimeParam.JSONValue为空字符串,不设置CustomConf" , func (t * testing.T ) {
2340+ rtp := & entity.RuntimeParam {
2341+ JSONValue : gptr .Of ("" ),
2342+ }
2343+ mapping := & domain_expt.TargetFieldMapping {}
2344+
2345+ result := toTargetFieldMappingDOForTemplate (mapping , rtp )
2346+ assert .NotNil (t , result )
2347+ assert .Nil (t , result .CustomConf )
2348+ })
2349+ }
2350+
2351+ func TestToEvaluatorFieldMappingDoForTemplate_Complete (t * testing.T ) {
2352+ t .Run ("完整转换评估器字段映射" , func (t * testing.T ) {
2353+ mapping := []* domain_expt.EvaluatorFieldMapping {
2354+ domain_expt .NewEvaluatorFieldMapping (),
2355+ }
2356+ mapping [0 ].SetEvaluatorVersionID (101 )
2357+ mapping [0 ].SetFromEvalSet ([]* domain_expt.FieldMapping {
2358+ {
2359+ FieldName : gptr .Of ("input" ),
2360+ FromFieldName : gptr .Of ("col1" ),
2361+ ConstValue : gptr .Of ("" ),
2362+ },
2363+ })
2364+ mapping [0 ].SetFromTarget ([]* domain_expt.FieldMapping {
2365+ {
2366+ FieldName : gptr .Of ("output" ),
2367+ FromFieldName : gptr .Of ("col2" ),
2368+ },
2369+ })
2370+ mapping [0 ].SetEvaluatorIDVersionItem (& evaluatordto.EvaluatorIDVersionItem {
2371+ EvaluatorID : gptr .Of (int64 (1 )),
2372+ Version : gptr .Of ("v1" ),
2373+ EvaluatorVersionID : gptr .Of (int64 (101 )),
2374+ })
2375+
2376+ result := toEvaluatorFieldMappingDoForTemplate (mapping , nil )
2377+ assert .NotNil (t , result )
2378+ assert .Len (t , result , 1 )
2379+ conf := result [0 ]
2380+ assert .Equal (t , int64 (101 ), conf .EvaluatorVersionID )
2381+ assert .Equal (t , int64 (1 ), conf .EvaluatorID )
2382+ assert .Equal (t , "v1" , conf .Version )
2383+ assert .Len (t , conf .IngressConf .EvalSetAdapter .FieldConfs , 1 )
2384+ assert .Len (t , conf .IngressConf .TargetAdapter .FieldConfs , 1 )
2385+ })
2386+
2387+ t .Run ("mapping为nil,返回nil" , func (t * testing.T ) {
2388+ result := toEvaluatorFieldMappingDoForTemplate (nil , nil )
2389+ assert .Nil (t , result )
2390+ })
2391+
2392+ t .Run ("mapping包含nil项,跳过" , func (t * testing.T ) {
2393+ mapping := []* domain_expt.EvaluatorFieldMapping {
2394+ nil ,
2395+ domain_expt .NewEvaluatorFieldMapping (),
2396+ }
2397+ mapping [1 ].SetEvaluatorVersionID (101 )
2398+
2399+ result := toEvaluatorFieldMappingDoForTemplate (mapping , nil )
2400+ assert .NotNil (t , result )
2401+ assert .Len (t , result , 1 )
2402+ })
2403+ }
0 commit comments