pro-craft 0.1.25__py3-none-any.whl → 0.1.27__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pro-craft might be problematic. Click here for more details.
- pro_craft/database.py +3 -5
- pro_craft/prompt_craft/async_.py +131 -12
- pro_craft/prompt_craft/new.py +3 -3
- pro_craft/prompt_craft/sync.py +3 -3
- pro_craft/server/router/prompt.py +3 -3
- {pro_craft-0.1.25.dist-info → pro_craft-0.1.27.dist-info}/METADATA +1 -1
- {pro_craft-0.1.25.dist-info → pro_craft-0.1.27.dist-info}/RECORD +9 -10
- pro_craft/prompt_craft/evals.py +0 -61
- {pro_craft-0.1.25.dist-info → pro_craft-0.1.27.dist-info}/WHEEL +0 -0
- {pro_craft-0.1.25.dist-info → pro_craft-0.1.27.dist-info}/top_level.txt +0 -0
pro_craft/database.py
CHANGED
|
@@ -72,7 +72,7 @@ PromptBase = declarative_base()
|
|
|
72
72
|
|
|
73
73
|
class SyncMetadata(PromptBase):
|
|
74
74
|
"""用于存储同步元数据的表模型"""
|
|
75
|
-
__tablename__ = "
|
|
75
|
+
__tablename__ = "ai_sync_metadata"
|
|
76
76
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
77
77
|
last_sync_time = Column(DateTime, default=datetime(1970, 1, 1))
|
|
78
78
|
table_name = Column(String(255), unique=True)
|
|
@@ -80,9 +80,8 @@ class SyncMetadata(PromptBase):
|
|
|
80
80
|
def __repr__(self):
|
|
81
81
|
return f"<SyncMetadata(table_name='{self.table_name}', last_sync_time='{self.last_sync_time}')>"
|
|
82
82
|
|
|
83
|
-
|
|
84
83
|
class Prompt(PromptBase):
|
|
85
|
-
__tablename__ = '
|
|
84
|
+
__tablename__ = 'ai_prompts' # 数据库中的表名,你可以改成你希望的名字
|
|
86
85
|
# __tablename__ = 'llm_prompt' # 数据库中的表名,你可以改成你希望的名字
|
|
87
86
|
|
|
88
87
|
# 定义联合唯一约束
|
|
@@ -177,9 +176,8 @@ class Prompt(PromptBase):
|
|
|
177
176
|
f"is_deleted='{self.is_deleted}...'>"
|
|
178
177
|
)
|
|
179
178
|
|
|
180
|
-
|
|
181
179
|
class UseCase(PromptBase):
|
|
182
|
-
__tablename__ = '
|
|
180
|
+
__tablename__ = 'ai_usecase' # 数据库中的表名,你可以改成你希望的名字
|
|
183
181
|
|
|
184
182
|
# id (int, primary_key=True, autoincrement=True)
|
|
185
183
|
# 你的属性表中 id 为 int, true (not null), true (primary key), 0 (length), ASC (key order), true (auto increment)
|
pro_craft/prompt_craft/async_.py
CHANGED
|
@@ -34,6 +34,8 @@ class IntellectRemoveError(Exception):
|
|
|
34
34
|
pass
|
|
35
35
|
|
|
36
36
|
BATCH_SIZE = 100
|
|
37
|
+
MIN_SUCCESS_RATE = 00.0 # 这里定义通过阈值, 高于该比例则通过
|
|
38
|
+
|
|
37
39
|
|
|
38
40
|
def slog(s, target: str = "target",logger = None):
|
|
39
41
|
COLOR_GREEN = "\033[92m"
|
|
@@ -94,7 +96,7 @@ async def get_last_sync_time(target_session: AsyncSession) -> datetime:
|
|
|
94
96
|
"""从目标数据库获取上次同步时间"""
|
|
95
97
|
# 修正点:使用 select() 和 execute()
|
|
96
98
|
result = await target_session.execute(
|
|
97
|
-
select(SyncMetadata).filter_by(table_name="
|
|
99
|
+
select(SyncMetadata).filter_by(table_name="ai_sync_metadata")
|
|
98
100
|
)
|
|
99
101
|
metadata_entry = result.scalar_one_or_none() # 获取单个对象或 None
|
|
100
102
|
|
|
@@ -110,7 +112,7 @@ async def update_last_sync_time(target_session: AsyncSession, new_sync_time: dat
|
|
|
110
112
|
"""更新目标数据库的上次同步时间"""
|
|
111
113
|
# 修正点:使用 select() 和 execute()
|
|
112
114
|
result = await target_session.execute(
|
|
113
|
-
select(SyncMetadata).filter_by(table_name="
|
|
115
|
+
select(SyncMetadata).filter_by(table_name="ai_sync_metadata")
|
|
114
116
|
)
|
|
115
117
|
metadata_entry = result.scalar_one_or_none()
|
|
116
118
|
|
|
@@ -118,7 +120,7 @@ async def update_last_sync_time(target_session: AsyncSession, new_sync_time: dat
|
|
|
118
120
|
metadata_entry.last_sync_time = new_sync_time
|
|
119
121
|
else:
|
|
120
122
|
# 如果不存在,则创建
|
|
121
|
-
new_metadata = SyncMetadata(table_name="
|
|
123
|
+
new_metadata = SyncMetadata(table_name="ai_sync_metadata", last_sync_time=new_sync_time)
|
|
122
124
|
target_session.add(new_metadata)
|
|
123
125
|
|
|
124
126
|
# 异步提交事务
|
|
@@ -128,6 +130,8 @@ async def update_last_sync_time(target_session: AsyncSession, new_sync_time: dat
|
|
|
128
130
|
|
|
129
131
|
|
|
130
132
|
|
|
133
|
+
|
|
134
|
+
|
|
131
135
|
class IntellectType(Enum):
|
|
132
136
|
train = "train"
|
|
133
137
|
inference = "inference"
|
|
@@ -155,7 +159,7 @@ class AsyncIntel():
|
|
|
155
159
|
pool_pre_ping=True, # 使用前检查连接活性
|
|
156
160
|
pool_timeout=30 # 等待连接池中连接的最长时间(秒)
|
|
157
161
|
)
|
|
158
|
-
|
|
162
|
+
self.create_specific_database(self.engine,["ai_prompts","ai_usecase"])
|
|
159
163
|
|
|
160
164
|
if model_name in ["gemini-2.5-flash-preview-05-20-nothinking",]:
|
|
161
165
|
self.llm = BianXieAdapter(model_name = model_name)
|
|
@@ -165,8 +169,23 @@ class AsyncIntel():
|
|
|
165
169
|
print('Use BianXieAdapter')
|
|
166
170
|
self.llm = BianXieAdapter()
|
|
167
171
|
|
|
168
|
-
async def
|
|
169
|
-
async with
|
|
172
|
+
async def create_specific_database(self,engine, tables_to_create_names: list[str]):
|
|
173
|
+
async with engine.begin() as conn:
|
|
174
|
+
# 从 metadata 中获取对应的 Table 对象
|
|
175
|
+
specific_database_objects = []
|
|
176
|
+
for table_name in tables_to_create_names:
|
|
177
|
+
if table_name in PromptBase.metadata.tables:
|
|
178
|
+
specific_database_objects.append(PromptBase.metadata.tables[table_name])
|
|
179
|
+
else:
|
|
180
|
+
print(f"Warning: Table '{table_name}' not found in metadata.")
|
|
181
|
+
|
|
182
|
+
if specific_database_objects:
|
|
183
|
+
await conn.run_sync(PromptBase.metadata.create_all, tables=specific_database_objects)
|
|
184
|
+
else:
|
|
185
|
+
print("No specific tables to create.")
|
|
186
|
+
|
|
187
|
+
async def create_database(self,engine):
|
|
188
|
+
async with engine.begin() as conn:
|
|
170
189
|
await conn.run_sync(PromptBase.metadata.create_all)
|
|
171
190
|
|
|
172
191
|
async def _get_latest_prompt_version(self,target_prompt_id,session):
|
|
@@ -214,9 +233,7 @@ class AsyncIntel():
|
|
|
214
233
|
|
|
215
234
|
async def sync_prompt_data_to_database(self,database_url:str):
|
|
216
235
|
target_engine = create_async_engine(database_url, echo=False)
|
|
217
|
-
|
|
218
|
-
await conn.run_sync(PromptBase.metadata.create_all)
|
|
219
|
-
|
|
236
|
+
await self.create_database(target_engine)
|
|
220
237
|
async with create_async_session(self.engine) as source_session:
|
|
221
238
|
async with create_async_session(target_engine) as target_session:
|
|
222
239
|
|
|
@@ -364,6 +381,21 @@ class AsyncIntel():
|
|
|
364
381
|
session.add(prompt1)
|
|
365
382
|
await session.commit() # 提交事务,将数据写入数据库
|
|
366
383
|
|
|
384
|
+
async def get_use_case_by_sql(self,
|
|
385
|
+
target_prompt_id: str,
|
|
386
|
+
session = None
|
|
387
|
+
):
|
|
388
|
+
"""
|
|
389
|
+
从sql保存提示词
|
|
390
|
+
"""
|
|
391
|
+
stmt = select(UseCase).filter(UseCase.is_deleted == 0,
|
|
392
|
+
UseCase.prompt_id == target_prompt_id)
|
|
393
|
+
|
|
394
|
+
result = await session.execute(stmt)
|
|
395
|
+
# use_case = result.scalars().one_or_none()
|
|
396
|
+
use_case = result.scalars().all()
|
|
397
|
+
return use_case
|
|
398
|
+
|
|
367
399
|
async def save_use_case_by_sql(self,
|
|
368
400
|
prompt_id: str,
|
|
369
401
|
use_case:str = "",
|
|
@@ -374,6 +406,8 @@ class AsyncIntel():
|
|
|
374
406
|
"""
|
|
375
407
|
从sql保存提示词
|
|
376
408
|
"""
|
|
409
|
+
#TODO 存之前保证数据库中相同的prompt_id中没有重复的use_case
|
|
410
|
+
|
|
377
411
|
use_case = UseCase(prompt_id=prompt_id,
|
|
378
412
|
use_case = use_case,
|
|
379
413
|
output = output,
|
|
@@ -789,7 +823,6 @@ class AsyncIntel():
|
|
|
789
823
|
)
|
|
790
824
|
|
|
791
825
|
try:
|
|
792
|
-
|
|
793
826
|
json_str = extract_(ai_result,r'json')
|
|
794
827
|
# json_str = fix_broken_json_string(json_str)
|
|
795
828
|
ai_result = json.loads(json_str)
|
|
@@ -804,7 +837,7 @@ class AsyncIntel():
|
|
|
804
837
|
OutputFormat(**ai_result)
|
|
805
838
|
|
|
806
839
|
except JSONDecodeError as e:
|
|
807
|
-
raise IntellectRemoveFormatError(f"prompt_id: {prompt_id}
|
|
840
|
+
raise IntellectRemoveFormatError(f"prompt_id: {prompt_id} 生成的内容为无法被Json解析 {e}") from e
|
|
808
841
|
|
|
809
842
|
except ValidationError as e:
|
|
810
843
|
err_info = e.errors()[0]
|
|
@@ -845,7 +878,6 @@ class AsyncIntel():
|
|
|
845
878
|
)
|
|
846
879
|
results = await asyncio.gather(*tasks, return_exceptions=False)
|
|
847
880
|
return results
|
|
848
|
-
|
|
849
881
|
|
|
850
882
|
def intellect_remove_warp(self,prompt_id: str):
|
|
851
883
|
def outer_packing(func):
|
|
@@ -874,3 +906,90 @@ class AsyncIntel():
|
|
|
874
906
|
return result
|
|
875
907
|
return wrapper
|
|
876
908
|
return outer_packing
|
|
909
|
+
|
|
910
|
+
async def intellect_remove_format_eval(self,
|
|
911
|
+
OutputFormat: object,
|
|
912
|
+
prompt_id: str,
|
|
913
|
+
ExtraFormats: list[object] = [],
|
|
914
|
+
version: str = None,
|
|
915
|
+
):
|
|
916
|
+
|
|
917
|
+
async with create_async_session(self.engine) as session:
|
|
918
|
+
use_cases = await self.get_use_case_by_sql(target_prompt_id=prompt_id,session=session)
|
|
919
|
+
prompt_result = await self.get_prompts_from_sql(prompt_id=prompt_id,
|
|
920
|
+
session=session)
|
|
921
|
+
if prompt_result is None:
|
|
922
|
+
raise IntellectRemoveError("不存在的prompt_id")
|
|
923
|
+
if prompt_result.action_type != "inference":
|
|
924
|
+
raise IntellectRemoveError("请在inference模式下使用次类")
|
|
925
|
+
|
|
926
|
+
|
|
927
|
+
total_assertions = len(use_cases)
|
|
928
|
+
result_cases = []
|
|
929
|
+
|
|
930
|
+
async def evals_func(use_case,prompt_id,OutputFormat,ExtraFormats,version):
|
|
931
|
+
try:
|
|
932
|
+
# 这里将参数传入
|
|
933
|
+
await self.intellect_remove_format(
|
|
934
|
+
input_data = use_case.use_case,
|
|
935
|
+
prompt_id = prompt_id,
|
|
936
|
+
OutputFormat = OutputFormat,
|
|
937
|
+
ExtraFormats = ExtraFormats,
|
|
938
|
+
version = version,
|
|
939
|
+
inference_save_case = False,
|
|
940
|
+
)
|
|
941
|
+
# TODO base_eval
|
|
942
|
+
# TODO 人类评价 eval
|
|
943
|
+
# TODO llm 评价 eval
|
|
944
|
+
result_cases.append({"type":"Successful","case":use_case.use_case,"reply":f"pass"})
|
|
945
|
+
use_case.output = "Successful"
|
|
946
|
+
except IntellectRemoveFormatError as e:
|
|
947
|
+
result_cases.append({"type":"FAILED","case":use_case.use_case,"reply":f"{e}"})
|
|
948
|
+
use_case.output = f"{"FAILED"}-{e}"
|
|
949
|
+
except Exception as e: # 捕获其他可能的错误
|
|
950
|
+
result_cases.append({"type":"FAILED","case":use_case.use_case,"reply":f"Exp {e}"})
|
|
951
|
+
use_case.output = f"{"FAILED"}-{e}"
|
|
952
|
+
await session.commit()
|
|
953
|
+
|
|
954
|
+
tasks = []
|
|
955
|
+
for use_case in use_cases:
|
|
956
|
+
tasks.append(
|
|
957
|
+
evals_func(
|
|
958
|
+
use_case = use_case,
|
|
959
|
+
prompt_id = prompt_id,
|
|
960
|
+
OutputFormat = OutputFormat,
|
|
961
|
+
ExtraFormats = ExtraFormats,
|
|
962
|
+
version = version
|
|
963
|
+
)
|
|
964
|
+
)
|
|
965
|
+
await asyncio.gather(*tasks, return_exceptions=False)
|
|
966
|
+
|
|
967
|
+
|
|
968
|
+
successful_assertions = 0
|
|
969
|
+
bad_case = []
|
|
970
|
+
for i in result_cases:
|
|
971
|
+
if i['type'] == "Successful":
|
|
972
|
+
successful_assertions += 1
|
|
973
|
+
else:
|
|
974
|
+
bad_case.append(i)
|
|
975
|
+
|
|
976
|
+
success_rate = (successful_assertions / total_assertions) * 100
|
|
977
|
+
print(f"\n--- Aggregated Results ---")
|
|
978
|
+
print(f"Total test cases: {total_assertions}")
|
|
979
|
+
print(f"Successful cases: {successful_assertions}")
|
|
980
|
+
print(f"Success Rate: {success_rate:.2f}%")
|
|
981
|
+
|
|
982
|
+
# if success_rate >= MIN_SUCCESS_RATE:
|
|
983
|
+
# return "通过", json.dumps(result_cases,ensure_ascii=False)
|
|
984
|
+
# else:
|
|
985
|
+
# return "未通过",json.dumps(result_cases,ensure_ascii=False)
|
|
986
|
+
|
|
987
|
+
print(bad_case)
|
|
988
|
+
|
|
989
|
+
|
|
990
|
+
# return results
|
|
991
|
+
|
|
992
|
+
|
|
993
|
+
|
|
994
|
+
|
|
995
|
+
# 整体测试d, 测试未通过d, 大模型调整再测试, 依旧不通过, 大模型裂变, 仍不通过, 互换人力
|
pro_craft/prompt_craft/new.py
CHANGED
|
@@ -37,19 +37,19 @@ def slog(s, target: str = "target",logger = None):
|
|
|
37
37
|
|
|
38
38
|
def get_last_sync_time(target_session) -> datetime:
|
|
39
39
|
"""从目标数据库获取上次同步时间"""
|
|
40
|
-
metadata_entry = target_session.query(SyncMetadata).filter_by(table_name="
|
|
40
|
+
metadata_entry = target_session.query(SyncMetadata).filter_by(table_name="ai_sync_metadata").first()
|
|
41
41
|
if metadata_entry:
|
|
42
42
|
return metadata_entry.last_sync_time
|
|
43
43
|
return datetime(1970, 1, 1) # 默认一个很早的时间
|
|
44
44
|
|
|
45
45
|
def update_last_sync_time(target_session, new_sync_time: datetime):
|
|
46
46
|
"""更新目标数据库的上次同步时间"""
|
|
47
|
-
metadata_entry = target_session.query(SyncMetadata).filter_by(table_name="
|
|
47
|
+
metadata_entry = target_session.query(SyncMetadata).filter_by(table_name="ai_sync_metadata").first()
|
|
48
48
|
if metadata_entry:
|
|
49
49
|
metadata_entry.last_sync_time = new_sync_time
|
|
50
50
|
else:
|
|
51
51
|
# 如果不存在,则创建
|
|
52
|
-
new_metadata = SyncMetadata(table_name="
|
|
52
|
+
new_metadata = SyncMetadata(table_name="ai_sync_metadata", last_sync_time=new_sync_time)
|
|
53
53
|
target_session.add(new_metadata)
|
|
54
54
|
target_session.commit()
|
|
55
55
|
print(f"Updated last sync time to: {new_sync_time}")
|
pro_craft/prompt_craft/sync.py
CHANGED
|
@@ -39,19 +39,19 @@ def slog(s, target: str = "target",logger = None):
|
|
|
39
39
|
|
|
40
40
|
def get_last_sync_time(target_session) -> datetime:
|
|
41
41
|
"""从目标数据库获取上次同步时间"""
|
|
42
|
-
metadata_entry = target_session.query(SyncMetadata).filter_by(table_name="
|
|
42
|
+
metadata_entry = target_session.query(SyncMetadata).filter_by(table_name="ai_sync_metadata").first()
|
|
43
43
|
if metadata_entry:
|
|
44
44
|
return metadata_entry.last_sync_time
|
|
45
45
|
return datetime(1970, 1, 1) # 默认一个很早的时间
|
|
46
46
|
|
|
47
47
|
def update_last_sync_time(target_session, new_sync_time: datetime):
|
|
48
48
|
"""更新目标数据库的上次同步时间"""
|
|
49
|
-
metadata_entry = target_session.query(SyncMetadata).filter_by(table_name="
|
|
49
|
+
metadata_entry = target_session.query(SyncMetadata).filter_by(table_name="ai_sync_metadata").first()
|
|
50
50
|
if metadata_entry:
|
|
51
51
|
metadata_entry.last_sync_time = new_sync_time
|
|
52
52
|
else:
|
|
53
53
|
# 如果不存在,则创建
|
|
54
|
-
new_metadata = SyncMetadata(table_name="
|
|
54
|
+
new_metadata = SyncMetadata(table_name="ai_sync_metadata", last_sync_time=new_sync_time)
|
|
55
55
|
target_session.add(new_metadata)
|
|
56
56
|
target_session.commit()
|
|
57
57
|
print(f"Updated last sync time to: {new_sync_time}")
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from fastapi import APIRouter
|
|
4
4
|
from pro_craft import Intel,AsyncIntel
|
|
5
|
-
from pro_craft.utils import
|
|
5
|
+
from pro_craft.utils import create_async_session
|
|
6
6
|
|
|
7
7
|
def create_router(database_url: str,
|
|
8
8
|
slave_database_url: str,
|
|
@@ -44,7 +44,7 @@ def create_router(database_url: str,
|
|
|
44
44
|
|
|
45
45
|
@router.get("/get_latest_prompt")
|
|
46
46
|
async def get_latest_prompt(prompt_id: str):
|
|
47
|
-
with
|
|
47
|
+
async with create_async_session(intels.engine) as session:
|
|
48
48
|
result = await intels.get_prompts_from_sql(
|
|
49
49
|
prompt_id=prompt_id,
|
|
50
50
|
session=session
|
|
@@ -59,7 +59,7 @@ def create_router(database_url: str,
|
|
|
59
59
|
|
|
60
60
|
@router.get("/roll_back")
|
|
61
61
|
async def roll_back(prompt_id:str,version:str):
|
|
62
|
-
with
|
|
62
|
+
async with create_async_session(intels.engine) as session:
|
|
63
63
|
result = await intels.get_prompts_from_sql(
|
|
64
64
|
prompt_id=prompt_id,
|
|
65
65
|
version = version,
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
pro_craft/__init__.py,sha256=KU9yexREoJVO5eyDNnOCzdYC8Bfo6p4Z45KWZTeO63U,698
|
|
2
|
-
pro_craft/database.py,sha256=
|
|
2
|
+
pro_craft/database.py,sha256=FJmknolcXpx6sYHuiS1LgXX7FV8drSpoN3RwVvRR2FI,8741
|
|
3
3
|
pro_craft/file_manager.py,sha256=abVAlJ07_egWNuTj4JiP4me8NloQrsXGNd-SP63ab94,3738
|
|
4
4
|
pro_craft/log.py,sha256=x9RS_0LITN2SE8dcVaEcUFdcfr__jCYpFkIkVmqE5f0,3061
|
|
5
5
|
pro_craft/utils.py,sha256=R1DFkS4dsm5dIhg8lLTgBBvItvIYyyojROdh-ykqiYk,5250
|
|
6
6
|
pro_craft/code_helper/coder.py,sha256=L6pRQr0pYRIHrMFZ4-pO_tZf1koxgGgF3L7Vl-GIyjM,24687
|
|
7
7
|
pro_craft/code_helper/designer.py,sha256=3gyCqrjcw61sHzDjUPKhL1LOAE8xWLLbNT8NlK2mFLc,4739
|
|
8
8
|
pro_craft/prompt_craft/__init__.py,sha256=83ruWO1Oci-DWvdVhPqcQrgdZTNfbmK72VQCkWASk7A,80
|
|
9
|
-
pro_craft/prompt_craft/async_.py,sha256=
|
|
10
|
-
pro_craft/prompt_craft/
|
|
11
|
-
pro_craft/prompt_craft/
|
|
12
|
-
pro_craft/prompt_craft/sync.py,sha256=X2BOzdqLBVZyMm5noEOaX2X5LYHl3nl2d3qAOwLoJr8,26169
|
|
9
|
+
pro_craft/prompt_craft/async_.py,sha256=j_Jy-TNhfFehMT80kOCLelaICU-Ns3OOrPEn4s18Z8k,43846
|
|
10
|
+
pro_craft/prompt_craft/new.py,sha256=ULjGGl95vmHrOs7XECJGlaqj1NE9BypE5WnFYhGugRY,25903
|
|
11
|
+
pro_craft/prompt_craft/sync.py,sha256=w-zXC9_yVxgvnotimcs2POEXaHWD6ibspdPwWL9zqXk,26178
|
|
13
12
|
pro_craft/server/mcp/__init__.py,sha256=4dbl-lFcm0r2tkOP04OxqiZG2jR-rqF181qi2AfU6UA,123
|
|
14
13
|
pro_craft/server/mcp/prompt.py,sha256=OZrsyUfSQMOY_KX7dWthW209adz5JfELsQ0ODfuQR44,1245
|
|
15
14
|
pro_craft/server/router/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
|
-
pro_craft/server/router/prompt.py,sha256=
|
|
17
|
-
pro_craft-0.1.
|
|
18
|
-
pro_craft-0.1.
|
|
19
|
-
pro_craft-0.1.
|
|
20
|
-
pro_craft-0.1.
|
|
15
|
+
pro_craft/server/router/prompt.py,sha256=Wa4FfYRL6oeyA3F-79pmPeIH0Vo8wSEv7RH1lP6jXck,2907
|
|
16
|
+
pro_craft-0.1.27.dist-info/METADATA,sha256=maDxzIKWmnOpPvjg24-cqnNSOJrAEalQRybw4QHpF0A,1689
|
|
17
|
+
pro_craft-0.1.27.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
18
|
+
pro_craft-0.1.27.dist-info/top_level.txt,sha256=yqYDHArnYMWpeCxkmGRwlL6sJtxiOUnYylLDx9EOgFg,10
|
|
19
|
+
pro_craft-0.1.27.dist-info/RECORD,,
|
pro_craft/prompt_craft/evals.py
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import json
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
############evals##############
|
|
6
|
-
|
|
7
|
-
# 异步
|
|
8
|
-
class Base_Evals():
|
|
9
|
-
def __init__(self):
|
|
10
|
-
"""
|
|
11
|
-
# TODO 2 自动优化prompt 并提升稳定性, 并测试
|
|
12
|
-
通过重写继承来使用它
|
|
13
|
-
"""
|
|
14
|
-
self.MIN_SUCCESS_RATE = 00.0 # 这里定义通过阈值, 高于该比例则通过
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
async def _assert_eval_function(self,params):
|
|
18
|
-
#这里定义函数的评价体系
|
|
19
|
-
print(params,'params')
|
|
20
|
-
|
|
21
|
-
async def get_success_rate(self,test_cases:list[tuple]):
|
|
22
|
-
"""
|
|
23
|
-
# 这里定义数据
|
|
24
|
-
|
|
25
|
-
"""
|
|
26
|
-
|
|
27
|
-
successful_assertions = 0
|
|
28
|
-
total_assertions = len(test_cases)
|
|
29
|
-
result_cases = []
|
|
30
|
-
|
|
31
|
-
for i, params in enumerate(test_cases):
|
|
32
|
-
try:
|
|
33
|
-
# 这里将参数传入
|
|
34
|
-
await self._assert_eval_function(params)
|
|
35
|
-
successful_assertions += 1
|
|
36
|
-
result_cases.append({"type":"Successful","--input--":params,"evaluate_info":f"满足要求"})
|
|
37
|
-
except AssertionError as e:
|
|
38
|
-
result_cases.append({"type":"FAILED","--input--":params,"evaluate_info":f"ERROR {e}"})
|
|
39
|
-
except Exception as e: # 捕获其他可能的错误
|
|
40
|
-
result_cases.append({"type":"FAILED","--input--":params,"evaluate_info":f"ERROR {e}"})
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
success_rate = (successful_assertions / total_assertions) * 100
|
|
44
|
-
print(f"\n--- Aggregated Results ---")
|
|
45
|
-
print(f"Total test cases: {total_assertions}")
|
|
46
|
-
print(f"Successful cases: {successful_assertions}")
|
|
47
|
-
print(f"Success Rate: {success_rate:.2f}%")
|
|
48
|
-
|
|
49
|
-
if success_rate >= self.MIN_SUCCESS_RATE:
|
|
50
|
-
return "通过", json.dumps(result_cases,ensure_ascii=False)
|
|
51
|
-
else:
|
|
52
|
-
return "未通过",json.dumps(result_cases,ensure_ascii=False)
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
def global_evals():
|
|
56
|
-
pass
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
File without changes
|
|
File without changes
|