Skip to content

Commit fa8a30d

Browse files
authored
feat: upgrade eva sdk to supporting v2.1.0 hiagent (#27)
1 parent 233c4a2 commit fa8a30d

File tree

7 files changed

+224
-202
lines changed

7 files changed

+224
-202
lines changed

libs/api/hiagent_api/eva.py

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -62,21 +62,17 @@ def get_service_info(endpoint, region, ak="", sk=""):
6262
if not scheme:
6363
raise Exception(f"invalid endpoint format: {endpoint}")
6464

65-
# Fix observe's port handling bug while maintaining consistent architecture
6665
hostname = parsed.hostname
6766
if not hostname:
6867
raise Exception(f"invalid endpoint format: {endpoint}")
6968

70-
# Robust port handling: only add port when it actually exists
7169
if parsed.port:
7270
hostname = f"{hostname}:{parsed.port}"
73-
# Don't append ":None", this was observe's bug
7471

75-
# Completely consistent with observe - use empty AK/SK to create Credentials
7672
service_info = ServiceInfo(
7773
hostname,
7874
{"Accept": "application/json"},
79-
Credentials("", "", service="eva", region=region), # Empty AK/SK!
75+
Credentials("", "", service="eva", region=region),
8076
5,
8177
5,
8278
scheme=scheme,
@@ -93,17 +89,17 @@ def get_api_info():
9389
{},
9490
{},
9591
),
96-
"ListEvaDatasetConversations": ApiInfo(
92+
"ListDatasetCases": ApiInfo(
9793
"POST",
9894
"/",
99-
{"Action": "ListEvaDatasetConversations", "Version": "2025-02-01"},
95+
{"Action": "ListDatasetCases", "Version": "2025-02-01"},
10096
{},
10197
{},
10298
),
103-
"ListEvaDatasetColumns": ApiInfo(
99+
"ListColumns": ApiInfo(
104100
"POST",
105101
"/",
106-
{"Action": "ListEvaDatasetColumns", "Version": "2025-02-01"},
102+
{"Action": "ListColumns", "Version": "2025-02-01"},
107103
{},
108104
{},
109105
),
@@ -146,34 +142,34 @@ def CreateEvaTask(
146142
self.__request("CreateEvaTask", params.model_dump())
147143
)
148144

149-
def ListEvaDatasetConversations(
150-
self, params: eva_types.ListEvaDatasetConversationsRequest
151-
) -> eva_types.ListEvaDatasetConversationsResponse:
145+
def ListDatasetCases(
146+
self, params: eva_types.ListDatasetCasesRequest
147+
) -> eva_types.ListDatasetCasesResponse:
152148
"""Get paginated evaluation dataset conversation list
153149
154150
Args:
155151
params: Get dataset conversation list request parameters
156152
157153
Returns:
158-
ListEvaDatasetConversationsResponse: Dataset conversation list response
154+
ListDatasetCasesResponse: Dataset conversation list response
159155
"""
160-
return eva_types.ListEvaDatasetConversationsResponse.model_validate(
161-
self.__request("ListEvaDatasetConversations", params.model_dump())
156+
return eva_types.ListDatasetCasesResponse.model_validate(
157+
self.__request("ListDatasetCases", params.model_dump())
162158
)
163159

164-
def ListEvaDatasetColumns(
165-
self, params: eva_types.ListEvaDatasetColumnsRequest
166-
) -> eva_types.ListEvaDatasetColumnsResponse:
160+
def ListColumns(
161+
self, params: eva_types.ListColumnsRequest
162+
) -> eva_types.ListColumnsResponse:
167163
"""Get evaluation dataset column information
168164
169165
Args:
170166
params: Get dataset column information request parameters
171167
172168
Returns:
173-
ListEvaDatasetColumnsResponse: Dataset column information response
169+
ListColumnsResponse: Dataset column information response
174170
"""
175-
return eva_types.ListEvaDatasetColumnsResponse.model_validate(
176-
self.__request("ListEvaDatasetColumns", params.model_dump())
171+
return eva_types.ListColumnsResponse.model_validate(
172+
self.__request("ListColumns", params.model_dump())
177173
)
178174

179175
def ExecEvaTaskRowGroup(

libs/api/hiagent_api/eva_types.py

Lines changed: 80 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,13 @@ class CellContentPartType(str, Enum):
5252
VIDEO_URL = "video_url"
5353

5454

55+
class ColumnSchemaType(str, Enum):
56+
"""Schema type"""
57+
58+
TEXT = "Text"
59+
MULTI_CONTENT = "MultiContent"
60+
61+
5562
class ChatMessageImageURL(BaseModel):
5663
"""Chat message image URL"""
5764

@@ -68,6 +75,21 @@ class CellContentPart(BaseModel):
6875
"""Cell content part"""
6976

7077
Type: Optional[CellContentPartType] = Field(
78+
default=None, description="Content part type"
79+
)
80+
Text: Optional[str] = Field(default=None, description="Text content")
81+
ImageURL: Optional[ChatMessageImageURL] = Field(
82+
default=None, description="Image URL"
83+
)
84+
VideoURL: Optional[ChatMessageVideoURL] = Field(
85+
default=None, description="Video URL"
86+
)
87+
88+
89+
class CellContent(BaseModel):
90+
"""Cell content"""
91+
92+
Type: CellContentPartType = Field(
7193
default=None, alias="type", description="Content part type"
7294
)
7395
Text: Optional[str] = Field(default=None, alias="text", description="Text content")
@@ -79,8 +101,13 @@ class CellContentPart(BaseModel):
79101
)
80102

81103

82-
# CellContent is a list of CellContentPart
83-
CellContent = List[CellContentPart]
104+
class Cell(BaseModel):
105+
"""Repeated data"""
106+
107+
CellContent: Optional[List[CellContentPart]] = Field(
108+
default=None, description="Cell content"
109+
)
110+
Text: Optional[str] = Field(default=None, description="Text content")
84111

85112

86113
class ModelAgentConfig(BaseModel):
@@ -196,6 +223,10 @@ class CreateEvaTaskRequest(BaseModel):
196223
title="Dataset Task Configuration",
197224
description="Dataset task configuration",
198225
)
226+
DatasetVersionID: str = Field(
227+
title="Dataset Version ID",
228+
description="Dataset version ID",
229+
)
199230

200231

201232
class CreateEvaTaskResponse(BaseModel):
@@ -210,12 +241,18 @@ class CreateEvaTaskResponse(BaseModel):
210241
)
211242

212243

213-
class ListEvaDatasetConversationsRequest(BaseModel):
244+
class ListDatasetCasesRequest(BaseModel):
214245
WorkspaceID: str = Field(
215246
title="Workspace ID",
216247
description="Workspace ID",
217248
)
218249
DatasetID: str = Field(title="Dataset ID", description="Dataset ID")
250+
VersionID: str = Field(title="Dataset Version ID", description="Dataset version ID")
251+
UseLatestPublishedVersion: bool = Field(
252+
default=False,
253+
title="Use Latest Published Version",
254+
description="Whether to use the latest published version",
255+
)
219256
PageNumber: Optional[int] = Field(
220257
default=1,
221258
title="Page Number",
@@ -298,7 +335,6 @@ class EvaDatasetConversationData(BaseModel):
298335
class EvaDatasetColumnCell(BaseModel):
299336
"""Evaluation dataset column cell data"""
300337

301-
ColumnID: str = Field(title="Column ID", description="Evaluation dataset column ID")
302338
ConversationGroup: List[EvaDatasetConversationData] = Field(
303339
title="Conversation Group",
304340
description="Evaluation dataset conversation round data",
@@ -310,52 +346,20 @@ class EvaDatasetColumn(BaseModel):
310346

311347
ID: str = Field(title="Column ID", description="Column ID")
312348
Name: str = Field(title="Column Name", description="Column name")
313-
Description: Optional[str] = Field(
314-
default=None, title="Column Description", description="Column description"
349+
SchemaType: Optional[ColumnSchemaType] = Field(
350+
title="Schema Type", description="Schema type"
315351
)
316352

317353

318-
class EvaDatasetConversationItem(BaseModel):
319-
"""Evaluation dataset conversation item"""
320-
321-
RowID: str = Field(
322-
title="Data Row ID", description="Evaluation dataset data row ID"
323-
)
324-
DataRow: List[EvaDatasetColumnCell] = Field(
325-
title="Data Row", description="Evaluation dataset conversation column data"
326-
)
327-
328-
329-
class ListEvaDatasetColumnsRequest(BaseModel):
354+
class ListColumnsRequest(BaseModel):
330355
"""Get evaluation dataset column list request"""
331356

332357
WorkspaceID: str = Field(
333358
title="Workspace ID",
334359
description="Workspace ID",
335360
)
336361
DatasetID: str = Field(title="Dataset ID", description="Dataset ID")
337-
338-
339-
class ListEvaDatasetColumnsResponse(BaseModel):
340-
"""Get evaluation dataset column list response"""
341-
342-
Columns: List[EvaDatasetColumn] = Field(
343-
title="Evaluation Dataset Column List",
344-
description="Evaluation dataset column list",
345-
)
346-
347-
348-
class ListEvaDatasetConversationsResponse(BaseModel):
349-
"""Evaluation dataset conversation list response"""
350-
351-
Items: List[EvaDatasetConversationItem] = Field(
352-
title="Conversation List", description="Evaluation dataset conversation list"
353-
)
354-
Total: int = Field(
355-
title="Total",
356-
description="Total number of evaluation dataset conversations",
357-
example=100,
358-
)
362+
VersionID: str = Field(title="Dataset Version ID", description="Dataset version ID")
359363

360364

361365
class InferenceResult(BaseModel):
@@ -386,7 +390,7 @@ class CaseData(BaseModel):
386390

387391
model_config = {"extra": "allow"} # Allow dynamic fields
388392

389-
def get_column_data(self, column_name: str) -> Optional[CellContent]:
393+
def get_column_data(self, column_name: str) -> Optional[Cell]:
390394
"""
391395
Get data from specified column
392396
@@ -401,21 +405,6 @@ def get_column_data(self, column_name: str) -> Optional[CellContent]:
401405
return self.__pydantic_extra__.get(column_name)
402406
return None
403407

404-
def get_column_text(self, column_name: str) -> Optional[str]:
405-
"""
406-
Get text data from specified column
407-
408-
Args:
409-
column_name: Column name
410-
411-
Returns:
412-
Text content of the column, returns None if not exists or not text type
413-
"""
414-
data = self.get_column_data(column_name)
415-
if data and hasattr(data, "TextData"):
416-
return data.TextData
417-
return None
418-
419408
def list_columns(self) -> List[str]:
420409
"""
421410
Get all column names included in current round
@@ -429,7 +418,7 @@ def list_columns(self) -> List[str]:
429418
return []
430419

431420
# Dictionary-style operation support
432-
def __getitem__(self, column_name: str) -> Optional[CellContent]:
421+
def __getitem__(self, column_name: str) -> Optional[Cell]:
433422
"""
434423
Support case_data[column_name] access pattern
435424
@@ -441,7 +430,7 @@ def __getitem__(self, column_name: str) -> Optional[CellContent]:
441430
"""
442431
return self.get_column_data(column_name)
443432

444-
def __setitem__(self, column_name: str, value: CellContent):
433+
def __setitem__(self, column_name: str, value: Cell):
445434
"""
446435
Support case_data[column_name] = value assignment pattern
447436
@@ -493,16 +482,14 @@ def keys(self) -> List[str]:
493482
"""
494483
return self.list_columns()
495484

496-
def values(self) -> List[Optional[CellContent]]:
485+
def values(self) -> List[Optional[Cell]]:
497486
"""
498487
Get data from all columns
499488
500489
Returns:
501490
List of cell content
502491
"""
503-
return [
504-
self.get_column_data(column_name) for column_name in self.list_columns()
505-
]
492+
return [self.get_column_data(column_id) for column_id in self.list_columns()]
506493

507494
def get(self, column_name: str, default=None):
508495
"""
@@ -519,6 +506,17 @@ def get(self, column_name: str, default=None):
519506
return data if data is not None else default
520507

521508

509+
class EvaDatasetConversationItem(BaseModel):
510+
"""Evaluation dataset conversation item"""
511+
512+
DatasetCaseID: str = Field(
513+
title="Dataset Case ID", description="Evaluation dataset case ID"
514+
)
515+
RepeatedData: List[Dict[str, Cell]] = Field(
516+
title="Repeated Data", description="Evaluation dataset case data"
517+
)
518+
519+
522520
class EvaConversationStatus(str, Enum):
523521
"""Evaluation conversation status"""
524522

@@ -986,3 +984,23 @@ class GetEvaTaskRequest(BaseModel):
986984

987985
# GetEvaTaskResponse 就是 EvaTaskItem
988986
GetEvaTaskResponse = EvaTaskItem
987+
988+
989+
class ListColumnsResponse(BaseModel):
990+
"""Get evaluation dataset column list response"""
991+
992+
Columns: List[EvaDatasetColumn] = Field(
993+
title="Evaluation Dataset Column List",
994+
description="Evaluation dataset column list",
995+
)
996+
997+
998+
class ListDatasetCasesResponse(BaseModel):
999+
"""Evaluation dataset conversation list response"""
1000+
1001+
Items: Optional[List[EvaDatasetConversationItem]] = Field(
1002+
title="Conversation List", description="Evaluation dataset conversation list"
1003+
)
1004+
Total: int = Field(
1005+
title="Total", description="Total number of evaluation dataset conversations"
1006+
)

libs/eva/__init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@
4343
InferenceResult,
4444
ListEvaDatasetColumnsRequest,
4545
ListEvaDatasetColumnsResponse,
46-
ListEvaDatasetConversationsRequest,
47-
ListEvaDatasetConversationsResponse,
46+
ListDatasetCasesRequest,
47+
ListDatasetCasesResponse,
4848
ModelAgentConfig,
4949
)
5050
from .hiagent_eva.client import Client
@@ -55,13 +55,13 @@
5555
"Client",
5656
"EvaService",
5757
"CreateEvaTaskRequest",
58-
"ListEvaDatasetConversationsRequest",
58+
"ListDatasetCasesRequest",
5959
"ListEvaDatasetColumnsRequest",
6060
"ExecEvaTaskRowGroupRequest",
6161
"GetEvaTaskReportRequest",
6262
"GetEvaTaskRequest",
6363
"CreateEvaTaskResponse",
64-
"ListEvaDatasetConversationsResponse",
64+
"ListDatasetCasesResponse",
6565
"ListEvaDatasetColumnsResponse",
6666
"GetEvaTaskReportResponse",
6767
"GetEvaTaskResponse",

0 commit comments

Comments
 (0)