pro-craft 0.1.22__py3-none-any.whl → 0.1.36__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/__init__.py +7 -12
- pro_craft/database.py +22 -5
- pro_craft/file_manager.py +2 -2
- pro_craft/log.py +14 -14
- pro_craft/prompt_craft/async_.py +579 -336
- pro_craft/prompt_craft/new.py +3 -3
- pro_craft/prompt_craft/sync.py +28 -23
- pro_craft/server/router/prompt.py +15 -12
- {pro_craft-0.1.22.dist-info → pro_craft-0.1.36.dist-info}/METADATA +2 -1
- pro_craft-0.1.36.dist-info/RECORD +19 -0
- pro_craft/prompt_craft/evals.py +0 -61
- pro_craft-0.1.22.dist-info/RECORD +0 -20
- {pro_craft-0.1.22.dist-info → pro_craft-0.1.36.dist-info}/WHEEL +0 -0
- {pro_craft-0.1.22.dist-info → pro_craft-0.1.36.dist-info}/top_level.txt +0 -0
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
|
@@ -22,6 +22,8 @@ BATCH_SIZE = 1000
|
|
|
22
22
|
class IntellectRemoveFormatError(Exception):
|
|
23
23
|
pass
|
|
24
24
|
|
|
25
|
+
class IntellectRemoveError(Exception):
|
|
26
|
+
pass
|
|
25
27
|
|
|
26
28
|
def slog(s, target: str = "target",logger = None):
|
|
27
29
|
COLOR_GREEN = "\033[92m"
|
|
@@ -37,19 +39,19 @@ def slog(s, target: str = "target",logger = None):
|
|
|
37
39
|
|
|
38
40
|
def get_last_sync_time(target_session) -> datetime:
|
|
39
41
|
"""从目标数据库获取上次同步时间"""
|
|
40
|
-
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()
|
|
41
43
|
if metadata_entry:
|
|
42
44
|
return metadata_entry.last_sync_time
|
|
43
45
|
return datetime(1970, 1, 1) # 默认一个很早的时间
|
|
44
46
|
|
|
45
47
|
def update_last_sync_time(target_session, new_sync_time: datetime):
|
|
46
48
|
"""更新目标数据库的上次同步时间"""
|
|
47
|
-
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()
|
|
48
50
|
if metadata_entry:
|
|
49
51
|
metadata_entry.last_sync_time = new_sync_time
|
|
50
52
|
else:
|
|
51
53
|
# 如果不存在,则创建
|
|
52
|
-
new_metadata = SyncMetadata(table_name="
|
|
54
|
+
new_metadata = SyncMetadata(table_name="ai_sync_metadata", last_sync_time=new_sync_time)
|
|
53
55
|
target_session.add(new_metadata)
|
|
54
56
|
target_session.commit()
|
|
55
57
|
print(f"Updated last sync time to: {new_sync_time}")
|
|
@@ -71,6 +73,7 @@ class Intel():
|
|
|
71
73
|
):
|
|
72
74
|
database_url = database_url or os.getenv("database_url")
|
|
73
75
|
assert database_url
|
|
76
|
+
assert "aiomysql" not in database_url
|
|
74
77
|
self.engine = create_engine(database_url, echo=False, # echo=True 仍然会打印所有执行的 SQL 语句
|
|
75
78
|
pool_size=10, # 连接池中保持的连接数
|
|
76
79
|
max_overflow=20, # 当pool_size不够时,允许临时创建的额外连接数
|
|
@@ -83,11 +86,10 @@ class Intel():
|
|
|
83
86
|
|
|
84
87
|
if model_name in ["gemini-2.5-flash-preview-05-20-nothinking",]:
|
|
85
88
|
self.llm = BianXieAdapter(model_name = model_name)
|
|
86
|
-
elif model_name in ["doubao-1-5-pro-256k-250115",]:
|
|
89
|
+
elif model_name in ["doubao-1-5-pro-256k-250115","doubao-1-5-pro-32k-250115"]:
|
|
87
90
|
self.llm = ArkAdapter(model_name = model_name)
|
|
88
91
|
else:
|
|
89
|
-
|
|
90
|
-
self.llm = BianXieAdapter()
|
|
92
|
+
raise Exception("error llm name")
|
|
91
93
|
self.logger = logger or pro_craft_logger
|
|
92
94
|
|
|
93
95
|
def _get_latest_prompt_version(self,target_prompt_id,session):
|
|
@@ -354,17 +356,28 @@ class Intel():
|
|
|
354
356
|
# 查看是否已经存在
|
|
355
357
|
with create_session(self.engine) as session:
|
|
356
358
|
latest_prompt = self.get_prompts_from_sql(prompt_id=prompt_id,session=session)
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
359
|
+
|
|
360
|
+
if latest_prompt:
|
|
361
|
+
self.save_prompt_increment_version(prompt_id=latest_prompt.prompt_id,
|
|
362
|
+
new_prompt = latest_prompt.prompt,
|
|
363
|
+
use_case = latest_prompt.use_case,
|
|
364
|
+
action_type=action_type,
|
|
365
|
+
demand=demand,
|
|
366
|
+
score=latest_prompt.score,
|
|
367
|
+
session=session
|
|
368
|
+
)
|
|
369
|
+
|
|
370
|
+
return "success"
|
|
371
|
+
else:
|
|
372
|
+
self.save_prompt_increment_version(prompt_id=prompt_id,
|
|
373
|
+
new_prompt = demand,
|
|
374
|
+
use_case = "init",
|
|
375
|
+
action_type="inference",
|
|
362
376
|
demand=demand,
|
|
363
|
-
score=
|
|
377
|
+
score=60,
|
|
364
378
|
session=session
|
|
365
379
|
)
|
|
366
|
-
|
|
367
|
-
return "success"
|
|
380
|
+
return "init"
|
|
368
381
|
|
|
369
382
|
def intellect_remove(self,
|
|
370
383
|
input_data: dict | str,
|
|
@@ -393,15 +406,7 @@ class Intel():
|
|
|
393
406
|
result_obj = self.get_prompts_from_sql(prompt_id=prompt_id,session=session)
|
|
394
407
|
|
|
395
408
|
if result_obj is None:
|
|
396
|
-
|
|
397
|
-
prompt_id = prompt_id,
|
|
398
|
-
new_prompt = "做一些处理",
|
|
399
|
-
use_case = input_,
|
|
400
|
-
score = 60,
|
|
401
|
-
session = session
|
|
402
|
-
)
|
|
403
|
-
ai_result = "初始化完成"
|
|
404
|
-
return ai_result
|
|
409
|
+
raise IntellectRemoveError("不存在的prompt_id")
|
|
405
410
|
prompt = result_obj.prompt
|
|
406
411
|
if result_obj.action_type == "inference":
|
|
407
412
|
# 直接推理即可
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
3
|
from fastapi import APIRouter
|
|
4
|
-
from pro_craft import Intel
|
|
5
|
-
from pro_craft.utils import
|
|
4
|
+
from pro_craft import Intel,AsyncIntel
|
|
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,
|
|
9
|
-
model_name: str
|
|
9
|
+
model_name: str,
|
|
10
|
+
logger = None):
|
|
10
11
|
"""
|
|
12
|
+
# TODO 整理改为异步
|
|
11
13
|
创建一个包含 ProCraft 路由的 FastAPI APIRouter 实例。
|
|
12
14
|
|
|
13
15
|
Args:
|
|
@@ -20,9 +22,10 @@ def create_router(database_url: str,
|
|
|
20
22
|
APIRouter: 配置好的 FastAPI APIRouter 实例。
|
|
21
23
|
"""
|
|
22
24
|
|
|
23
|
-
intels =
|
|
25
|
+
intels = AsyncIntel(
|
|
24
26
|
database_url=database_url,
|
|
25
|
-
model_name=model_name
|
|
27
|
+
model_name=model_name,
|
|
28
|
+
logger=logger
|
|
26
29
|
)
|
|
27
30
|
|
|
28
31
|
router = APIRouter(
|
|
@@ -32,7 +35,7 @@ def create_router(database_url: str,
|
|
|
32
35
|
@router.get("/push_order",
|
|
33
36
|
description="可选 train,inference,summary,finetune,patch",)
|
|
34
37
|
async def push_order(demand: str, prompt_id: str, action_type: str = "train"):
|
|
35
|
-
result = intels.push_action_order(
|
|
38
|
+
result = await intels.push_action_order(
|
|
36
39
|
demand=demand,
|
|
37
40
|
prompt_id=prompt_id,
|
|
38
41
|
action_type=action_type
|
|
@@ -41,8 +44,8 @@ def create_router(database_url: str,
|
|
|
41
44
|
|
|
42
45
|
@router.get("/get_latest_prompt")
|
|
43
46
|
async def get_latest_prompt(prompt_id: str):
|
|
44
|
-
with
|
|
45
|
-
result = intels.get_prompts_from_sql(
|
|
47
|
+
async with create_async_session(intels.engine) as session:
|
|
48
|
+
result = await intels.get_prompts_from_sql(
|
|
46
49
|
prompt_id=prompt_id,
|
|
47
50
|
session=session
|
|
48
51
|
)
|
|
@@ -50,20 +53,20 @@ def create_router(database_url: str,
|
|
|
50
53
|
|
|
51
54
|
@router.get("/sync_database")
|
|
52
55
|
async def sync_database():
|
|
53
|
-
result = intels.sync_prompt_data_to_database(slave_database_url)
|
|
56
|
+
result = await intels.sync_prompt_data_to_database(slave_database_url)
|
|
54
57
|
return {"message": "success","result":result}
|
|
55
58
|
|
|
56
59
|
|
|
57
60
|
@router.get("/roll_back")
|
|
58
61
|
async def roll_back(prompt_id:str,version:str):
|
|
59
|
-
with
|
|
60
|
-
result = intels.get_prompts_from_sql(
|
|
62
|
+
async with create_async_session(intels.engine) as session:
|
|
63
|
+
result = await intels.get_prompts_from_sql(
|
|
61
64
|
prompt_id=prompt_id,
|
|
62
65
|
version = version,
|
|
63
66
|
session=session
|
|
64
67
|
)
|
|
65
68
|
assert result.version == version
|
|
66
|
-
intels.save_prompt_increment_version(
|
|
69
|
+
await intels.save_prompt_increment_version(
|
|
67
70
|
prompt_id = prompt_id,
|
|
68
71
|
new_prompt = result.prompt,
|
|
69
72
|
use_case = result.use_case,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pro-craft
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.36
|
|
4
4
|
Summary: Add your description here
|
|
5
5
|
Requires-Python: >=3.12
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
@@ -9,6 +9,7 @@ Requires-Dist: anyio>=4.11.0
|
|
|
9
9
|
Requires-Dist: db-help>=0.2.2
|
|
10
10
|
Requires-Dist: fastapi>=0.119.0
|
|
11
11
|
Requires-Dist: llmada>=1.1.11
|
|
12
|
+
Requires-Dist: plotly>=6.3.1
|
|
12
13
|
Requires-Dist: pyyaml>=6.0.3
|
|
13
14
|
Requires-Dist: toml>=0.10.2
|
|
14
15
|
Requires-Dist: utils-tool==0.1.3
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
pro_craft/__init__.py,sha256=CkERhdDQyrPWpOb5nArMt2UCcX8STJLF7JC2x7yTBYM,515
|
|
2
|
+
pro_craft/database.py,sha256=cbUcy4_e9RgcDVBNMvERNmTv_pZWgd4ox4a4drBWS6w,9310
|
|
3
|
+
pro_craft/file_manager.py,sha256=abVAlJ07_egWNuTj4JiP4me8NloQrsXGNd-SP63ab94,3738
|
|
4
|
+
pro_craft/log.py,sha256=EXrNt2kYYPdO3RSr79lpfr5nh0sxRSiYGmswl8-PAzo,3262
|
|
5
|
+
pro_craft/utils.py,sha256=R1DFkS4dsm5dIhg8lLTgBBvItvIYyyojROdh-ykqiYk,5250
|
|
6
|
+
pro_craft/code_helper/coder.py,sha256=L6pRQr0pYRIHrMFZ4-pO_tZf1koxgGgF3L7Vl-GIyjM,24687
|
|
7
|
+
pro_craft/code_helper/designer.py,sha256=3gyCqrjcw61sHzDjUPKhL1LOAE8xWLLbNT8NlK2mFLc,4739
|
|
8
|
+
pro_craft/prompt_craft/__init__.py,sha256=83ruWO1Oci-DWvdVhPqcQrgdZTNfbmK72VQCkWASk7A,80
|
|
9
|
+
pro_craft/prompt_craft/async_.py,sha256=6IqV_2KYSFjS4rzHzoTbz0Sy6g9toJS5HHLs1EW2_E0,40469
|
|
10
|
+
pro_craft/prompt_craft/new.py,sha256=ULjGGl95vmHrOs7XECJGlaqj1NE9BypE5WnFYhGugRY,25903
|
|
11
|
+
pro_craft/prompt_craft/sync.py,sha256=4bms8Qvzq5QqgwHWwiyjrcl7hdkSqE7Kne5s3Ex8bBU,26217
|
|
12
|
+
pro_craft/server/mcp/__init__.py,sha256=4dbl-lFcm0r2tkOP04OxqiZG2jR-rqF181qi2AfU6UA,123
|
|
13
|
+
pro_craft/server/mcp/prompt.py,sha256=OZrsyUfSQMOY_KX7dWthW209adz5JfELsQ0ODfuQR44,1245
|
|
14
|
+
pro_craft/server/router/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
|
+
pro_craft/server/router/prompt.py,sha256=Wa4FfYRL6oeyA3F-79pmPeIH0Vo8wSEv7RH1lP6jXck,2907
|
|
16
|
+
pro_craft-0.1.36.dist-info/METADATA,sha256=yjrUmXcrIENwRaz8POKuLPWkmCxi9xYKoxOzqWGjIoc,1718
|
|
17
|
+
pro_craft-0.1.36.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
18
|
+
pro_craft-0.1.36.dist-info/top_level.txt,sha256=yqYDHArnYMWpeCxkmGRwlL6sJtxiOUnYylLDx9EOgFg,10
|
|
19
|
+
pro_craft-0.1.36.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
|
-
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
pro_craft/__init__.py,sha256=KU9yexREoJVO5eyDNnOCzdYC8Bfo6p4Z45KWZTeO63U,698
|
|
2
|
-
pro_craft/database.py,sha256=5dV-h9dVaS6euHLCtf0gYfq2pchl2QFdb2PEM4gTEU4,8740
|
|
3
|
-
pro_craft/file_manager.py,sha256=93m3AkS6R88pJ5NBwaePyngM-YwSuiPh-9Sx7YPh3B8,3748
|
|
4
|
-
pro_craft/log.py,sha256=x9RS_0LITN2SE8dcVaEcUFdcfr__jCYpFkIkVmqE5f0,3061
|
|
5
|
-
pro_craft/utils.py,sha256=R1DFkS4dsm5dIhg8lLTgBBvItvIYyyojROdh-ykqiYk,5250
|
|
6
|
-
pro_craft/code_helper/coder.py,sha256=L6pRQr0pYRIHrMFZ4-pO_tZf1koxgGgF3L7Vl-GIyjM,24687
|
|
7
|
-
pro_craft/code_helper/designer.py,sha256=3gyCqrjcw61sHzDjUPKhL1LOAE8xWLLbNT8NlK2mFLc,4739
|
|
8
|
-
pro_craft/prompt_craft/__init__.py,sha256=83ruWO1Oci-DWvdVhPqcQrgdZTNfbmK72VQCkWASk7A,80
|
|
9
|
-
pro_craft/prompt_craft/async_.py,sha256=CzphO_1zrRpJ__7g5FnBWr7RonK0uwe8uMtV9qA65uY,29099
|
|
10
|
-
pro_craft/prompt_craft/evals.py,sha256=XzaaQgA-Vgo8MNPYTdN0hyFJNmgTvw2jroWmeA02pBs,1847
|
|
11
|
-
pro_craft/prompt_craft/new.py,sha256=cHugfhLNUMQk_l8JQBg5ZQXPYXqspexnCOgp3YUzoD0,25894
|
|
12
|
-
pro_craft/prompt_craft/sync.py,sha256=-rY1KxAP5FhxI6Vmm2hHoLvYMmtL7rbLcFQMqD9g8ZU,25841
|
|
13
|
-
pro_craft/server/mcp/__init__.py,sha256=4dbl-lFcm0r2tkOP04OxqiZG2jR-rqF181qi2AfU6UA,123
|
|
14
|
-
pro_craft/server/mcp/prompt.py,sha256=OZrsyUfSQMOY_KX7dWthW209adz5JfELsQ0ODfuQR44,1245
|
|
15
|
-
pro_craft/server/router/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
|
-
pro_craft/server/router/prompt.py,sha256=ecf8kpVqPp7q_VTcUNej3MAzpO4oywgY7TAV7R6qaBw,2745
|
|
17
|
-
pro_craft-0.1.22.dist-info/METADATA,sha256=zWNEnMPy98Uf1yuXtIujwtbnxTOYPULo6gHsmsrTOZk,1689
|
|
18
|
-
pro_craft-0.1.22.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
19
|
-
pro_craft-0.1.22.dist-info/top_level.txt,sha256=yqYDHArnYMWpeCxkmGRwlL6sJtxiOUnYylLDx9EOgFg,10
|
|
20
|
-
pro_craft-0.1.22.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|