Skip to content

Commit 1b01708

Browse files
authored
Merge pull request #327 from shijinpjlab/dev_front
feat: add required fileds
2 parents 8a4fd02 + d3dbf55 commit 1b01708

File tree

69 files changed

+306
-55
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+306
-55
lines changed

app_gradio/app.py

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -247,32 +247,38 @@ def generate_llm_config_dataframe(llm_list):
247247

248248
def suggest_fields_dataframe(rule_list, llm_list):
249249
"""Suggest required field mappings based on selected evaluators"""
250+
from dingo.io.input import RequiredField
251+
250252
suggested_fields = set()
251253

252-
# Fields required by rule evaluators
253-
rule_type_mapping = get_rule_type_mapping()
254-
data_column_mapping = get_data_column_mapping()
254+
# Get rule and llm name maps
255+
rule_name_map = Model.get_rule_name_map()
256+
llm_name_map = Model.get_llm_name_map()
255257

258+
# Fields required by rule evaluators
256259
for rule in rule_list:
257-
# Find which type this rule belongs to
258-
for rule_type, rules in rule_type_mapping.items():
259-
if rule in rules:
260-
if rule_type in data_column_mapping:
261-
suggested_fields.update(data_column_mapping[rule_type])
262-
break
260+
if rule in rule_name_map:
261+
rule_class = rule_name_map[rule]
262+
if hasattr(rule_class, '_required_fields'):
263+
for field in rule_class._required_fields:
264+
if isinstance(field, RequiredField):
265+
suggested_fields.add(field.value)
263266

264267
# Fields required by LLM evaluators
265-
llm_column_mapping = get_llm_column_mapping()
266268
for llm in llm_list:
267-
if llm in llm_column_mapping:
268-
suggested_fields.update(llm_column_mapping[llm])
269-
270-
# Generate suggested fields rows
269+
if llm in llm_name_map:
270+
llm_class = llm_name_map[llm]
271+
if hasattr(llm_class, '_required_fields'):
272+
for field in llm_class._required_fields:
273+
if isinstance(field, RequiredField):
274+
suggested_fields.add(field.value)
275+
276+
# Generate suggested fields rows - Required Field and Dataset Column both with same value
271277
rows = []
272278
for field in sorted(suggested_fields):
273279
rows.append([field, field])
274280

275-
return gr.update(value=rows if rows else [["content", "content"]])
281+
return gr.update(value=rows)
276282

277283

278284
def get_rule_type_mapping():
@@ -405,11 +411,11 @@ def get_data_column_mapping():
405411
# Field mapping configuration
406412
gr.Markdown("**EvalPipline.fields** - Field Mapping")
407413
fields_dataframe = gr.Dataframe(
408-
value=[["content", "content"]],
409-
headers=["Field Key", "Dataset Column"],
414+
value=[],
415+
headers=["Required Field", "Dataset Column"],
410416
datatype=["str", "str"],
411417
column_count=(2, "fixed"),
412-
row_count=(1, "dynamic"),
418+
row_count=(0, "dynamic"),
413419
label="Field Mappings (add/remove rows as needed)",
414420
interactive=True
415421
)

dingo/io/input/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
from dingo.io.input.data import Data # noqa E402.
2+
from dingo.io.input.required_field import RequiredField # noqa E402.

dingo/io/input/required_field.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from enum import Enum
2+
3+
4+
class RequiredField(Enum):
5+
CONTENT = "content"
6+
PROMPT = "prompt"
7+
CONTEXT = "context"
8+
IMAGE = "image"

dingo/model/llm/agent/agent_hallucination.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import json
1717
from typing import Any, Dict, List
1818

19-
from dingo.io import Data
19+
from dingo.io.input import Data, RequiredField
2020
from dingo.io.output.eval_detail import EvalDetail, QualityLabel
2121
from dingo.model import Model
2222
from dingo.model.llm.agent.base_agent import BaseAgent
@@ -96,6 +96,8 @@ class AgentHallucination(BaseAgent):
9696
{{"claims": ["claim 1", "claim 2", ...]}}
9797
"""
9898

99+
_required_fields = [RequiredField.CONTENT, RequiredField.CONTEXT]
100+
99101
@classmethod
100102
def eval(cls, input_data: Data) -> EvalDetail:
101103
"""

dingo/model/llm/agent/base_agent.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from abc import abstractmethod
1414
from typing import Any, Dict, List
1515

