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.

@@ -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="sync_metadata").first()
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="sync_metadata").first()
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="sync_metadata", last_sync_time=new_sync_time)
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}")
@@ -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="sync_metadata").first()
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="sync_metadata").first()
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="sync_metadata", last_sync_time=new_sync_time)
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
- print('Use BianXieAdapter')
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
- self.save_prompt_increment_version(prompt_id=latest_prompt.prompt_id,
359
- new_prompt = latest_prompt.prompt,
360
- use_case = latest_prompt.use_case,
361
- action_type=action_type,
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=latest_prompt.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
- self.save_prompt_increment_version(
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 create_session
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 = Intel(
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 create_session(intels.engine) as session:
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 create_session(intels.engine) as session:
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.22
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,,
@@ -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,,