16-
from dingo.io import Data
16+
from dingo.io.input import Data, RequiredField
1717
from dingo.io.output.eval_detail import EvalDetail, QualityLabel
1818
from dingo.model.llm.agent.tools import ToolRegistry
1919
from dingo.model.llm.base_openai import BaseOpenAI
@@ -48,6 +48,8 @@ class BaseAgent(BaseOpenAI):
4848
max_iterations: int = 5
4949
use_agent_executor: bool = False # Opt-in to LangChain agent path
5050

51+
_required_fields = [RequiredField.CONTENT]
52+
5153
@classmethod
5254
@abstractmethod
5355
def plan_execution(cls, input_data: Data) -> List[Dict[str, Any]]:

dingo/model/llm/agent/tools/base_tool.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
from pydantic import BaseModel
1313

14+
from dingo.io.input import RequiredField
15+
1416

1517
class ToolConfig(BaseModel):
1618
"""Base configuration for tools"""
@@ -39,6 +41,8 @@ class BaseTool(ABC):
3941
description: str = None
4042
config: ToolConfig = ToolConfig()
4143

44+
_required_fields = [RequiredField.CONTENT]
45+
4246
@classmethod
4347
@abstractmethod
4448
def execute(cls, **kwargs) -> Dict[str, Any]:

dingo/model/llm/agent/tools/tavily_search.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
from pydantic import Field
2323

24+
from dingo.io.input import RequiredField
2425
from dingo.model.llm.agent.tools.base_tool import BaseTool, ToolConfig
2526
from dingo.model.llm.agent.tools.tool_registry import tool_register
2627
from dingo.utils import log
@@ -76,6 +77,8 @@ class TavilySearch(BaseTool):
7677
description = "Search the web for factual information using Tavily AI"
7778
config: TavilyConfig = TavilyConfig()
7879

80+
_required_fields = [RequiredField.IMAGE]
81+
7982
@classmethod
8083
def execute(cls, query: str, **kwargs) -> Dict[str, Any]:
8184
"""

dingo/model/llm/base_lmdeploy_apiclient.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from pydantic import ValidationError
66

77
from dingo.config.input_args import EvaluatorLLMArgs
8-
from dingo.io import Data
8+
from dingo.io.input import Data, RequiredField
99
from dingo.io.output.eval_detail import EvalDetail, QualityLabel
1010
from dingo.model.llm.base import BaseLLM
1111
from dingo.model.response.response_class import ResponseScoreReason
@@ -15,6 +15,7 @@
1515

1616
class BaseLmdeployApiClient(BaseLLM):
1717
dynamic_config = EvaluatorLLMArgs()
18+
_required_fields = [RequiredField.CONTENT] # Default, override in subclasses
1819

1920
# @classmethod
2021
# def set_prompt(cls, prompt):

dingo/model/llm/base_openai.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from pydantic import ValidationError
66

77
from dingo.config.input_args import EvaluatorLLMArgs
8-
from dingo.io import Data
8+
from dingo.io.input import Data, RequiredField
99
from dingo.io.output.eval_detail import EvalDetail, QualityLabel
1010
from dingo.model.llm.base import BaseLLM
1111
from dingo.model.response.response_class import ResponseScoreReason
@@ -15,6 +15,7 @@
1515

1616
class BaseOpenAI(BaseLLM):
1717
dynamic_config = EvaluatorLLMArgs()
18+
_required_fields = [RequiredField.CONTENT] # Default, override in subclasses
1819

1920
# Embedding 模型配置(用于 RAG 相关评估器)
2021
embedding_model = None

dingo/model/llm/compare/llm_code_compare.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import re
33
from typing import List
44

5-
from dingo.io import Data
5+
from dingo.io.input import Data, RequiredField
66
from dingo.io.output.eval_detail import EvalDetail
77
from dingo.model import Model
88
from dingo.model.llm.base_openai import BaseOpenAI
@@ -25,6 +25,7 @@ class LLMCodeCompare(BaseOpenAI):
2525
'evaluation_results': ''
2626
}
2727

28+
_required_fields = [RequiredField.CONTENT]
2829
prompt = """
2930
你是一位专业的代码块识别评估专家,擅长分析 HTML 代码和 Markdown 文本中的代码块。现在我会提供三段内容:
3031

0 commit comments

Comments
 (0)